タグ付けされた質問 「randomness」

ランダムネスは不確実性を数学的にモデル化する方法です。多くの場合、明確に定義された乱数のソースにアクセスできるか、または入力値またはイベントが確率分布に従うと想定します。

3
メルセンヌツイスターはなぜ良いと見なされているのですか?
メルセンヌツイスターは広く良いとみなされています。ちなみに、CPythonのソースによると、「現存する最も広範囲にテストされたジェネレーターの1つです」しかし、これはどういう意味ですか?このジェネレーターのプロパティをリストするように求められたとき、私が提供できるもののほとんどは悪いです: それは大規模で柔軟性がありません(例:シークなしまたは複数のストリーム)。 巨大な状態サイズにもかかわらず、標準的な統計テストに失敗し、 0付近に重大な問題があり、ランダム化がかなり不十分であることを示唆しています。 速くない 等々。XorShift *のような単純なRNGと比較すると、それは絶望的にも複雑です。 それで、なぜこれが良いと考えられたのかについての情報を探しました。オリジナルの論文は、「超天文学」期間と623次元の均等分布について多くのコメントを述べています。 多くの既知の尺度の中で、スペクトルテスト(Knuth [1981]を参照)や以下に説明するk分布テストなど、より高い次元の均一性に基づくテストが最も強いと考えられています。 ただし、このプロパティの場合、ジェネレーターは十分な長さのカウンターで叩かれます!これは、ジェネレーターで実際に気にしているローカル分布の解説を行いません(ただし、「ローカル」はさまざまなことを意味します)。そして、CSPRNGでさえ、それほど重要ではないので、このような長い期間は気にしません。 論文には多くの数学がありますが、私が知る限り、実際にはランダム性の品質に関するものはほとんどありません。そのほとんどすべての言及は、これらの元々の、ほとんど役に立たない主張にすぐに戻ります。 古い、より信頼性の高い技術を犠牲にして、人々はこの時流に飛び乗ったようです。たとえば、LCGの単語数を3(Mersenne Twisterの「たった624」よりもはるかに少ない)に増やし、各パスで上位の単語を出力すると、BigCrush(TestU01テストスイートのより難しい部分)を通過します)、ツイスターが失敗したにもかかわらず(PCG論文、図2)。これと、メルセンヌツイスターを支持して見つけることができた弱い証拠を考えると、他の選択肢よりも注目を集めたのは何ですか? これも純粋に歴史的なものではありません。メルセンヌツイスターは、実際には、少なくともPCGランダムよりも実際に証明されていると言われています。しかし、ユースケースは私たちの一連のテストよりも優れているほど識別力がありますか?一部のグーグルは、おそらくそうではないと示唆しています。 要するに、メルセンヌツイスターは、その歴史的背景とその他の両方において、どのようにして広く肯定的な評判を得たのだろうかと思っています。一方で私は明らかにその性質に懐疑的ですが、他方では、それが完全にランダムに発生したことを想像するのは困難です。

