2

これら 2 つの normal_distribution と default_random_engine を支える数学について実際に話している場所に私を導いてくれる人はいますか? 私が理解していることから、メルセンヌツイスターを使用していますか? もしそうなら、メルセンヌツイスターではあまり見つけられないので、この疑似ランダムアルゴリズムが実際にどのように機能するかを説明するオンラインリソースの方向性を誰かに教えてもらえますか. また、数が一様である場合、ほとんどの疑似乱数アルゴリズムの出力はどれですか? おそらく逆変換、ボックスミュラー、またはジグラットを使用していますか?私が本当に感謝するどんな助け:)

4

1 に答える 1

5

あなたが尋ねているいくつかの問題があります。1 つ目は、一連の疑似乱数 (通常は整数) を生成するメソッドに関するものです。ウィキペディアには、Mersenne Twister (MT) とLinear Congruential Generator (LCG) の合理的な説明があり、どちらもその機能を実行します。これらは、有効な範囲全体に整数を多かれ少なかれ均一に分散させることを目的としており、より複雑な分散を生成するために必要なコア機能を表しています。

他の分布からの数値の生成は、一様に分散された整数疑似乱数描画を生成したメソッドの 1 つから数値を引き出すことによって実行できます。これを行うには、いくつかの方法があります。

  1. 逆変換サンプリング- 分布の CDF の逆関数が閉じた形式の場合、U(0,1) からの描画を使用して、基になる PDF から描画を生成できます。
  2. ID - 一部のディストリビューションは、他のディストリビューションの ID を使用して生成できます。正規分布は、その逆 CDF の閉じた形式がないため、このカテゴリに分類されます。標準正規分布から描画を生成するために使用できる方法がいくつかあります。
  3. ユーザー定義の分布- 閉じたフォームがない場合、または変量を生成するために使用できる適切な ID がない場合、開発者はサンプルを取得して PDF のヒストグラムを作成することにより、PDF を概算できます。これを使用して CDF の近似値とその逆関数を作成し、そこから描画を行うことができます。
  4. 拒否サンプリング- この方法では、目的の PDF のプロパティに準拠しない別の PDF からの描画を拒否することにより、PDF からバリアントを生成します。

Mersenne Twister 用の C++ クラス ライブラリの特定の実装の詳細を探している場合は、Boost のソース コードを参照してください。Boost がどのようにそれを行うかについての洞察が得られます。AFAIK、C++ 11標準では、これを実装する方法は指定されておらず、動作方法のみが指定されています。実装はコンパイラ開発者に任されていますが、より一般的なコンパイラの多くが Boost 実装以外のものを使用しているとしたら、私は驚くでしょう (更新: ただし、以下の MSalters の観察は、特定のコンパイラが何か他のことを行う理由の 1 つです)。同じことがBoost normal_distribution クラスにも当てはまります。

于 2013-03-28T04:19:28.383 に答える