Michał Dyszyński
Bloger na Kretowisku
Dołączył: 04 Gru 2005
Posty: 33735
Przeczytał: 67 tematów
Skąd: Warszawa Płeć: Mężczyzna
|
Wysłany: Pią 17:21, 10 Cze 2022 Temat postu: Generowanie losowości i nieprzewidywalności - idea MD |
|
|
Trochę sprowokowany dyskusjami o losowości i jej mechanizmach na sfinii, zdecydowałem się (powtórnie, bo chyba gdzieś już o tym pisałem, ale chyba nie opatrując opisu stosownym tytułem, więc może być problem z odszukaniem tego) tutaj przedstawić rozumowanie, które by pokazywało jak można uzyskać pseudolosowość za pomocą czystej matematyki.
Bardzo prostym mechanizmem losowości zaszytej w matematyce jest wzięcie cyfr rozwinięcia dowolnej liczby przestępnej - np. liczby pi. Biorąc cyfry od pewnego miejsca w rozwinięciu otrzymamy (nie wiem na ile idealny) ciąg losowy.
Ale tu występuje ten problem, że tak do końca nie mamy gwarancji, iż ów ciąg losowym na pewno jest. Być może istnieje jakaś reguła, która rządzi pojawianiem się kolejnych cyfr rozwinięcia liczby pi, e, czy pi+1, czy dowolnych innych liczb przestępnych. Poza tym w tym wątku chcę uzyskać coś nieco bardziej subtelnego, niż tylko losowość wynikającą z braku wiedzy o obliczanych cyfrach jakiegoś tam wyrażenia matematycznego. Dlatego przedstawię tu pomysł nieco bardziej skomplikowany.
Wyobraźmy sobie, że chcę uzyskać coś w rodzaju losowego momentu stopu dla programu. Program ma się zatrzymać, ale tak, aby nie dało się przewidzieć KIEDY to nastąpi. Można to zrealizować następującą rekurencyjną procedurą:
1. Obliczamy rozwinięcie właśnie jakiejś liczby przestępnej, obliczając pierwsze naście jej cyfr. Jeślibyśmy chcieli włączyć tu ziarno pobrane z jakiegoś procesu, to też nic nie stoi na przeszkodzie - można bowiem pobrać dowolną wartość liczbową, skończoną, a potem dodać ją do liczby przestępnej i całą procedurę wykonywać na tej sumie (można też zastosować iloczyn, iloraz, potęgę, czy dowolną inną algebraiczną kombinację)..
2. Teraz startujemy od któregoś tam miejsca, obliczonego ciągu - np. od 10-ego miejsca.
3. Ponieważ na tym miejscu może się pojawić jedna z 10 cyfr (od 0 do 9), to możemy np. ustalić, iż jeśli liczba będzie miała wartość mniejszą od 4, to robimy stop, a jeśli większą, to idziemy dalej z rekurencją. Prawdopodobieństwo zastopowania ciągu w tym kroku jest 4/10
4. Ponieważ z prawdopodobieństwem 6/10 stopu nie dostaniemy, to bierzemy kolejną cyfrę rozwinięcia i znowu patrzymy jest ona nie mniejsza niż 4.
itd...
Otrzymamy dla różnych liczb wiele różnych sygnałów stopu, które bardzo trudno jest przewidzieć. Zmniejszając prawdopodobieństwo zastopowania w danym kroku (np. biorąc pod uwagę próg nie z prawdopodobieństwem 4/10, lecz np. 1/10, czyli żądając pojawienia się konkretnej cyfry, otrzymamy różne wartości oczekiwane kroków, po których następować będzie stop. Można też brać na raz nie 1, a więcej cyfr rozwinięcia i zarządzać stop w wyniku uzyskania w nich dowolnej z możliwych konfiguracji (uzyskując praktycznie dowolna wartość prawdopodobieństwa dla stopu w danym kroku).
Można też urozmaicać ten algorytm zmniejszając szansę na stop z każdym kolejnym krokiem. To pozwala tak manewrować wartością oczekiwaną stopu, że będzie ona dowolnie odległa w czasie (ilości kroków), nawet odsuwając ją aż do nieskończoności.
Nie jest to losowość idealna, jest to wciąż raczej rodzaj pseudolosowości, ale uważam, iż jest to algorytm o tyle ciekawy, że właśnie wartość oczekiwana czasu, po którym następuje stop - jako możliwa do dowolnego ustalenia - jest bardzo znaczącym zdesynchronizowaniem funkcji stopu od zadanego procesu.
|
|