問題タブ [mersenne-twister]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
random - Mersenne Twister: シードと可視化
CenterSpaceからダウンロードした Mersenne Twister の C# 実装を使用しています。私はそれに2つの問題があります:
- どのようにアルゴリズムをシードしても、 DieHard テストに合格しません。つまり、p 値に対してかなりの数の 1 と 0 が得られるということです。また、269 個の p 値に対する私の KStest は 0 です。まあ、p 値を完全に解釈することはできませんが、結果に含まれる 1 と 0 の数は悪いニュースだと思います。
- 数字のランダム性を視覚的に示すように依頼されました。そのため、生成された数値をプロットしますが、これはまったくランダムではないようです。数秒後と数秒後の結果の 2 つのスクリーンショットを次に示します。2 番目のスクリーンショットでわかるように、数字はいくつかの平行線上にあります。数値をポイントにマップするためにさまざまなアルゴリズムを試しました。それらはすべて平行線になりますが、角度が異なります。これは、これらのスクリーンショットのポイントに数字をマッピングする方法です: . ご想像のとおり、視覚的な結果はフォームの幅と高さに依存し、これは悲惨な結果です。
new Point(number % _canvasWidth, number % _canvasHeight)
アルゴリズムをシードしようとしたいくつかの方法を次に示します。
- ユーザーエントリー。いくつかの数値を入力して、アルゴリズムを int 配列としてシードします。
- アルゴリズム自体が生成する乱数!!
- の配列
new Guid().GetHashCode()
ここで何が欠けていますか?アルゴリズムをどのようにシードすればよいですか? ダイハードを通過させるにはどうすればよいですか?
java - このクラスがシリアライズ可能でないのはなぜですか?
デフォルトのドロップイン置換としてhttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.javaで Mersenne-Twister 実装を使用していました。java.util.Randomクラス。ただし、4 つのフィールド (int、boolean、および 2 つの byte[]) は としてマークされtransientます。これは、カスタム機能を実装しないと、このクラスのオブジェクトをシリアル化できないことを意味します。
問題は、これらのフィールドが一時的とマークされている理由があるかどうかです。オブジェクトがファイルから読み取られたときに意味をなさない情報を保持するコードはありますか? フィールドから修飾子を削除したtransientところ、問題なく動作しているように見えますが、集中的にテストしていないため、壊れる場合がありますか?
個人的には、クラスで行われるのは算術だけなので、その理由はわかりません。
python - Python での Mersenne Twister のオープンソース実装?
Mersenne Twister やその他の優れた Python 乱数ジェネレーターのオープンソース実装はありますか? 数学とコンプ科学専攻の教育に使用したいですか? また、対応する理論的サポートも探しています。
編集:random.py Mersenne Twister のソース コードは、C ( ) や疑似コード (Wikipedia)などのさまざまな言語で簡単に入手できますが、Python では見つかりませんでした。
python - wikiメルセンヌツイスター疑似コードの機能的正確性
このページのメルセンヌツイスター疑似コードがここのコードと同じかどうか誰か教えてもらえますか? それらが同じでない場合、どちらが正しいですか?
thread-safety - スレッドセーフなメルセンヌツイスター
スレッドセーフなランダムジェネレーターを探していると、作者がスレッドセーフかどうかを言うメルセンヌツイスタージェネレータークラスを見つけました。
http://www.umiacs.umd.edu/~yangcj/mtrnd.html
しかし、コードを調べた後、それが安全なスレッドであるかどうかはわかりません。そこには、いかなる種類のロックも、ロック変数に似たものもありません。
この実装は本当にスレッドセーフですか?もしそうなら、魔法は何ですか?
ruby - Ruby 1.9.2 での分散型逐次乱数生成
Ruby 1.9.2のRandomクラスは、特定のシードと範囲が与えられると、同じ順序で乱数を生成することが保証されています。例えば:
しかし、シーケンス内の次の番号を別のコンピューターで生成したいとします (シーケンス内の以前の番号を再生成する必要はありません)。前の出力を考えると、これは可能であるはずです。Randomクラスでこれを行う方法はありますか?それとも、 Mersenne twisterの独自の実装を作成する必要がありますか?
[編集:以下のコメントで指摘されているように、状態のRandom一部 (具体的には下位 32 ビット) のみが出力に使用されるため、実際には出力だけからインスタンスの状態を判断することはできません。]
delphi - Delphi の Random 関数の信頼性
Delphi (Delphi である必要があります) で統計テストを作成するプログラムを作成していますが、ランダム機能がやや奇妙であると聞きました。プログラムの開始時に randomize を呼び出して、random 関数のシードをランダム化する必要があります。
ランダム関数 (randomize を呼び出した後) が統計テストに十分なランダムかどうか、またはメルセンヌツイスターが必要かどうか疑問に思っていますか? これがどれほど重要であるかを教えてくれるランダムの実際の実装についての洞察を誰かが持っていますか?
algorithm - mersenne twister - 特定の状態にジャンプする方法はありますか?
この質問に適切なフォーラムについて少し確信が持てません。理論上のコンプの間です。科学/数学とプログラミング。
Mersenne-Twister を使用して疑似乱数を生成します。今、与えられたシードから始めて、シーケンスの n 番目の番号にジャンプしたいと思います。
私はこれを見ました:http://www-personal.umich.edu/~wagnerr/MersenneTwister.html、そして1つのスキームは次のようになります:
特定のシードsからの完全なランダム シーケンスの最初のN 個の数字だけが必要だとします。シーケンスをp個のサブ
シーケンスに分割し、N 個の数値すべてを調べて、各サブシーケンスの開始時に乱数ジェネレーターの状態ベクトルを保存します。n番目の数
に到達するために、 nがk番目のサブシーケンスに含まれることを確認し、このサブシーケンスの状態ベクトルを読み込み、m 個の連続する乱数を生成します。ここで、k 番目のサブシーケンスの m 番目の数は完全な数列の n 番目の数と同じ ( n = m + (k-1) * N/p )。
しかし、状態ベクトルの長さは 624 x 4 バイトです! メルセンヌ・ツイスターで生成されたシーケンス内の任意の要素にジャンプすることは実際に可能かどうか疑問に思います。
c++ - rand() から数値を縮小するにはどうすればよいですか?
次のコードは、毎秒乱数を出力します。
これらの数値が常に 0 ~ 100 の範囲になるようにサイズを小さくするにはどうすればよいでしょうか?
random - メルセンヌツイスターをリセット
これに対する答えは簡単だと思いましたが、現時点では完全に私をほのめかしているようです.
乱数を生成するためにMersenne Twister (実装はhttp://www.bedaux.net/mtrand/ ) を使用しています。
同じプログラム内で、同じ一連の「乱数」を連続して 2 回生成できるようにする必要があります。同じ void シード (const unsigned long*, int size); を使用しています。これによりジェネレーターがリセットされ、同じ値を再度生成できるようになることを期待して、同じ値のセットで関数を実行します。具体的には:
これをテストして機能させるためだけに。
誰かが以前にこの問題を抱えていたのだろうかと思っていました。
または、私が間違っていることを知っています。