MATLAB轮盘算法,

img


unidind函数产生均气分布随机整数,可通过该区数产生 38 以内的随机整数模拟小球随机落在38个卡
槽中的一个。

A1 = [8,10,12,28,30,32];
A2 = [1,2,3,4,5,6,7,8,9,10,11,12];
b1 = 4;
b2 = 2;
for i = 1 : 1000
    w(i) = roulette(b1, A1, b2, A2);
end
% 统计 第二问
t = tabulate(w);
% 平均值
mean = t(:,1)'*t(:,3)/100;
% 方差
v = 0;
n = size(t,1);
for i = 1 : n
    v = v + (t(i,1)-mean)^2 * t(i,3)/100;
end
% 实际 第三问
t1 = zeros(4,2);
t1(1,:) = [-6, 23/38];
t1(2,:) = [-2, 9/38];
t1(3,:) = [14, 3/38];
t1(4,:) = [18, 3/38];
% 平均值
mean_act = t1(:,1)'*t1(:,2);
% 方差
v_act = 0;
n = size(t1,1);
for i = 1 : n
    v_act = v_act + (t1(i,1)-mean_act)^2 * t1(i,2);
end
function w = roulette(b1, A1, b2, A2)
w = -b1 - b2;
    num = unidrnd(38);
    if ismember(num,A1)
        w = w + b1 * (36-size(A1,2))/size(A1,2);
    end
    if ismember(num,A2)
        w = w + b2 * (36-size(A2,2))/size(A2,2);
    end
end