多语言展示
当前在线:571今日阅读:19今日分享:20

轮盘技巧之概率算法

设P(i),其中i=1..n,为n个个体被选择的概率 ,在轮盘上表示为所占扇区的面积百分比,这里显然sum(P)=1。select用来保管n次选择的结果。1)第一种完成方法:能够想象一个转动的轮盘,留意这里轮盘最多只转一圈。每次转轮盘前,把色子随机放到轮盘外缘的某处,即色子不随轮盘转动,以一个随机数sel代表它所处的位置。轮盘转动后,色子所指示的轮盘扇区号不时变化,轮盘中止时色子所指示的轮盘上扇区号,即为本次轮盘赌所选中的个体号。for i = 1:n %第i次掷色子 sel = rand; %产生一个0、1之间的随机数,代表色子在轮盘外缘所指示的位置 sumPs = 0; %轮盘初始转动的位置,从0变化到1 j = 1; %轮盘初始指示的位置 while sumPsrand()% Select(i)=j;% break;% end% end% end%:第二种轮盘赌办法,精度较高m = length(P);Select = zeros(1,num);r = rand(1,num);for i=1:num sumP = 0; j = ceil(m*rand); %产生1~m之间的随机整数 while sumP < r(i) sumP = sumP + P(mod(j-1,m)+1); j = j+1; end %Select(i) = mod(j-1,m)+1-1; Select(i) = mod(j-2,m)+1;end% 本程序中轮盘赌办法的精确水平可由如下程序考证% P=rand(10,1);% P=P./sum(P);% Select=Roulette(P,1e6);% for i=1:10% Ps(i)=(sum(Select==i)/1e6);% end%:最后考证该轮盘赌办法精确水平%:比拟P和Ps差别大小,例如sum((P-Ps).^2),数值越小,模仿结果越好!
推荐信息