Jaki jest potrzebny generator liczb losowych? Generator liczb losowych. Pojęcie generatora liczb

Czy kiedykolwiek testowałeś stwierdzenie, że na 10 obrotów ruletki 5 razy wypadnie liczba parzysta? A może już kilka razy brałeś udział w loteriach i udało Ci się je wygrać? Jeśli przyjmiemy, że wszystkie wyniki są naprawdę losowe, to możemy mówić o prawdopodobieństwie wystąpienia zdarzenia.

Przeformułowując ostatnią wypowiedź, powtórzmy słowa osób, które brały udział w wydarzeniach z losowy wynik: działa całkowicie losowo.

Jak więc sprawdzić, czy zasada rozkładu jest losowa? Generator liczb losowych może obsłużyć to zadanie. Jego główną zaletą jest to, że działa online, co oznacza, że ​​jest bardzo szybki i nie zależy od obecności połączenia internetowego po pobraniu.

Jak działa generator liczb losowych

Do opisania pracy nie potrzeba wielu liter, wszystko jest bardzo proste: należy wybrać minimalną i maksymalną możliwą liczbę, wpisać liczbę wygenerowanych wartości, jeśli to konieczne, zaznaczyć checkbox „Wyklucz powtórzenia”, co zapobiega pojawienie się liczb, które już istniały, i kliknij przycisk generuj. Następnie każde kolejne kliknięcie przycisku spowoduje wygenerowanie nowych opcji dystrybucji.

Dlaczego może to być potrzebne? Na przykład dostać Szczęśliwe liczby w loterii lub ruletce. Dodatkowo generator liczby pseudolosowe w stanie naśladować beczki lotto lub rzut monetą w konkursie - orzeł i reszka są reprezentowane przez zero lub jeden. Ale najważniejsze jest to, że po załadowaniu strony nie potrzebujesz połączenia z Internetem - kod jest napisany w JavaScript i wykonywany po stronie użytkownika, w jego przeglądarce.

Testowanie działania tego generator internetowy czasami dawał całkiem ciekawe wyniki: użycie liczb 0 i 1 przy 10 opcjach nierzadko dawało rozkład w stosunku 7 do 3, a nawet 6 identyczne liczby kontrakt.

Do czego jeszcze, poza lotto i powyższymi przykładami, losowość może przydać się przy rozdzielaniu liczb? Przynajmniej na potrzeby gry w zgadywanie. Prawdopodobnie grałeś w tę grę w dzieciństwie: gospodarz zgaduje liczbę od 1 do 100, a pozostali próbują ją odgadnąć. W stosunku do tego generatora pełnisz rolę lidera, a komputer próbuje odgadnąć, co się kryje.

Możesz nawet grać Bitwa morska, po natychmiastowym otrzymaniu grupy liczb z zakresu od 0 do 99. Jednocześnie najbardziej znacząca cyfra liczby jest używana jako litery (które są oznaczone poziomo) - 0 ... 9 to ... i , cyfry najmniej znaczącej cyfry w tym przypadku zastępują zakres 1 ... 10, wówczas dodawana jest tylko jedna. Być może teraz takie podejście nie wydaje się zbyt jasne, ale jest to kwestia przyzwyczajenia.

Innym ciekawym sposobem wykorzystania tego narzędzia jest sprawdzenie swojej intuicji. Próbujesz przewidzieć, które liczby (pojedyncze lub grupowe) wygeneruje generator, naciskasz przycisk i sprawdzasz, jak blisko byłeś prawidłowego wyniku. Kto wie, może po kilku próbach uda się trafnie przewidzieć wynik?

Należy jednak wziąć pod uwagę, że generator liczb losowych nie bez powodu nazywany jest tak. Istniejące dziś metody nie są w stanie podać prawdziwie losowej wartości – zależy ona od wielu czynników, do których zaliczać się może poprzednia liczba, aktualny czas, zawartość konkretnej komórki pamięci i inne dane. Ale na potrzeby domowe ich funkcjonalność jest zwykle wystarczająca w 100%.

Cóż, mam nadzieję, że znajdziesz szersze zastosowanie dla generatora niż opisane tutaj opcje. A może nawet możesz zasugerować dobry pomysł aby rozszerzyć istniejącą funkcjonalność. W końcu były to najbardziej niesamowite myśli, które ostatecznie zmieniły się z mglistego pomysłu w prawdziwe ucieleśnienie.


Należy zauważyć, że w idealnym przypadku krzywa gęstości rozkładu liczb losowych wyglądałaby tak, jak pokazano na ryc. 22.3. Oznacza to, że w idealnym przypadku każdy przedział obejmuje ten sam numer zwrotnica: N I = N/k , Gdzie Nłączna liczba punktów, k liczba interwałów, I= 1, , k .

Ryż. 22.3. Wykres częstotliwości liczb losowych,
generowane teoretycznie przez generator idealny

Należy pamiętać, że generowanie dowolnej liczby losowej składa się z dwóch etapów:

  • generowanie znormalizowanej liczby losowej (to znaczy równomiernie rozłożonej od 0 do 1);
  • znormalizowana konwersja liczb losowych R I do liczb losowych X I, które są dystrybuowane zgodnie z (arbitralnym) prawem dystrybucji wymaganym przez użytkownika lub w wymaganym odstępie czasu.

Generatory liczb losowych ze względu na sposób uzyskiwania liczb dzielą się na:

  • fizyczny;
  • tabelaryczny;
  • algorytmiczne.

Fizyczne RNG

Przykładem fizycznego RNG może być: moneta („reszka” 1, „reszka” 0); kostka do gry; bęben ze strzałką podzielony na sektory z liczbami; sprzętowy generator szumu (GS), który służy jako hałaśliwe urządzenie termiczne, na przykład tranzystor (ryc. 22.422.5).

Ryż. 22.4. Schemat sprzętowej metody generowania liczb losowych
Ryż. 22,5. Schemat otrzymywania liczb losowych metodą sprzętową
Zadanie „Generowanie liczb losowych za pomocą monety”

Wygeneruj losową trzycyfrową liczbę o równomiernym rozkładzie w zakresie od 0 do 1 za pomocą monety. Dokładność do trzech miejsc po przecinku.

