問題タブ [boost-random]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std::random_shuffleのRNGとしてboost::randomを使用する
boost::randomのmt19937乱数ジェネレーターを使用するプログラムがあります。random_shuffleを実行する必要があり、これに対して生成される乱数をこの共有状態から取得して、メルセンヌツイスターの以前に生成された数に対して決定論的であるようにする必要があります。
私はこのようなことを試みました:
しかし、randでrandom_shuffleを呼び出すとテンプレートエラーが発生します。ただし、これは機能します。
おそらくそれは実際の関数呼び出しだからです。しかし、明らかにこれは元のメルセンヌツイスターからの状態を維持しません。何が得られますか?グローバル変数なしで私がやろうとしていることをする方法はありますか?
c++ - boost::random を使用して、要素が削除されている std::list から選択する
Boost Random ライブラリのより一般的な使用方法については、この関連する質問を参照してください。
私の質問には、 からランダムな要素を選択し、std::list
何らかの操作を実行することが含まれます。これには、リストから要素を削除し、別のランダムな要素を選択することが含まれる可能性があります。条件が満たされるまで。
ブースト コードと for ループは、おおよそ次のようになります。
私の問題は、要素に対して実行される操作によって要素が削除されるとすぐに、variate_generator がリスト内の無効なインデックスを選択する可能性があることです。特に time(0) でシードする場合、variate_generator を毎回完全に再作成するのは意味がないと思います。
c++ - メルセンヌツイスターを後押しする:複数の値をシードする方法は?
シミュレーションにブーストmt19937実装を使用しています。
シミュレーションは再現可能である必要があります。つまり、後でRNGシードを保存して再利用する可能性があります。シードの外部ソースが必要であり、ランダム性の特定の保証のためではないため、Windows暗号化APIを使用してシード値を生成しています。シミュレーション実行の出力には、RNGシードを含むメモが含まれるため、シードは適度に短くする必要があります。一方、シミュレーションの分析の一環として、いくつかの実行を比較しますが、これらの実行が実際に異なることを確認するには、異なるシードを使用する必要があるため、シードは十分に長くする必要があります偶発的な衝突を避けるため。
64ビットのシードで十分であると判断しました。衝突の可能性は、約2 ^ 32回の実行後に50%に達します。その確率は十分に低いため、それによって引き起こされる平均誤差は私には無視できます。32ビットのシードを使用するのは難しいです。衝突の可能性は、2 ^ 16の実行後にすでに50%に達します。それは私の好みには少しありそうです。
残念ながら、ブーストの実装は、完全な状態ベクトル(遠い、長すぎる)をシードするか、単一の32ビットのunsignedlongをシードします。これは理想的ではありません。
32ビット以上で完全な状態ベクトル未満のジェネレーターをシードするにはどうすればよいですか?ベクトルをパディングするか、シードを繰り返して状態ベクトルを埋めようとしましたが、結果をざっと見ただけでも、結果が良くないことがわかります。
c++ - ブースト RNG のスレッドセーフ
openmp プラグマを 1 つ挿入することで適切に並列化する必要があるループがあります。
(私がエラーを起こさない限り、各実行は他の実行にまったく依存しません。申し訳ありませんが、すべてのコードが挿入されているわけではありません)。
しかし、私の質問は - ブースト RNG スレッドセーフですか? gcc の gcc コードを参照しているように見えるため、gcc コードがスレッドセーフであっても、他のプラットフォームには当てはまらない場合があります。
c++ - ブーストランダムでランダム64ビットintを生成する方法
Boost randomを使用してランダムな64ビットの符号なし整数を生成しようとしていますが、uniform_intでアサーションエラーが発生します。
これが3行目で出力されるものです。
編集:あなたの答えに基づいて、私は以下でサイズを指定しようとしました:
しかし、次のコンパイルエラーが発生します。
編集:わかりました、boost::uniform_intの2番目のインスタンスを見逃しました。私がそれらの両方を手に入れたら、それはすべて行きます。
c++ - rand() の代わりに使用しやすいように boost::random をカプセル化する
私のプログラムでは、異なる範囲の疑似ランダム整数が必要です。今までは rand() 関数を使用していましたが、制限があります。
boost::random ライブラリがはるかに優れた代替手段であることがわかりましたが、ランダムジェネレーターをあちこちに作成したくありませんでした。
(すべての決定を疑似ランダムに行うストレステストソフトウェアであるため、多くのクラスでランダムな整数が必要です(->同じ開始シードを設定することにより、テストの実行を繰り返し可能にする必要があります))。
そのため、boost::random を自分のクラスにカプセル化しました。
この背後にある考え方は、C++ の rand() メソッドとほぼ同じくらい簡単に使用できるようにすることです。
特定の範囲内で乱数を生成することは、次のように簡単になります。
質問:
この乱数の生成方法に問題はありますか?
私が認識していなかった大きなオーバーヘッド?
純粋な悪か時代遅れのプログラミング技術か?
(私はまだ C++ に不慣れで、スキルを向上させたいと考えています。高品質のアドバイスを得るには、スタック オーバーフローが最適な場所であることがわかりました)
c++ - ブースト乱数 - 奇妙なコンパイル エラー
私が書いているシミュレーションでは、いくつかのアクションを実行する必要があるエージェントを表すクラスがあり、このエージェントに乱数ジェネレーターへのアクセスを許可したいと考えています。ブーストrngがいいところにあると聞いたので、使い方を知りたいと思いました。
では、ここで問題です。このコードは完全にコンパイルおよび実行されます。
そのため、Agent クラスに次のタイプのプライベート オブジェクトへのアクセスを許可したいと考えました。
エージェントが乱数を必要とするときに呼び出すことができます。
だから私がやろうとしたことは次のとおりです:
そして、次のエラーメッセージが表示されました。
> エージェント::uniRng(int, int)
c++ - boost::random と boost:uniform_real は float ではなく double で動作しますか?
これがすでに議論されている場合は、ご容赦ください。テンプレート引数に応じて boost::uniform_int と boost::uniform_real を使用し、同じ型を返す必要があるテンプレート関数があります。
これで、int、float、および double を使用して関数をテストしました。int では問題なく動作し、double では問題なく動作しますが、float では動作しません。float を int に変換するか、キャストの問題があるかのようです。私がこれを言っている理由は、私がそうするときです:
私はいつもintを返します。しかし、私が言ったように、それはダブルで動作します。私が間違っていることや欠けていることはありますか? ありがとうございました !
c++ - テンプレートでランダムをブースト
そこで、Boost.Random mt19937 ジェネレーターをテンプレートで使用しようとしています。私のC ++は少し錆びていますが、私が理解している限り(そしてBoostの場合はいつものようにドキュメントはあいまいです)、戻り値の型(float / double)を指定するテンプレート引数を取る必要があります。
問題がどこにあるのか、今のところわかりません...テンプレートですべてが機能した<double>
か、機能しなくなりました。<float>
コードは次のとおりです。
これはvariate_generator
、
私が言ったように、私がC ++をやったのは久しぶりで、Boostのドキュメントには求めることがたくさん残っているので、ヒントをいただければ幸いです...
c++ - Boost::randomを使用した標準多変量正規ランダムベクトル
x0、y0座標の周りに分布する2Dサーフェス上にランダムなポイントを生成したいと思います。
生成する必要があるものが「標準多変量正規ランダムベクトル」と呼ばれることは理解していますが、たとえばBoost::randomライブラリを使用してC++で生成する方法がわかりません。
これを生成するためのボックスミュラー変換と呼ばれるアルゴリズムがあることは知っていますが、これはすでにBoostで適切に実装されているに違いないと思います。
Boost :: randomを使用して、多変量正規分布を生成する簡単な方法はありますか?