Piを粗雑な乱数ジェネレータとして使用できますか?


30

私は最近math.SEでこの質問を見ました。考えさせられました。Piは粗雑な乱数ジェネレーターとして使用できますか?私は結果がよく知られていることを意味します(これまでどのくらいのpiが計算されましたか?)が、一度に1桁の数字をとるとPiはかなりランダムに見えるようです。

これはまったく意味がありますか?


これらの乱数はどこで使用されますか?
-NullUserException

2
理論的には可能ですが、おそらく現在の方法よりも最適ではありません。それについての本能だけですが、ランダムプールはこの方法でより大きく、オーバーヘッドが少ないようです。
リグ

@NullUserException確かではありません...それらをまったく使用できるかどうか疑問に思っていました。しかし、これは間違いなく暗号化のためではないだろうと思います」
-Earlz

3
@FrustratedWithFormsDesigner-entパッケージの一部。乱数を使用して、正方形に内接する円の面積を計算し、そこから円周率を計算できます。piのビットを乱数として使用すると、piを計算するためにそのデータを使用する特定の優雅さがあります。

1
@FrustratedWithFormsDesigner entは、一連のバイトの擬似ランダム性を分析するためのコードスイートです。その中の1つのテストは、パイを計算し、ランダム計算を実際の値と比較して、それがどれほどランダムであるかを確認するためのモンテカルロです。

回答:


50

http://www.befria.nu/elias/pi/binpi.htmlから掘り下げてpiのバイナリ値を取得し(10進数を使用するよりもバイトに変換する方が簡単だったため)、entで実行するバイトのランダムな分布を分析すると、次のようになります。

エントロピー= 7.954093ビット/バイト。

最適な圧縮により、この4096バイトのファイルのサイズが0%削減されます。

4096サンプルのカイ二乗分布は253.00であり、ランダムにこの値の52.36%を超えます。

データバイトの算術平均値は126.6736(127.5 =ランダム)です。

Piのモンテカルロ値は3.120234604(エラー0.68%)です。

シリアル相関係数は0.028195(完全に無相関= 0.0)です。

そうです、ランダムデータにpiを使用すると、かなりランダムなデータが得られます...それがよく知られているランダムデータであることを認識しています。


上記のコメントから...

何をしているのかにもよりますが、任意の素数の平方根の小数を乱数ジェネレータとして使用できると思います。これらは、少なくとも均等に分配された数字である必要があります。–パクシナム

そこで、2の平方根をバイナリで計算して、同じ問題のセットを解除しました。Wolframの反復を使用して、簡単なperlスクリプトを書きました

#!/usr/bin/perl
use strict;
use Math::BigInt;

my $u = Math::BigInt->new("2");
my $v = Math::BigInt->new("0");
my $i = 0;

while(1) {
    my $unew;
    my $vnew;

    if($u->bcmp($v) != 1) { # $u <= $v
        $unew = $u->bmul(4);
        $vnew = $v->bmul(2);
    } else {
        $unew = ($u->bsub($v)->bsub(1))->bmul(4);
        $vnew = ($v->badd(2))->bmul(2);
    }   

    $v = $vnew;
    $u = $unew;

    #print $i,"  ",$v,"\n";
    if($i++ > 10000) { last; }
}

open (BITS,"> bits.txt");
print BITS $v->as_bin();
close(BITS);

これを最初の10個のA095804と一致させて実行したので、シーケンスがあると確信しました。2進小数点を最初の桁の後に配置して2進で記述した場合の値v nは、2の平方根の近似値を与えます。

このバイナリデータに対してentを使用すると、以下が生成されます。

Entropy = 7.840501 bits per byte.

Optimum compression would reduce the size
of this 1251 byte file by 1 percent.

Chi square distribution for 1251 samples is 277.84, and randomly
would exceed this value 15.58 percent of the times.

Arithmetic mean value of data bytes is 130.0616 (127.5 = random).
Monte Carlo value for Pi is 3.153846154 (error 0.39 percent).
Serial correlation coefficient is -0.045767 (totally uncorrelated = 0.0).

まさに私が探していた答えのタイプ。この種のすべてを計算する方法がわかりません
-Earlz

数分布がかなりランダムであっても、その一部をランダムに選択する方法を見つける必要はありませんか?
ブルマー

1
@ブルマー号 ランダム性は、一連の数値で測定されます。パイの数字のシーケンスはランダムであると言われています。en.wikipedia.org/wiki/Statistical_randomness
サイモンベルゴ

11
絶対的に正しい。そして、それはよく知られているランダムデータなので、暗号化の目的でそれを使用することを敢えてしないでください。
ファルコン