Pierwszy sposób na rozwiązanie problemu
Rzuć monetą 9 razy i jeśli moneta wyląduje na orle, wpisz „0”, a jeśli wyląduje na orle, wpisz „1”. Załóżmy więc, że w wyniku eksperymentu otrzymaliśmy losową sekwencję 100110100.

Narysuj przedział od 0 do 1. Czytając liczby po kolei od lewej do prawej, podziel przedział na pół i za każdym razem wybierz jedną z części kolejnego przedziału (jeśli otrzymasz 0, to lewą, jeśli otrzymasz 1, potem prawy). W ten sposób możesz dotrzeć do dowolnego punktu interwału tak dokładnie, jak chcesz.

Więc, 1 : przedział jest dzielony na pół i , wybierana jest prawa połowa, przedział jest zawężany: . Kolejny numer 0 : przedział jest dzielony na pół przez i , wybierana jest lewa połowa, przedział zawęża się: . Kolejny numer 0 : przedział jest dzielony na pół przez i , wybierana jest lewa połowa, przedział zawęża się: . Kolejny numer 1 : przedział jest dzielony na pół przez i , wybierana jest prawa połowa, przedział zawęża się: .

Zgodnie z warunkiem dokładności problemu znajduje się rozwiązanie: jest to dowolna liczba z przedziału , na przykład 0,625.

W zasadzie, jeśli podchodzimy ściśle, to dzielenie przedziałów należy kontynuować, aż lewa i prawa granica znalezionego przedziału nie będą pasować do siebie z dokładnością do trzeciego miejsca po przecinku. Oznacza to, że pod względem dokładności wygenerowana liczba nie będzie już odróżnialna od żadnej liczby z przedziału, w którym się znajduje.

Drugi sposób rozwiązania problemu
Podzielmy powstały ciąg binarny 100110100 na triady: 100, 110, 100. Po przetłumaczeniu tych liczby binarne w systemie dziesiętnym otrzymujemy: 4, 6, 4. Podstawiając „0” z przodu, otrzymujemy: 0,464. Tą metodą można uzyskać tylko liczby od 0,000 do 0,777 (ponieważ maksimum, które można „wycisnąć” z trzech cyfr binarnych, to 111 2 = 7 8), to znaczy w rzeczywistości liczby te są reprezentowane w systemie liczb ósemkowych. Do tłumaczenia ósemkowy numery w dziesiętny wykonajmy reprezentację:
0,464 8 = 4 8 1 + 6 8 2 + 4 8 3 = 0,6015625 10 = 0,602 10.
Zatem pożądana liczba to: 0,602.

Tabelaryczny RNG

Tabelaryczne RNG wykorzystują specjalnie opracowane tabele zawierające zweryfikowane nieskorelowane, czyli w żaden sposób od siebie zależne, liczby jako źródło liczb losowych. W tabeli Rysunek 22.1 pokazuje mały fragment takiej tabeli. Przemierzając tabelę od lewej do prawej, z góry na dół, można otrzymać liczby losowe o równomiernym rozkładzie od 0 do 1 z wymaganą liczbą miejsc po przecinku (w naszym przykładzie dla każdej liczby używamy trzech miejsc po przecinku). Ponieważ liczby w tabeli nie są od siebie zależne, tabelę można przeglądać różne sposoby, na przykład od góry do dołu lub od prawej do lewej, lub, powiedzmy, możesz wybrać liczby, które znajdują się na parzystych pozycjach.

Tabela 22.1.
Losowe liczby. Równomiernie
liczby losowe rozdzielone od 0 do 1
Losowe liczby Równomiernie
Liczby losowe od 0 do 1
9 2 9 2 0 4 2 6 0.929
9 5 7 3 4 9 0 3 0.204
5 9 1 6 6 5 7 6 0.269
… …

Godność Ta metoda polega na tym, że generuje liczby naprawdę losowe, ponieważ tabela zawiera zweryfikowane, nieskorelowane liczby. Wady tej metody: do przechowywania duża ilość liczby wymagają dużo pamięci; Generowanie i sprawdzanie tego rodzaju tabel wiąże się z dużymi trudnościami, powtórzenia przy korzystaniu z tabeli nie gwarantują już losowości ciągu liczbowego, a co za tym idzie wiarygodności wyniku.

Istnieje tabela zawierająca 500 całkowicie losowo zweryfikowanych liczb (zaczerpnięta z książki I. G. Venetsky'ego, V. I. Venetskaya „Podstawowe pojęcia i wzory matematyczne i statystyczne w analizie ekonomicznej”).

Algorytmiczny RNG

Liczby generowane przez te RNG są zawsze pseudolosowe (lub quasi-losowe), to znaczy każda kolejna wygenerowana liczba zależy od poprzedniej:

R I + 1 = F(R I) .

Sekwencje złożone z takich liczb tworzą pętle, co oznacza, że ​​z konieczności istnieje cykl, który się powtarza nieskończona liczba raz. Powtarzające się cykle nazywane są okresami.

Zaletą tych RNG jest ich szybkość; generatory nie wymagają praktycznie żadnych zasobów pamięci i są kompaktowe. Wady: liczb nie można w pełni nazwać losowymi, ponieważ istnieje między nimi zależność, a także obecność kropek w sekwencji liczb quasi-losowych.

Rozważmy kilka algorytmicznych metod uzyskiwania RNG:

  • metoda środkowych kwadratów;
  • metoda produktów średnich;
  • metoda mieszania;
  • liniowy metoda konsekwentna.

Metoda środkowego kwadratu

Jest jakaś czterocyfrowa liczba R 0. Liczba ta jest podnoszona do kwadratu i wprowadzana R 1. Następny od R 1 bierze środkową (cztery środkowe cyfry) nową liczbę losową i zapisuje ją R 0. Następnie procedurę powtarza się (patrz ryc. 22.6). Należy pamiętać, że w rzeczywistości jako liczbę losową należy wziąć nie ghij, A 0.ghj z zerem i kropką dziesiętną dołączonymi po lewej stronie. Fakt ten znajduje odzwierciedlenie na ryc. 22,6 i na kolejnych podobnych rysunkach.

Ryż. 22.6. Schemat metody półkwadratów

Wady metody: 1) jeśli w jakiejś iteracji liczba R 0 staje się równe zero, wówczas generator ulega degeneracji, dlatego ważny jest prawidłowy wybór wartości początkowej R 0; 2) generator powtórzy sekwencję M N wkracza najlepszy przypadek), Gdzie N cyfra numeru R 0 , M podstawa systemu liczbowego.

