2011-07-01 16 views
1

私は2つのデバイスを持っており、それらの間で乱数生成を同期する方法を探しています。同期化された乱数

その他の背景:2つのデバイスが接続され、一方のデバイスはデータセットを含むファイルを他方のデバイスに送信します。その後、データセットは両方のデバイスにロードされます。データは、さまざまなレベルでランダム化されて表示されます。私はデバイス間でディスプレイを同期させたいが、まだランダム化されている。

概念的な例:写真を積み重ねてください。スタックのコピーがリモートデバイスに送信され、将来の使用のために保存されます。スタックは両方のデバイスで同じ方法でシャッフルされ、各デバイスで最初の画像を描画すると同じ出力が得られます。これはあまり単純化されていますので、私のアプリケーションで必要な乱数ははるかに多くなります。ソート順を共有するなどの最適化は適用されません。

簡単な乱数プール2台のデバイスで私はデバイスが同期する前に何回ランダムドローが起こるか分かりませんが、一度同期すると、同じデータセットを使用しているので同じ数の乱数を描画することは予測可能であるはずですが、 (ランダムデータの再同期を必要とする)次のバッチに進む前に、

私は、表示時に既にデータセットに転送されているエンティティごとにソート順、位置情報などを転送する必要がないようにしたいと考えています(これは、プロジェクトが最初にその情報を共有するように設計されていない同じ配置を生成することができ、乱数が同じ順序で出現する必要があります。

ご意見やご提案をいただければ幸いです。

+0

すべての回答に感謝します。最初の試み(両方のデバイスで同じシードを使用していた)は、私が追跡していないもので投げ捨てられていましたが、現在認識していますので、シードを設定するだけで何が消えるか分かります私がまだ見つけていないどこかでそれをリセットする...)。しかし、私がこのシステムをクロスプラットフォームに移植し始めると、自分のLCGを実装するというOscarMkの提案は、OSとOSの不一致などを最小化する方法になると思います。 – ima747

+0

私はまったく同じことをしようとしており、テスターの中にはランダムに生成された要素が同期しなくなることがあるという報告があります。これは非常にうんざりです。なぜなら、私はrand()を使った後にシードするだけなので、何が起こっているのか分かりません。異なるiDevices(またはiDevicesとシミュレータ)が異なるrand()実装を持つことは可能でしょうか? –

答えて

8

LCGアルゴリズムを使用して、生成に同じシードを設定できます。 LCGアルゴリズムは決定的であるため、両方のデバイスを同じシードでシードする限り、まったく同じ擬似乱数が生成されます。

あなたはここにLCGアルゴリズムに多くの情報を見つけることができます:

Linear congruential generator

このLCGは、java.util.Randomのことで、たとえば使用されています。

1

各デバイスで同じシード(srand(SEED);)を指定すると、出現する(擬似)乱数は毎回同じであることが保証され、再シードなしで無限に番号を引き出すことができます。

+0

これは私が思ったものだが、結果を見ていないが、それ以上のテストでは、私はそれを投げ捨てる別の場所があることを示している。 – ima747

1

ほとんどの乱数発生器で「シード」を設定できます。 2つの異なるマシン(全く同じタイプである必要はなく、同じオペレーティングシステムを実行する必要はありません)で正確に同じ生成アルゴリズムを実装し、両方のマシンに同じ「シード」値を与える2つの乱数ジェネレータを作成すると、どちらもまったく同じ乱数列を生成します。

あなたの「同期」は実際には、最初のマシンから2番目のマシンに1つの番号(通常はランダムに選択された番号)を転送するだけです。そして、両方のマシンは、「シード」と同じ番号を使用します。

(私はiPhone乱数ジェネレータの詳細を調べると思いますが、Appleのドキュメントサイトは明らかにミネソタ州政府のシャットダウンの影響を受けている。)

0

あなたは常にシードを指定したくない場合は、 1つのデバイスをマスターとして指定するだけで済みます。マスタが乱数を生成すると、その乱数を含む他のデバイスにメッセージを送信します。

+0

私は、クライアント側で乱数のリストを維持し、それを引き出す必要があると考えています。つまり、マスターは常にクライアントより先に生成する必要があります。私の現在の取り決めでは、マスターを指定していないので、さらに複雑になります。 – ima747

関連する問題