web-dev-qa-db-ja.com

人間の脳のための乱数生成アルゴリズム?

人間が(やや「真の」)乱数を生成できるようにする実用的で学習しやすい「インヘッド」アルゴリズムを知っていますか、または考案しましたか? 「インヘッド」とは、外部ツールやデバイスを使用しないことを意味します。また、高出力(毎分多くの乱数)が望ましいです。

SO=でこれを尋ねましたが、あまり興味がありませんでした。おそらくこれはプログラマーにより適しています。

39
Magnus Wolffelt

これが George Marsaglia のアルゴリズムです。

2桁の数字、たとえば23を「シード」として選択します。

新しい2桁の数字を作成します。10の数字に単位の数字の6倍を加えたものです。

シーケンスの例は23-> 20-> 02-> 12-> 13-> 19-> 55-> 35-> ...

そしてその周期は、モジュラス10に比較的素数である剰余のグループの乗数6の次数です(この場合は59)。

「ランダムな数字」は、2桁の数字の単位の数字です。つまり、3,0,2,2,3,9,5、...シーケンスmod 10です。演算は、頭。

36
Davo

チェックアウト Geomancyに関するこの記事 。具体的には ジオマンティックチャートの生成 に関するセクション。これには、2進数といくつかの単純な再帰計算を使用して、疑似乱数を生成する技術が含まれます。頭の中でこれをかなり簡単に行うことができたようです(1枚の紙が役立つでしょう)。

免責事項:私はそれを自分で試したことはありません。十分な乱数が必要な場合は、/dev/randomRandを私が使用している言語で使用するか、信頼できるd20を使用してください。

あなたが数学の天才であるならば、 ミドルスクエア法 は、著しく信頼性の低い方法であるとしても、計算上かなり軽量です。

26
Inaimathi

私は、あなたが脳に保存している膨大な量の口頭の情報に頼らなければならないというのが合理的な仮定だと思います。ソースは何でも、曲の歌詞、詩、モンティPythonスケッチでも構いませんが、あなたが心で知っているものでなければなりません。

次に、無意識の偏見をできるだけ排除する、かなりランダムな部分を選択する必要があります。たとえば、これを行う方法は、曲を選択し、kの10から20までの数字を選び、その歌詞からkth番目の文字を見つけることです。

文字の頻度が異なるため、これはそれ自体で均一な分布を与えないことは明らかですが、それでもランダムな文字であるか、少なくとも外部ソースなしで可能であると私が信じている限り、それに近い文字です。

pdate:ところで、人々が言うコイントースのランダムシーケンスを書き込むように求められた場合、最も一般的な間違いは、シーケンスを「ランダムすぎる」にすることです。同一の結果の実行も多すぎます。簡単なランレングス分析で明らかになります。この方法は、主にこのトラップを回避することを目的としています。もちろん、このランレングスバイアスの影から他の異常が発生する可能性がありますが、それらを見つけるには適切な実験が必要です。皮肉なことに、一人で考えることで乱数を生成するアルゴリズムは、一人で考えることでは見つかりません。

10
biziclop

時計を試してみてください。

60(秒)倍の乱数が必要な場合は、これを行います。いつでも適切なモジュロを取る。 4:17:23 PM、サイコロをシミュレートして5になります。

9
Mark Canlas

すばらしい質問です。良い答えは非常に難しいかもしれません。

ただし、最初は、2人の人間が関係している場合に「真の」ランダム性を生成するのは非常に簡単です。一方の人間に頭の係数で静かに数えさせ、もう一方の人間に任意の間隔で「停止」と言わせます。その後、この数は標準的な方法を使用して他の分布に変換できます。

この方法を堅牢にするには、係数が大きすぎないようにする必要があります。そうしないと、小さい数に対して強いバイアスがかかります。この方法の確率的特性を分析する作業が存在するかどうか、本当に興味があります。

5
Konrad Rudolph

これは複雑な質問です。雑草の中を離れすぎずに少し説明してみます。

まず、「trueランダム性とは」と尋ねる必要がありますか?そのような議論はすぐに哲学的な水に退化しますが、要点はこれです:「宇宙は本当にランダムですか?」つまり、時間と物質を量子化すると、現在の状態から宇宙の次の状態を計算できますか?はいの場合、宇宙は決定論的であり、真のランダム性はありません(「哲学的」について私が何を意味しているのか参照してください)。

「真のランダム性」を定義するのは難しいため、「擬似ランダム性」で解決することがよくあります。もちろん、これは通常、コンピュータで「乱数」を生成するときに必要です。

最も単純な疑似乱数ジェネレータは、ディルバートの有名な「9 .. 9 .. 9 ..」アルゴリズムのようなものです。しかし、直感的にはあまり良くありません(もちろん冗談です)。統計学者は、ランダムな出力のシーケンスが「良好」であるかどうかを判断するために、多数のテストを開発しました。 「カイ二乗検定」のウィキペディアページから始めて、午後にこれらの検定について読むだけで過ごすことができます。