Na przykład na ryc. 22,6: jeśli liczba R 0 będzie reprezentowane w systemie binarnym, wówczas sekwencja liczb pseudolosowych zostanie powtórzona w 2 4 = 16 krokach. Należy pamiętać, że powtórzenie sekwencji może nastąpić wcześniej, jeśli numer startowy zostanie wybrany źle.

Opisana powyżej metoda została zaproponowana przez Johna von Neumanna i sięga 1946 roku. Ponieważ metoda ta okazała się zawodna, szybko ją porzucono.

Metoda środkowego produktu

Numer R 0 pomnożone przez R 1, z uzyskanego wyniku R 2 środek jest wyodrębniony R 2 * (jest to kolejna liczba losowa) i pomnożona przez R 1. Wszystkie kolejne liczby losowe są obliczane według tego schematu (patrz ryc. 22.7).

Ryż. 22,7. Schemat metody iloczynów medianowych

Metoda mieszania

Metoda shuffle wykorzystuje operacje do cyklicznego przesuwania zawartości komórki w lewo i w prawo. Idea metody jest następująca. Niech komórka przechowuje numer początkowy R 0. Przesuwając cyklicznie zawartość komórki w lewo o 1/4 długości komórki otrzymujemy nową liczbę R 0 * . W ten sam sposób zmieniasz zawartość komórki R 0 w prawo o 1/4 długości komórki, otrzymujemy drugą liczbę R 0**. Suma liczb R 0* i R 0** daje nową liczbę losową R 1. Dalej R Wpisano 1 R 0 i cała sekwencja operacji jest powtarzana (patrz ryc. 22.8).


Ryż. 22.8. Schemat metody mieszania

Należy pamiętać, że liczba wynikająca z sumowania R 0* i R 0**, może nie zmieścić się całkowicie w komórce R 1. W takim przypadku dodatkowe cyfry należy odrzucić z wynikowej liczby. Wyjaśnimy to na ryc. 22.8, gdzie wszystkie komórki są reprezentowane przez osiem cyfr binarnych. Pozwalać R 0 * = 10010001 2 = 145 10 , R 0 ** = 10100001 2 = 161 10 , Następnie R 0 * + R 0 ** = 100110010 2 = 306 10 . Jak widać liczba 306 zajmuje 9 cyfr (w systemie liczb binarnych), a komórka R 1 (tak samo jak R 0) może pomieścić maksymalnie 8 bitów. Dlatego przed wprowadzeniem wartości w R 1, należy usunąć jeden „dodatkowy”, skrajny lewy bit z liczby 306, w wyniku czego R 1 nie będzie już 306, ale 00110010 2 = 50 10 . Należy również pamiętać, że w językach takich jak Pascal „przycinanie” dodatkowych bitów w przypadku przepełnienia komórki odbywa się automatycznie zgodnie z określonym typem zmiennej.

Liniowa metoda kongruencji

Liniowa metoda kongruencji jest jedną z najprostszych i najczęściej stosowanych obecnie procedur symulujących liczby losowe. Ta metoda wykorzystuje mod ( X, y) , która zwraca resztę z dzielenia pierwszego argumentu przez drugi. Każda kolejna liczba losowa jest obliczana na podstawie poprzedniej liczby losowej według następującego wzoru:

R I+ 1 = mod( k · R I + B, M) .

Nazywa się ciąg liczb losowych otrzymany za pomocą tego wzoru liniowa sekwencja zgodna. Wielu autorów nazywa liniową sekwencję przystającą kiedy B = 0 multiplikatywna metoda kongruencji, i kiedy B ≠ 0 — metoda mieszana kongruentna.

Aby uzyskać generator wysokiej jakości, należy wybrać odpowiednie współczynniki. Konieczne jest podanie numeru M był dość duży, gdyż okres nie może mieć więcej M elementy. Z drugiej strony dzielenie stosowane w tej metodzie jest operacją dość powolną, dlatego w przypadku komputera binarnego logicznym wyborem byłoby M = 2 N, ponieważ w tym przypadku znalezienie reszty dzielenia jest zredukowane w komputerze do binarnej operacji logicznej „AND”. Powszechnym jest również wybieranie największej liczby pierwszej M, mniej niż 2 N: w literaturze specjalistycznej udowodniono, że w tym przypadku cyfry niższego rzędu wynikowej liczby losowej R I+ 1 zachowują się tak samo losowo jak starsze, co pozytywnie wpływa na cały ciąg liczb losowych jako całość. Przykładowo jeden z Liczby Mersenne’a, równe 2 31 1, a zatem, M= 2 31 1 .

Jednym z wymagań dotyczących liniowych ciągów zgodnych jest możliwie najdłuższy okres. Długość okresu zależy od wartości M , k I B. Twierdzenie, które prezentujemy poniżej, pozwala nam określić, czy możliwe jest osiągnięcie okresu maksymalna długość dla konkretnych wartości M , k I B .

Twierdzenie. Liniowy ciąg zgodny określony liczbami M , k , B I R 0, ma okres długości M wtedy i tylko wtedy gdy:

  • liczby B I M stosunkowo proste;
  • k 1 razy P dla każdej liczby pierwszej P, który jest dzielnikiem M ;
  • k 1 jest wielokrotnością 4, jeśli M wielokrotność 4.

Na koniec zakończmy kilkoma przykładami wykorzystania metody liniowej zgodności do generowania liczb losowych.

Ustalono, że ciąg liczb pseudolosowych wygenerowany na podstawie danych z przykładu 1 będzie się powtarzał M/4 cyfry. Numer Q ustalany jest arbitralnie przed rozpoczęciem obliczeń, należy jednak mieć na uwadze, że szereg sprawia w zasadzie wrażenie losowego k(i dlatego Q). Wynik można nieco poprawić, jeśli B dziwne i k= 1 + 4 · Q w tym przypadku wiersz będzie powtarzany co M liczby. Po długich poszukiwaniach k badacze ustalili wartości 69069 i 71365.

