Процесс Монте-Карло

Симуляции Монте-Карло на Python

Izzy Weber

Curriculum Manager, DataCamp

Этапы симуляции

  1. Определите входные переменные и выберите для них вероятностные распределения

  2. Сгенерируйте входные данные, делая выборку из этих распределений

  3. Выполните детерминированный расчёт для смоделированных входных данных

  4. Обобщите результаты

Симуляции Монте-Карло на Python

Вычисление числа пи

Генерируйте случайные точки $(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

Шаг 1

Определите входные переменные и выберите для них вероятностные распределения

  • Входные данные: отдельные точки с координатами $(x, y)$
  • Вероятностные распределения: $x$ и $y$ подчиняются равномерному распределению от -1 до 1.

 

circle_points = 0 
square_points = 0
Симуляции Монте-Карло на Python

Шаг 2

Сгенерируйте входные данные, делая выборку из этих распределений

 

Сформируйте случайные значения координат $x$ и $y$ с равномерным распределением от -1 до 1:

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

Давайте потренируемся!

Симуляции Монте-Карло на Python

Preparing Video For Download...