「線形合同ジェネレータ」のような単純なコンピュータアルゴリズムは、カイ2乗検定に十分な数を生成します(ただし、このアルゴリズムを何かから「シード」する必要があります)。

「良さ」の次のステップは「暗号学的に強いランダム性」です。これは、シーケンスa1、a2、...が与えられると、大量の計算を使用しない限り、「合理的な確率」でシーケンスの次の数を予測できないことを意味します。これらの数値は、「計算的に疑似ランダム」と呼ばれることもあります。このようなシーケンスを取得する一般的な方法の1つは、次のような「ハッシュチェーン」を使用することです。a1= SHA512(a2)、a2 = SHA512(a3)、...経験に基づいて、数学的な証明ではなく、SHA512は計算上は反転が難しいため、a1だけではa2を予測することは「不可能」であると考えています。

さて、問題が発生しました。あなたの質問で規定されたルールの下で人間ができる最善のことは何ですか?人間はランダム性を生成することで悪名高く有名です。まるでコインを弾くようにH、T、T、H、H、T、Tなどを「ランダムに」入力してコインフリップを生成しようとするWebサイトがありました(ただし、あなたの頭)。しばらくすると、Webサイトは50%以上の確率でフリップを予測し始めます(非表示マルコフモデルを使用)。私たちはこれが苦手です。

おそらく頭の中で実行可能なさまざまなミキシング技術を使用して状況を改善する方法があります。そして、あなたがこれを欲するかもしれない理由のために私が思いつくことができるアプリケーションさえあります(政治犯は外部の同盟国へのメッセージを暗号化したいと考えています)。しかし、この投稿は十分長いと思います。 :)

4
Fixee

高度にランダム化された、毎分大量の、人間によって生成された?起こらない

直面する主な問題は

  • 人々はすぐに退屈するので、パターンはすぐに発生します
  • 人間の脳はパターン認識/作成に専念している多くの構造を持っているので、あなたはそれを打ち負かす必要があります
  • 真の乱数には人間が避けようとする繰り返しが含まれています
  • 人間はたくさんいると良くない

これにより、多くの暗号技術者は、「​​インヘッド」番号に基づいたパターンを計算するのは単純すぎるため、ランダムな外部プロセスを優先して「インヘッド」手法を放棄しました。

オフトピックだが興味深い

頭の中で乱数を生成するためのメカニズムではありませんが、 ソリティアアルゴリズム (Neal Stephensonの Cryptonomicon で描写されています)は、暗号化の目的で乱数を使用することがいかに難しいかを示しています。適度に安全な出力を作成するには、通常のトランプのパックのみが必要ですが、その方法は非常に複雑です。

3
Gary Rowe

ツールベースのRNGが急増したまさにその理由は乱数生成のための優れた頭の中でのアルゴリズムはまだ開発されていないです。

幸運なことに、フロップ用のコイン、ローリング用のサイコロ(ファセットの数はさまざま)、ピッキング用のカード、ドロー用のストローなど、ポータブルな乱数ジェネレータは比較的簡単に低コストで入手できます。さらに、私たちの間のテクノファンのために、ほとんどのモバイルプラットフォームで利用可能なこれらのツールのいくつかのかなり良いシミュレーションがあります。

私は肉食器の代替品よりもこれらのいずれかを心からお勧めします。

3
Kramii

この問題について人々が思いついたかもしれないことについて、本当に興味があります。

デスクから離れてラスベガスに行ってください。

人類は、無数の無作為化手順を持っています。それらはすべてラスベガスで見ることができます。

回転する円があります。タンブリングキューブがあります。そして、トークンをシャッフルしました。それらはすべて驚くほどうまく機能します。

キューブはおそらく最も古いものです。どうやら、ある時点で使用されている細長い4面スティックがあった。羊の対称立方ナックルボーンは数千年の間人気がありました。私たちが言語を開発したのとほぼ同じ時期から、おそらくそのようなランダマイザーを使用しています。

http://iTunes.Apple.com/us/app/motionx-dice/id287509231?mt=8

「ランダムな数字を生成する算術的方法を検討する人は、もちろん、罪の状態にある」

---ジョンフォンノイマン

2
S.Lott

何も考えられない。実際、私はあなたが思いついたものはどれも多くの偏見があり、それは価値がないと予想します。

乱数が必要な場合は、通常サイコロを振ります。

1
Zachary K

頭の中でできるLCMを求めていますか?これがサイコロよりも優れているという考えはばかげたままであることに注意してください。

ただし、これは、任意の有限で明確で効果的なアルゴリズムと同じくらいランダムな可能性があります。

http://www.vias.org/simulations/simusoft_lincong.html

http://www1.i2r.a-star.edu.sg/~knandakumar/nrg/Tms/Probability/Probgenerator.htm

U_ {k + 1} =(a\times U_k + b)mod(m + 1)。

小さい値a = 5、b = 1、およびm = 7を選択すると、これが何をしているかを簡単に確認できます。頭の中でそれができるはずです。

0
S.Lott