お試し並列処理〜細工〜擬似乱数列の管理
パーミューテーションテストでモンテカルロを使うとすると、並列プロセスで用いる擬似乱数列も相互にランダムであることが必要である。シードから開始する擬似乱数列を用いる場合には、採取する擬似乱数を、プロセス数おきに採取させることによって、全プロセスの擬似乱数列が、単一の擬似乱数列からの部分列とすることができる。このようにすることで、擬似乱数列のランダム性を確保するだけで、全プロセスの擬似乱数列のランダム性の精度管理を行うことができる。
擬似乱数列ジェネレータmzを作成し、x=ak+(b-1), k=0,1,2,...1番目の乱数を取る
int seed=xxxxxx; Utils.MersenneTwisterFast mz=new MersenneTwisterFast(seed); public static void shuffleDoubleMZ(double[] arr,MersenneTwisterFast mt,int a,int b){ for(int i=0;i<b;i++){ mt.nextDouble();//空回しb回(剰余分) } for(int i=0;i<loop;i++){ double r=mt.nextDouble(); for(int j=0;j<a;j++){ mt.nextDouble();//空回しa回周期 } }