問題タブ [montecarlo]

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.

0 投票する
0 に答える
136 参照

r - 空間生存率データの「穴」のサイズのランダム化テスト

形態空間(魚の頭蓋骨の形状)全体の個体の生存データ(二項)があります。この空間の局所的な死の領域が偶然に予想よりも大きいかどうかを確認するテストを設計したいと思います. 観測された死亡の単一グループの確率は、二項分布 (片側) から簡単に計算できます。ただし、観測された位置だけでなく、空間内の任意の場所で同様の大きさの穴と比較するのは興味深いことです (多尾検定)。Rでこれをコーディングする最良の方法は何ですか?

たとえば、1000 人中 100 人の生存者がいて、それぞれが 2 次元空間で固有の位置にある場合、1000 のランダム サンプルを抽出し、生存者の総数とその位置を一定に保ちながら、それぞれの生存者をランダム化できます。各サンプルの二次元空間。

これらの各サンプル (1000 人の固定空間内の 100 のランダムな生存者) で、生存者を含まない最大の空間領域を見つけたいと思います。最も単純なケースでは、この領域を楕円に制限することができます。この時点で、この検定統計量を最適にコーディングする方法がわかりません。

次に、観測された穴のサイズの有意性を、同じサイズまたはそれより大きいサイズの穴を含むランダム サンプルの数と比較できます。

ご協力いただきありがとうございます!

0 投票する
2 に答える
2393 参照

r - シミュレーション研究を再現する方法

私はRの初心者で、シミュレーション研究を行っており、自分がやりたいことを1つのサンプルで作成することができました。しかし、自分がやったことをどのように再現すればよいのかわかりません。

これまでに書いたプログラムは次のとおりです。

したがって、データセット「応答」を取得します。私がやりたいのは、これを複製して、たとえば1000個の「応答」データセットを取得することです。これは、「シータ」と「ガンマ」のランダムサンプリングを複製することで実現できると思いますが、実際にこれを行うことは考えていません。

よろしくお願いします。

半条。

0 投票する
3 に答える
2261 参照

random - PRNG の品質のテスト

私はPRNG(Mersenne Twisterやrand()stdlibの機能など)をいじっています.PRNGによって生成されたランダムデータの品質を確認するのに役立つ良いテストが必要です. PRNG によって生成された乱数を使用して Pi の値を計算しましたがrand()、Mersenne Twister が区別を提供するのに非常に近いことがわかりました (小数点以下 10 桁まで精査する必要がありますか?)。

モンテカルロ シミュレーションについてはよくわかりません。品質の観点からそれらを区別するのに役立ついくつかのアルゴリズム/アプリケーション (単純でありながら適切な推論を提供できるもの) について教えてください。


EDIT 1:以前は気が付きませんでしたが、同様のスレッドがあります: How to test random numbers?

編集 2:コメントの 1 つに記載されているように、NIST の結果を解釈できません。random.orgからパターン (存在する場合) を視覚的に解釈するというこのアイデアを得て、その単純さのためにそれに従っています。誰かが私のテストのプロセスについてコメントしてくれたらとてもうれしいです:

  1. rand() と MT1997 を使用して、[0,1] から N 個のランダムを生成します
  2. もしそうなら(round(genrand_real1() / rand_0_1()))赤のピクセル、そうでなければ黒のピクセル

これが非常に正確な解決策ではないことは理解していますが、これが合理的な見積もりを提供する場合、現時点ではこれを受け入れることができます.

0 投票する
2 に答える
181 参照

random - 乱数ジェネレーターのループをいつ停止するのですか?

この質問はプログラミングと数学の半分であるため、StackOverflowがこの質問をするのに適切な場所かどうかはわかりません。また、私の質問がばかげている場合は本当に申し訳ありません^ _ ^

