Ruchy Browna — symulacje losowe
🎯 Po co Ci to?
Monte Carlo (10.3) losował punkty, by coś zmierzyć. Teraz losowość posłuży do czegoś innego — do naśladowania rzeczywistości, która sama jest losowa. Pyłek kwiatu tańczący na wodzie pod uderzeniami niewidzialnych cząsteczek, cena akcji skacząca w górę i w dół, wędrówka zapachu w powietrzu, a nawet ścieżka, jaką pokonuje białko w komórce — wszystko to są błądzenia losowe, i wszystkie symuluje się tym samym, uderzająco prostym algorytmem. To ostatnia jednostka algorytmiki i piękna klamra: łączy losowość (10.3), symulację (nawiązanie do sterowania z 3.7) i modelowanie świata (1.1) w jeden elegancki obraz — kropkę, która robi losowe kroki.
✅ Czego się nauczysz
Po tej jednostce potrafisz:
- zasymulować błądzenie losowe (ruchy Browna) w jednym i dwóch wymiarach;
- wyjaśnić, co takie symulacje modelują i jaki jest ich związek z Monte Carlo;
- opisać zaskakującą regułę: średnie oddalenie błądzenia rośnie jak pierwiastek z liczby kroków.
🔁 Przypomnij sobie
Z 10.3: random i próbkowanie losowe, zbieżność jak $\sqrt{}$; z 3.7: pętla symulacji (krok po kroku); z 8.5: sumowanie kroków (tu — losowych).
📘 Wyjaśnienie
📐 DEFINICJA — błądzenie losowe (ruchy Browna): ścieżka powstająca przez wielokrotne wykonanie losowego kroku — w każdej chwili pozycja zmienia się o przypadkowo wybrany przyrost.
Po ludzku: pijany wędrowiec, który przy każdym kroku losowo wybiera kierunek. Czym NIE jest: chaosem bez reguł. Błądzenie losowe ma statystyczne prawidłowości (jak daleko zwykle zawędruje, jaki kształt ma chmura możliwych pozycji) — nieprzewidywalne w szczególe, przewidywalne w masie.
Błądzenie w jednym wymiarze. Najprostszy model: stoisz na osi liczbowej w zerze; przy każdym kroku rzucasz monetą — orzeł: krok w prawo (+1), reszka: w lewo (−1). Gdzie będziesz po 100 krokach?
import random
def bladzenie_1d(kroki):
pozycja = 0
sciezka = [0]
for _ in range(kroki):
pozycja += random.choice([-1, 1]) # losowy krok: lewo albo prawo
sciezka.append(pozycja)
return sciezka
Intuicja podpowiada „skoro losowo, to zostanę blisko zera" — i myli się subtelnie. Owszem, średnia pozycja po wielu próbach to zero (lewo i prawo się równoważą). Ale typowe oddalenie od zera rośnie — i to według zdumiewającej reguły: po $n$ krokach jesteś średnio oddalony o $\sqrt{n}$. Po 100 krokach — około 10 od startu; po 10 000 — około 100. Znajomy pierwiastek z Monte Carlo (10.3)! Nie zostajesz w miejscu, ale i nie oddalasz się liniowo — dryfujesz coraz dalej, coraz wolniej.
Błądzenie w dwóch wymiarach to dokładnie to, co Robert Brown zobaczył pod mikroskopem w 1827 roku: pyłek na wodzie drgający w losowych kierunkach (bombardowany przez cząsteczki wody, których nie widział). Krok to losowy ruch na płaszczyźnie:
def bladzenie_2d(kroki):
x = y = 0
sciezka = [(0, 0)]
for _ in range(kroki):
dx, dy = random.choice([(-1,0),(1,0),(0,-1),(0,1)]) # góra/dół/lewo/prawo
x, y = x + dx, y + dy
sciezka.append((x, y))
return sciezka
Ścieżka jest piękna w swojej pogmatwanej losowości — i to nie ozdoba. Einstein w 1905 roku (ten sam rok co teoria względności!) udowodnił matematycznie, że ruchy Browna wynikają z uderzeń niewidzialnych cząsteczek — i tym samym dowiódł istnienia atomów, wtedy jeszcze kwestionowanego. Prosty algorytm „kropka robi losowe kroki" opisuje jeden z fundamentalnych mechanizmów fizyki.
Związek z Monte Carlo. Obie metody karmią się losowością, ale robią co innego: Monte Carlo (10.3) losuje, by zmierzyć stałą wielkość (pole, π); błądzenie losowe symuluje losowy proces, by zobaczyć, jak się rozwija (gdzie dotrze cząstka, jak rozłoży się cena). Często się łączą: puść tysiąc błądzeń (symulacja) i policz statystykę końcowych pozycji (Monte Carlo) — tak wycenia się opcje finansowe (tysiące losowych scenariuszy ceny akcji) i modeluje dyfuzję (jak zapach czy zanieczyszczenie rozchodzi się w przestrzeni).
💭 Pomyśl: Puszczasz 1000 niezależnych błądzeń 1D, każde na 100 kroków, i patrzysz na rozkład końcowych pozycji. Jak będzie wyglądał — skupiony w zerze, równomiernie rozłożony, czy jakoś inaczej?
Sprawdź odpowiedź
Powstanie dzwon (rozkład zbliżony do normalnego) wyśrodkowany w zerze: najwięcej ścieżek skończy blisko startu, coraz mniej daleko, symetrycznie w obie strony, z typowym rozrzutem ~$\sqrt{100} = 10$. To nie przypadek — suma wielu niezależnych losowych kroków zawsze dąży do rozkładu normalnego (to słynne twierdzenie graniczne, jeden z filarów statystyki). Dlatego dzwonowaty rozkład pojawia się wszędzie w przyrodzie: wzrost ludzi, błędy pomiarów, ruchy cen — wszędzie tam, gdzie wynik jest sumą wielu małych losowych wpływów. Błądzenie losowe to nie tylko fizyka pyłku — to matematyczny szkielet losowości w całym świecie.
⚠️ Uwaga, pułapka
Kusi, by z pojedynczej ścieżki błądzenia wyciągać wnioski — „akcja rosła pięć dni z rzędu, więc jest w trendzie wzrostowym!". Ale w czystym błądzeniu losowym takie serie są zwykłym przypadkiem: pięć wzrostów pod rząd zdarza się losowo co jakiś czas, nie znacząc nic o przyszłości (moneta nie „pamięta" poprzednich rzutów). Ludzie notorycznie widzą wzorce w losowości (to poznawcze złudzenie, „hazardzista wierzy w passę"). Symulacja uczy pokory: uruchom błądzenie kilka razy, zobacz, jak różne i „trendowe" bywają czysto losowe ścieżki — a potem bądź sceptyczny wobec „trendów" w prawdziwych, zaszumionych danych. To ostatnia, i może najważniejsza, lekcja krytycznego myślenia w tej części.
🌍 Powiązania
Błądzenia losowe modelują zdumiewająco szeroki świat: dyfuzję (rozchodzenie się zapachu, ciepła, zanieczyszczeń), ceny akcji i kursy walut (podstawa modeli finansowych — cena jako błądzenie z lekkim dryfem), ruch zwierząt szukających pokarmu, rozprzestrzenianie się epidemii, a nawet algorytm PageRank (losowy internauta błądzący po odnośnikach — graf z 9.5!). W informatyce błądzenia napędzają algorytmy losowe, próbkowanie w uczeniu maszynowym i generowanie proceduralnych światów w grach. Wszędzie ta sama idea: prosty losowy krok, powtarzany, tworzy złożone i realistyczne zachowanie — losowość jako budulec, nie tylko szum.
🛠️ Teraz Ty
Bez komputera: rzuć monetą 10 razy, notując pozycję (+1/−1) — jak daleko od zera skończyłeś? Powtórz kilka razy; czy zawsze podobnie? Z komputerem: zaimplementuj bladzenie_1d; puść 1000 błądzeń po 100 kroków, policz średnie oddalenie końcowej pozycji od zera i porównaj z $\sqrt{100} = 10$. Bonus: zaimplementuj bladzenie_2d, policz, jak daleko od startu jest cząstka po 1000 kroków (odległość euklidesowa — Pitagoras!), i porównaj z $\sqrt{1000} \approx 32$.
📐 Definicje tej lekcji
- Błądzenie losowe (ruchy Browna) — ścieżka z wielokrotnego losowego kroku; nieprzewidywalna w szczególe, statystycznie prawidłowa.
- Reguła pierwiastka — typowe oddalenie od startu po $n$ krokach rośnie jak $\sqrt{n}$ (nie liniowo, nie zero).
📌 Najważniejsze w pigułce
- Błądzenie losowe = powtarzany losowy krok; średnia pozycja zero, ale typowe oddalenie rośnie jak $\sqrt{n}$.
- Monte Carlo mierzy losowaniem, błądzenie symuluje losowy proces — często łączone (tysiąc scenariuszy + statystyka).
- Suma wielu losowych kroków daje rozkład dzwonowy; „trendy" w czystej losowości to złudzenie — symulacja uczy sceptycyzmu.
🎒 Zadania
- Po ilu krokach błądzenia 1D typowe oddalenie od startu wyniesie około 30? A około 100?
Wskazówka i odpowiedź
Oddalenie ~$\sqrt{n}$, więc $\sqrt{n} = 30 \Rightarrow n = 900$; $\sqrt{n} = 100 \Rightarrow n = 10,000$. Zwróć uwagę: potrojenie oddalenia (30→100, ~×3,3) wymaga jedenastokrotnie więcej kroków. Błądzenie oddala się coraz wolniej — dlatego cząstka dyfundująca potrzebuje bardzo długiego czasu, by przebyć duży dystans (zapach z kuchni dochodzi do pokoju głównie przeciągiem, nie samą dyfuzją — czysta dyfuzja byłaby rozpaczliwie wolna).
- Wyjaśnij różnicę między błądzeniem losowym a Monte Carlo z 10.3 — obie używają
random, więc czym się różnią w celu i sposobie?
Wskazówka i odpowiedź
Cel: Monte Carlo mierzy ustaloną wielkość (π, pole — coś, co ma jedną prawdziwą wartość), błądzenie symuluje proces rozwijający się w czasie (gdzie dotrze cząstka — coś, co samo jest losowe). Sposób: Monte Carlo losuje niezależne punkty i uśrednia; błądzenie robi zależny ciąg kroków (każda pozycja bazuje na poprzedniej). Wspólne: obie zamieniają problem trudny analitycznie na „losuj dużo i patrz na statystykę". Łączy się je, gdy chcesz zmierzyć coś o losowym procesie: puść tysiąc błądzeń (symulacja) i policz średnią końcową pozycję (Monte Carlo).
- Model finansowy przedstawia cenę akcji jako błądzenie losowe z małym dodatnim dryfem (każdy krok: losowo ±1, plus stałe +0,1). Co ten dryf zmienia w długoterminowym zachowaniu i czemu mimo to pojedynczy dzień jest nieprzewidywalny?
Wskazówka i odpowiedź
Dryf +0,1 na krok sprawia, że w długim terminie cena rośnie liniowo (po $n$ krokach dryf daje $+0{,}1n$), podczas gdy losowa część rośnie tylko jak $\sqrt{n}$ — więc na długą metę trend wygrywa z szumem. Ale w pojedynczym kroku losowe ±1 przeważa nad dryfem 0,1 dziesięciokrotnie — stąd dzienna nieprzewidywalność mimo długoterminowego wzrostu. To dokładnie model, na którym opiera się teza „inwestuj długoterminowo": krótkoterminowo dominuje losowość (nie da się przewidzieć jutra), długoterminowo — dryf (rynek historycznie rośnie). Prosty algorytm „losowy krok + mały dryf" ujmuje głęboką prawdę o inwestowaniu — i domyka tę część książki obserwacją, że algorytmika sięga aż tak daleko.
🔍 Sprawdź, czy umiesz
- Zasymulować błądzenie losowe 1D i 2D i opisać, co modeluje.
- Podać regułę $\sqrt{n}$ dla oddalenia i policzyć z niej liczbę kroków.
- Odróżnić Monte Carlo (pomiar) od błądzenia (symulacja) i wyjaśnić złudzenie „trendów" w losowości.
CZĘŚĆ III — Dane i twórczość cyfrowa