Proces Monte Carlo

Symulacje Monte Carlo w Pythonie

Izzy Weber

Curriculum Manager, DataCamp

Kroki symulacji

  1. Zdefiniuj zmienne wejściowe i wybierz dla nich rozkłady prawdopodobieństwa

  2. Wygeneruj dane wejściowe, próbkując z tych rozkładów

  3. Wykonaj deterministyczne obliczenie symulowanych danych wejściowych

  4. Podsumuj wyniki

Symulacje Monte Carlo w Pythonie

Obliczanie wartości pi

Wygeneruj losowe punkty $(x, y)$, gdzie $x$ i $y$ należą do przedziału od -1 do 1.

Wykres przedstawiający koło wpisane w kwadrat z losowo wybranymi punktami

$$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}}$$

Symulacje Monte Carlo w Pythonie

Krok 1

Definiowanie zmiennych wejściowych i wybór rozkładów prawdopodobieństwa

  • Dane wejściowe: poszczególne punkty reprezentowane przez współrzędne $(x, y)$
  • Rozkłady prawdopodobieństwa: $x$ i $y$ mają rozkład jednostajny od -1 do 1.

 

circle_points = 0 
square_points = 0
Symulacje Monte Carlo w Pythonie

Krok 2

Generowanie danych wejściowych przez próbkowanie z rozkładów

 

Próbkuj losowe wartości współrzędnych $x$ i $y$ z rozkładu jednostajnego na przedziale od -1 do 1:

for i in range(n):
    x = random.uniform(-1, 1)
    y = random.uniform(-1, 1)
Symulacje Monte Carlo w Pythonie

Krok 3

Deterministyczne obliczenie symulowanych danych wejściowych

Sprawdzenie, czy każdy punkt leży wewnątrz koła: deterministyczne dla danych $x$ i $y$

dist_from_origin = x**2 + y**2

Jeśli tak, dodaj punkt do circle_points; zawsze dodawaj punkt do square_points

if dist_from_origin <= 1:
     circle_points += 1
square_points += 1
Symulacje Monte Carlo w Pythonie

Krok 4

Podsumowanie wyników w celu odpowiedzi na pytania

 

Po wielu rundach symulacji oblicz wartość pi!

pi = 4 * circle_points/ square_points
Symulacje Monte Carlo w Pythonie

Wszystko razem

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
Symulacje Monte Carlo w Pythonie

Czas na ćwiczenia!

Symulacje Monte Carlo w Pythonie

Preparing Video For Download...