- ベストアンサー
モンテカルロの並列計算と乱数の偏りについて
- モンテカルロ法において、周期が10の6乗の乱数を10万個使用して計算を行う場合、単一の計算機で計算する場合と複数の計算機で計算する場合で乱数の偏りは発生するのかについて質問です。
- 単一の計算機で10万個の乱数を使用して計算を行い、乱数の初期化は1回行ないます。それに対して、20台の計算機で10万個の乱数を使用して計算を行い、各計算機にて5000個ずつの乱数を使用します。計算機はずらして実行し、時間を乱数の初期化に使用します。
- モンテカルロ法において、複数の計算機で計算を行う場合、乱数の偏りは発生する可能性があります。計算機ごとに異なる時刻で乱数の初期化を行うため、計算結果にばらつきが生じることがあります。しかし、乱数の周期が十分に長い場合や乱数生成アルゴリズムが優れている場合、乱数の偏りはほとんど問題になりません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.1で回答したものです。 メルセンヌツイスターなら周期が長いので10万個のサンプリングであれば問題にならないと思います。 ただ、10万個の乱数を振るのに30日は掛かりすぎですね。 乱数以外の計算でかかっているなら、最初に乱数系列を10万個発生させ、それ以降の計算にはその系列を20分割したものを与えて計算させれば良いかと思いますが如何でしょうか。
その他の回答 (3)
- koko_u
- ベストアンサー率12% (14/116)
>一般にコンピュ-タソフトで作り出す乱数はひどいもので 通常の C言語のライブラリにある rand(3) は線型合同法によるものなので、使ってはいけません。 >やはり2)は危ないのですね。メルセンヌツイスターを用いても >危ないでしょうか? メルセンヌ・ツイスターなら並列処理してもいいような気がする(自信なし)
お礼
回答ありがとうございました。
- Willyt
- ベストアンサー率25% (2858/11131)
『計算機』の乱数というのが問題です。これはソフトウェアの問題で、一概には言えません。いいアルゴリズムを使えばいい結果が出るし、悪いものを使えば悪い結果になります。ですから複数の計算機を使っても同じアルゴリズムなら偏りは同じです。 一般にコンピュ-タソフトで作り出す乱数はひどいもので、乱数の検定にかけるとこれはすぐに判ります。 下記などはいいかも知れません。しかしこれもコンピュ-タを使いますから所詮は疑似乱数です。
お礼
回答ありがとうございました。
- goma_2000
- ベストアンサー率48% (62/129)
周期が10^6の乱数を使うことがいいかどうかは置いといて(^^; 1) 乱数がかぶる事はない 2) 100万個(10^6個)の中から連続した5000個を復元抽出で20回サンプリングする問題なので、このくらいだと乱数系列がかぶることがあります。 乱数の周期がもっと長ければそんなに気にならないと思いますけど。 なので、1)の方が良いでしょう。
お礼
回答ありがとうございます。 やはり2)は危ないのですね。メルセンヌツイスターを用いても 危ないでしょうか? 一台では30日程度かかりそうな感じの計算でして、1ケ月後に しか結果が分からないというのが現状の問題です。 MPI実装などは今のところ考えておりません。
お礼
あらためて回答ありがとうございます。 確かに乱数以外にて計算時間がかかってしまっています。 乱数系列を先に生成しておくというのは参考になります。こちらの方法で 検討させていただきます。