モンテカルロ法の流れ

Pythonで学ぶモンテカルロ・シミュレーション

Izzy Weber

Curriculum Manager, DataCamp

シミュレーションの手順

  1. 入力変数を定義し、その確率分布を選ぶ

  2. その分布からサンプリングして入力を生成

  3. シミュレーション入力を決定論的に計算

  4. 結果を要約

Pythonで学ぶモンテカルロ・シミュレーション

円周率の計算

$x$ と $y$ を -1 から 1 の範囲でとるランダム点 $(x, y)$ を生成します。

正方形内の円とランダムにサンプルされた点のグラフ

$$Area_{circle} = \pi $$

$$Area_{square} = 2 \times 2 = 4 $$

$$\frac{Area_{circle}}{Area_{square}} = \frac{\pi}{4} $$

$$\frac{n_{red}}{n_{all}} = \frac{\pi}{4} $$

$$ \pi = 4 \times \frac{n_{red}}{n_{all}}$$

Pythonで学ぶモンテカルロ・シミュレーション

ステップ 1

入力変数を定義し、その確率分布を選ぶ

  • 入力: $(x, y)$ 座標の各点
  • 確率分布: $x$ と $y$ は -1 から 1 の一様分布に従う

 

circle_points = 0 
square_points = 0
Pythonで学ぶモンテカルロ・シミュレーション

ステップ 2

これらの分布からサンプリングして入力を生成

 

-1 から 1 の一様分布から $x$ と $y$ をサンプル:

for i in range(n):
    x = random.uniform(-1, 1)
    y = random.uniform(-1, 1)
Pythonで学ぶモンテカルロ・シミュレーション

ステップ 3

シミュレーション入力を決定論的に計算する

各点が円内か判定:与えられた $x$ と $y$ では決定的

dist_from_origin = x**2 + y**2

円内なら circle_points に加算;square_points は常に加算

if dist_from_origin <= 1:
     circle_points += 1
square_points += 1
Pythonで学ぶモンテカルロ・シミュレーション

ステップ 4

関心のある問いに答えるため結果を要約する

 

多数回のシミュレーション後、円周率を計算:

pi = 4 * circle_points/ square_points
Pythonで学ぶモンテカルロ・シミュレーション

まとめて実行

n = 4000000
circle_points = 0 
square_points = 0

for i in range(n): x = random.uniform(-1, 1) y = random.uniform(-1, 1) dist_from_origin = x**2 + y**2 if dist_from_origin <= 1: circle_points += 1 square_point += 1
pi = 4 * circle_points / square_points print(pi)
3.142518
Pythonで学ぶモンテカルロ・シミュレーション

Passons à la pratique !

Pythonで学ぶモンテカルロ・シミュレーション

Preparing Video For Download...