番号のランダム化の結果を調整するのに問題があります。
jum_k = 14;
jum_b = 12;
result = randint(jum_k, jum_b, [0 2]);
最終結果に制約があるようにします。値「0」が3回以上連続して表示されてはなりません。
番号のランダム化の結果を調整するのに問題があります。
jum_k = 14;
jum_b = 12;
result = randint(jum_k, jum_b, [0 2]);
最終結果に制約があるようにします。値「0」が3回以上連続して表示されてはなりません。
ランダムなエントリは、未知の重みで不均一に分散されます。つまり、1 行あたりのゼロの数は <=3 ([0, 1, 2, 3]) になる可能性があります。私はこのようにハックします:[m x n]
[1,2]で均一に行列を作成し、行ごとに(ランダムに)ゼロの数を選択し、次にそれらの位置を(ランダムに)選択します。例:
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 に関して) 最適ではありませんが、機能します。