蒙地卡羅流程

Python 的 Monte Carlo 模擬

Izzy Weber

Curriculum Manager, DataCamp

模擬步驟

  1. 定義輸入變數並選擇其機率分佈

  2. 從這些分佈取樣產生輸入

  3. 對模擬輸入進行確定性計算

  4. 摘要結果

Python 的 Monte Carlo 模擬

計算圓周率 pi

生成隨機點 $(x, y)$,其中 $x$ 與 $y$ 在 -1 到 1 的區間內。

一個正方形內嵌圓形,含隨機取樣點的圖

$$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 的 Monte Carlo 模擬

步驟 1

定義輸入變數並選擇其機率分佈

  • 輸入:以 $(x, y)$ 座標表示的單一點
  • 機率分佈:$x$ 與 $y$ 服從 -1 到 1 的均勻分佈。

 

circle_points = 0 
square_points = 0
Python 的 Monte Carlo 模擬

步驟 2

從這些分佈取樣產生輸入

 

隨機取樣 $x$ 與 $y$,在 -1 到 1 間均勻分佈:

for i in range(n):
    x = random.uniform(-1, 1)
    y = random.uniform(-1, 1)
Python 的 Monte Carlo 模擬

步驟 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 的 Monte Carlo 模擬

步驟 4

彙整結果以回答關心的問題

 

經過多次模擬後,計算 pi!

pi = 4 * circle_points/ square_points
Python 的 Monte Carlo 模擬

整合示範

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 的 Monte Carlo 模擬

一起來練習吧!

Python 的 Monte Carlo 模擬

Preparing Video For Download...