如何调整随机结果



我在调整数字随机的结果时遇到问题,

jum_k = 14;
jum_b = 12;
result = randint(jum_k, jum_b, [0 2]);

这样对最终结果就有约束。值"0"不应连续出现三次以上。

然后,您的随机条目以未知权重不均匀分布,即每行的零数可以<=3([0, 1, 2, 3])。我会这样破解它:在 [1,2] 中均匀填充一个[m x n]矩阵,选择每行(随机)零数,然后选择(随机)它们的位置。例:

jum_k = 14;
jum_b = 12;
result = randi([1, 2], jum_k, jum_b);
for i = 1:jum_k
    nZeros = randi([0, 3]); % number of zeros (random)
    result(i, randi(jum_b, 1, nZeros)) = 0; % locations in line (random)
end;

如果您需要每行确切的零数,您可以相应地修改。

编辑(在评论中对问题进行澄清后):每行的顺序不超过 3 个零,例如 [1,0,0,0...2],您可以逐个元素填充矩阵并检查先前元素中的模式 [0,0,0,0](保留先前值的缓冲区)。

result = nan(jum_k, jum_b); % intitialize
for i = 1:jum_k
    for j = 1:jum_b
        result(i, j) = randi([0, 2]); % assign value       
        if j>3 && ~all(result(i, j-3:j)) % check previous values
            result(i, j-randi([0, 3])) = randi([1, 2]); % randomly change one 
        end
    end
end
%% check/test that all lines have less 4 zeros in sequence
f = @strfind;
for i = 1:jum_k
    t(i) = isempty(f(result(i,:),[0 0 0 0]));
end
T = all(t); 

它不是最佳的(MATLAB方面),但可以完成这项工作。

最新更新