Zagadnienia

1. Wprowadzenie

1.1. Od autora

Jest kilka ważnych powodów, dla których warto się zająć symulacjami stochastycznymi:

  • Symulacje stochastyczne są prostym sposobem badania zjawisk losowych.

  • Ściśle związane z symulacjami stochastycznymi są metody obliczeniowe nazywane ,,Monte Carlo” (MC). Polegają one na wykorzystaniu ,,sztucznie generowanej” losowości w celu rozwiązania zadań deterministycznych. Metody MC są proste i skuteczne. Dla pewnych problemów MC jest jedynym dostępnym narzędziem obliczeniowym. Dla innych problemów MC jest co prawda mniej efektywne od metod numerycznych, ale za to dużo łatwiejsze!

  • W moim przekonaniu symulacje stochastyczne są wspaniałą pomocą przy nauce rachunku prawdopodobieństwa. Pozwalają lepiej ,,zrozumieć losowość”.

  • Symulacje stochastyczne są dostępne dla każdego. W szczególności, ,,otoczenie” R, które stanowi naprawdę potężne narzędzie, jest rozpowszechniane za darmo!

Jest wreszcie powód najważniejszy:

  • Symulacje stochastyczne są świetną zabawą!

Literatura na temat symulacji stochastycznych jest bardzo obszerna. Godna polecenia jest książka Zielińskiego i Wieczorkowskiego [23], poświęcona w całości generatorom zmiennych losowych. Przedstawia ona bardziej szczegółowo zagadnienia, odpowiadające Rozdziałom 2–4 niniejszego skryptu i zawiera materiał, który zdecydowałem się pominąć: wytwarzanie ,,liczb losowych” o rozkładzie jednostajnym i testowanie generatorów. Podobne zagadnienia są przedstawione trochę w innym stylu w monografii Ripleya [18], która również zawiera wstęp do metod Monte Carlo. Zaawansowane wykłady można znależć w nowoczesnych monografiach Asmussena i Glynna [2], Liu [15], Roberta i Caselli [19]. Pierwsza z nich jest zorientowana bardziej na wyniki teoretyczne, zaś druga bardziej na zastosowania. Świetnym wstępem do metod MCMC są prace Geyera [7] i [8]. Teoria łańcuchów Markowa z uwzględnieniem zagadnień istotnych dla MCMC jest przystępnie przedstawiona w książce Brémaud [4]. Podstawy teoretycznej analizy zrandomizowanych algorytmów (tematy poruszane w Rozdziale 15 skryptu) są znakomicie przedstawione w pracach Jerruma i Sinclaira [11] oraz Jerruma [12].

1.2. Przykłady

Zacznę od kilku przykładów zadań obliczeniowych, które można rozwiązywać symulując losowość. Wybrałem przykłady najprostsze, do zrozumienia których wystarcza zdrowy rozsądek i nie potrzeba wielkiej wiedzy.

Przykład 1.1 (Igła Buffona, 1777)

Podłoga jest nieskończoną płaszczyzną, podzieloną równoległymi prostymi na ,,deski” szerokości d. Rzucamy ,,losowo” igłę o długości l. Elementarne rozważania prowadzą do wniosku, że

p=Pigła przetnie którąś z prostych=2lπd.

Buffon zauważył, że tę prostą obserwację można wykorzystać do…obliczania liczby π metodą ,,statystyczną”. Powtórzmy nasze doświadczenie niezależnie n razy. Oczywiście, mamy do czynienia ze schematem Bernoulliego, w którym ,,sukcesem” jest przecięcie prostej. Niech

pn=liczba sukcesówliczba doświadczeń=1ni=1nIi-tym doświadczeniu igła przecięła prostą

Wielkość pn jest empirycznym odpowiednikiem prawdopodobieństwa p i powinna przybliżać to prawdopodobieństwo, przynajmniej dla dużych n. W takim razie, możemy za przybliżenie liczby π przyjąć

