Що таке моделювання Монте-Карло?

Моделювання Монте-Карло в 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

Результати моделювання

Моделювання 1:

seed=1231

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

Моделювання 2:

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

Закон великих чисел

Зі зростанням кількості однаково розподілених випадкових змінних їхня вибіркова середня наближається до теоретичної середньої.

Моделювання 3 (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...