Można się pytać profesora Miodka, czy tytułowe sformułowanie ma sens, bo jeżeli prawdopodobny, to nie przypadek. Przypadek powinien być zaskakujący. Wykonajmy przypadkowe doświadczenie, rzućmy pięć razy monetą.
Jeżeli wypadło: RORRO -to mamy prawdopodobny przypadek, czyli żaden przypadek. Za to wynik RRRRR zaskoczyłby nas, byłby to prawdziwy, dziwny przypadek. To jasne, ale co z takim przypadkiem: ROROR, dziwny jest czy nie?
Rachunek prawdopodobieństwa mówi jedno: wszystkie trzy wypisane przypadki są jednakowo prawdopodobne. Prawdopodobieństwo, że się zdarzą wynosi 0.03125, (=1/25). Czy oznacza to, że RORRO nie różni się niczym od RRRRR? Trochę tak trochę nie. Istotą dziwnych przypadków jest to, że jest ich mniej niż zwykłych.
Ale, które dokładnie przypadki są dziwne? Oczywiście RRRRR, jasne że również OOOOO. Pewnie też ROROR oraz ORORO. Czemu nie OOOOR, może też OOORR? I tak dalej. Za dużo ich jednak być nie może bo przestaną być dziwne.
Czy dałoby się napisać prosty algorytm decydujący o tym, czy pięciobitowa sekwencja jest dziwna, czy nie? To konkurs (z nagrodami).
Procesy losowe łatwe do pojęcia nie są, trzeba się z nimi trochę zapoznać. Zapoznać niekoniecznie studiując rachunek prawdopodobieństwa, choć to metoda zalecana. Można podejść do rzeczy fenomenologicznie, czyli zjawiskowo. Można poeksperymentować i obejrzeć wyniki. Potem, z zebranym doświadczeniem, udać się należy na giełdę kapitałową, analizować trendy, inwestować i wygrywać (albo przegrywać).
Wysoko podrzucona i podkręcona moneta jest bardzo dobrym generatorem losowego bitu. Do następnych artykułów z cyklu "Przypadek prawdopodobny" zostaje temat: dlaczego to kręcąca się moneta jest tak bardzo losowa i co jest najbardziej losowe. Również w przyszłości warto by powiedzieć o tym, dlaczego losowe jest coś co losowe nie jest w ogóle, czyli deterministyczny algorytm generujący liczby losowe. Teraz po prostu, zamiast rzucać monetą, użyjmy funkcji Rnd. Realizowana nawet na kalkulatorze jest znacznie szybsza od latającej monety. Poza tym nie trzeba "wklawiaturowywać" wyniku. Ale oczywiście jest to generator pseudolosowy, a nie losowy naprawdę. Ma się jednak rozumieć, że jak większość rzeczy nieprawdziwych jest doskonalszy, nie tylko szybszy ale również dokładniejszy. Weźmy więc program napisany w STATISTICA Basic:
for i:=1 to NCases do
if Rnd(1)>0.5 then Data(i,1):=1 else Data(i,1):=0;
Żeby przybliżyć sens Rnd zróbmy logiczne błędne koło: skutkiem powyższego algorytmu, który używa Rnd jest ciąg znaków 0011010100. Postawmy przed ciągiem zero-jedynkowym jeszcze jedno zero i kropkę. Otrzymamy: 0.0011010100; normalną liczbę dwójkową, nie mniejszą od zera a mniejszą od jeden. To własnie jest Rnd (w STATISTICA Basic konkretnie Rnd(1) ). Ciąg 0011... można by otrzymać "porządnie" rzucając monetą, otrzymując prawdziwą liczbę losową, a nie tylko "pseudo".
Ponieważ otrzymanie liczby 0.11101 jest tak samo prawdopodobne jak liczby 0.00011 i jak wszystkich innych, mówimy, że rozkład prawdopodobieństwa jest tu równomierny. Dlatego warunek Rnd(1)>0.5 spełniany jest z takim samym prawdopodobieństwem jak spadanie monety orłem do góry. Po konwersji liczb dwójkowych do "ludzkiej postaci" mamy: 0.90625 i 0.09375. Wygenerujmy więcej takich liczb.
for i:=1 to NCases do Data(i,1):=Rnd (1);
Na wykresie (rys.2) liczby te są przedstawione jako punkty. Nie są one połączone ze sobą linią. Tak być powinno, ponieważ nic ich nie łączy. Tak jak kolejne rzuty monetą są zupełnie niezależne od siebie. To brzmi niewiarygodnie, ale po sekwencji RRRRRRRRRRRRR w dalszym ciągu reszka jest tak samo prawdopodobna jak orzeł. Inną rzeczą jest, że zaczynamy podejrzewać, czy ta moneta w ogóle ma orła.
Ładniejszy wykres liczb losowych otrzymamy inaczej. Ładniejszy, to znaczy bardziej rzeczywisty, czyli symulujący coś bardziej realnego niż proste rzuty monetą. Na przykład temperatura powietrza nie zmienia się z dnia na dzień zupełnie. Jeśli wczoraj było zimno, to dziś też raczej będzie co najmniej dość chłodno. Uzależnienie od "wczoraj" robimy tak:
c:=0.8;
Data(1,1):=Rnd (1);
for i:=2 to NCases do
Data(i,1):=c*Data(i-1,1)+(1-c)*Rnd (1);
Zróbmy prawdziwe góry trójwymiarowe:
c:=0.9;
Data(1,1):=Rnd (1);
for i:=2 to NCases do
Data(i,1):=c*Data(i-1,1)+(1-c)*Rnd (1);
for i:=2 to NVars do
Data(1,i):=c*Data(1,i-1)+(1-c)*Rnd (1);
for i:=2 to NCases do
for j:=2 to NVars do
Data(i,j):=c*0.5*(Data(i-1,j)+Data(i,j-1))+(1-c)*Rnd (1);
| Powrót na początek | ||
| Następny artykuł | ||