Monte Carlo — licz przez losowanie
🎯 Po co Ci to?
Oto pomysł, który brzmi jak żart, a jest jednym z najpotężniejszych narzędzi nauki: żeby policzyć coś dokładnego, rzuć losowo tysiące razy i policz statystykę. Chcesz pole dziwacznej figury bez wzoru? Rzucaj w nią losowe punkty i policz, ile trafiło. Chcesz liczbę π? To samo. Metodę wymyślili fizycy z projektu Manhattan (stąd kryptonim „Monte Carlo" — od kasyna, bo chodzi o hazard z liczbami), a dziś liczy się nią ryzyko finansowe, przenikanie promieniowania, prognozy pogody i ruchy giełdy. To zaskakujące, głęboko informatyczne i — co najlepsze — policzysz nim π na własnym komputerze w dziesięć linijek.
✅ Czego się nauczysz
Po tej jednostce potrafisz:
- oszacować liczbę π metodą Monte Carlo (losowe punkty w kwadracie);
- policzyć pole dowolnej figury metodą „trafienia / wszystkie próby";
- wyjaśnić, dlaczego dokładność rośnie z liczbą prób — i jak wolno.
🔁 Przypomnij sobie
Z 3.8: import random, random.random() daje losową liczbę z [0,1); z 10.1/10.2: sprawdzanie, czy punkt jest w figurze; z 8.6: losowość i statystyka na przykładach.
📘 Wyjaśnienie
Idea. Chcesz zmierzyć pole nieregularnej plamy na kwadratowej kartce. Zamknij oczy i rzucaj ryżem losowo na całą kartkę. Policz, jaki ułamek ziaren wpadł w plamę. Jeśli 37% ziaren trafiło w plamę, to plama zajmuje ~37% powierzchni kartki. Im więcej ziaren, tym dokładniejsze oszacowanie. To cała metoda Monte Carlo: pole figury = (trafienia / wszystkie próby) × pole obszaru losowania.
📐 DEFINICJA — metoda Monte Carlo: szacowanie wielkości (pola, całki, prawdopodobieństwa) przez wielokrotne losowe próbkowanie i policzenie statystyki wyników. Dokładność rośnie z liczbą prób.
Po ludzku: nie umiem policzyć wzorem — to rzucę losowo dużo razy i zobaczę, jak często trafiam. Czym NIE jest: metodą dokładną. Monte Carlo daje oszacowanie z błędem, który maleje z liczbą prób — nigdy idealny wynik. To cena za uniwersalność: działa tam, gdzie wzoru nie ma.
Popis: liczba π. Weź ćwiartkę koła o promieniu 1 wpisaną w kwadrat 1×1. Pole ćwiartki to $\frac{\pi}{4}$, pole kwadratu 1. Losuj punkty $(x, y)$ w kwadracie; punkt trafia w ćwiartkę koła, gdy $x^2 + y^2 \le 1$ (Pitagoras — odległość od zera ≤ promień!). Ułamek trafień ≈ $\frac{\pi}{4}$, więc $\pi \approx 4 \times \frac{\text{trafienia}}{\text{próby}}$:
import random
def szacuj_pi(prob):
trafienia = 0
for _ in range(prob):
x, y = random.random(), random.random() # losowy punkt w kwadracie [0,1)²
if x*x + y*y <= 1: # czy w ćwiartce koła?
trafienia += 1
return 4 * trafienia / prob
Dziesięć linijek liczy jedną z najsłynniejszych stałych matematyki — bez wzoru na π, bez szeregów, samą geometrią i losowością. Uruchom dla 1000 prób — dostaniesz może 3,1; dla miliona — 3,141 z okładem.
Jak szybko zbiega? I tu haczyk: Monte Carlo jest uniwersalne, ale wolne. Dokładność rośnie jak pierwiastek z liczby prób — żeby dodać jedną cyfrę dokładności, trzeba stukrotnie więcej losowań. Cztery kroki bisekcji (7.5) dawały cyfrę; tu potrzeba mnożenia prób przez 100. Dlatego do liczenia π nikt Monte Carlo naprawdę nie używa (są metody miliony razy szybsze). Metoda błyszczy tam, gdzie nie ma alternatywy: całki w wielu wymiarach, symulacje fizyczne, wycena finansowa — problemy tak skomplikowane, że „rzuć losowo i policz" jest jedyną wykonalną drogą.
💭 Pomyśl: Ta sama metoda co dla π policzy pole dowolnej figury, dla której umiesz sprawdzić „czy punkt jest w środku". Jak policzyłbyś pole figury opisanej nierównością $y \le \sin(x)$ nad przedziałem $[0, \pi]$ (obszar pod sinusoidą)?
Sprawdź odpowiedź
Otocz figurę prostokątem, który umiesz zmierzyć — tu $[0, \pi] \times [0, 1]$ (bo sinus nie przekracza 1), pole $\pi \times 1 = \pi$. Losuj punkty w prostokącie; punkt trafia „pod sinusoidę", gdy $y \le \sin(x)$. Pole ≈ (trafienia/próby) × $\pi$. Klucz: potrzebujesz tylko (1) prostokąta obejmującego figurę o znanym polu i (2) testu „czy punkt w figurze" (10.1/10.2!). Reszta to losowanie i liczenie ułamka. To dlatego Monte Carlo jest tak uniwersalne — wymaga minimum: umieć otoczyć i umieć sprawdzić przynależność. (Nawiasem: policzyłeś właśnie całkę $\int_0^\pi \sin x, dx = 2$ przez losowanie — Monte Carlo to przede wszystkim metoda całkowania numerycznego.)
⚠️ Uwaga, pułapka
Losowość Monte Carlo znaczy, że dwa uruchomienia dają różne wyniki — i to jest w porządku, o ile rozumiesz, że dostajesz oszacowanie z niepewnością, nie wyrok. Pułapka: zbyt mała liczba prób daje wynik, który wygląda dokładnie, a jest przypadkiem. 100 prób może dać π ≈ 3,08 albo 3,24 — obie „blisko", żadna wiarygodna. Zawsze pytaj: ile prób i jaki jest rozrzut? Druga subtelność: jakość generatora losowego. Zły generator (z ukrytym wzorcem) skrzywi wyniki — dlatego symulacje naukowe używają starannie testowanych generatorów, a nie byle jakich. „Losowe" w komputerze to osobny, niełatwy temat (liczby są zwykle pseudolosowe — deterministyczny wzór udający przypadek).
🌍 Powiązania
Monte Carlo jest wszędzie tam, gdzie problem jest za trudny na wzór: fizyka jądrowa (przenikanie neutronów — pierwsze zastosowanie, projekt Manhattan), finanse (wycena opcji, ryzyko portfela — losowe scenariusze rynku), prognozy pogody (zespoły symulacji z losowo zaburzonymi warunkami), grafika (śledzenie promieni światła — ray tracing losuje drogi fotonów), sztuczna inteligencja (algorytm Monte Carlo Tree Search grał w Go lepiej niż ludzie), a nawet szacowanie, ilu jest w populacji ludzi o rzadkiej cesze. Wspólny mianownik: gdy przestrzeń możliwości jest zbyt wielka, by ją przejrzeć (pamiętasz $2^n$ z plecaka? 8.2), losowe próbkowanie daje odpowiedź „wystarczająco dobrą" — to heurystyka z 1.6 w matematycznym wydaniu.
🛠️ Teraz Ty
Bez komputera: wyjaśnij, czemu warunek trafienia w ćwiartkę koła to $x^2 + y^2 \le 1$ (jaka to odległość?). Oszacuj, ile prób potrzeba na dokładność π do 3 cyfr (skoro cyfra kosztuje ×100). Z komputerem: zaimplementuj szacuj_pi, uruchom dla 100, 10 000, 1 000 000 prób — kilka razy każde. Zobacz, jak wynik się stabilizuje z liczbą prób i jak skacze przy małej. Bonus: policz Monte Carlo pole koła o promieniu 2 (test: powinno wyjść ~$4\pi \approx 12{,}57$).
📐 Definicje tej lekcji
- Metoda Monte Carlo — szacowanie przez wielokrotne losowe próbkowanie; pole = (trafienia/próby) × pole obszaru losowania.
- Zbieżność Monte Carlo — dokładność rośnie jak $\sqrt{\text{prób}}$: jedna cyfra więcej = stukrotnie więcej losowań.
📌 Najważniejsze w pigułce
- „Rzuć losowo i policz ułamek trafień" mierzy pole/całkę/prawdopodobieństwo bez wzoru — trzeba tylko otoczyć figurę i umieć sprawdzić przynależność.
- π ≈ 4 × (punkty w ćwiartce koła / wszystkie); dziesięć linijek, żadnego wzoru na π.
- Uniwersalne, ale wolne (cyfra = ×100 prób) i losowe (oszacowanie z niepewnością) — błyszczy, gdy nie ma alternatywy.
🎒 Zadania
- Rzucono 1000 punktów w kwadrat [0,1]², z czego 785 trafiło w ćwiartkę koła. Jakie π to daje? Ile cyfr można temu ufać?
Wskazówka i odpowiedź
$\pi \approx 4 \times 785/1000 = 3{,}14$ — wygląda świetnie! Ale przy 1000 prób typowy rozrzut to ±0,05–0,1, więc ufać można najwyżej jednej cyfrze po przecinku (3,1); zgodność drugiej i trzeciej cyfry z prawdziwym π to tu szczęście, nie dokładność. Kolejne uruchomienie mogłoby dać 3,10 albo 3,18. Lekcja: pojedynczy „ładny" wynik Monte Carlo nie znaczy dokładności — liczy się liczba prób i rozrzut między uruchomieniami.
- Chcesz policzyć Monte Carlo pole trójkąta o wierzchołkach (0,0), (4,0), (0,3). Jaki prostokąt losowania obierzesz, jak sprawdzisz trafienie, i jakiego wyniku oczekujesz (znasz wzór na pole trójkąta — to test poprawności)?
Wskazówka i odpowiedź
Prostokąt $[0,4] \times [0,3]$, pole 12. Trafienie: punkt w trójkącie — test z 10.2 (trzy orientacje) albo prościej dla tego trójkąta prostokątnego: $x \ge 0$, $y \ge 0$, $\frac{x}{4} + \frac{y}{3} \le 1$. Oczekiwany wynik: pole trójkąta $= \frac{1}{2} \cdot 4 \cdot 3 = 6$, więc ~połowa punktów powinna trafić, a Monte Carlo da ~6. Puenta metodyczna: gdy znasz wynik wzorem, użyj go do sprawdzenia implementacji Monte Carlo — a potem puść ją na figurach, których wzoru nie znasz. Tak testuje się metody numeryczne: najpierw na tym, co umiesz sprawdzić.
- Monte Carlo można policzyć nie tylko pole, ale i prawdopodobieństwo. Jak oszacować szansę, że rzucając trzema kostkami, wyrzucisz sumę dokładnie 10? Opisz eksperyment losowy.
Wskazówka i odpowiedź
Symuluj: wielokrotnie losuj trzy liczby 1–6 (random.randint(1,6)), policz, w jakim ułamku prób suma = 10. Dla miliona rzutów ułamek zbiegnie do prawdziwego prawdopodobieństwa (dokładnie $\frac{27}{216} = 0{,}125$). To Monte Carlo w wersji „prawdopodobieństwo = ułamek sukcesów w wielu próbach" — i dokładnie tak szacuje się szanse w sytuacjach zbyt złożonych na rachunek (gry, kolejki, awarie systemów). Dorzuć więcej kostek albo dziwniejsze reguły, a rachunek stanie się koszmarny — Monte Carlo nawet nie mrugnie. Uniwersalność kontra dokładność, po raz ostatni w tym dziale.
🔍 Sprawdź, czy umiesz
- Oszacować π lub pole figury metodą trafienia/próby i uzasadnić wzór.
- Wyjaśnić, czemu dokładność rośnie z liczbą prób i jak wolno (cyfra = ×100).
- Wskazać, kiedy Monte Carlo jest właściwym wyborem (brak wzoru, wiele wymiarów), a kiedy przesadą.