Generator liczb losowych korzystający z danych z przykładu 2 wygeneruje losowe liczby jednorazowe z okresem 7 milionów.

Multiplikatywną metodę generowania liczb pseudolosowych zaproponował D. H. Lehmer w 1949 roku.

Sprawdzanie jakości generatora

Od jakości RNG zależy jakość całego systemu i dokładność wyników. Dlatego losowa sekwencja generowana przez RNG musi spełniać szereg kryteriów.

Przeprowadzane kontrole są dwojakiego rodzaju:

  • sprawdza równomierność dystrybucji;
  • testy niezależności statystycznej.

Sprawdza równomierność rozkładu

1) RNG powinien dawać w przybliżeniu następujące wartości parametrów statystycznych charakterystycznych dla jednolitego prawa losowego:

2) Test częstotliwości

Test częstotliwości pozwala sprawdzić, ile liczb mieści się w przedziale (M R – σ R ; M R + σ R) , czyli (0,5 · 0,2887; 0,5 + 0,2887) lub ostatecznie (0,2113; 0,7887). Ponieważ 0,7887 0,2113 = 0,5774 wnioskujemy, że w dobrym RNG około 57,7% wszystkich wylosowanych liczb losowych powinno mieścić się w tym przedziale (patrz rys. 22.9).

Ryż. 22.9. Wykres częstotliwości idealnego RNG
w przypadku sprawdzania go do testu częstotliwości

Należy również pamiętać, że liczba liczb w przedziale (0; 0,5) powinna być w przybliżeniu równa liczbie liczb w przedziale (0,5; 1).

3) Test chi-kwadrat

Test chi-kwadrat (χ 2 -test) jest jednym z najbardziej znanych testów statystycznych; jest to główna metoda stosowana w połączeniu z innymi kryteriami. Test chi-kwadrat został zaproponowany w 1900 roku przez Karla Pearsona. Jego niezwykłe dzieło uważane jest za podstawę współczesnej statystyki matematycznej.

W naszym przypadku test chi-kwadrat pozwoli nam dowiedzieć się, ile wynosi stworzony przez nas prawdziwy RNG jest zbliżony do odniesienia RNG, tj. czy spełnia wymóg jednolitej dystrybucji, czy nie.

Wykres częstotliwości odniesienie RNG pokazano na ryc. 22.10. Ponieważ prawo dystrybucji odniesienia RNG jest jednolite, wówczas (teoretyczne) prawdopodobieństwo P I wprowadzanie liczb I-ty interwał (suma tych interwałów k) jest równe P I = 1/k . I tak w każdym k interwały będą uderzać gładki Przez P I · N liczby ( Nłączna liczba wygenerowanych liczb).

Ryż. 22.10. Wykres częstotliwości odniesienia RNG

Prawdziwy RNG będzie generował liczby rozłożone (i niekoniecznie równomiernie!) w poprzek k interwały i każdy interwał będzie obejmował N I liczby (w sumie N 1 + N 2 + + N k = N ). Jak określić, jak dobry i zbliżony jest testowany RNG do referencyjnego? Całkiem logiczne jest rozważenie kwadratów różnic między wynikową liczbą liczb N I i „odniesienie” P I · N . Dodajmy je i w rezultacie otrzymamy:

χ 2 eksp. = ( N 1 P 1 · N) 2 + (N 2 P 2 · N) 2 + + ( N k – P k · N) 2 .

Z tego wzoru wynika, że ​​im mniejsza jest różnica w każdym z wyrazów (a zatem i mniejsza wartośćχ 2 eksp. ), im silniejsze prawo rozkładu liczb losowych generowanych przez prawdziwy RNG, zwykle jest jednolite.

W poprzednim wyrażeniu każdemu z terminów przypisano tę samą wagę (równą 1), co w rzeczywistości może nie być prawdą; dlatego w przypadku statystyki chi-kwadrat konieczna jest normalizacja każdego z nich I wyraz, dzieląc go przez P I · N :

Na koniec napiszmy wynikowe wyrażenie bardziej zwięźle i uprośćmy je:

Otrzymaliśmy wartość testu chi-kwadrat dla eksperymentalny dane.

W tabeli Podano 22,2 teoretyczny wartości chi-kwadrat (teor. χ 2), gdzie ν = N 1 to liczba stopni swobody, P jest to poziom ufności określony przez użytkownika, który wskazuje, w jakim stopniu RNG powinien spełniać wymagania jednolitego rozkładu, lub P — jest prawdopodobieństwem, że wartość eksperymentalna χ 2 exp. będzie mniejsza niż tabelaryczna (teoretyczna) teoria χ 2. lub mu równy.

Tabela 22.2.
Niektóre punkty procentowe rozkładu χ 2
p = 1% p = 5% p = 25% p = 50% p = 75% p = 95% p = 99%
ν = 1 0.00016 0.00393 0.1015 0.4549 1.323 3.841 6.635
ν = 2 0.02010 0.1026 0.5754 1.386 2.773 5.991 9.210
ν = 3 0.1148 0.3518 1.213 2.366 4.108 7.815 11.34
ν = 4 0.2971 0.7107 1.923 3.357 5.385 9.488 13.28
ν = 5 0.5543 1.1455 2.675 4.351 6.626 11.07 15.09
ν = 6 0.8721 1.635 3.455 5.348 7.841 12.59 16.81
ν = 7 1.239 2.167 4.255 6.346 9.037 14.07 18.48
ν = 8 1.646 2.733 5.071 7.344 10.22 15.51 20.09
ν = 9 2.088 3.325 5.899 8.343 11.39 16.92 21.67
ν = 10 2.558 3.940 6.737 9.342 12.55 18.31 23.21
ν = 11 3.053 4.575 7.584 10.34 13.70 19.68 24.72
ν = 12 3.571 5.226 8.438 11.34 14.85 21.03 26.22
ν = 15 5.229 7.261 11.04 14.34 18.25 25.00 30.58
ν = 20 8.260 10.85 15.45 19.34 23.83 31.41 37.57
ν = 30 14.95 18.49 24.48 29.34 34.80 43.77 50.89
ν = 50 29.71 34.76 42.94 49.33 56.33 67.50 76.15
ν > 30 ν + sqrt(2 ν ) · X P+ 2/3 · X 2 P 2/3+ O(1/m2( ν ))
X P = 2.33 1,64 0,674 0.00 0.674 1.64 2.33