πn=2lpnd.

Statystyk powiedziałby, że zmienna losowa πn jest estymatorem liczby π. To wszystko jest bardzo proste, ale parę kwestii wymaga uściślenia. Jak duża ma być liczba powtórzeń, żeby przybliżenie było odpowiednio dokładne? Ale przecież mamy do czynienia ze ,,ślepym losem”! Czyż pech nie może sprawić, że mimo dużej liczby doświadczeń przybliżenie jest kiepskie? Czy odpowiednio dobierając l i d możemy poprawić dokładność? A może da się zaprojektować lepsze doświadczenie?

Przykład 1.2 (Sieć zawodnych połączeń)

Niech V,E będzie grafem skierowanym spójnym. Krawędzie reprezentują ,,połączenia” pomiędzy wierzchołkami. Krawędź eE, niezależnie od pozostałych, ulega awarii ze znanym prawdopodobieństwem pe. W rezultacie powstaje losowy podzbiór CE sprawnych połączeń o rozkładzie prawdopodobieństwa

PC=eCpeeC1-pe.

Jest jasne, jak można symulować to zjawisko: dla każdej krawędzi e ,,losujemy” zmienną Ue o rozkładzie równomiernym na 0,1 i przyjmujemy

eC jeśli Uepe;eC jeśli Ue>pe.

Powiedzmy, że interesuje nas możliwość znalezienia ścieżki (ciągu krawędzi) wiodącej z ustalonego wierzchołka v0 do innego wierzchołka v1. Niech

θ=P w zbiorze C istnieje ścieżka z v0 do v1.

Generujemy niezależnie n kopii C1,,Cn zbioru C. Nieznane prawdopodobieństwo θ przybliżamy przez odpowiednik próbkowy:

θn=1ni=1nI w zbiorze Ci istnieje ścieżka z v0 do v1.
Przykład 1.3 (Skomplikowana całka)

Załóżmy, że X1,,Xm są niezależnymi zmiennymi losowymi o jednakowym rozkładzie N0,1. Niech

R=maxk=1mi=1kXi-mink=1mi=1kXi.

Chcemy obliczyć dystrybuantę zmiennej losowej R,

Hx=PRx.

Zauważmy, że z definicji,

Hx=Ωm2π-m/2exp-12i=1mxi2dx1dxm,

gdzie Ωm=x1,,xm:maxk=1mi=1kxi-mink=1mi=1kxi. W zasadzie, jest to więc zadanie obliczenia całki. Jednak skomplikowany kształt wielowymiarowego zbioru Ωm powoduje, że zastosowanie standardowych metod numerycznych jest utrudnione. Z kolei symulowanie zmiennej losowej R jest bardzo łatwe, wprost z definicji. Można wygenerować wiele niezależnych zmiennych R1,,Rn o rozkładzie takim samym jak R. Wystarczy teraz policzyć ile spośród tych zmiennych jest x:

Hnx=1ni=1nIRix.

Schemat symulacyjnego obliczania prawdopodobieństwa jest taki sam jak w dwu poprzednich przykładach. Podobnie zresztą jak w tamtych przykładach, podstawowy algorytm można znacznie ulepszać, ale dyskusję na ten temat odłóżmy na póżniej.

Przykład 1.4 (Funkcja harmoniczna)

Następujące zadanie jest dyskretnym odpowiednikiem sławnego zagadnienia Dirichleta. Niech D będzie podzbiorem kraty całkowitoliczbowej Z2. Oznaczmy przez D brzeg tego zbioru, zdefiniowany następująco:

x,yDx,yD i x+1,yD lub x-1,yD lub x,y+1D lub x,y-1D.

Powiemy, że u:DDR jest funkcją harmoniczną, jeśli dla każdego punktu x,yD,

ux,y=14x,yx,yux,y,

gdzie sumowanie rozciąga się na 4 punkty x,y sąsiadujące z x,y, to znaczy x,y=x+1,y,x-1,y,x,y+1,x,y-1.