「モンテカルロ法」の本でモンテカルロシミュレーションについて勉強しています。私が最初に学ばなければならないことの1つは、乱数ジェネレーターについてです。RNGの基本的なアルゴリズムは次のとおり
です。1。初期化:S上の分布µからシードS0を描画します。t= 1に設定します
。2。遷移:St = f(St-1)に設定します。
3.出力:Ut = g(St)に設定します。
4.繰り返します。t=t+ 1に設定し、ステップ2に戻り

ます(µは状態Sの有限集合の確率分布であり、入力はS0であり、出力Utに必要な乱数です)

理解するのは難しいことではありませんが、ここでの問題は、繰り返しの数にあるランダムな要因が見当たらないことです。RNGのループをいつ停止するかをどのように決定できますか?RNGを実装する私が読んだすべての例は、100回のループであり、特定のシードに対して同じ値を返します。まったくランダムではありません>_<

誰かが私がここで欠けているものを説明できますか?どんな助けでもありがたいです。みんな、ありがとう

0 投票する
3 に答える
1576 参照

ruby - Rubyでのモンテカルロシミュレーション

シミュレーションに問題があります。

私はRuby-Starterであり、コードの何が問題になっているのかわかりません。これは、シミュレーションの一部にすぎません。

最後の2つのプットがないとエラーは発生しませんが、配列ren1_simとrent_simの平均を計算したい場合、エラーが発生します。

それを修正する方法を知っていますか?

0 投票する
3 に答える
172 参照

excel - For Each In: 最初の FOR セルから始めて、単一列の範囲を実行し、複数の列を貼り付けることは可能ですか?

コードの特定の部分を最適化しようとして問題が発生しました。モンテカルロ シミュレーションを実行しており、範囲の値を何度もコピーしたいと考えています。これを行うために、For Each In 構造を使用しました。以下は最小限の例です。

問題は、 がlive複数の列にまたがっているのに対し、acellは 1 つのセルにすぎないことです。結局、最初の列だけがコピーされ、残りは空白になります。また、以前に定義された複数の列と行の範囲であるFor Each acell in XYZ.rowswhereも使用しました。XYZただし、これはかなり遅くなります。

最初のセルから始めて、単一列の範囲を実行し、複数の列を貼り付けることは可能ですか?

0 投票する
2 に答える
19132 参照

c++ - 逐次モンテカルロ法(粒子フィルター)の実装

ここにあるパーティクル フィルタの単純なアルゴリズムに興味があります。それを実装する方法についてのアイデアはありますか(それがどのように機能するかをよりよく理解するためだけに)?

編集: これは、それがどのように機能するかを説明する非常に単純な例です: 1#39950

C++ で実装しようとしました: http://pastebin.com/M1q1HcN4しかし、正しい方法で実装しているかどうかはわかりません。私がよく理解しているかどうか、または私のコードによる誤解があるかどうかを確認していただけますか?

0 投票する
1 に答える
2307 参照

graphics - パス トレーシングでポイント ライトと正確な反射を処理する

モンテカルロ パス トレーシングを実装しようとして、ライト サンプリング手順で問題が発生しました。

通常、手順は次のようになります。

  • カメラ (または前のポイント) から開始してサーフェス ポイントに到達するまで光線をトレースします。
  • 表面のポイントに到達したら、シーン内の光源にランダムにポイントを生成します。
  • そのライトがサーフェス上の現在のポイントに到達できるかどうかを表すジオメトリ項を計算します (この項は 0 または 1 のいずれかです)。
  • このジオメトリ項が 1 の場合、減衰係数 (ライトの距離) とマテリアルの BRDF を掛けて、そのライトの寄与を計算します。

どのようにランダムに選択されるかについての詳細は省きましたが、当面は気にしないでください (たとえば、「ディストリビューション レイ トレーシングにおける照明器具のサンプリング」を参照してください)。