Uznane za akceptowalne P od 10% do 90%.

Jeśli χ 2 exp. znacznie więcej niż teoria χ 2. (to jest P jest duży), następnie generator nie zadowala wymóg równomiernego rozkładu, ponieważ obserwowane wartości N I za bardzo odchodzić od teorii P I · N i nie można ich uważać za przypadkowe. Innymi słowy, jest zainstalowany tak duży przedział ufności, że ograniczenia dotyczące liczb stają się bardzo luźne, a wymagania dotyczące liczb stają się słabe. W takim przypadku zostanie zaobserwowany bardzo duży błąd bezwzględny.

Nawet D. Knuth w swojej książce „The Art of Programming” zauważył, że posiadanie χ 2 exp. małe też w ogóle nie jest dobre, chociaż na pierwszy rzut oka wydaje się niezwykłe z punktu widzenia jednolitości. Rzeczywiście, weź serię liczb 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, są one idealne pod względem jednolitości i χ 2 exp. będą praktycznie zerowe, ale jest mało prawdopodobne, że rozpoznasz je jako losowe.

Jeśli χ 2 exp. znacznie mniej niż teoria χ 2. (to jest P mały), następnie generator nie zadowala wymóg losowego równomiernego rozkładu, ponieważ obserwowane wartości N I zbyt blisko teorii P I · N i nie można ich uważać za przypadkowe.

Ale jeśli χ 2 exp. leży w pewnym przedziale pomiędzy dwiema wartościami teorii χ 2. , które odpowiadają np. P= 25% i P= 50%, to możemy założyć, że wartości liczb losowych generowanych przez czujnik są całkowicie losowe.

Ponadto należy pamiętać, że wszystkie wartości P I · N musi być wystarczająco duży, na przykład większy niż 5 (stwierdzony empirycznie). Dopiero wtedy (przy odpowiednio dużej próbie statystycznej) warunki eksperymentu można uznać za zadowalające.

Zatem procedura weryfikacji jest następująca.

Testy niezależności statystycznej

1) Sprawdzenie częstotliwości występowania liczb w ciągu

Rozważmy przykład. Liczba losowa 0,2463389991 składa się z cyfr 2463389991, a liczba 0,5467766618 składa się z cyfr 5467766618. Łącząc ciągi cyfr mamy: 24633899915467766618.

Oczywiste jest, że prawdopodobieństwo teoretyczne P I strata I Th cyfra (od 0 do 9) jest równa 0,1.

2) Sprawdzenie wyglądu serii identycznych liczb

Oznaczmy przez N L liczba serii identycznych cyfr w rzędzie długości L. Wszystko trzeba sprawdzić L od 1 do M, Gdzie M jest to liczba określona przez użytkownika: maksymalna występująca liczba identycznych cyfr w serii.

W przykładzie „24633899915467766618” znaleziono 2 serie o długości 2 (33 i 77), czyli N 2 = 2 i 2 serie o długości 3 (999 i 666), tj N 3 = 2 .

Prawdopodobieństwo wystąpienia szeregu długości L jest równe: P L= 9 10 L (teoretyczny). Oznacza to, że prawdopodobieństwo wystąpienia ciągu o długości jednego znaku jest równe: P 1 = 0,9 (teoretycznie). Prawdopodobieństwo pojawienia się ciągu dwóch znaków wynosi: P 2 = 0,09 (teoretyczne). Prawdopodobieństwo pojawienia się ciągu trzech znaków wynosi: P 3 = 0,009 (teoretycznie).

Na przykład prawdopodobieństwo wystąpienia serii o długości jednego znaku wynosi P L= 0,9 , ponieważ na 10 może być tylko jeden znak i tylko 9 znaków (zero nie jest liczone). A prawdopodobieństwo, że dwa identyczne znaki „XX” spotkają się w rzędzie, wynosi 0,1 0,1 9, czyli prawdopodobieństwo 0,1, że znak „X” pojawi się na pierwszej pozycji, jest mnożone przez prawdopodobieństwo 0,1, że ten sam znak pojawi się na drugiej pozycji „X” i pomnożona przez liczbę takich kombinacji 9.

Częstotliwość występowania szeregów obliczana jest według wzoru „chi-kwadrat”, który wcześniej analizowaliśmy na podstawie wartości P L .

Uwaga: Generator można sprawdzać wielokrotnie, ale kontrole nie są kompletne i nie gwarantują, że generator wygeneruje liczby losowe. Przykładowo generator generujący ciąg 12345678912345 zostanie podczas kontroli uznany za idealny, co oczywiście nie jest do końca prawdą.

Podsumowując, zauważamy, że trzeci rozdział książki „Sztuka programowania” Donalda E. Knutha (tom 2) jest w całości poświęcony badaniu liczb losowych. Studiuje różne metody generowanie liczb losowych, kryteria statystyczne losowości i konwertowanie liczb losowych o równomiernym rozkładzie na inne typy zmienne losowe. Prezentacji tego materiału poświęcono ponad dwieście stron.

Wielu uczestników loterii nie chce tracić czasu na wybieranie zwycięskiej kombinacji i wypełnianie losu na loterię.

Aby im pomóc, większość wyspecjalizowanych witryn loteryjnych oferuje bardzo wygodną funkcję „Automatycznego wybierania”. Dziś opowiemy Wam co to jest i jak działa.

„Automatyczne wybieranie”

Ta funkcja to klasyczny generator liczb losowych, wynaleziony od czasu powstania pierwszych witryn loteryjnych i wirtualnych kasyn. Ponad 70% kupujących wirtualne bilety loterie zagraniczne wybierz tę całkowicie bezpłatną opcję.

Ponadto możesz automatycznie wybrać więcej niż jeden zwycięska kombinacja, ale kilka (do 50). Jest to bardzo wygodne dla graczy, którzy kupują dużą liczbę losów na loterię z różnymi stawkami.