7
PRNGを使用して魔法のように圧縮できますか?
この考えは、プログラミングを学び、最初にPRNGに出会った子供として私に思いつきました。どれほど現実的かはまだわかりませんが、今ではスタック交換があります。 これは驚くべき圧縮アルゴリズムのための14歳のスキームです: PRNG sを取得し、シードでシードして、疑似ランダムバイトの長いシーケンスを取得します。そのシーケンスを別のパーティに送信するには、PRNGの説明、適切なシード、およびメッセージの長さを伝えるだけです。十分に長いシーケンスの場合、その説明はシーケンス自体よりもはるかに短くなります。 ここで、プロセスを逆にできると仮定します。十分な時間と計算リソースがあれば、ブルートフォース検索を実行して、目的のシーケンスを生成するシード(およびPRNG、つまりプログラム)を見つけることができました(猫のいたずらの面白い写真を見てみましょう)。 PRNGは十分な数のビットが生成された後に繰り返されますが、「典型的な」サイクルと比較すると、私のメッセージは非常に短いので、これは問題のようには見えません。 Voila、データを圧縮する効果的な(ルーベゴールドバーグ式の場合)方法。 したがって、仮定: 圧縮したいシーケンスは有限であり、事前にわかっています。 現金も時間も不足していません(両方の有限量が必要である限り) 知りたい: スキームの背後にある推論に根本的な欠陥はありますか? この種の思考実験を分析する標準的な方法は何ですか? 概要 良い答えが答えを明らかにするだけでなく、私が本当に求めていたのは何であるかを明らかにすることはしばしばあります。皆の忍耐と詳細な回答に感謝します。 答えの要約に対する私のn回目の試みは次のとおりです。 PRNG /シード角度は何も寄与せず、目的のシーケンスを出力として生成するプログラムにすぎません。 ピジョンホールの原則:長さ<= kの(メッセージを生成する)プログラムよりも、長さ> kのメッセージが多くあります。そのため、一部のシーケンスは、メッセージよりも短いプログラムの出力にはなり得ません。 プログラム(メッセージ)のインタープリターが必ず事前に修正されていることに言及する価値があります。そして、その設計は、長さkのメッセージが受信されたときに生成できるメッセージの(小さな)サブセットを決定します。 この時点で、元のPRNGのアイデアはすでに消滅していますが、解決すべき最後の質問が少なくとも1つあります。 Q:幸運にも、長い(しかし有限の)メッセージがたまたま<kビットの長さのプログラムの出力であることがわかりますか? 厳密に言えば、可能性のあるすべてのメッセージ(プログラム)の意味を事前に知っておく必要があるため、偶然ではありません。それは <kビットのメッセージの意味であるかそうでないかです。 > = kビットのランダムメッセージをランダムに選択した場合(なぜですか?)、いずれの場合でも、kビット未満で送信できる確率はゼロになり、送信できないことはほぼ確実になります。使用するビット数はkビット未満です。 OTOH、kビット未満のプログラムの出力であるメッセージからkビット以上の特定のメッセージを選択すると(そのようなメッセージがあると仮定して)、実際にはすでに送信されたビットを利用していますレシーバー(インタープリターの設計)。転送されたメッセージの一部としてカウントされます。 最後に: Q:このエントロピー / コルモゴロフ複雑性ビジネスとは何ですか? 最終的に、両方とも、(より単純な)鳩の巣の原理が圧縮できる量について教えているのと同じことを教えてくれます:おそらくまったくない、おそらくいくつかですが、確かに私たちが空想するほどではありません(チートしない限り)。

2
素朴なシャッフルはどの程度漸近的に悪いのでしょうか?
各アイテムをランダムに選択された別のアイテムと交換して配列をシャッフルするこの「ナイーブ」アルゴリズムが正しく機能しないことはよく知られています。 for (i=0..n-1) swap(A[i], A[random(n)]); 具体的には、nnn回の反復のそれぞれで、n nnn選択肢の1つが(一様な確率で)行われるため、計算にはnnnnn^n可能な「パス」があります。可能な順列のn!n!n!は、パスの数に均等に分割されないnnnnn^nため、このアルゴリズムがそれぞれを生成することは不可能です!n!n!n!等しい確率の順列。(代わりに、いわゆるFischer-Yatesシャッフルを使用する必要があります。これは基本的に[0..nから乱数を選択する呼び出しを変更する]と[i..n)から乱数を選択する呼び出しです。それは私の質問には意味がありません。) 私が疑問に思っているのは、素朴なシャッフルはどの程度「悪い」のでしょうか?より具体的には、せるP(n)P(n)P(n)すべての順列及び組ことC(ρ)C(ρ)C(\rho)得られた順列生成ナイーブアルゴリズムを通じてパスの数であるρ∈P(n)ρ∈P(n)\rho\in P(n)、関数の漸近挙動が何を M(n)=n!nnmaxρ∈P(n)C(ρ)M(n)=n!nnmaxρ∈P(n)C(ρ)\qquad \displaystyle M(n) = \frac{n!}{n^n}\max_{\rho\in P(n)} C(\rho) そして m(n)=n!nnminρ∈P(n)C(ρ)m(n)=n!nnminρ∈P(n)C(ρ)\qquad \displaystyle m(n) = \frac{n!}{n^n}\min_{\rho\in P(n)} C(\rho)? 主な要因は、これらの値を「正規化」することです。ナイーブシャッフルが「漸近的に良好」であれば、 limn→∞M(n)=limn→∞m(n)=1limn→∞M(n)=limn→∞m(n)=1\qquad \displaystyle \lim_{n\to\infty}M(n) = \lim_{n\to\infty}m(n) = 1。 私は(私が見たいくつかのコンピューターシミュレーションに基づいて)実際の値は1から離れていると疑っていますが、が有限であるか、が0?これらの量の振る舞いについて何がわかっていますか?lim m (n )limM(n)limM(n)\lim M(n)limm(n)limm(n)\lim m(n)

