-1

番号のランダム化の結果を調整するのに問題があります。

jum_k = 14;
jum_b = 12;

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

最終結果に制約があるようにします。値「0」が3回以上連続して表示されてはなりません。

4

1 に答える 1

1

ランダムなエントリは、未知の重みで不均一に分散されます。つまり、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 に関して) 最適ではありませんが、機能します。

于 2012-08-16T17:44:39.893 に答える