Informatyka w edukacji 2006 Generowanie (pseudo) losowych ciągów liczb w teorii i praktyce. 84093450142545622932952550 62333649063322374221339383200520 13051542540106038262040964141444280609841341 688043663115781403736587971012513061739642941351025559816 28846242438015966483468470239132977461620682984081511205830166649912320440502 6434500161961626150157400649360832116672253770297615641723681902262501140369990943 3876257285351857114482185146700101412664995098196625537978457311708168955289967766836073 03123871358907426264037526740359423471326872823112296799722240208724872082461355344583813830541 929251035384050319427202250457784323437028963874134857267222492716656623301694705291398171556842336848829 616112704262796650140127218725780829663059997714321977596621816867211736335136285599238638993931744306815 7040604052603885774744979748213302935111234449541412476659818432000553224969534119093177232613332022740219922139519 3061458722481175814141536532842834077604551174506215949108631610455435844015724361123399219337738969562566241627417527823319674 0888274625390811203919801210954095274862577511737279653151095506683232507330093613936722856594493228924426130763552457198624473821212898700218 9053565222238699642035349743191557397194694244036170184243067745842675081366342910157631484369132859228508103043177819827137841216301318209269103456985442345451311 Liczby losowe w informatyce 1 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Jako losowy często rozumiemy efekt który jest nieprzewidywalny, jednak chaos deterministyczny jest nieprzewidywalny a jednak jest deterministyczny Losowość to w rzeczywistości pojęcie równie abstrakcyjne jak sigma-algebra czy topologia, nie da się go rozważać bez teorii miary Z abstrakcyjnego pojęcia losowości (równomiernej miary probabilistycznej na pewnym zbiorze) wnioskujemy własności jakie losowy obiekt powinien spełniać Intuicyjne rozumienie losowości nie jest precyzyjne Liczby losowe w informatyce 2 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Gdy każemy człowiekowi wypisać cyfry losowo to powstały ciąg prawie na pewno nie przejdzie żadnego testu losowości! Ludzie na siłę unikają lokalnych regularności które w ciągach losowych występują: 6385651282723921872648950972363483292 8827088400658672528283336042726044164 Który z ciągów wygląda bardziej losowo? Liczby losowe w informatyce 3 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Ciąg elementów nazywamy 1-równomierny gdy średnio każdy element występuje równie często. Ciąg elementów nazywamy k-równomierny gdy średnio każdy podciąg długości k tego ciągu występuje równie często. Ciąg nazywamy -równomiernym gdy jest k-równomierny dla każdego k naturalnego. Czy ciąg losowy to to samo co ciąg -równomierny? Liczby losowe w informatyce 4 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Intuicyjnie ciąg losowy musi być - równomierny ale... W każdym ciągu - równomiernym występuje fragment dowolnej długości powtarzający tę samą wartość. W ciągu 1000000-równomiernym występuje na pewno fragment długości 1000000 samych zer! Taki ciąg losowy nie nadawałby się do większości zastosowań! Liczby losowe w informatyce 5 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Może zatem zaproponować taką definicję losowości: Definicja 1 Mówimy, że ciąg U n jest losowy gdy dla dowolnej własności W, takiej że W(V n ) zachodzi z prawdopodobieństwem 1 dla ciągu V n wartości niezależnych zmiennych losowych o rozkładzie jednostajnym, W(U n ) zachodzi. Liczby losowe w informatyce 6 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Niech własność W oznacza, że żaden element ciągu nie jest równy x dla pewnej liczby rzeczywistej x. Własność ta jest spełniona z prawdopodobieństwem jeden. Niech Un będzie pewnym ciągiem liczb. Weźmy x=u 0 wtedy ciąg ten nie spełnia definicji 1. Co więcej żaden ciąg nie spełnia tej definicji! Potrzebna jest definicja słabsza... Liczby losowe w informatyce 7 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Spróbujmy słabszą definicję: Definicja 2 Ciąg U n jest losowy jeśli każdy jego nieskończony podciąg jest - równomierny. Ta definicja jest znowu za mocna, każdy ciąg - równomierny ma podciąg monotoniczny... Liczby losowe w informatyce 8 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Definicja 3 Ciąg U n jest losowy jeśli dla każdego efektywnego algorytmu określającego nieskończony ciąg różnych nieujemnych liczb całkowitych s n dla n>0 podciąg U s0, U s1, U s2,... odpowiadający temu algorytmowi jest - równomierny. Ta definicja jest spełniona dla prawie wszystkich liczb rzeczywistych, jednak żaden jawnie określony ciąg nie może jej spełniać, bo powstały podciąg albo nie będzie równomierny, albo istnieje efektywny algorytm wyznaczający s n, taki że U s0 <U s1 < U s2 <... Liczby losowe w informatyce 9 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Regułą tworzenia podciągu R nazwiemy nieskończony ciąg funkcji f n (n-zmiennych) przyjmującą wartości w zbiorze {0,1}. N-ty element ciągu wchodzi w skład podciągu definiowanego przez regułę R jeśli f n (X 0, X 1,... X n-1 )=1. Regułę tworzenia podciągu R nazywamy obliczalną jeśli istnieje efektywny algorytm wyznaczania wartości f n (x 1, x 2,... x n ) dla danych na wejściu n oraz wartości x 1, x 2,... x n o dowolnej skończonej reprezentacji binarnej. Liczby losowe w informatyce 10 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Definicja 4 Ciąg U n nazywamy losowym jeśli każdy jego nieskończony podciąg określony przez obliczalną regułę tworzenia podciągu (przy dowolnej skończonej reprezentacji) jest 1- równomierny. Definicja ta jest prawie dobra, jednak obliczalne reguły tworzenia podciągu zawsze określają rosnące ciągi indeksów, definicja 3 natomiast dopuszcza dowolne (nie powtarzające się) ciągi indeksów. Liczby losowe w informatyce 11 2006 Filip Piękniewski
Co to właściwie znaczy losowy? Definicja 5 Mówimy, że ciąg U n jest losowy gdy dla każdego efektywnego algorytmu, określającego nieskończony ciąg różnych nieujemnych liczb całkowitych s n jako funkcję wartości n oraz wartości U s0, U s2,..., U sn-1 podciąg U sn odpowiadający temu algorytmowi jest losowy w sensie definicji 4. Istnieją ciągi spełniające definicję 5 [A. Wald], jednocześnie z definicji ciąg taki przechodzi wszystkie popularne testy statystyczne losowości... Liczby losowe w informatyce 12 2006 Filip Piękniewski
Czy komputer wygeneruje coś losowego? Komputer jest automatem skończonym, ilość jego stanów odpowiada ilości możliwych konfiguracji pamięci oraz rejestrów procesora (jest zatem olbrzymia)... Każdy algorytm jest funkcją przekształcającą bieżący stan komputera w następny. Jest to zatem funkcja która przekształca zbiór skończony w siebie. Każda funkcja przekształcająca zbiór skończony w siebie po pewnej liczbie iteracji wpadnie w cykl. Komputer nie może wygenerować ciągu losowego! Liczby losowe w informatyce 13 2006 Filip Piękniewski
Liczby pseudolosowe Każdy kto rozważa arytmetyczne metody wytwarzania cyfr losowych jest oczywiście w stanie grzechu - John von Neumann (1951) Komputer nie może wytworzyć liczb losowych, ale może wytworzyć liczby które będą wyglądać jak losowe. Takie liczby nazywamy pseudolosowymi. Chcemy by takie liczby przechodziły gładko jak najwięcej testów statystycznych, a jednocześnie chcemy móc je generować szybko. Liczby losowe w informatyce 14 2006 Filip Piękniewski
Metoda kongruencji liniowej Ustalamy czwórkę magicznych liczb: m moduł (0 < m) a mnożnik (0 a < m) c krok (0 c < m) X 0 wartość początkowa (0 X 0 < m) Ciąg wartości pseudolosowych uzyskujemy przyjmując: X n+1 =(ax n + c) mod m Liczby losowe w informatyce 15 2006 Filip Piękniewski
Jak dobrać liczby? Moduł powinien być możliwie duży żeby zapewnić długi okres a jednocześnie pozwolić na szybkie obliczenia. Często wybiera się długość słowa maszyny (ewentualnie +/- 1); c powinno być względnie pierwsze z m; a-1 powinno być wielokrotnością każdej liczby pierwszej dzielącej m; a-1 powinno być wielokrotnością 4 jeśli m jest wielokrotnością 4. Liczby losowe w informatyce 16 2006 Filip Piękniewski
Generator multiplikatywny Gdy przyjmiemy c=0 proces generowania liczb losowych może być nieco szybszy. Ale czy nie psuje to możliwości generatora? Można udowodnić, że gdy c=0 można uzyskać przyzwoicie długi okres generatora, trzeba jednak nieco staranniej dobrać a oraz X 0 Liczby losowe w informatyce 17 2006 Filip Piękniewski
Generator multiplikatywny Najdłuższy możliwy okres generatora w przypadku c=0 osiągniemy gdy: - m jest potęgą liczby pierwszej p; - X 0 będzie względnie pierwsze z m; - a jest elementem pierwotnym modulo m, to znaczy jest to wartość o największym możliwym rzędzie modulo m, gdzie rzędem nazywamy najmniejszą liczbę λ taką, że: a 1 mod m Liczby losowe w informatyce 18 2006 Filip Piękniewski
Generator Fibonacciego X n 1 = X n X n 1 mod m Generator Fibonacciego jest elegancki i daje zazwyczaj okresy dłuższe niż m Niestety wygenerowane z niego liczby są zdecydowanie zbyt mało losowe Jest to zaskakująco dobry zły przykład generatora losowego Liczby losowe w informatyce 19 2006 Filip Piękniewski
Opóźnione generatory Fibonacciego X n 1 = X n l X n k mod m X 0,..., X - Dowolnie dobrane liczby całkowite nie wszystkie parzyste k 1 Dla odpowiednio dobranej pary (l,k) przy założeniu że m=2 e generator ten ma okresy 2 e 1 2 k 1 Nie ma dość informacji teoretycznych potwierdzających losowość liczb generowanych przez takie generatory, wydają się jednak użyteczne Wiele zależy od wyboru dobrych par opóźniaczy Liczby losowe w informatyce 20 2006 Filip Piękniewski
Dobre opóźniacze (24,55) (38,89) (37,100) (30,127) (83,258) (107,378) (273,607) (1029,2281) (576,3217) (4187,9689) (7083,19937) (9739,23209) Liczby losowe w informatyce 21 2006 Filip Piękniewski
Czy chaos może być źródłem losowości? Chaos deterministyczny powstaje przy iteracji równań nieliniowych dla pewnych parametrów Jednym z najprostszych przykład równania generującego zachowanie chaotyczne jest równanie kwadratowe f x =4 x 1 x Układy chaotyczne o niskowymiarowych atraktorach polegają z kretesem na teście spektralnym... można praktycznie zrekonstruować cały atraktor na podstawie szeregu czasowego... Liczby losowe w informatyce 22 2006 Filip Piękniewski
Metody badania losowości Test chi-kwadrat Test Kołmogorowa-Smirnowa Test równomierności Test odstępów Test pokerowy (test podziałów) Test kolekcjonera Test największy-z-t Test kolizji Test autokorelacji Test odstępów dni urodzin Test spektralny... wiele innych Liczby losowe w informatyce 23 2006 Filip Piękniewski
Test spektralny Test spektralny to test geometryczny Wykreślamy na płaszczyźnie zależność liczby w sekwencji od jej poprzednika, jeśli dane są w przybliżeniu losowe to wyznaczane punkty ułożą się w równomierną kratę Obliczamy największą odległość między prostymi równoległymi ze wszystkich rodzin prostych równoległych nakrywających elementy powstałej kraty. Jest to precyzje dwuwymiarowa testu. Czynność powtarzamy analogicznie dla wyższych wymiarów (zależności trójek, czwórek itd.) Liczby losowe w informatyce 24 2006 Filip Piękniewski
Test spektralny Cechą prawdziwie losowych liczb w teście spektralnym jest to, że układają się w regularne kraty (często dostrzeżenie tej struktury wymaga niemałego powiększenia gdy liczby są zmiennoprzecinkowe obcięte do pewnej precyzji) Jeśli dane są nielosowe, precyzja testu będzie maleć wraz z wymiarem. Jeśli dane są losowe, parametr precyzji będzie niezależny od wymiaru Test ten jest zaskakująco silny, jeśli generator go przechodzi to prawie na pewno przejdzie dowolny inny test Liczby losowe w informatyce 25 2006 Filip Piękniewski
Gra w chaos Rysujemy trzy ponumerowane punkty, oraz czwarty jako punkt bazowy. Losujemy liczbę ze zbioru {1,2,3}. Wyznaczamy punkt będący w połowie odcinka między wylosowanym rogiem trójkąta a obecnym punktem bazowym. Wybieramy go na nowy punkt bazowy. Wracamy do losowania. Liczby losowe w informatyce 26 2006 Filip Piękniewski
Gra w chaos Liczby losowe w informatyce 27 2006 Filip Piękniewski
Losowa gra, trójkąt Sierpińskiego Gra w Chaos jest dość prosta do implementacji dla zdolnego ucznia liceum, intuicyjnie nie jest ciekawa, wydaje się że wynik tej gry będzie po prostu zbiorem losowych punktów w trójkącie. Wynik jest jednak zaskakujący, kieruje od razu uwagę na trójkąt Sierpińskiego. Z zupełnie losowej gry powstaje całkowicie deterministyczny kształt! http://www.stilldreamer.com/mathematics/chaos_game/ http://www.shodor.org/master/fractal/software/sierpinski.html Liczby losowe w informatyce 28 2006 Filip Piękniewski
Losowa gra, trójkąt Sierpińskiego Ciekawym faktem jest, że grę w chaos można stosować jako test losowości liczb Jeśli zamiast liczb losowych w grę wstawimy jakiś deterministyczny ciąg (np. po kolei będziemy wybierać rogi trójkąta), magiczny kształt trójkąta Sierpińskiego nie powstanie! Liczby losowe w informatyce 29 2006 Filip Piękniewski
Prawdziwe liczby losowe? Komputer to dusza automat skończony który z pewnością nie wygeneruje nigdy nic losowego Komputer to też ciało dyski, urządzenia wejścia/wyjścia, szumy i zakłócenia, czasy reakcji, kalibrowania głowic, data i czas... Można użyć szumów do wygenerowania sekwencji liczb losowych, nieprzewidywalnych... Liczby losowe w informatyce 30 2006 Filip Piękniewski
Prawdziwe liczby losowe? W systemach unixowych jądro zbiera informacje o wszelkich szumach i czasach reakcji sprzętu. Zebrane dane trzyma w obszarze pamięci zwanej pulą entropii. Na żądanie użytkownika zwracana jest funkcja skrótu (np. MD5) z zawartości puli. Chodzi o to aby żaden użytkownik nie mógł poznać zawartości puli. Szacunkowa entropia (nieporządek) puli jest zmniejszany przy każdym odczycie, zwiększany gdy napłyną nowe dane o szumach. Liczby losowe w informatyce 31 2006 Filip Piękniewski
Prawdziwe liczby losowe? Gdy szacunkowa entropia puli będzie zbyt niska system może zablokować odczyt do czasu gdy poziom losowości puli zostanie odzyskany. W Linuxie do odczytu losowych danych służą pliki specjalne: /dev/random (blokuje odczyt) /dev/urandom (nie blokuje nigdy odczytu) Liczby losowe w informatyce 32 2006 Filip Piękniewski
Prawdziwe liczby losowe? Liczby pochodzące z /dev/random nie są z pewnością przewidywalne, jednak nikt nigdy nie zagwarantuje, że mają rozkład jednostajny. Proces obliczania funkcji skrótu wymaga sporo obliczeń, pobranie dużej ilości losowych danych w ten sposób jest nieefektywne. Można jednak wykorzystywać takie liczby do inicjowania arytmetycznych generatorów. Liczby losowe w informatyce 33 2006 Filip Piękniewski
Do czego potrzebne są liczby losowe? Inicjowanie kluczy kryptograficznych, tworzenie sekwencji kluczy symetrycznych Generowanie numerów sekwencyjnych pakietów IP Symulacje Monte-Carlo, próbkowanie całek na wielowymiarowych przestrzeniach Grafika komputerowa, dithering i inne... Liczby losowe w informatyce 34 2006 Filip Piękniewski
Liczby losowe w informatyce Pytania? Liczby losowe w informatyce 35 2006 Filip Piękniewski