Zwycięskie statystyki

Jeśli nadal masz wątpliwości, czy skorzystać z funkcji „Wybieranie automatyczne”, czy zawracać sobie głowę samodzielnym wypełnianiem biletów, czytaj dalej. Recenzje loterii Euromillions od jej zwycięzców jednoznacznie stwierdzają, że różnica w sposobach wypełnienia losu w żaden sposób nie wpływa na szanse uczestnika. Mówią nam o tym statystyki loterii, według których, z Łączna Gracze korzystający z tej opcji na stronach internetowych otrzymują wygraną w wysokości około 70%. Aby nie być bezpodstawnym, podamy przykłady szczęśliwych zwycięzców w 2012 roku, którzy obstawiali zakłady za pomocą komputera.

W marcu 2012 roku małżeństwo z USA wygrało na loterii w Nowym Jorku ogromną wygraną wynoszącą 218 milionów dolarów. Nie rozwinęły się strategia loterii(przeczytaj sekcję Strategie gier), ale po prostu użyłem funkcji „Automatyczne wybieranie”.

Zwycięzcy rekordowy remis obywatel amerykański Loterie PowerBall, którzy podzielili po równo 586 milionów dolarów, wypełnili swoje kupony za pomocą generatora liczb losowych.

Starsza pani, która nie chciała myśleć o zwycięskiej kombinacji, powierzyła wybór liczb komputerowi i wygrała 336 milionów dolarów.

Zalety generatora liczb losowych

Pierwszą niewątpliwą zaletą wykorzystania tej funkcji jest znaczna oszczędność czasu. Za pomocą jednego kliknięcia możesz postawić kilka zakładów na raz na jedno losowanie dowolnej zagranicznej loterii.

Drugą zaletą jest to, że ułatwia mentalne wysiłki gracza w celu stworzenia zwycięskiej kombinacji. Jeśli nie jesteś fanatykiem numerologii i nie wierzysz w magię liczb, uwierz mi, lepsze niż komputer Nie możesz wymyślić kombinacji liczb.

Trzeci fakt przemawiający na korzyść „Automatycznego wybierania” to absolutnie równe szanse na wygranie jackpota i innych dużych nagród losy na loterię wypełnione własnymi rękami.

Każdego dnia, wszystko więcej ludzi zainteresowany kasynami online. Dla niektórych te gry są po prostu rozrywką, podczas gdy inni uważają je za sposób na zarabianie pieniędzy. Zapewne każdego z graczy zainteresuje sposób działania generatora liczb losowych, który generuje szczęśliwe kombinacje.

Urządzenie do gier hazardowych

Nowoczesny jednoręki bandyta http://igrat-avtomati-wulcan.com ma dość złożony algorytm, który tworzy zwycięskie kombinacje. Można go podzielić na części: czujniki w postaci generatorów, licznik, który przyjmuje płatności i wydaje wygrane, system przechowywania duże nagrody w formie jackpota, algorytm w postaci jądra do wydawania zwycięskich środków. Algorytmy te są uformowane w strukturę mechaniczną w postaci automatów lub ruletki.

Czujnik losowych kombinacji i liczb. (RNG)

Teraz możemy opisać działanie samego RNG. Takie czujniki zostały opracowane z myślą o uczynieniu gry możliwie najbardziej nieprzewidywalną. Taki schemat działa ze względu na równie prawdopodobny czynnik, na przykład zatrzymuje kulkę w różnych otworach na kole ruletki. W przypadku automatów system działa dokładnie tak samo, tyle że zatrzymuje symbole.

W nowoczesnym automacie do gier deweloper może zainstalować więcej niż jeden RNG. Jeśli weźmiemy za przykład grę w trzy siódemki, może istnieć kilka czujników dla poszczególnych kombinacji, a także odrębne gatunki czujnik zatrzymujący numery cyfrowego koła lub bębna.

W grach takich jak Fields of Wonders instalowane są czujniki zatrzymujące liczby w grze, a także czujniki obliczające odstęp czasowy każdej gry i naprawiające przejście do innych boiska. Zastosowanie więcej niż jednego czujnika ma na celu zmniejszenie liczby losowych wygranych. Ponadto w przypadku dużych nagród w postaci jackpotów zwykle umieszczane są osobne czujniki, które losowo wyznaczają zwycięską kombinację, której nie można obliczyć.

Jeśli rozważymy generator liczb losowych z matematycznego punktu widzenia, nie da się obliczyć jego pracy za pomocą różnych wzorów. Jeśli jednak weźmiemy pod uwagę już zwycięską sytuację i przeprowadzimy obliczenia od początku jednej partii do końca, to wzór nadal można napisać. To smutne, że po wydaniu jackpota liczby będą nadal generowane. Nowa formuła, co będzie znane dopiero po wyniku meczu.

Istnieje również opinia, że ​​właściciel maszyny może tak ustawić ustawienia czujników, aby każdy zwycięski slot wypadał warunkowo co 300 lub 500 gier, jednak sam właściciel nie może dokładnie wiedzieć, ile algorytmów będzie być dokładną wygraną. Ale fakt, że czujniki są regulowane, jest faktem. Aby uniknąć konfliktu interesów, instaluje się nie jeden czujnik, ale kilka, w przeciwnym razie właściciel kasyna zawsze pozostawał na plusie, w przeciwnym razie czujnik mógłby zostać obliczony przez jakiegoś rzemieślnika i wyczyścić kasę kasyna w niemal legalny sposób.

Zasada działania generatora liczb losowych znana jest z nieprzewidywalności, jednak przynajmniej w jakiś sposób podatna na analizę, ale w połączeniu z kilkoma dodatkowymi czujnikami wszystko staje się znacznie bardziej zagmatwane, co czyni kasyno sukcesem hazardowym, dzięki czemu jest bardzo popularny na całym świecie.

  • Tłumaczenie

