Czym jest symulacja Monte Carlo?

Symulacje Monte Carlo w Pythonie

Izzy Weber

Curriculum Manager, DataCamp

Symulacje i symulacje Monte Carlo

Symulacje:
  • Eksperymenty naśladujące rzeczywistość
  • Często realizowane za pomocą programów komputerowych

 

Symulacje Monte Carlo:
  • Służą do przewidywania prawdopodobieństwa różnych wyników zależnych od zmiennych losowych
  • Opierają się na wielokrotnym losowym próbkowaniu w celu uzyskania wyników numerycznych
  • Wyniki są stochastyczne, ponieważ model opiera się na losowym próbkowaniu
Symulacje Monte Carlo w Pythonie

Przykład symulacji

Rzut sześciościenną kostką
  • Tom rzuca sześciościenną kostką $n$ razy
  • Po każdym rzucie zapisuje wynik
  • Następnie wkłada kostkę do worka i losuje nową

Pytania

  1. Ile kostek Tom zbierze po $n$ rzutach?
  2. Jaka będzie średnia wyników po $n$ rzutach?

 

dłoń rzucająca kostką

Symulacje Monte Carlo w Pythonie

Symulowanie wyników Toma

  • total_dice: liczba kostek w worku Toma po $n$ rzutach
  • mean_point_dice: średnia wszystkich wyników po $n$ rzutach
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])
Symulacje Monte Carlo w Pythonie

Wyniki symulacji

Symulacja pierwsza:

seed=1231

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

Symulacja druga:

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

Wyniki:

[10, 3.6]

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

Wyniki:

[10, 3.8]
[100, 3.28]
[1000, 3.474]
[10000, 3.5508]
Symulacje Monte Carlo w Pythonie

Prawo wielkich liczb

Wraz ze wzrostem liczby identycznie rozłożonych, losowo generowanych zmiennych, ich średnia próbkowa zbliża się do średniej teoretycznej.

Symulacja trzecia (seed = 3124):

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

Wyniki:

[100000, 3.51344]
[500000, 3.50428]
[1000000, 3.501995]
Symulacje Monte Carlo w Pythonie

Czas na ćwiczenia!

Symulacje Monte Carlo w Pythonie

Preparing Video For Download...