問題は、私が見ているように、BRDF と光源の光の分布の両方が実際の関数ではなく、むしろ尺度であるということです。
たとえば、完全に反射する鏡の BRDF は、入射角ごとに、反射方向のディラック デルタ「関数」です (つまり、1 点で支持され、その点で 1 の質量を持つ尺度)。同様に、ポイント ライト (エリア ライトとは対照的に) は、密度関数とは対照的に、ディラック デルタによってモデル化されます。

適切な重要度のサンプリングが可能になるため、区別を明確にすることが重要と思われます。たとえば、BRDF をサンプリングする場合、次のいずれかを実行できます。

  • すべての出射方向を均一にサンプリングし、対応する反射分布「関数」でスケーリングします。
  • BRDF に従って直接サンプリングし、後でスケーリングしません。

複雑な BRDF では完全な重要度のサンプリングは不可能であるため、その間のすべてが可能であり、重要です。
ここで、BRDF が実際にディラック デルタである場合、BRDF に従ってサンプリングすることが非常に重要になることがわかります。 、方向を一様にサンプリングするときに選択する確率は0です)が、ラッキーヒットして反射方向(質量がある)を取得した場合、寄与を無限に大きくする必要があります! BRDF に従ってサンプリングする場合、常に反射方向を生成し、何もスケーリングする必要はありません (特に、無限に実行されることはありません)。

私の問題は次のとおりです。BRDFに光の寄与をどのように「掛ける」のですか。それらが両方とも一般的な尺度であり、関数だけではない場合です。BRDF の重要度サンプリングとシーン内のライトの分布の両方を考慮する場合、このステップで適切に「重要度サンプル」を作成するにはどうすればよいでしょうか? (ライトのサンプリング手順では、ライトの分布と BRDF の両方を考慮して、無限大を回避する必要があります。)

理想的には、無限大を生成しないサンプリング手順が必要です。無限大は、(上記のように) 悪いサンプリング メカニズムのアーティファクトであるべきです。したがって、後続の 4 つのシナリオでは、計算された寄与は常に有限でなければなりません。

  • エリア ライトを使用した連続 BRDF (例: ランバート ディフューズ マテリアル)
  • ポイントライトを使用した連続BRDF
  • エリア ライトを使用した個別の BRDF (例: 完全なミラー)
  • ポイント ライトを使用した個別の BRDF

もちろん、理想的にはこれは BRDF とライトの両方の任意の測定で機能しますが、上記の 4 つのケースを正しく取得できることが、ほとんどの作業が行われている場所のようです。

0 投票する
2 に答える
574 参照

c++ - モンテカルロシミュレーション用のC++クラスの設計

私はモンテカルロオブジェクトクラスを構築しようとしていますが、関連するクラスを設計するための最良の方法について疑問に思っています。

オブジェクト(エンティティと呼ばれる)の構造には、名前、説明、およびいくつかの異なるタイプの配布タイプが含まれます。Normal、Fixed Integer、Triangleなど。Distributionクラスは、特定の分布のスーパークラスです(またはそうなる可能性があります)。普通。

ので、私は持っています

次に、実際の分布の例は次のようになります。

FixedDistribtionもDistributionのサブクラスであり、さまざまなメソッドを実装します。もちろん、setWeights、setValues、およびSampleです。

私はこのようなコードを書きたいと思っていました

それから

私がやりたいのは、EntityでDistribution(スーパークラス)を定義してから、配布タイプによって異なるサブクラスメソッドを使用することです。setMean。エンティティの配布オブジェクトは、実行時に決定されます。if(distnType == NORM)dsn = new NormalDistribution; if(distnType == FIXED)dsn = new FixedDistribution;

これはC++で可能ですか、それともポリモーフィズムの概念を完全に失っていますか?dsn変数をスーパークラスとして定義し、実行時に実際の分布に絞り込むのに問題があります。(より簡単な)方法は、ディストリビューションなしでエンティティを定義し、エンティティにアタッチせずにディストリビューションを単独で使用することです。

みんなありがとう