人間が(やや「真」の)乱数を生成できる実用的で学習しやすい「インヘッド」アルゴリズムを知っていますか、または考案しましたか?「インヘッド」とは、外部ツールやデバイスがないことが好ましいということです。また、高出力(1分あたり多数の乱数)が望ましいです。
SOでこれを尋ねたが、あまり興味を引かれなかった。たぶんこれはプログラマーにより適しています。
人間が(やや「真」の)乱数を生成できる実用的で学習しやすい「インヘッド」アルゴリズムを知っていますか、または考案しましたか?「インヘッド」とは、外部ツールやデバイスがないことが好ましいということです。また、高出力(1分あたり多数の乱数)が望ましいです。
SOでこれを尋ねたが、あまり興味を引かれなかった。たぶんこれはプログラマーにより適しています。
回答:
George Marsagliaのアルゴリズムを次に示します。
23という2桁の数字を「シード」として選択します。
新しい2桁の数字を作成します。10桁に6単位の桁を加えた数字です。
シーケンスの例は、23-> 20-> 02-> 12-> 13-> 19-> 55-> 35-> ...
その周期は、モジュラス10に比較的素数の残基のグループで、乗数6の次数です(この場合は59)。
「ランダムな数字」は、2桁の数字の単位の数字です。つまり、3,0,2,2,3,9,5、...シーケンスmod 10です。頭。
チェックアウト風水でこの記事を。特にGeomanticチャートの生成に関するセクション。これには、2進数といくつかの単純な再帰的計算を使用した擬似乱数生成手法が含まれます。これは頭の中でかなり簡単にできるように思えます(ただし、1枚の紙が役立ちます)。
免責事項:私は自分で試していない。十分に乱数が必要な場合は、から出力を取得するか/dev/random
、rand
便利な言語で使用するか、信頼できるd20を使用します。
あなたが数学の天才なら、明らかに信頼できない方法であるとしても、二乗法は計算的にかなり軽いです。
合理的な仮定は、あなたがあなたの脳に保存する膨大な量の言語情報に頼らなければならないということだと思います。ソースは何でも、歌の歌詞、詩、モンティパイソンのスケッチでもかまいませんが、心から知っているものでなければなりません。
次に、無意識のバイアスを可能な限り排除する、かなりランダムな部分を選択する必要があります。たとえば、これを行う方法は、曲を選択し、k
10から20の間の数字を選択してからk
、歌詞のth文字を見つけることです。
明らかに、文字の頻度が異なるため、これはそれ自体で均一な分布を与えませんが、それでもランダムな文字であるか、少なくとも外部ソースなしで可能な限りそれに近い文字です。
更新:ところで、人々がコイン投げのランダムシーケンスを記述するように求められた場合、最も一般的な間違いは、シーケンスを「ランダムにしすぎる」ことです。同一の結果の実行は短すぎます。分析が明らかになります。このメソッドは、主にこのトラップを回避することを目的としています。もちろん、このランレングスバイアスの影から他の異常が発生する可能性がありますが、それらを見つけるには適切な実験が必要です。少し皮肉なことに、単独で考えることで乱数を生成するアルゴリズムは、単独で考えることでは見つけることができません。
60(秒)の乱数が必要な場合にこれを行います。どんな時でも適切なモジュロを取る。サイコロをシミュレートする4:17:23 PMは5になります。
素晴らしい質問です。良い答えが非常に難しいことが証明されるのではないかと心配しています。
しかし、最初は、2人が関与している場合に「真の」ランダム性を生成するのは非常に簡単です。単純に1人の人を頭のモジュラスで静かに数え、もう1人は任意の間隔で「停止」します。その後、この数は標準的な方法を使用して他の分布に変換できます。
この方法を堅牢にするためには、モジュラスが大きすぎてはなりません。さもないと、小さい数に対して強いバイアスがかかります。この方法の確率的特性を分析する研究が存在するかどうかを確認したいです。
これは複雑な質問です。私は雑草にあまり遠くさまようことなく、少し説明しようとします。
まず、「真のランダム性とは」と問う必要がありますか?そのような議論はすぐに哲学的な水域に退化するが、要点はこれだ:「宇宙は本当にランダムなのか」?言い換えれば、時間と物質を量子化する場合、現在の状態から宇宙の次の状態を計算できますか?はいの場合、宇宙は決定論的であり、真のランダム性はありません(「哲学的」について私が意味するものを参照してください?)
「真のランダム性」を定義するのは難しいため、しばしば「疑似ランダム性」に落ち着きます。もちろん、これはコンピューターで「乱数」を生成するときに一般的に必要です。
最も単純な擬似乱数ジェネレータは、ディルバートの有名な「9 .. 9 .. 9 ..」アルゴリズムのようなものです。しかし、直感的にはあまり良くないようです(もちろん冗談です)。統計学者は、一連の意図的にランダムな出力が「良好」であるかどうかを判断するために、多くのテストを開発しました。「カイ二乗検定」のウィキペディアのページから始めて、これらの試験について読んで午後を過ごすことができます。
「線形合同ジェネレータ」のような単純なコンピュータアルゴリズムは、カイ2乗検定に十分な数を生成します(ただし、このアルゴリズムを何かから「シード」する必要があります)。
「良さ」の次のステップは「暗号学的に強いランダム性」です。これは、シーケンスa1、a2、...を使用すると、多くの計算を使用しない限り「合理的な確率」でシーケンスの次の数を予測できないことを意味します。これらの数値は、「計算上疑似ランダム」と呼ばれることもあります。このようなシーケンスを取得する一般的な方法の1つは、次のような「ハッシュチェーン」を使用することです。a1= SHA512(a2)、a2 = SHA512(a3)、...計算的に反転するのが難しいため、a2はa1だけを予測することは「不可能」であると考えています。
それでは今、疑問が生じます。あなたの質問に規定されている規則の下で人間ができることは何ですか?人間はランダム性を生成することで悪名が高い。以前は、コインをめくっているように、H、T、T、H、H、H、T、Tなどを「ランダムに」入力してコインフリップを生成しようとするWebサイトがありました(ただし、あなたの頭)。しばらくすると、Webサイトは50%の確率でフリップを予測し始めます(隠れマルコフモデルを使用)。私たちはこれが苦手です。
おそらくあなたの頭の中で実行可能なさまざまなミキシング技術を使用して状況を改善する方法があります。そして、なぜあなたがこれを望むのかについて私が思いつくことができるアプリケーションさえあります(政治囚は外部の同盟国へのメッセージを暗号化したいです)しかし、この投稿は十分に長いと思います。:)
ツールベースのRNGが急増したまさにその理由は、乱数生成のための優れたインヘッドアルゴリズムがまだ開発されていないことです。
幸運なことに、フロップ用のコイン、ローリング用のサイコロ(さまざまな数のファセットを含む)、ピッキング用のカード、および描画用のストローを含む、ポータブルな乱数ジェネレーターは、低コストで比較的簡単に入手できます。さらに、私たちの中の技術愛好家には、ほとんどのモバイルプラットフォームで利用可能なこれらのツールのかなり良いシミュレーションがあります。
肉食器の代替品よりもこれらのいずれかを心からお勧めします。
高度にランダム化された、毎分大量の、人間によって生成されたものですか?起こらない
直面する主な問題は
これにより、多くの暗号作成者は、「インヘッド」数値に基づいてパターンを作成するのは単純すぎたため、ランダムな外部プロセスを優先して「インヘッド」技術を放棄することになりました。
オフトピックだが興味深い
頭の中で乱数を生成するメカニズムではありませんが、ソリティアアルゴリズム(Neal StephensonのCryptonomiconに描かれている)は、暗号化の目的で乱数を使用することがいかに難しいかを示しています。かなり安全な出力を作成するには、通常のトランプのパックだけが必要ですが、その方法は非常に複雑です。
私は、この問題について人々が思いついたかもしれないものに本当に興味があります。
机から離れてラスベガスに行ってください。
人類には多数のランダム化手順があります。それらはすべてラスベガスで見ることができます。
回転する円があります。タンブリングキューブがあります。そして、トークンをシャッフルしました。それらはすべてすばらしい働きをします。
キューブはおそらく最も古いものです。どうやら一点で使用される細長い4面の棒がありました。ヒツジの対称立方体のナックルボーンは、何千年もの間人気がありました。言語を開発したのとほぼ同時期に、おそらくこれらの種類のランダマイザーを使用しています。
http://itunes.apple.com/us/app/motionx-dice/id287509231?mt=8
「ランダムな数字を生成する算術的方法を考えている人は、もちろん、罪の状態にあります」
---ジョン・フォン・ノイマン
頭の中でできる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を選択すると、これが何をしているのかを簡単に確認できます。あなたの頭の中でそれを行うことができるはずです。