によるマトリックスをソートし、ランダム化は、以下のようにIは、32×3行列を有する特定の制約
112;
113;
114;
115;
116;
117;
118;
1 2 1;
1 2 2;
1 2 3;
1 2 4;
1 2 5;
1 2 6;
1 2 7;
1 2 8;
2111;
2 1 2;
2 1 3;
2 1 4;
2 1 5;
2 1 6;
2 1 7;
2 1 8;
2 2 1;
2 2 2;
2 2 3;
2 2 4;
2 2 5;
2 2 6;
2 2 7;私がする必要がある何
2 2 8]
一緒に行の値を維持しながら、しかし、これは(:、4)のためになるように制約される必要があり、行の順序をランダム化毎であります8行には、1〜8の数字だけが含まれます。
A(1::だからたとえば、次のような何かを持っている可能性があり8、:) =
[1 2 4。
115;
2 1 6;
118;
2 2 1;
2 1 2;
2 1 7;
1 1 3]
第2列の1及び2の発生がランダムであることが必要で、1 - 8ニーズが第3列のすべての8つの値のために無作為化されます。当初、関数randswapをループ内で制約を追加して使用しようとしましたが、これによってループが無限になりました。最初の2つの列の1と2が同じ列の最後の列と同じ回数表示される必要があるので、行が一緒になっていることも重要です。あなたが必要とするすべては、Aのうち、8行の1セットを取得する場合、あなたはこのような結果を構築することができ
m = size(A,1);
n = 1:8;
out = 1;
i2 = 1;
while ~all(ismember(1:8,out)) && i2 < 100
i1 = randperm(m);
out = A(i1(n),:);
i2 = i2 + 1;
end
ありがとうございました!これは問題を完全に解決します。 – Lau