カラーボールをシャッフルするには?


10

私は400個のボールを持っています。100個が赤、40個が黄色、50個が緑、60個が青、70個が紫、80個が黒です。(同じ色のボールは同じです)

効率的なシャッフルアルゴリズムが必要です。シャッフル後、ボールはリストに含まれます。

連続する3つのボールは同じ色ではありません。たとえば、「赤、赤、赤、黄色...」は使用できません。

そして、すべての順列が「等しく」発生する可能性があります。(まあ、効率と不偏性のトレードオフが十分良ければ、私は不偏性よりも効率を気にしません)。

フィッシャーイェイツクヌースを採用しようとしましたが、結果は理想的ではありません。

フィッシャーイェイツが十分でない理由 FYはモンテカルロ逆変換を採用しているため。そして、出力分布は同じカラーボールを異なる方法で処理します。つまり、私のニーズに対して偏った結果を生成します。

そして、素朴な考え方は、空間全体からすべての悪い順列をフィルタリング/バックトラックすることです。制限が非常に強い場合、たとえば、ボールが300個しかなく、そのうちの100個が赤である場合、適切な順列を取得する前に、バックトラッキング/失敗が多すぎます。

したがって、最終的には、すべての良い順列を反復できるようになりたいと思います。ただし、有効な順列の数が多すぎるため、ランダムにサンプリングできるのは一部のみです。それらの「一部」の統計的特徴が、可能な限り母集団に似ていることを望みます。


3
あなたが尋ねた他の質問から回答を適応させようとしましたか?両方の質問は非常に似ています:)。
Gopi、2011年

@Gopi:はい、そして私はどちらかの質問に対する回答が他の質問にインスピレーションをもたらすことを願っています。
colinfang 2011年

私の頭に浮かぶ最も単純なアイデアは、ある色からランダムに1つのボールを選択し始めることです。各色は、その色で残ったボールの数に基づいて確率で選択されます。ただし、最後の2つのボールが同じ色、現在の反復では選択できません。効率は悪くないはずですし、それにバイアスをかけることはできません(これは何もないという意味ではありません。何かを見逃しているかもしれません)。
ジョージ

3
@George B .:このプロセスが他の関連する質問に偏りがある理由を調べましたDavid Eppsteinがその質問への回答で説明しているように、が色の数である時間を要する動的プログラミングアルゴリズムがあります。さえ、より効率的なものがいいでしょう。のk θ N 、K / 2θkkθk/2
Peter Shor、2011年

2
@GeorgeB。David Eppsteinのアプローチの方が安くても、MCMCアプローチでこの問題を解決する方法に興味があります。
Peter Shor、2011年

回答:


7

マルコフ連鎖がボールのすべての可能なシーケンスにわたって等分布に収束するために必要なことは、それが可逆的であることです。シーケンスからシーケンスjに移動する確率は、反対方向に移動するのと同じです。したがって、考えられるすべてのシーケンスでマルコフ連鎖を実行するために、次の移動(どのタイプの移動を行うかを選択するために一定の確率分布を使用)を使用することをお勧めします。以下では、「ラン」は同じ色のボールの最大長の連続したサブシーケンスです。このマルコフ連鎖は、少なくとも3つの色があることに依存しています。j

  1. ランダムに2つの実行を選択します。それらを交換でき、それでも正当な順序がある場合は、交換してください。

  2. 隣接する2つのランを選択します。それらを交換でき、それでも正当な順序がある場合は、交換してください。

  3. 同じ色のランを2つ選びます。法的可能性の中でランダムにそれらのボールを再分配します(1回の実行でのボールの最大数が3で、選択した2つの実行で合計5つのボールがあった場合、最初のボールは2つまたは3つのボールを獲得する可能性が等しくなります。合計3つのボールがあった場合、最初のボールは1または2を獲得する可能性が等しくなります。合計4つのボールがあった場合、1、2、および3はすべて等しく可能性があります)。

  4. ランダムに色を選びます。色C iのすべてのボールが削除されたボールのシーケンスS 'を考えます。今度は、S 隣接する異なる色のボールが接触する2点をランダムに選択します。CSCS

    a。元のシーケンスSのこれらの2点に2つのカラーランがあり、どちらも最大長でない場合、各方向が確率eachで選択された状態で、ボールを一方から他方へ移動します。CS

    b。元のシーケンスSのこれらの2点にカラー 2つのランがあるが、一方が最大長で他方がそうでない場合、確率withでボールを最大長ランから短い方に移動します。CS

    c。Sのこれら2つのポイントの1つにカラーランが1つしかない場合、確率½で1つのボールをランから別のポイントに移動します。 CS

    d。これらのポイントのいずれかにカラーランがない場合、またはこれらのポイントの両方に最大長のランがある場合は、何もしません。C

