2016-11-23 1 views
10

juliaで普通の数字を使うと、私のデータに数値シミュレーションのパターンがあるのに気付きました。どのようにi.d.d. juliaの普通の数字

私はランダムな行列のアンサンブルを持っています。私の計算を再現可能にするために、私はsrand実現ごとに機能を設定しました。つまり、関数randn(n,n)を使用するたびにsrand(j)で初期化します。ここで、jは実現の番号です。

正常な数字がどのように生成されているか知りたいのですが、それが私の行うことを意味するのであれば、私は偶然の相関関係を導入します。

答えて

15

理想的には、全くありません。反例がある場合は、Julia issue trackerにバグとして報告してください。 Juliaは、最先端のMersenne TwisterライブラリdSFMTを使用しています。このライブラリは非常に高速で、擬似乱数生成にベストプラクティスを使用すると考えられています。しかし、最近では、MTのようなPRNGsには微妙な統計的問題があることが特にあります。特に小さな連続したシード値を使用すると、細かい統計的問題が発生する可能性があります。come to my attention換言すれば、

julia> using SHA 

julia> srand(reinterpret(UInt32,sha256(string(1)))) 
MersenneTwister(UInt32[0x73b2866b,0xe1fc34ff,0x4e806b9d,0x573f5aff,0xeaa4ad47,0x491d2fa2,0xdd521ec0,0x4b5b87b7],Base.dSFMT.DSFMT_state(Int32[660235548,1072895699,-1083634456,1073365654,-576407846,1073066249,1877594582,1072764549,-1511149919,1073191776 … -710638738,1073480641,-1040936331,1072742443,103117571,389938639,-499807753,414063872,382,0]),[1.5382,1.36616,1.06752,1.17428,1.93809,1.63529,1.74182,1.30015,1.54163,1.05408 … 1.67649,1.66725,1.62193,1.26964,1.37521,1.42057,1.79071,1.17269,1.37336,1.99576],382) 

julia> srand(reinterpret(UInt32,sha256(string(2)))) 
MersenneTwister(UInt32[0x3a5e73d4,0xee165e26,0x71593fe0,0x035d9b8b,0xd8079c01,0x901fc5b6,0x6e663ada,0x35ab13ec],Base.dSFMT.DSFMT_state(Int32[-1908998566,1072999344,-843508968,1073279250,-1560550261,1073676797,1247353488,1073400397,1888738837,1073180516 … -450365168,1073182597,1421589101,1073360711,670806122,388309585,890220451,386049800,382,0]),[1.5382,1.36616,1.06752,1.17428,1.93809,1.63529,1.74182,1.30015,1.54163,1.05408 … 1.67649,1.66725,1.62193,1.26964,1.37521,1.42057,1.79071,1.17269,1.37336,1.99576],382) 

SHA2-256のような強力な暗号ハッシュを使用して小さな整数のシード値の文字列表現をハッシュ:あなたは潜在的な相関関係については本当に心配している場合は、これを軽減するために、あなたはこのような何かを行うことができます結果のハッシュデータを使用してMersenne Twister状態をシードします。 Ottoboni、Rivest & Starkは乱数生成ごとに強力な暗号化ハッシュを使用することを推奨していますが、現在のハードウェア上では大幅に減速し、不完全な統計的ランダム性に非常に敏感なアプリケーションを使用しない限り、おそらく過剰です。

ここで、Juliaの動作は他の言語よりも悪くはないことを指摘しておきたいと思います。その中には下位互換性のためにデフォルトで乱数ジェネレータが非常に悪いものがあります。これは非常に最近の研究成果である(まだ公開されていない)。私が提案した手法は、この問題を他の言語でも軽減するために使用できます。

+0

私は私の博士号を執筆しているので私はあなたの答えを議論しましょう、まだ公表されていない新しい結果を引き出しており、私は新しい場所を新しい場所に掲示することを心配しています。必要に応じて、あなたに個人的に連絡する機会はありますか? – user2820579

+3

さらに、ユニフォーム番号から通常の変量を生成するためにZigguratアルゴリズム(https://en.wikipedia.org/wiki/Ziggurat_algorithm)を使用します。 –

+1

確かに、私に直接連絡してください。 – StefanKarpinski

関連する問題