Mamy daną funkcję na brzegu: u¯:DR. Zadanie polega na skonstruowaniu jej rozszerzenia harmonicznego, to znaczy takiej funkcji harmonicznej u:DDR, że ux,y=u¯x,y dla x,yD.

Wyobraźmy sobie błądzenie losowe po kracie, startujące w punkcie x,yD. Formalnie jest to ciąg losowych punktów określonych następująco:

X0,Y0=x,y;Xk+1,Yk+1=Xk,Yk+ξk+1,ηk+1,

gdzie ξk,ηk są niezależnymi wektorami losowymi o jednakowym rozkładzie prawdopodobieństwa:

P((ξk,ηk)=(0,1))=P((ξk,ηk)=(0,-1))=P((ξk,ηk)=(1,0))=P((ξk,ηk)=(-1,0))=14.

Błądzimy tak długo, aż natrafimy na brzeg obszaru. Formalnie, określamy moment zatrzymania T=mink:Xk,YkD. Łatwo zauważyć, że funkcja

u(x,y):=E[u¯(XT,YT)|(X0,Y0)=(x,y)]

jest rozwiązaniem zagadnienia! Istotnie, ze wzoru na prawdopodobieństwo całkowite wynika, że

u(x,y)=14x,yx,yE[u¯(XT,YT)|(X1,Y1)=(x,y)].

Wystarczy teraz spostrzeżenie, że rozkład zmiennej losowej uXT,YT pod warunkiem X1,Y1=x,y jest taki sam jak pod warunkiem X0,Y0=x,y, bo błądzenie ,,rozpoczyna się na nowo”.

Algorytm Monte Carlo obliczania ux,y oparty na powyższym spostrzeżeniu został wynaleziony przez von Neumanna i wygląda następująco:

  • Powtórz wielokrotnie, powiedzmy n razy, niezależnie doświadczenie:

  • ,,błądź startując startując z x,y aż do brzegu; oblicz u¯XT,YT

  • Uśrednij wyniki n doświadczeń.

Dla bardziej formalnego zapisu algorytmu będę się posługiwał pseudo-kodem, który wydaje się zrozumiały bez dodatkowych objaśnień:

{ 'Gen' oznacza 'Generuj' }
U:=0;
for j=1 to n
  begin
  X,Y:=x,y;
  while X,YD
    begin
    Gen ξ,ηU0,1,0,-1,1,0,-1,0; [ rozkład jednostajny na zbiorze 4-punktowym ]
    X,Y:=X,Y+ξ,η
    end
    U:=U+u¯X,Y
  end
U:=U/n
Przykład 1.5 (Problem ,,plecakowy”)

Załóżmy, że a=a1,,am jest wektorem o współrzędnych naturalnych (ai1,2,) i b1,2,. Rozważamy wektory x=x1,,xm o współrzędnych zero-jedynkowych (xi0,1). Interesuje nas liczba rozwiązań nierówności

xa=i=1mxiaib,

a więc liczność Xb zbioru Xb=x0,1m:xab. Czytelnik domyśla się z pewnością, skąd nazwa problemu. Dokładne obliczenie liczby rozwiązań jest trudne. Można spróbować zastosować prostą metodę Monte Carlo. Jeśli zmienna losowa X ma rozkład jednostajny na przestrzeni 0,1m, to PXXb=Xb/2m. Wystarczy zatem oszacować to prawdopodobieństwo tak jak w trzech pierwszych przykładach w tym rozdziale. Generowanie zmiennej losowej o rozkłdzie jednostajnym na przestrzeni 0,1m sprowadza się do przeprowadzenia m rzutów monetą i jest dziecinnie proste. Na czym więc polega problem? Otóż szacowane prawdopodobieństwo może być astronomicznie małe. Dla, powiedzmy a=1,,1 i b=m/3, to prawdopodobieństwo jest e-m/18 (proszę się zastanowić jak uzasadnić tę nierówność). Przeprowadzanie ciągu doświadczeń Bernoulliego z takim prawdopodobieństwem sukcesu jest bardzo nieefektywne – na pierwszy sukces oczekiwać będziemy średnio em/18, co dla dużych m jest po prostu katastrofalne.