2
N未満のランダムビットで2 ^ Nの1の確率をシミュレートする
次の離散分布をシミュレートする必要があるとします。 P(X=k)={12N,1−12N,if k=1if k=0P(X=k)={12N,if k=11−12N,if k=0 P(X = k) = \begin{cases} \frac{1}{2^N}, & \text{if $k = 1$} \\ 1 - \frac{1}{2^N}, & \text{if $k = 0$} \end{cases} 最も明白な方法は、NNNランダムビットを描画し、それらすべてが000(または111)に等しいかどうかをチェックすることです。しかし、情報理論は言う S=−∑iPilogPi=−12Nlog12N−(1−12N)log(1−12N)=12Nlog2N+(1−12N)log2N2N−1→0S=−∑iPilog⁡Pi=−12Nlog⁡12N−(1−12N)log⁡(1−12N)=12Nlog⁡2N+(1−12N)log⁡2N2N−1→0 \begin{align} S & = - \sum_{i} P_i \log{P_i} \\ & = - \frac{1}{2^N} \log{\frac{1}{2^N}} - \left(1 - \frac{1}{2^N}\right) \log{\left(1 - \frac{1}{2^N}\right)} …

7
ランダム化アルゴリズムと非決定的アルゴリズムの違いと関係
ランダム化アルゴリズムと非決定的アルゴリズムの違いと関係は何ですか? ウィキペディアから ランダム化されたアルゴリズムは、そのロジックの一部として、ランダムの程度を採用するアルゴリズムです。アルゴリズムは通常、ランダムビットのすべての可能な選択に対して「平均的なケース」で良好なパフォーマンスを達成することを期待して、その動作を導く補助入力として均一にランダムなビットを使用します。正式には、アルゴリズムのパフォーマンスは、ランダムビットによって決定されるランダム変数になります。したがって、実行時間または出力(あるいは両方)はランダム変数です。 非決定的アルゴリズムは決定論的アルゴリズムとは反対に、異なる実行に異なる動作を示すことができるアルゴリズムです。アルゴリズムが実行ごとに異なる動作をする可能性があるいくつかの方法があります。同時アルゴリズムは、競合状態のために異なる実行で異なる実行することができます。確率的アルゴリズムの振る舞いは、乱数ジェネレータによって異なります。非決定的な多項式時間の問題を解決するアルゴリズムは、実行中の選択に応じて、多項式時間または指数時間で実行できます。 ランダム化アルゴリズムと確率的アルゴリズムは同じ概念ですか? はいの場合、ランダム化アルゴリズムは一種の非決定的アルゴリズムですか?

4
シンプレックスからの均一なサンプリング
私は、N個の乱数の配列を生成するアルゴリズムを探しています。N個の数字の合計は1で、すべての数字は0と1の範囲内にあります。たとえば、N = 3、ランダムポイント(x、y、 z)三角形内にある必要があります: x + y + z = 1 0 < x < 1 0 < y < 1 0 < z < 1 理想的には、エリア内の各ポイントに等しい確率が必要です。難しすぎる場合は、要件を削除できます。ありがとう。

11
罪の引用におけるフォン・ノイマンのランダム性はもはや適用できませんか?
ある人は次のように言った: 決定論的な手段で乱数を生成しようとする人は、もちろん罪の状態に住んでいます。 これは常に、コンピューターだけでは真の乱数を生成できないことを意味します。そして彼は、コンピューターが単一のIntel 8080マイクロプロセッサーと同等のサイズ(約6000バルブ)だったと言いました。コンピューターはより複雑になり、フォン・フォン・ノイマンの声明はもはや真実ではないと思う。実装されたソフトウェアのみのアルゴリズムは不可能であることを考慮してください。これらは物理ハードウェア上で実行されます。真の乱数ジェネレーターとそのエントロピーソースもハードウェアで構成されています。 このJavaフラグメントはループに入れられます。 file.writeByte((byte) (System.nanoTime() & 0xff)); 画像として表したデータファイルを作成できます。 構造を見ることができますが、同様に多くのランダム性があります。興味深いのは、このPNGファイルのサイズは232KBですが、250,000のグレースケールピクセルが含まれていることです。PNG圧縮レベルは最大でした。つまり、圧縮率は7%だけです。かなり非圧縮性。また興味深いのは、ファイルが一意であることです。このファイルのすべての世代はわずかに異なるパターンであり、圧縮率は約7%です。 私の主張にとって重要であるため、これを強調します。これはバイトあたり約7ビットのエントロピーです。もちろん、より強力な圧縮アルゴリズムを使用すると削減されます。ただし、0ビット/バイトに近い値に減らさないでください。上記の画像を撮影し、そのカラーマップをランダムな画像に置き換えることで、より良い印象を得ることができます。 構造のほとんど(上半分)は、類似しているがわずかに異なる値のシーケンスであるため、消えます。これは、マルチテイキングオペレーティングシステムでJavaプログラムを実行するだけで作成される真のエントロピーソースですか?一様に分布した乱数ジェネレータではなく、1つのエントロピーソースですか?たまたまPCである物理ハードウェアで実行されるソフトウェアで構築されたエントロピーソース。 補足 すべてに共通の固定パターンなしですべての画像が新鮮なエントロピーを生成することを確認するために、10個の連続した画像が生成されました。次に、これらを連結し、私がコンパイルできる最強のアーカイバ(paq8px)で圧縮しました。このプロセスは、変更/エントロピーのみを残す自動相関を含む、すべての一般的なデータを削除します。 連結されたファイルは〜66%に圧縮されており、エントロピー率は〜5.3ビット/バイトまたは10.5Mbits / imageになります。驚くべき量のエントロピー⌣⌣ \smile 補足2 圧縮テストの方法論によるエントロピーに欠陥があるという否定的なコメントがあり、緩やかな上限推定値を示しているだけです。NISTの公式暗号エントロピー評価テストSP800-90B_EntropyAssessmentを使用して、連結ファイルを実行しました。これは、非IIDエントロピー測定の場合と同じくらい良好です。これはレポートです(この質問は長くなっていますが、問題は複雑です): Running non-IID tests... Entropic statistic estimates: Most Common Value Estimate = 7.88411 Collision Test Estimate = 6.44961 Markov Test Estimate = 5.61735 Compression Test Estimate = 6.65691 t-Tuple Test …

9
コインを使用して均一に分布した乱数を生成する
コインが1つあります。何度でも反転できます。 ような乱数を生成します。ここで、です。rrra≤r&lt;ba≤r&lt;ba \leq r < br,a,b∈Z+r,a,b∈Z+r,a,b\in \mathbb{Z}^+ 数字の分布は均一でなければなりません。 あれば簡単です:b−a=2nb−a=2nb -a = 2^n r = a + binary2dec(flip n times write 0 for heads and 1 for tails) どのような場合?b−a≠2nb−a≠2nb-a \neq 2^n


1
シャッフルアルゴリズムの正しさを証明する方法は?
アイテムのリストをランダムな順序で作成する方法は2つありますが、それらが同等に公平であるかどうかを判断したいです 私が使用する最初の方法は、要素のリスト全体を作成してから、シャッフルを実行することです(Fisher-Yatesシャッフルなど)。2番目の方法は、挿入のたびにリストをシャッフルする反復的な方法です。擬似コードでは、挿入関数は次のとおりです。 insert( list, item ) list.append( item ) swap( list.random_item, list.last_item ) この特定のシャッフルの公平性を示す方法に興味があります。このアルゴリズムが使用される場合、このアルゴリズムの利点は、わずかに不公平であっても大丈夫です。決定するには、その公平性を評価する方法が必要です。 私の最初のアイデアは、この方法で可能な合計順列と、最終的な長さのセットで可能な合計順列を計算する必要があるということです。ただし、このアルゴリズムから生じる順列の計算方法については少し迷っています。また、これが最良の、または最も簡単なアプローチであると確信することもできません。

8
ランダムネスとは
私はコンピューターサイエンスの学生で、現在システムシミュレーションとモデリングコースに登録しています。それは私たちの周りの日常のシステムに対処し、たとえばIIDやGaussianなどの異なる分布曲線で乱数を生成することで、異なるシナリオでそれらをシミュレートすることを伴います。私はboidsプロジェクトに取り組んできましたが、まさに「ランダム」とは実際には何であるかという質問がありました。たとえば、Math.random()Java のメソッドを介したプログラミング言語でも、生成されるすべての乱数は、基本的に「アルゴリズム」に従って生成されます。 特定のモデルを可能な限り正確にシミュレートするために、実際に生成される数字のシーケンスが実際にランダムであり、それが役立つことをどのように本当に知ることができますか?

6
πやeなどの無理数を使用して乱数を生成できますか?
、、およびような無理数には、小数点の後に一意の非反復シーケンスがあります。このような数値から番目の数字を抽出し(はメソッドが呼び出される回数)、数字をそのまま使用して数字を作成する場合、完全な乱数ジェネレーターを取得する必要はありませんか?たとえば、、および場合、最初の数値は123、2番目の数値は471、次の数値は184などです。ππ\pieee2–√2\sqrt{2}nnnnnn2–√2\sqrt{2}eeeππ\pi

9
公正なコインを与えられたダイをシミュレートする方法
公正なコインが与えられ、公正な(6面の)ダイスを繰り返し反転する確率分布をシミュレートしたいとします。私の最初のアイデアは、2 k = 6 mのような適切な整数を選択する必要があるということです。そうコイン投げた後のk回、我々は範囲を分割することにより、ダイの出力にK個の長さのビット列によりコード番号をマッピングする[ 0 、2 のk - 1 ] 6にインターバル長の各M。ただし、2 kには2つの唯一の素因数がありますが、k,mk,mk,m2k=6m2k=6m2^k = 6mkkk[0,2k−1][0,2k−1][0,2^k-1]mmm2k2k2^kは3が含まれます。これを行う他の簡単な方法があるはずですよね?6m6m6m

3
乱数の真に均一な分布を得る唯一の方法は、拒否サンプリングですか?
一様分布の範囲数値を出力するランダムジェネレーターがあり、一様分布の範囲乱数を生成する必要があるとし ます。[ 0 .. N − 1 ][0..R−1][0..R−1][0..R-1][0..N−1][0..N−1][0..N-1] 仮定と割り切れない、取得するために、真に均一な分布、我々が使用することができます 棄却サンプリング方法を:N RN&lt;RN&lt;RN < RNNNRRR がような最大の整数である場合k N &lt; RkkkkN&lt;RkN&lt;Rk N < R で乱数を選択し[ 0 .. R − 1 ]rrr[0..R−1][0..R−1][0..R-1] 場合、出力R \ MOD Nが、そうでない場合は、他の乱数R」、R」にしようと、...を維持する条件が満たされるまでr&lt;kNr&lt;kNr < k NrmodNrmodNr \mod N 真に均一な離散分布を得るには、拒絶サンプリングが唯一の方法ですか? 答えが「はい」の場合、なぜですか? 注意:もしN&gt;RN&gt;RN > R考え同じである:乱数発生r′r′r'で[0..Rm−1],Rm&gt;=N[0..Rm−1],Rm&gt;=N[0..R^m-1], R^m >= N、例えばr′=R(...R(Rr1+r2)...)+rmr′=R(...R(Rr1+r2)...)+rmr' = R(...R(R r_1 + r_2)...)+r_mここで、ririr_iは[0..R-1]の範囲の乱数[0..R−1][0..R−1][0..R-1]


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.