Metóda Monte Carlo

20. apríla 2017, Tibor Menyhért, fyzika programovanie

Náhoda hrá vo vede významnú úlohu. Mnohé dôležité objavy boli objavené na základe náhodných okolností. Niektoré sú možno iba mytologizáciou skutočnosti napríklad objav Archimedovho zákona a údajný beh nahého Archimeda Syrakúzami vykrikujúceho Heuréka! alebo Pád jablka na hlavu Newtona. Mnohé iné sa určite stali napríklad Flemingov objav penicilínu. Vo všetkých týchto prípadoch však popri náhode bolo dôležité, že príslušný vedec mal adekvátne vedomosti a tvorivú myseľ a tak hoci predtým tisíckam ľudí padli jablká či hrušky na hlavu, až Newton si dal veci do súvisu a prišiel na to, že rovnaká sila udržiava planéty okolo Slnka a Mesiac okolo Zeme, aká pôsobí na padajúce jablko, stovky vedcov mali neumyté misky a iba ich umyli, pričom si nevšimli žiadnu anomáliu až Fleming aj pri umývaní misiek premýšľal. Keď môže byť náhoda alebo omyl čas od času príčinou pokroku, stojí za úvahu, či neskúmať niektoré prírodné javy pomocou využitia náhody.

Pravdepodobne ste sa stretli s tým, že programovacie jazyky zvyknú mať funkciu, ktorá generuje pseudonáhodné čísla.  Dali by sa takto generované čísla využiť pri skúmaní prírodných javov? Podobnú otázku si asi prví položili  Stanisław Marcin Ulam a John von Neumann, ktorí sa podieľali na konštrukcii americkej atómovej bomby. V Los Alamos skúmali správanie sa neutrónov, skúmali napríklad koľko neutrónov prejde rôznymi druhmi materiálov. V tom čase vedci nevedeli navrhnúť adekvátnu teóriu, ktorá by predpovedala, ako sa budú neutróny správať. Využitím metódy Monte Carlo,  pomocou vtedajších z dnešného pohľadu primitívnych a pomalých počítačov problém elegantne vyriešili.

Predchodcom metódy Monte Carlo bola Buffonova ihla – pomocou hádzania ihly na linajkovaný papier sa experimentálne dá odhadnúť číslo \pi. Keď vzdialenosť medzi riadkami je rovnako veľká ako dĺžka ihly, dá sa matematicky dokázať, že pravdepodobnosť toho, že ihla pretne linajku je \cfrac{2}{\pi}. Ak ihlu hodíme npríklad tisíckrát a zaznamenáme, koľkokrát pretla linajku, môžeme približne odhadnúť hodnotu čísla \pi.

Odhad čísla \pi metódou Monte Carlo

Nakreslime kruh s priemerom r. Generujme náhodné čísla x a y tak, aby boli z intervalu -r a r. Nakreslime modrý bod, ak súradnice vygenerovaného bodu budú mimo kruh a červený bod, ak budú v kruhu. Keďže obsah kruhu je S_1=\pi\cdot r^2 a obsah štvorca je S_2=(2\cdot r)^2, pravdepodobnosť toho, že vygenerovaný bod padol do kruhu bude p=\cfrac{S_1}{S_2}, potom p=\cfrac{\pi \cdot r^2}{4\cdot r^2} a teda

p=\cfrac{\pi}{4}

\pi=4\cdot p

Ak urobíme dostatočne veľký počet pokusov, to čo nameriame sa veľmi blíži pravdepodobnosti, takže možno číslo \pi odhadnúť ako pomer počtu bodov, ktoré boli v kruhu, ku celkovému vygenerovanému počtu bodov.

\pi\approx\cfrac{4k}{n}, kde k – je počet bodov v kruhu a n – je počet všetkých vygenerovaných bodov.

 

V programovacom jazyku Imagine som naprogramoval odhad Ludolfovho čísla Metódou Monte Carlo. Vznikajú pritom celkom zaujímavé priam umelecké obrázky (keď kliknete na obrázok, zväčší sa):

montecarlo

V tomto behu programu bolo vygenerovaných 100000 bodov a Ludolfovo číslo bolo odhadnuté na 3.14716, čo je celkom dobrý odhad, keďže jeho skutočná hodnota na prvých piatich desatinných miestach je 3.14159.

Takto možno veľmi rýchlo odhadnúť plochu alebo objem ľubovoľných geometrických útvarov, ktoré inými matematickými metódami síce možno zistiť omnoho presnejšie, ale často s natoľko zložitým matematickým aparátom, že je pohodlnejšie použiť metódu Monte Carlo, ak nepotrebujeme veľmi presný výsledok. Chyba výsledku z n pokusov je úmerná \cfrac{1}{\sqrt{n}}. Čiže ak chceme zdesaťnásobiť presnosť odhadu, musíme vykonať 100 krát viac pokusov.