私の分析が正しければ、これは可逆的なマルコフチェーンであり、最終的には色のついたボールの合法的なシーケンスの均一な分布に収束するので、このチェーンを十分に長く実行すると、この均一な分布に非常に近くなります。

これが収束したことをどのように確認できますか?このシーケンスのエントロピーを監視し、それが増加しなくなったら停止することをお勧めします。エントロピーをどのように計算しますか?エントロピー計算には2つの主要な項があります。ランの長さの分布と、各ランが持つ色のシーケンスです。ランの長さの分布について、長さkのiのランがあると仮定します。これらのエントロピーへの寄与は i log 2 k n i kkk ここでrは実行の最大許容長です。ここで、エントロピーに対するカラーシーケンスの寄与を考えてみましょう。一連の色iの直後に色jの1つが続くmijの場所があるとします(そう、mii=0)。これのエントロピーへの寄与は ilog2jm

Σ ログ2 Σkk1 2  r
rメートルjjメートル=0 ここでcは色の数です。
Σ ログ2 Σjメートルjメートル1 メートル2  メートルc
c

(正確さのために、最初のボールの色を含む、エントロピーへの多くの寄与を省略していることに注意してください。これらは無視しても安全な低次の項です。)

更新:

これをスピードアップする方法があるはずです。ステップcとdについては、分析を使用して、一度に1つの色のすべての実行に対してこれらのステップの両方を実行できると思います。ステップaとbの場合、これは、同じ色の2つのボールが接触しないという制約のある色付きのボールのランダムなシーケンスを見つける問題に相当します。この問題のミキシングを行うには良い方法があるはずです。次に、a / bステップとc / dステップを交互に行う必要があります。各ステップは、これら2つの動きを完全に混ぜ合わせます。このマルコフ連鎖の厳密な分析はありませんが、これはかなり速く収束するはずです。


0

あなたが言ったように、順列の1つがすべての赤を続けているので、すべての順列が等しく可能性があり、色が均等に分散されていることを保証することは不可能です。

非常にエレガントですが、はっきりとは言えませんが、色が均等に分散されるようにする方法は、低い不一致シーケンスを利用することです。

N=4001Ns

同じ色のすべてのボールが連続して番号付けされていることを確認してください。つまり、あなたのケースでは、最初の100個のボールを赤、次の40個を黄色、次の50個を緑などとします。

k番目バツk

バツk=s+kφモッド1
  • φ=1+52=1.61803399 ...
  • モッド1
  • s

Nバツk

バツk

s=0

{BRKGRPYKBRPGKRBYKBRPYKBRPGRPYKBRPGKRBRKGRPYKBRPGKRPYKBRPGKBRPGRPYKBRPGKRBRKGRPYKBRPGKRPYKBRPGKRBRKGRPYKBRPGKRBYKBRPYKBRPGRPYKBRPGKRBRKGRPYKBRPGKRPYKBRPGKBRKGRPYKBRPGKRBYKGRPYKBRPGRPYKBRPGKRBRKGRPYKBRPGKRBYKBRPYKBRPGRPYKBRPGKRBRKGRPYKBRPGKRPYKBRPGKRBRKGRPYKBRPGKRBYKBRPYKBRPGRPYKBRPGKRBRKGRPYKBRPGKRPYKBRPGKBRPGRPYKBRPGKRBRKGRPYKBRPGRPYKBRPGKRBRKGRPYKBRPGKRBYKBRPYKBRPGRPYKBRPGKRBRKGRPYKBRPGKRPYKBRPGK}
BK

s

バツk

n=400

phi = (1+pow(5,0.5))/2
x = np.zeros(n)                 
s = np.random.uniform(0,1)
for i in range(n):
    x = (s + phi*(i+1)) %1

print (s)
print (x)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.