3
「既知のランダムデータ」の場合は+1。誰かが推測できないランダムなデータが必要な場合、piはあなたには向いていません。何らかの理由でランダムな数値が必要な場合は、うまくいきます。
jmoreno

5

さて、乱数ジェネレータの他のプロパティの中でも、おそらく通常の数値にしたいでしょう。そして、あなたの質問を引き起こしたmath.SE質問のいくつかの回答は、現在のpiは正常であると信じられているが、証明されていないことを指摘しています。


2

このようなジェネレーターは擬似番号ジェネレーターになります。つまり、同じシードを指定すると、結果は常に同じになります。これは、ほとんどのフレームワークで、標準の乱数ジェネレーターを使用すると、擬似乱数であるという同じ問題があると言われています。

数字の分布は標準の乱数ジェネレーター¹と非常に似ているようであるため、πの数字は通常の乱数生成シナリオに使用できます。

問題は、通常の乱数ジェネレーターに比べてアルゴリズムがおそらく非常に遅いため、実際にはあまり役に立たないことです。


¹私はそれが真実だと信じていますが、証拠はありません。大量の数値に基づいて比較を行うのは興味深いことです(複雑にすることはありません)。


5
@NullUserException:いいえ、一部の乱数ジェネレーターはエントロピーのソースを使用します。これは、特殊なハードウェア(random.orgが採用したアプローチ)を使用するか、既存のエントロピーソース(既存のハードウェアセンサー内の測定可能な変動、特定のタイプのユーザーインタラクション、特定のタイプのパフォーマンステストの微小変動など)を使用して実行できます。 )。
ブライアン

1
@NullUserException:暗号的に安全なPRNGがありますが、それらはまだ擬似ランダムです。放射性崩壊、ノイズなど:そして、現実の世界からの入力に基づいており、実際のRNGがある
Arseni Mourzenko

2
@MainMaしかし、それでも、放射性崩壊のランダム性、ユーザー入力に由来する大気ノイズなどは議論の余地があります。パターンを認識しないからといって、パターンが存在しないわけではありません。
NullUserException

1
@NullUserException:昨年Colbeck / Rennerは、「量子理論を拡張することで予測力を向上させることはできない」と証明する論文を発表しました。これが成り立つと仮定すると、単に予測不可能なだけでなく、本当に予測不可能なエントロピーの原因があるかもしれません。
ブライアン

1
@MainMa-ランダム性の数学的テストを実行します。基礎となる物理学は(私たちの知る限りでは)ランダムですが、測定がそうであることを意味しません。すべてのタイプの検出器は、現実の世界で「面白い行動をたくさん持っている
マーティン・ベケット

2

piの数字のランダム性(または他のシーケンス)は、いわゆる「バッテリーテスト」によってほぼ間違いなくテストできます。人気のあるバッテリーテストの1つは、ジョージマルサグリアのDiehard Battery Testです。また、NIST Special Publication 800-22には、このようなテストの多くと、これらのテストを-loおよびbehold-百万ビット以上のpiを含む多くの物理定数に適用した結果が記載されています。piの結果はレポートの付録Bに記載されており、次のようになります。

Statistical Test                            P-value
Frequency                                   0.578211
Block Frequency (m = 128)                   0.380615
Cusum-Forward                               0.628308
Cusum-Reverse                               0.663369
Runs                                        0.419268
Long Runs of Ones                           0.024390
Rank                                        0.083553
Spectral DFT                                0.010186
Non-overlapping Templates (m = 9, B = 000000001)          0.165757
Overlapping Templates (m = 9)               0.296897
Universal                                   0.669012
Approximate Entropy (m = 10)                0.361595
Random Excursions (x = +1)                  0.844143
Random Excursions Variant (x = -1)          0.760966
Linear Complexity (M = 500)                 0.255475
Serial (m = 16, 2m∇Ψ )                      0.143005

piは良いランダムシーケンスジェネレーターですか?上記の結果を見て(または、左の列の変数の意味がわからない場合は、その意味を検索して)、それがニーズを満たしているかどうかを確認してください。


1
Diehardのread meには、約10〜12メガバイトのバイナリデータが必要であると言われています(32 KBが最適です)。asciiデータに対してそれを実行した場合、テストはアプリケーションが期待しているものからかなり離れたものになります。

私の答えはOPの質問とMath.SEの元の質問に対するものでした-どちらもASCII対バイナリデータまたはサンプルの長さについて何も言及していませんでした。十分な大きさのサンプルセットがなければ、どのようなシーケンスの統計的ランダム性をどのように決定できますか?
sm535 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.