Vad är en Monte Carlo-simulering?

Monte Carlo-simuleringar i Python

Izzy Weber

Curriculum Manager, DataCamp

Simuleringar och Monte Carlo-simuleringar

Simuleringar:
  • Experiment som försöker efterlikna verkligheten
  • Använder ofta datorprogram

 

Monte Carlo-simuleringar:
  • Används för att förutsäga sannolikheten för olika utfall som påverkas av slumpmässiga variabler
  • Bygger på upprepad slumpmässig sampling för att få numeriska resultat
  • Resultaten är stokastiska eftersom modellen bygger på slumpmässig sampling
Monte Carlo-simuleringar i Python

Simuleringsexempel

Kasta en sexsidig tärning
  • Tom kastar en rättvis sexsidig tärning $n$ gånger
  • Efter varje kast noterar han utfallet
  • Han lägger sedan tärningen i en påse och väljer en ny inför nästa kast

Frågor

  1. Hur många tärningar samlar Tom in efter $n$ kast?
  2. Vad blir medelvärdet av utfallen efter $n$ kast?

 

en hand som kastar en tärning

Monte Carlo-simuleringar i Python

Simulera Toms utfall

  • total_dice: antalet tärningar i Toms påse efter $n$ kast
  • mean_point_dice: medelvärdet av alla utfall efter $n$ kast
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])
Monte Carlo-simuleringar i Python

Simuleringsresultat

Simulering ett:

seed=1231

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

Simulering två:

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

Resultat:

[10, 3.6]

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

Resultat:

[10, 3.8]
[100, 3.28]
[1000, 3.474]
[10000, 3.5508]
Monte Carlo-simuleringar i Python

De stora talens lag

När antalet likfördelade, slumpmässigt genererade variabler ökar, närmar sig deras sampelmedelvärde det teoretiska medelvärdet.

Simulering tre (seed = 3124):

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

Resultat:

[100000, 3.51344]
[500000, 3.50428]
[1000000, 3.501995]
Monte Carlo-simuleringar i Python

Nu kör vi en övning!

Monte Carlo-simuleringar i Python

Preparing Video For Download...