轮盘赌(roulette)算法是一种根据概率的选择算法。
这种算法可以想象成往划分好扇区的轮盘里扔色子,事先生成一组满足均匀分布的随机数,代表n次掷色子或者n个色子一起扔,轮盘不动,色子所在区域为选择结果。
设P(i),其中i=1..n,为n个个体被选择的概率,在轮盘上表示为所占扇区的面积百分比,这里显然sum(P)=1。select用来保存n次选择的结果。
MATLAB代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
D = 5; P = [1, 1, 1, 1, 1]./D; %占比概率 m = length(P); num = 10000; 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-2, m)+1; end average_S = mean(Select) |
这里我们使用了等概率的P矩阵,用来选择1,2,3,4,5五个数。运行一万次求平均大约为3.00和这组数的平均值一样。