一次元乱数発生器

論理的にランダム性を取得することは解決策を見つけられないことを意味するため、問題の定式化が少しばかげているためか、連続一様確率変数の生成は簡単な作業ではないことが判明しました。ただし、最も単純な「英語ではどうなるか-わかりませんか?」を残して、アルゴリズムに関する記事では、乱数のシーケンスのみを作成する作業を見つけることができます。





「TrueRandom」ジェネレータークラスは、物理現象と外部制約を使用するため、たとえば、10進数の乱数を生成するには、「大気センサー」を使用することをお勧めします。当然のことながら、プログラミングの愛好家として、この状況は私には不公平に思え、かなり長い間「問題は成熟していた」。問題の定式化から予想されるように、解決策の変形が、剛体球パッキングするための圧縮問題への追加として偶然に現れました。問題は分析的な解決策を見つけていません。それぞれ、その欠如の証拠がまだないため、ソースは外部の兆候によって非常に適しています。ただし、ジェネレーターの状態の逆計算では、無限の複雑さを超えることはありませんでした。





このアイデアは新しいものではなく、たとえばUNIXシステムで使用されていましたが、特定のアルゴリズムを関数として使用できない理由は、その作業を徹底的に調査しただけです。無限の数のパラメーターの有限の変動を数学的に提供することは不可能です。したがって、ジェネレーターが実際に連続している場合、算術的なものとは対照的に、その値の数は無限です。実際には、私はその作業で失敗に遭遇したことはありませんが、「熱力学の第二法則」も私の側にありますが、厳密な論理的信頼性を提供するものではありません。したがって、信頼性の高いシステムの関数としてアルゴリズムを使用するふりはしませんが、追加の変更を加えることで、正式な信頼性を大幅に向上させることができることを認めます。





連続一様分布確率変数のソースは、剛体球モデルの境界と要素の相互作用です。要素の内部相互作用には不均一な分布があります。これはDiehardテストで検証されたため、アルゴリズムから除外されましたが、追加の「混合」のために簡略化された形式のままになっています。





球の表面の一様分布は特別な分布であり、フラットバージョンに移行するには追加の変換が必要です。私はこの変換を実験的に発見しましたが、数学者から仮説を定理に変換するための助けは得られませんでした。答えは「これは明らかです」から「私はこの分野に関与していません」までの範囲でした。この仮説は次のように聞こえます。





D - D-2 .





4次元球の表面からのランダムな点の2次元投影。
.

. .





RandomSphere[Rn_: 2, Pn_: 1, Rb_: 1] := 
 Module[{i, j, m, p, r, s, S, X, Xi, Xj, Pm},
  X = Array[0 &, {Pn, Rn}]; Pm = Rn; s = 1/Sqrt[2];
  For[p = 1, p <= Pn, p++, i = RandomInteger[{1, Rn}]; S = 0; 
   For[r = 1, r <= Rn, r++,
    X[[p, r]] = 
     If[r != i, RandomReal[{-1, 1}], RandomChoice[{-1, 1}]]; 
    S += X[[p, r]]^2];
   X[[p]] *= Rb/Sqrt[S];
   For[m = 1, m <= Pm, m++,
    i = RandomInteger[{1, Rn}]; j = i; 
    While[i == j, j = RandomInteger[{1, Rn}]];
    Xi = X[[p, i]];
    Xj = X[[p, j]];
    X[[p, i]] = s (Xj - Xi);
    X[[p, j]] = s (Xj + Xi)]]; Return[X]]
      
      



, . , , , . , , .





透明な7,4,3次元のボールの「光の中のほこりっぽい表面」の2次元投影の図。
" " 7,4,3 .

, " " .





.





. , . , :





. : , . .





. , , N. O(N(N-N1)/2) O(N^2). , N^(1+1/D) , .





Diehard, Parking Test, "Numerous experiments prove" , , . , .





: , . , , , .





:





,





r = {\ left({\ frac {{Gamma \ left({\ frac {M} {2} + 1} \ right)}} {{{\ pi ^ {\ frac {M} {2}}}} }} \ right)^ {\ frac {1} {M}}}

M - , Gamma- . R-r,





R = {\left( {V\frac{{Gamma\left( {\frac{M}{2} + 1} \right)}}{{{\pi ^{\frac{M}{2}}}}}} \right)^{\frac{1}{M}}}

V , . ,





P\left( x \right) =   \begin{cases}    {{{\left( {\frac{x}{{R - r}}} \right)}^M}} &\text{${0 \le x \le R - r}$}\\    1&\text{${x > R - r}$}  \end{cases}

X, r, .. 2r :





X = \frac{{{{\left( {2r} \right)}^M}}}{{{{\left( {R - r} \right)}^M}}} = \frac{{{2^M}}}{{{{\left( {\frac{R}{r} - 1} \right)}^M}}}

(T(T-1))/2- , , Y :





Y = {\left( {1 - X} \right)^{\frac{{T\left( {T - 1} \right)}}{2}}} = {\left( {1 - \frac{{{2^M}}}{{{{\left( {\frac{R}{r} - 1} \right)}^M}}}} \right)^{\frac{{T\left( {T - 1} \right)}}{2}}} = {{\rm{e}}^{ - \frac{{{2^M}}}{{{{\left( {\frac{R}{r} - 1} \right)}^M}}}\frac{{T\left( {T - 1} \right)}}{2}}}

, , . , , .





数学パッケージでの分析と受信値の比較。 グラフの軸に沿って、オーバーラップの確率(パーセント)と曲線因子(パーセント)(100 * T / V)。 計算パラメータM = 3、V = 8000
. (100*T/V). M=3, V=8000
C#との比較結果
C#

C# . , , Diehard .





- , "" . , , ParkingTest . . , . , , , .





, , . 10^8 , .





, , . , .





. , , , . , . " " - , , .





当初、私はランダムな浮動小数点数だけを実際に直接受け取るためのソースの存在の問題に興味を持っていました。したがって、この記事の性質は系統的であり、アルゴリズムはハードウェアRNGとパフォーマンスで競合するふりをしません。たとえば、ルートの計算が含まれているため、算術PRNGと競合するふりをしませんが、それでも1つを複製またはデバッグします。





Cでのアルゴリズムの実装#








All Articles