Wyobraź sobie, że jest rok 1995 i masz zamiar dokonać pierwszego zakupu online. Otwierasz przeglądarkę Netscape i popijasz kawę strona głównaŁaduje się powoli. Twoja droga prowadzi do Amazon.com, nowego sklepu internetowego, o którym powiedział Ci znajomy. Kiedy dochodzi do etapu finalizacji zakupu i wprowadzenia danych osobowych, adres w przeglądarce zmienia się z „http” na „https”. Oznacza to, że komputer nawiązał szyfrowane połączenie z serwerem Amazon. Teraz możesz wysłać dane na serwer karta kredytowa bez obawy przed oszustami chcącymi przechwycić informacje.

Niestety, Twój pierwszy zakup online był od samego początku zagrożony: wkrótce odkryjesz, że rzekomo bezpieczny protokół używany przez przeglądarkę do nawiązania połączenia w rzeczywistości nie jest zbyt bezpieczny.

Problem polega na tym, że tajne klucze używane przez Netscape nie były wystarczająco losowe. Miały tylko 40 bitów, co oznaczało około biliona możliwych kombinacji. Wydaje się duża liczba, ale hakerom udało się złamać te kody, nawet na komputerach z lat 90., w około 30 godzin. Ponoć losowa liczba, której Netscape użył do wygenerowania tajnego klucza, została oparta na właśnie trzy znaczenia: pora dnia, numer identyfikacyjny procesu i numer identyfikacyjny procesu macierzystego są przewidywalne. Dzięki temu atakujący był w stanie zmniejszyć liczbę opcji brute-force i znaleźć żądany klucz znacznie wcześniej, niż oczekiwał Netscape.

Programiści Netscape chcieliby użyć całkowicie losowych liczb do wygenerowania klucza, ale nie wiedzieli, jak je zdobyć. Powód jest taki, że komputery cyfrowe znajdują się zawsze w ściśle określonym stanie, który zmienia się dopiero po otrzymaniu określonego polecenia z programu. Najlepsze, co możesz zrobić, to emulować losowość, generując tak zwane liczby pseudolosowe za pomocą specjalnej funkcji matematycznej. Zestaw takich liczb na pierwszy rzut oka wydaje się całkowicie losowy, ale ktoś inny stosując tę ​​samą procedurę może z łatwością wygenerować dokładnie te same liczby, więc zwykle nie nadają się one do szyfrowania.

Naukowcom udało się wynaleźć generatory liczb pseudolosowych, które okazały się bezpieczne kryptograficznie. Muszą jednak zacząć od dobrego losowego materiału siewnego, w przeciwnym razie zawsze będą generować ten sam zestaw liczb. A do tej wartości początkowej potrzeba czegoś, czego naprawdę nie da się odgadnąć ani przewidzieć.

Na szczęście nie jest trudno uzyskać naprawdę nieprzewidywalne wartości, wykorzystując chaotyczny wszechświat otaczający ze wszystkich stron ściśle deterministyczny świat bitów komputerowych. Ale jak dokładnie to zrobić?

Podczas ostatnie lata istnieje internetowe źródło liczb losowych o nazwie Lavarand. Powstał w 1996 roku, aby automatycznie generować losowe wartości poprzez przetwarzanie zdjęć lampy dekoracyjnej – lampy lawowej, która co sekundę zmienia swój wygląd w nieprzewidywalny sposób. Od tego czasu losowe wartości z tego źródła zostały wykorzystane ponad milion razy.

Istnieją również bardziej wyrafinowane sprzętowe generatory liczb losowych, które wykrywają efekty kwantowe, takie jak fotony uderzające w lustro. Możesz uzyskać losowe liczby na zwykłym komputerze, rejestrując nieprzewidywalne zdarzenia, takie jak dokładny czas naciśnięcie klawiszy klawiatury. Ale aby uzyskać dużą liczbę takich losowych wartości, trzeba nacisnąć wiele przycisków.

Moi koledzy i ja w firmie Intel zdecydowaliśmy, że musimy opracować prostszy sposób. Dlatego od ponad dziesięciu lat wiele naszych chipsetów zawiera analogowy sprzętowy generator liczb losowych. Problem polega na tym, że jego obwód analogowy marnuje energię. Ponadto trudno jest utrzymać funkcjonalność tych obwodów analogowych, ponieważ proces produkcji chipów ulega poprawie i zostaje zminiaturyzowany. Dlatego opracowaliśmy teraz nowy, całkowicie cyfrowy system, który pozwala mikroprocesorowi generować bogaty strumień losowych wartości bez tych problemów. Ten nowy cyfrowy generator liczb losowych będzie wkrótce dostępny z nowym procesorem.

Pierwsza próba Intela Tworzenie najlepszego generatora liczb losowych na zwykłych komputerach PC sięga 1999 roku, kiedy Intel wprowadził komponent Firmware Hub dla chipsetów. Generator liczb losowych (PDF) znajdujący się w chipie to analogowy oscylator pierścieniowy, który wykrywa szum termiczny pochodzący z rezystorów, wzmacnia go i wykorzystuje uzyskany sygnał do zmiany okresu stosunkowo wolnego generatora zegara. Na każde nieprzewidywalne „tyknięcie” tego powolnego generatora mikroukład narzucał częstotliwość oscylacji drugiego, szybkiego generatora, który regularnie zmienia swoją wartość pomiędzy dwoma stanami binarnymi: 0 i 1. Rezultatem jest nieprzewidywalna sekwencja zer i jedynek.

Problem w tym, że oscylator pierścieniowy, który odpowiada za wzmocnienie sygnału termicznego, pobiera za dużo prądu – i pracuje ciągle, niezależnie od tego, czy komputer potrzebuje w nim liczb losowych, czy nie. ten moment. Te analogowe komponenty są również uciążliwe, gdy firma zmienia proces produkcji chipów. Co kilka lat firma modernizuje swoje linie produkcyjne, aby produkować chipy na mniejszą skalę. I za każdym razem, gdy ten analogowy fragment trzeba skalibrować i przetestować w nowy sposób – jest to skomplikowane i żmudna praca stał się prawdziwym bólem głowy.

Dlatego w 2008 roku firma Intel podjęła się opracowania generatora liczb losowych działającego całkowicie cyfrowo. Naukowcy z firmy w Hillsboro (Oregon, USA) wraz z inżynierami z Design Lab w Bangalore (Indie) rozpoczęli badania kluczowego problemu - jak uzyskać losowy strumień bitów bez użycia układów analogowych.

