- 同一の並び順
- 対極の並び順
特定の組み合わせを回避した乱数の発生
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
乱数の発生時、特定の組み合わせを回避して乱数を発生させたいです。
具体的には、1~5の並び替えで乱数を発生させる際、[1 2 3 4 5]の組み合わせが発生した場合はその対極の組み合わせである[ 5 4 3 2 1]の組み合わせが乱数ないに発生しないようにしたい、もしくは発生した場合は検知して削除したいです。
1〜5の乱数をn通り発生させるコードは以下のような想定をしています。
n = 100
Order = cell(n,1);
rng('shuffle')
for r = 1:n
Order{r} = randperm(5);
end
発生した乱数を毎回Order(Cell配列)に格納する想定です。
この場合どのようにすれば上述のような対極の組み合わせの発生の回避又は発生した場合検知して削除できるでしょうか?
ご回答よろしくお願いします。
0 commentaires
Réponse acceptée
Atsushi Ueno
le 1 Août 2022
下記の重複が無い順列
がn個あれば良いという事ですね。
> どのようにすれば上述のような対極の組み合わせの発生の回避又は発生した場合検知して削除できるでしょうか?
⇒「生成した乱数並び順と同一/対極の並び順がリストに無ければ追加する」様にすれば同じ事になります
n = 60; m = 5;
if n > factorial(m) / 2;
error('エラー:1~%dの乱数並び順は%d個以内', m, factorial(m) / 2)
end
OrderMat = zeros(n,m);
rng('shuffle');
r = 1;
while r <= n % n個揃うまでずっと続ける
rnd = randperm(m);
if ~ismember([rnd; fliplr(rnd)], OrderMat, 'rows')
OrderMat(r,:) = rnd; % リストに同一・対極の並び順が無ければ追加する
r = r + 1; % 追加したら個数を+1する
end
end
OrderCell = num2cell(OrderMat,2)
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Shifting and Sorting Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!