問題タブ [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++ - ベータ分布からの乱数、C++
特定の確率分布から (1,000,000)^2 の数値を生成し、それらに対して何かを行うシミュレーションを C++ で作成しました。これまで、指数分布、正規分布、ガンマ分布、一様分布、およびポアソン分布を使用してきました。そのうちの 1 つのコードを次に示します。
ここで、ベータ ディストリビューション用に実行する必要があります。これまでに行ったすべての配布には、10 ~ 15 時間かかりました。ベータ ディストリビューションはブースト/ランダム パッケージに含まれていないため、ブースト/数学/ディストリビューション パッケージを使用する必要がありました。解決策を提案するStackOverflow でこのページを見つけました。ここにあります(コピーペースト):
私はそれを複製し、それはうまくいきました。シミュレーションの実行時間の見積もりは線形であり、正確に予測できます。彼らは、これが 25 日間実行されると言います。2 つの可能性があると思います: 1. 提案された方法は、以前に他のディストリビューションで使用していた方法よりも劣っています。 2. ベータ版のディストリビューションは、乱数を生成するのがはるかに困難です。
私は C++ コーディングについて最低限の理解しか持っていないので、私が尋ねている質問はばかげているかもしれません。このシミュレーションが完了するまで 1 か月も待ちきれません。それを改善するために何かできることはありますか? おそらく、私が使用していた最初の方法を使用して、boost/math/distributions パッケージで動作するように変更しますか? それが可能かどうかさえわかりません。
役に立つかもしれないもう 1 つの情報は、生成する必要があるすべての (1,000,000)^2 の数値でパラメーターが同じであることです。私がこれを言っているのは、ベータ版のディストリビューションには厄介な PDF があり、おそらくパラメーターが固定されているという知識を使用してプロセスを簡素化できるからですか? ただの勝手な推測です。
security - 安全なセッションIDを生成する方法
C ++ Webサーバーの場合、セッションIDを生成する必要があります。ある種の乱数を使用して、セッションの初期IPアドレスとおそらくタイムスタンプを使用してハッシュすることを考えました。
これにより、推測できない妥当なIDが生成されますか?優れたランダムジェネレータアルゴリズム(ブーストランダムによって実装される最も好ましいアルゴリズム)は何でしょうか?
Torstenよろしくお願いします
私のソリューションは次のようになります。
メンバーはデフォルトで作成されます。
c++ - boost::random ライブラリを使用して、実際の値の代わりに整数のランダム値を取得する
boost::random
ライブラリを使用して実際のランダム値を取得しようとしています。これは私のコードです:
しかし、0 から 20 までの整数を取得します。
どのようにできるのか?
別のエンジンも試しました:
しかし何も... (常に整数値)
c++ - ブーストを使用したgamma_distributionのパラメーターの設定
Boost1.5のガンマ分布を使用しようとしています。ここで、 kとthetaの値をそれぞれ4と.5にします。しかし、 theta <1の値を設定すると、コンパイルエラーが発生します。
同じことを回避する方法はありますか?
c++ - メルセンヌ ツイスター PRNG のプライミング
There seems to be some mythology around the use of mt19937, specifically that once seeded 'some' number of bits produced by the generator should be ignored so as to have only as near as is possible to pseudo randomness.
Examples of code I've seen are as follows:
My questions are:
Is this myth or is there some truth to it all?
If it's something viable, how many bits should be ignored? as the numbers I've seen
seem to be arbitrary
gcc - boost::uniform_on_sphere が数百万の正しい認識の後に突然失敗するが、特定のホストでのみ発生する
問題
しばらくの間、2 次元でランダムなベクトルを正しく生成した後、boost::uniform_on_sphere
分布は突然値を持つベクトルを生成します-nan
。含まれているプログラムを 3 台のマシンでテストしましたが、そのうちの 2 台でエラーが発生しましたが、3 台目では発生しませんでした。誰が何が起こっているのか考えていますか?
編集:同じタイプが使用されている場合、すべてのホストで発生します。
ホスト
ホスト 1
- AMD Opteron(tm) プロセッサ 6174
- g++ (GCC) 4.4.6 20120305 (レッドハット 4.4.6-4)
- 3802480 回の実現後に失敗する
ホスト 2
- Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz
- g++ (GCC) 4.7.2 20120921 (レッドハット 4.7.2-2)
- 3802480 回の実現後に失敗する
ホスト 3
- Intel(R) Atom(TM) CPU D2700 @ 2.13GHz
- g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
- 3802480回の実現後に失敗し、出力がわずかに異なります
実現
ホスト 1 および 2:
ホスト 3 では、float
代わりにfloat_t
次を使用します。
プログラム
これは で簡単にコンパイルされましたg++ bug.cpp
。最適化をオンにし-O3
ても結果は変わりませんでした。
私は本当に助けていただければ幸いです!
boost - boost random in 2 dimensions
I am trying to use a boost random generator to make random points uniformly distributed over a plane surface. I have the following link for doing it in a single dimension:
Here they use boost::uniform_int<>
to generate numbers as int
in a single dimension.
But in my case I wish to generate numbers as float
in two dimensions over a plane.
Is there any distribution type available to use it in two dimensions? (I have seen boost::uniform_on_sphere
, but it is for spherical surfaces.)
c++ - ブーストによる乱数の描画の最適化/チェック
Boost のインストールが完了し、プログラムで (ようやく) 使用しています。私が欲しかったのは、生成できることでした
- 0 から 1 までのランダムに分散された数値
- 標準偏差 1 の正規分布数
私は次のヘッダーファイルでこれを達成しました:
2 つの質問があります。
- 私のアプローチは正しいですか?これまでのところ、望ましい動作が得られるという点で一貫しているように見えますが、他の人もこのようにしているようです
- 非常に大きなサンプルをシミュレートする必要があるため、10^9 をはるかに超える非常に多数の乱数が必要になります。これを達成するための、uniform() と normal() を単に呼び出すという私のアプローチよりも効率的な方法はありますか?
c++ - Boost::variate_generator ディストリビューションをリセットするには?
最小値と最大値を取り、それらの間のランダムな double を返す関数を作成しようとしています。Boost::variate_generator を使用して 2 つの double の間の乱数を取得しようとしていましたが、その分布を変更できないという問題があるため、呼び出しごとに新しいシードを作成する必要があります。呼び出すたびに新しいシードを作成すると、疑似乱数ジェネレーターの目的が無効になります。
以下のようなものを取得する方法はありますか? Boost は必要ありません。良い結果が得られるようです。
c++ - boost::uuids::random_generator はスレッドセーフですか?
g++ -std=c++11
この関数を(GCC 4.7.2)でコンパイルすることを検討してください。
getID
複数のスレッドから呼び出しても安全ですか?
ここで言及されているように、最初の行のローカル静的オブジェクト定義は、C++11 標準に従ってスレッドセーフです。boost::uuids::random_generator::operator()
問題は、2 行目の同じオブジェクトに対する呼び出しgenerator
もスレッドセーフかどうかです。返された UUID は、単一のスレッドにあるという意味で一意になりますか?