Что такое симуляция Монте-Карло?

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

Izzy Weber

Curriculum Manager, DataCamp

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

Симуляции:
  • Эксперименты, имитирующие реальность
  • Часто реализуются с помощью компьютерных программ

 

Симуляции Монте-Карло:
  • Применяются для оценки вероятности различных исходов при наличии случайных переменных
  • Основаны на многократной случайной выборке для получения числовых результатов
  • Результаты стохастичны, поскольку модель опирается на случайную выборку
Симуляции Монте-Карло на Python

Пример симуляции

Бросок шестигранного кубика
  • Том бросает честный шестигранный кубик $n$ раз
  • После каждого броска он записывает результат
  • Затем кладёт кубик в мешок и берёт новый для следующего броска

Вопросы

  1. Сколько кубиков Том соберёт после $n$ бросков?
  2. Каким будет средний результат после $n$ бросков?

 

рука бросает кубик

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

Симуляция результатов Тома

  • total_dice: количество кубиков в мешке Тома после $n$ бросков
  • mean_point_dice: среднее значение всех результатов после $n$ бросков
import random
import numpy as np

def roll_dice(n, seed): random.seed(seed) total_dice = 0 point_dice = []
for i in range(n): total_dice += 1 point_dice.append(random.randint(1, 6))
mean_point_dice = np.mean(point_dice)
return([total_dice, mean_point_dice])
Симуляции Монте-Карло на Python

Результаты симуляций

Симуляция первая:

seed=1231

print(roll_dice(10, seed))
print(roll_dice(100, seed))
print(roll_dice(1000, seed))
print(roll_dice(10000, seed))

Симуляция вторая:

seed=3124
print(roll_dice(10, seed))
print(roll_dice(100, seed))
print(roll_dice(1000, seed))
print(roll_dice(10000, seed))

Результаты:

[10, 3.6]

[100, 3.5]
[1000, 3.495]
[10000, 3.503]

Результаты:

[10, 3.8]
[100, 3.28]
[1000, 3.474]
[10000, 3.5508]
Симуляции Монте-Карло на Python

Закон больших чисел

По мере увеличения числа одинаково распределённых случайных величин их выборочное среднее стремится к теоретическому среднему.

Симуляция третья (seed = 3124):

print(roll_dice(100000, seed))
print(roll_dice(500000, seed))
print(roll_dice(1000000, seed))

Результаты:

[100000, 3.51344]
[500000, 3.50428]
[1000000, 3.501995]
Симуляции Монте-Карло на Python

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

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

Preparing Video For Download...