Jak na ironię, proponowane przez nich rozwiązanie narusza podstawową zasadę projektowania cyfrowego, zgodnie z którą obwód musi zawsze znajdować się w określonej pozycji i zwracać logiczne 0 lub 1. Oczywiście element cyfrowy może przebywać przez krótki czas w nieokreślonym położeniu, przełączając pomiędzy tymi dwiema wartościami. Musi jednak działać niezwykle precyzyjnie i nigdy nie powinien pomiędzy nimi oscylować, w przeciwnym razie będzie to powodować opóźnienia, a nawet awarie w systemie. W naszym generatorze losowych bitów wahania są cechą, a nie błędem.

Nasz poprzedni generator analogowy był w stanie wygenerować zaledwie kilkaset kilobitów liczb losowych na sekundę, podczas gdy nowy generuje je z szybkością około 3 Gb/s. Zaczyna się od zebrania prawie losowych wartości dwóch falowników w 512-bitowych blokach. Bloki te są następnie dzielone na pary liczb 256-bitowych. Oczywiście, jeśli oryginalne 512 bitów nie jest całkowicie losowe, te 256-bitowe liczby również nie będą całkowicie losowe. Można je jednak matematycznie połączyć, aby uzyskać 256-bitową liczbę bliską ideału.


TRZY POZIOMY NUMERÓW: Generator liczb losowych Intel Bull Mountain zapobiega wszelkim wahaniom przewidywalności w trzyetapowym procesie. Po pierwsze, obwód cyfrowy generuje strumień losowych bitów. Następnie „normalizator” (kondycjoner) generuje dobre losowe nasiona w oparciu o ten strumień. W trzecim etapie generator liczb pseudolosowych generuje strumień cyfr do wykorzystania w oprogramowaniu.

Wszystko to lepiej zilustruje prosta ilustracja. Załóżmy na sekundę, że generator bitów losowych generuje 8-bitowe wzorce, czyli liczby z zakresu od 0 do 255. Załóżmy również, że te 8-bitowe liczby nie są całkowicie losowe. Teraz wyobraźmy sobie, że na przykład jakaś subtelna usterka w obwodzie przesuwa wartości wyjściowe w dolną część zakresu. Na pierwszy rzut oka strumień liczb losowych wydaje się dobry, ale jeśli przetworzysz miliony wartości, zauważysz, że liczby na górze zakresu są nieco rzadsze niż liczby na dole.

Jedno z możliwych rozwiązań tego problemu jest proste: zawsze bierz parę liczb 8-bitowych, mnóż je, a następnie odrzucaj osiem górnych bitów wynikowej liczby 16-bitowej. Ta procedura prawie całkowicie wyeliminuje zniekształcenia.

Bull Mountain nie działa z liczbami 8-bitowymi: działa, jak już wspomniano, z liczbami 256-bitowymi. I nie mnoży ich, ale wykonuje bardziej złożone operacje kryptograficzne. Ale podstawowa idea jest taka sama. Można myśleć o tym kroku jako o „normalizacji” mającej na celu wyeliminowanie wszelkich odchyleń od losowego rozkładu liczb, które mogą wystąpić w obwodzie z dwoma falownikami.

Bardzo chcemy dobrze spać w nocy, dlatego zaprojektowaliśmy dodatkowy układ, który testuje strumienie 256-bitowych liczb trafiających do „normalizatora” tak, aby nie były one zbyt przekrzywione w jednym kierunku. Jeżeli coś takiego zostanie znalezione, oznaczamy je jako wadliwe i niespełniające standardów. Dlatego operacje są wykonywane tylko na parach liczb o wysokiej jakości.

Gwarantowana losowość nie wystarczy, jeśli losowe wartości nie są generowane wystarczająco szybko, aby spełnić standardy. Chociaż układ sprzętowy generuje strumień znacznie szybciej niż jego poprzednicy, dla niektórych to wciąż za mało współczesne zadania. Aby Bull Mountain mógł generować liczby losowe tak szybko, jak programowe generatory liczb pseudolosowych generują strumień, ale jednocześnie oszczędzać wysoka jakość liczb losowych, dodaliśmy do schematu jeszcze jeden poziom. W tym przypadku 256-bitowe liczby losowe są używane jako kryptograficznie bezpieczne nasiona losowe do generowania dużej liczby pseudolosowych liczb 128-bitowych. Ponieważ liczby 256-bitowe są dostarczane z częstotliwością 3 GHz, gwarantuje się wystarczającą ilość materiału do szybkiego wygenerowania kluczy kryptograficznych.

Nowa instrukcja, zwana RdRand, umożliwia programowi potrzebującemu liczb losowych wysłanie żądania do sprzętu, który je produkuje. Zaprojektowana dla 64-bitowych procesorów Intel, instrukcja RdRand jest kluczem do generatora Bull Mountain. Wyodrębnia 16-, 32- lub 64-bitowe wartości losowe i umieszcza je w rejestrze dostępnym dla programu. Instrukcja RdRand została udostępniona publicznie około rok temu, a pierwszym procesorem Intela, który ją obsłuży, będzie Ivy Bridge. Nowy chipset jest o 37% szybszy od poprzednika, a rozmiar jego minimalnych elementów został zmniejszony z 32 do 22 nanometrów. Ogólny wzrost wydajności dobrze pasuje do potrzeb naszego generatora liczb losowych.

Chociaż lampy lawowe wyglądać dobrze, nie będą pasować do każdego wnętrza. Uważamy, że wręcz przeciwnie, nasze podejście do generowania liczb losowych znajdzie najbardziej uniwersalne zastosowanie.

Jak już wspomniano, w przeszłości rejestrowanie dokładnego czasu naciśnięć klawiszy było wygodnym źródłem losowych wartości początkowych dla generatorów. W tym samym celu wykorzystaliśmy ruchy myszy, a nawet prędkość przeszukiwania sektorów na dysku twardym. Jednak takie zdarzenia nie zawsze dają wystarczającą liczbę losowych bitów, a po pewnym czasie pomiaru bity te stają się przewidywalne. Jeszcze gorzej, ponieważ żyjemy obecnie w świecie serwerów