Metoda, którą naszkicuję należy do rodziny algorytmów MCMC (Monte Carlo opartych na łańcuchach Markowa). Algorytm jest raczej skomplikowany, ale o ile mi wiadomo jest najefektywniejszym ze znanych sposobów rozwiązania zadania. Bez straty ogólności możemy przyjąć, że a1am. Niech b0=0 oraz bj=minb,i=1jai. Rozważmy ciąg zadań plecakowych ze zmniejszającą się prawą stroną nierówności, równą kolejno b=bm,bm-1,,b1,b0=0. Niech więc Xbj=x0,1m:xabj. Zachodzi następujący ,,wzór teleskopowy”:

Xb=Xbm=XbmXbm-1Xbm-1Xbm-2Xb1Xb0Xb0.

Oczywiście, |X(b0)=1|, a więc możemy uznać, że zadanie sprowadza się do obliczenia ilorazów Xbj-1/Xbj (pomijamy w tym miejscu subtelności związane z dokładnością obliczeń). Gdybyśmy umieli efektywnie generować zmienne losowe o rozkładzie jednostajnym na przestrzeni Xbj, to moglibyśmy postępować w dobrze już znany sposób: liczyć ,,sukcesy” polegające na wpadnięciu w zbiór Xbj-1Xbj. Rzecz jasna, możemy losować z rozkładu jednostajnego na kostce 0,1m i eliminować punkty poza zbiorem Xbj, ale w ten sposób wpadlibyśmy w pułapkę, od której właśnie uciekamy: co zrobić jeśli przez sito eliminacji przechodzi jedno na em/18 losowań?

Opiszemy pewne wyjście, polegające na zastosowaniu błądzenia losowego po zbiorze Xbj. Dla ustalenia uwagi przyjmijmy j=m, czyli bj=b. Losowy ciąg punktów X0,X1,,Xn, generujemy rekurencyjnie w taki sposób:

X0:=0;
for n=0 to 
  begin
  X:=Xn; [ gdzie X=X1,,Xm
  Gen IU1,,m; [ losujemy indeks do zmiany ]
  Y:=XYI=1-XI;
  if Yab then Xn+1:=Y
       else Xn+1:=X
  end
end

Zaczynamy błądzenie w punkcie 0=0,,0. Jeśli w chwili n jesteśmy w punkcie X, to próbujemy przejść do nowego punktu Y, utworzonego przez zmianę jednej, losowo wybranej współrzędnej punktu X (0 zamieniamy na 1 lub z 1 na 0; pozostałe współrzędne zostawiamy bez zmian). Jeśli ,,proponowany punkt Y nie wypadł” z rozważanej przestrzeni Xb, to przechodzimy do punktu Y. W przeciwnym wypadku stoimy w punkcie X.

Rzecz jasna, generowane w ten sposób zmienne losowe Xn nie mają dokładnie rozkładu jednostajnego ani tym bardziej nie są niezależne. Jednak dla dużych n zmienna Xn ma w przybliżeniu rozkład jednostajny:

PXn=x1Xbn

dla każdego xXb. Co więcej, z prawdopodobieństwem 1 jest prawdą, że

1ni=1nIXi=x1Xbn.

Innymi słowy, ciąg Xn spełnia prawo wielkich liczb – i może być użyty do szacowania liczności podzbiorów przestrzeni Xb zamiast trudnego do symulowania ciągu niezależnych zmiennych o rozkładzie jednostajnym.

Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.

Projekt współfinansowany przez Ministerstwo Nauki i Szkolnictwa Wyższego i przez Uniwersytet Warszawski.