HN 日本語サマリー

← 一覧へ戻る
科学・技術

モンテカルロシミュレーション

Monte-Carlo Simulations (eli.thegreenplace.net)

32 pointsby ibobev3 コメント

要約

モンテカルロシミュレーションは、乱数と大数の法則を用いて科学技術問題の解を求める手法です。この記事では、円周率の計算や、カードゲームSETの組み合わせ問題、退職後のポートフォリオ予測といった具体的な例を通して、モンテカルロシミュレーションの基本的な考え方と応用例を紹介しています。特に、高次元積分や複雑な組み合わせ計算、不確実性の高い予測において、その有効性が強調されています。

全文翻訳

モンテカルロシミュレーション(またはモンテカルロ法)は、様々な科学技術問題の解決に乱数と大数の法則を適用する技術です。 その最初の記録された用途の1つは、第二次世界大戦後の核兵器シミュレーションで、スタニスワフ・ウラムとジョン・フォン・ノイマンによって行われました[1]。この記事では、モンテカルロシミュレーションの簡単な使用例をいくつか紹介したいと思います。まず、ダーツを投げて円周率の値を計算するという古典的な例から始めましょう。 円周率の推定 正方形のボードを用意し、その中に円の4分の1を内接させます。次に、ボードにダーツを投げ、各ダーツが円の内側または外側に当たったかを記録します。多くのダーツを投げた後、円の内側に当たったダーツの数と投げられたダーツの総数の比率を計算します。ダーツが正方形全体に均一に分布していると仮定すると、大数の法則により、この比率は円の4分の1の面積A_{circ}と正方形全体の面積A_{square}の比率に近づくはずです。正方形の辺の長さを1とすると、次のようになります。 [\frac{A_{circ}}{A_{square}}= rac{\pi/4}{1}=\frac{\pi}{4}\] したがって、次のようになります。 [\pi\approx 4\frac{\text{hits inside}}{\text{total throws}}\] ここに視覚化を示します。 単位正方形内に半径1の円の4分の1。 サンプル 200 101000 実行 π ≈ — サンプル数(ダーツの投擲数)を変更して「実行」をクリックすると再生成されます。 コードは非常にシンプルです。以下に少し整形したバージョンを示します。 ```javascript const total = Number(samples.value); let inside = 0; for (let i = 0; i < total; i++) { const x = Math.random(); const y = Math.random(); const inCircle = x * x + y * y <= 1; if (inCircle) inside++; } estimateValue = 4 * inside / total; ``` サンプルが1000個でも、この推定値は比較的悪いことに気づくでしょう。数回「実行」をクリックすると、いくつかの数値は大きく外れます。この方法はπを推定しますが、特に良い推定値ではありません。妥当な信頼性で小数点以下4桁を推定するには、約100億サンプルの実行が必要だとわかります。一般に、このような独立した試行では、典型的なサンプリング誤差は1/√Nに比例して減少します。ここでNは試行回数です。これは、誤差を半分にするには4倍のサンプルが必要であることを意味します。 πの推定は奇妙に思えるかもしれませんが、モンテカルロシミュレーションが適用される重要な問題クラス、すなわち数値積分の一例です。私たちのシミュレーションは、円の4分の1の曲線の下の面積を推定しており、これは定積分です。多くの積分は解析的に解くのが非常に困難であり、積分を計算するための方法を開発するために数値解析の分野で多くの研究が行われてきました。モンテカルロ法は、他の数値法が高価になる可能性のある高次元積分に特に役立ちます。 組み合わせシミュレーション - ゲームSET モンテカルロ法の一般的な用途は、複雑な組み合わせ計算の推定です。これらはしばしば解析解を持たず、関わる数値の規模のためにすべての選択肢を列挙することは現実的ではありません。例として、ゲームSETを考えてみましょう。 各SETカードには4つの属性があります。 形状の数(1、2または3) 色(赤、緑または紫) 形状の種類(楕円、ひし形または波線) 塗りつぶし(空、縞模様または無地) 目標は、「セット」を見つけることです。これは、各属性について、すべて異なるか、すべて同じである3枚のカードの組み合わせです。 例として、ここに1つのセットがあるハンドを示します。見つけられますか[2]: SETハンドに1つのセットがある そして次のハンドにはセットがありません: セットがないハンド ここで質問です。シャッフルされたばかりのSETデッキから、最初の12枚のカードにセットが含まれていない確率はどのくらいでしょうか?この質問にコンピューターなしで答えるのは難しいです。 81枚のデッキから12枚のカードのハンドを配る方法の数を計算するのは簡単です。 [\binom{81}{12}=70,724,320,184,700\] しかし、これらのハンドのうちセットがないものはいくつあるでしょうか?70兆のSETハンドを列挙してそれぞれをチェックするにはかなりの時間がかかりますし、この質問に答えるための簡単な計数式はありません。SETの対称性やその他の数学的特性を活用して検索空間を大幅に削減するために、いくつかの巧妙な方法が採用されることがあります。ドナルド・クヌース自身がこの問題に取り組み、素晴らしいプログラム(彼のプログラムページにあるsetset-all)を見つけ、2,284,535,476,080個のそのようなハンドを発見しました。したがって、私たちの質問への答えは次のとおりです。 [\frac{2,284,535,476,080}{70,724,320,184,700}\approx 0.0323\] SETのフルデッキからランダムに引かれた12枚のカードのハンドにセットが含まれていない確率は3.23%です。 クヌーススタイルの検索空間を削減するSETの数学的特性に関する深い知識なしに、比較的少ない労力でこの質問に答えるためにモンテカルロシミュレーションをどのように使用できるか見てみましょう。次の擬似コードを使用できます。 ``` C = 0 run N times: draw a random 12-card hand from a fresh deck count sets in the hand if no sets: C += 1 Estimated probability = C / N ``` 1000万回のシミュレーションドローを実行した後、0.0323という答えが得られ、実際の答えに非常に近いです。モンテカルロアプローチにより、非常に簡単な方法でかなり複雑な問題を解決できます。15枚のカードのハンドに答えることを考えてみましょう。これは検索空間を大幅に拡大します。15枚のカードのハンドを選択する方法は、12枚のカードのハンドを選択する方法の約100倍あります。しかし、モンテカルロシミュレーションでは、1つの小さなパラメータを調整するだけで、非常に信頼性の高い[3]答えが得られます(ちなみに、約0.00037です)。 退職金予測 モンテカルロシミュレーションがユビキタスである領域の1つは、退職ポートフォリオの予測です。 誰かがポートフォリオに合計100万ドルを持って退職する準備をしているとします。彼らは年間30,000ドルをポートフォリオから生活費として引き出せるようにしたいと考えています。それは機能するでしょうか?この質問を分析する際には多くの要因を考慮する必要がありますが、簡単にするために2つだけに焦点を当てましょう。ポートフォリオの収益とインフレです。 平均値Assuming average valuesを仮定して、単純な推定を実行できます。年間の平均ポートフォリオ収益率を4%、年間の平均インフレ率を2%と仮定します[4]。 ポートフォリオ収益率をr=0.04、インフレ率をq=0.02とします。すると、毎年の実質収益率は次のようになります。 [r^{\mathrm{real}}=\frac{1+r}{1+q}-1\approx0.0196\] 1,000,000ドルから始めて、年末には1,019,600ドルになり、生活費として30,000ドルを引き出す[5]と、989,600ドルになります。このまま続けると、約55年後に資金が尽きます。これは、65歳で退職する人は比較的安全であるべきであることを意味しますよね?しかし、これは非常に単純化されています。平均収益率のみを仮定するのは危険です。なぜなら、それらは現実をうまく表現しておらず、多くの要因が不確実だからです。例えば、収益のシーケンスは非常に重要です。悪い年(-10%)の後に良い年(+18%)が続いても、「平均で4%」としてカウントされますが、連続する2つの+4%の年よりも大幅に少ない金額になります。インフレも予測不可能であり、ポートフォリオ収益率と相関する場合もあります。インフレが高く、収益が低く/変動しやすい悪い年があり、ポートフォリオに壊滅的な影響を与える可能性があります。 要因(年間引き出し額の変動、株式、債券、不動産の混合ポートフォリオ、平均余命、予期せぬイベント、税法の変更など)を追加すると、単一の平均推定値に依存することはますます困難になります。 だからこそ、モンテカルロシミュレーションはこの分野で非常に人気があります。過去のデータに基づいた合理的な分布からサンプリングすることで、モンテカルロシミュレーションは簡単に100万もの異なるシナリオを実行し、例えば、死亡する前に資金が尽きる確率などの推定値を提供できます。 シミュレーションを実行した有用なチャートを以下に示します。 上のチャートでは: 破線は、前述の一定の仮定を示しています。年間収益率が常に4%で、インフレ率が常に2%の場合に何が起こるかです。青い塗りつぶし領域は、インフレ率と収益率が合理的な正規分布からサンプリングされた1,000,000回のシミュレーションの結果を示しています。