몬테카를로 프로세스

Python으로 배우는 Monte Carlo 시뮬레이션

Izzy Weber

Curriculum Manager, DataCamp

시뮬레이션 단계

  1. 입력 변수를 정의하고 그에 맞는 확률분포를 선택합니다

  2. 해당 분포에서 샘플링하여 입력을 생성합니다

  3. 시뮬레이션된 입력으로 결정적 계산을 수행합니다

  4. 결과를 요약합니다

Python으로 배우는 Monte Carlo 시뮬레이션

원주율 계산하기

무작위 점 $(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단계

이 분포에서 샘플링하여 입력을 생성합니다

 

-1에서 1 사이의 균등분포에서 무작위 $x$, $y$ 좌표 값을 샘플링합니다:

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 = 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...