Modelowanie Rzeczywistości

Pakiet 25 programów zawartych na płycie jest nieodłączną częścią książki:

Modelowanie Rzeczywistości
Iwo Bialynicki-Birula
Iwona Bialynicka-Birula
Wydawnictwa Naukowo-Techniczne, 2006

Szczegółowe informacje o możliwościach programów oraz sposobie ich używania można znaleźć w następujących zakładkach:

Axelrod | Benford | Bernoulli | Bertrand | Buffon
Cantor | Conway | Ehrenfest | Euler | Feigenbaum
Galton | Holland | Hopfield | Huffman | Hyman
Lorenz | Mandelbrot | Pasteur | Poe | Schelling
Shannon | Sierpinski | Smoluchowski | Turing | Ulam

Polską wersję językową Pomocy opracował Tomasz Sowiński


Instalacja pakietu programów Modelowanie Rzeczywistości

Pakiet programów Modelowanie Rzeczywistości

Wstęp
Warunki licencji
Oświadczenie autorów
Wymagania systemowe
Instalacja pakietu
Komentarze użytkowników

Wstęp

Pakiet programów dostarczony na płycie CD jest integralną częścią książki

Modelowanie Rzeczywistości
Iwo Bialynicki-Birula
Iwona Bialynicka-Birula
Wydawnictwa Naukowo-Techniczne, 2006

Wszystkie programy z pakietu Modelowanie Rzeczywistości są ilustracją do zagadnień opisanych w książce. Ich interaktywność, łatwość w obsłudze i jednocześnie duże możliwości w konfigurowaniu parametrów zagadnienia stanowią niewątpliwy walor edukacyjny i dają możliwość dogłębnego zaznajomienia się z modelami, które opisują otaczającą nas rzeczywistość.

Przed zainstalowaniem dostarczonego pakietu programów należy zapoznać się z warunkami licencji oraz oświadczeniem autorów, a następnie podążać za instrukcjami zawartymi w punkcie Instalacja pakietu.

Warunki licencji

  1. Licencję na zainstalowanie i używanie programów posiada właściciel książki, o której mowa jest we wstępie.
  2. Zainstalowanie programów jest równoznaczne z wyrażeniem zgody na warunki niniejszej licencji.
  3. Zabronione jest publikowanie, sprzedawanie i każda inna forma dystrubucji zarówno całego pakietu programów jaki każdej z jego części.
  4. Dozwolone jest prezentowanie programów jako pomocy naukowej podczas lekcji przy zachowaniu następujących warunków:
    1. Osoba prezentująca posiada ważną licencję na używanie pakietu programów.
    2. Podczas każdej prezentacji z wykorzystaniem programów zostanie nadmienione, że program jest częścią całego pakietu załączonego do książki Modelowanie Rzeczywistości.
    3. Dopuszczalne jest zainstalowanie programów na więcej niż jednym komputerze (np. podczas ćwiczeń w pracowni komputerowej). W takim przypadku jednak programy mogą być wykorzystywane tylko podczas prowadzonych zajęć i nie mogą być kopiowane w żadnej formie przez użytkowników.

Oświadczenie autorów

Autorzy programów zastrzegają, że choć dołożyli wszelkich starań, aby programy były najwyższej jakości, to nie ponoszą żadnej odpowiedzialności za skutki używania programów. W szczególności nie biorą odpowiedzialności za wszelkie zniszczenia lub utratę danych wynikające z używania tych programów.

Wymagania systemowe

Do prawidłowego działania programów z pakietu niezbędne są:

  1. System operacyjny: 32-bitowa wersja systemu Microsoft Windows.
  2. Rozdzielczość ekranu: 1024 x 767 lub wyższa.
  3. Dla programu Mandelbrot: zainstalowany program Microsoft DirectX 8 lub wyższy (Instalator DirectX 9 znajduje się na dysku CD).

Instalacja pakietu

Po włożeniu dysku CD do stracji automatycznie nastąpi uruchomienie programu instalacyjnego. Z menu należy wybrać jedną z trzech opcji:

  • zainstalowanie pakietu programów Modelowanie Rzeczywistości,
  • zainstalowanie programu Microsoft DirectX 9.0,
  • uruchomienie Pomocy.

Uwaga: Jeśli po włożeniu płyty CD do stacji nie nastąpi automatyczne uruchomienie programu instalacyjnego należy uruchomić go ręcznie. W tym celu należy otworzyć katalog główny płyty CD i uruchomić znajdujący się w nim program autorun.exe.

Komentarze użytkowników

Jeśli znajdą Państwo w programach jakiekolwiek błędy lub chcieliby Państwo skomentować zawarte w pakiecie programy bardzo prosimy o kontakt.

Życzymy przyjemnej zabawy!


Axelrod - Informacje

Axelrod

(Naciśnij przycisk aby uruchomić program)

Program Axelrod jest implementacją algorytmu genetycznego, który umożliwia znajdowanie najlepszej strategii w grze w iteracyjny dylemat więźnia. Na początku pewna populacja graczy rozgrywa grę w zupełnie przypadkowy sposób. Na skutek gromadzonych informacji o uzyskanych wynikach w poszczególnych rozgrywkach każdy gracz dopasowuje swoje zachowanie tak, aby zwiększać prawdopodobieństwo swojej wygranej. Tym sposobem cała populacja ewolucyjnie się zmienia, aż ostatecznie powstaje taka generacja, która znalazła najlepszą strategię gry.

Szczegółowe informacje na temat obsługi programu można znaleźć w następujących zakładkach:

Jak używać programu Axelrod?
Zastosowany algorytm genetyczny
Wizualizacja wyników

Zalecenie: Aby lepiej zrozumieć do czego służy program i co ilustruje proponujemy przed rozpoczęciem jego używania zapoznać się z rozdziałem 11. książki Modelowanie Rzeczywistości, w którym jest mowa o teorii gier oraz o grze w dylemat więźnia.


Jak używać programu Axelrod?

Axelrod - Informacje

Zastosowany w programie algorytm genetyczny symuluje ewolucję genetyczną pewnej populacji. Na początku każdy gracz ma losowo wybrane geny. Geny określają zachowanie się gracza podczas rozgrywania gry. W każdym kroku symulacji gracze z populacji rozgrywają między sobą grę tzw. iteracyjnego dylematu więźnia w wyniku czego gromadzą punkty. Po zakończeniu rozgrywek, na skutek krzyżowania i mutowania genów, powstaje nowa generacja populacji. Przy czym zastosowana jest reguła, że większą szansę na przekazanie swoich genów mają te organizmy, które podczas rozgrywek uzyskały lepszy wynik. Dzięki temu nowa generacja ma większe szanse na stosowanie lepszej strategii gry. Szczegółowy opis w jaki sposób zrealizowany jest ten algorytm znajduje się w zakładce Zastosowany algorytm genetyczny.

Geny każdego organizmu z aktualnej populacji są wyświetlone w lewej części okna programu. Po prawej stronie wyświetlona jest informacja o podziałach w populacji, tzn. jaka część organizmów daje określoną odpowiedź w konkretnej sytuacji. Dokładne informacje jak należy rozumieć wyświetlone informacje o stanie genetycznym populacji można znaleźć w zakładce Wizualizacja wyników.

W pasku statusu na samym dole okna programu wyświetlana jest informacja o aktualnej generacji.

Aby rozpocząć symulację należy nacisnąć przycisk Go [Rozpocznij]. Użytkownik może w każdej chwili zatrzymać symulację naciskając przycisk Stop. Aby rozpocząć całą symulację od początku, tzn. wylosować geny poszczególnych organizmów, należy nacisnąć przycisk Reset. Użytkownik może zmieniać parametry algorytmu. W tym celu należy nacisnąć przycisk Settings [Ustawienia]. Otworzy się nowe okno, które umożliwia wprowadzanie zmian parametrów.


Axelrod: zastosowany algorytm genetyczny

Zastosowany algorytm genetyczny w programie Axelrod

Axelrod - Informacje

Zasady gry

Iteracyjny dylemat więźnia to dwuosobowa gra rozgrywana w turach złożona z g pojedynczych gier w dylemat więźnia. W każdej grze, każdy zawodnik decyduje niezależnie od pozostałych, czy błaga o uniewinnienie, czy przyznaje się do winy. Następnie, na podstawie zdefiniowanej macierzy zapłaty są obliczane punkty zdobyte przez każdego zawodnika. Macierz zapłaty określa ile punktów otrzymuje każdy z dwóch grających zawodników w zależności od tego jaka kombinacja ich decyzji zapadła podczas gry (niewinny + niewinny, niewinny + winny, winny + niewinny, winny + winny). Po zakończeniu rozgrywki rozpoczyna się kolejna runda. Ponieważ zdobywane w grze punkty można interpretować jako lata jakie przyjdzie zawodnikowi spędzić w więzieniu, to lepszą punktację ma ten zawodnik, który uzbierał mniej punktów.

Parametr g może być ustawiony poprzez podanie jego wartości w polu Games in a session [Liczba gier w każdej turze] w formularzu dostępnym po naciśnięciu przycisku Settings [Ustawienia]. W tym samym formularzu użytkownik może również ustawić parametry macierzy zapłaty w sekcji Payoff matrix [Macierz zapłaty]. Liczby wpisane w odpowiednie pola tekstowe oznaczają liczbę wypłacanych punktów w przypadku otrzymania konkretnej kombinacji decyzji. Kolumny oznaczają decyzję gracza, a wiersze decyzję jego przeciwnika (wiersze i kolumny są oznaczone odpowiednio Innocent [Niewinny], Guilty [Winny]).

Genotyp

Genotyp każdego gracza jednoznacznie określa jak zagra zawodnik w najbliższej grze. Zadaniem programu jest znaleźć ewolucyjnie taki genotyp, aby zawodnik spędził jak najmniej czasu w więzieniu. Genotyp pozwala zawodnikowi podjąć decyzję jak zagrać na podstawie wyników uzyskanych w trzech poprzedzających grach i w związku z tym ma długość 64 jednobitowych genów. Jest tak dlatego, że w wyniku każdej rozgrywki możliwe są cztery różne rozstrzygnięcia (niewinny + niewinny, niewinny + winny, winny + niewinny lub winny + winny), a zatem po trzech grach zawodnik może być w jednej z 43=64 różnych sytuacji. Skoro zawodnik na podstawie genotypu musi wiedzieć jak zagrać w każdej z nich to genotyp powinien mieć właśnie długość 64 genów. Gdy gracz rozpoczyna rozgrywki oczywiście nie zna wyników trzech poprzednich gier. W związku z tym jego genotyp musi dodatkowo zawierać informację o tym co powinien zakładać zawodnik o poprzednich grach, gdy rozpoczyna rozgrywki. Informacja ta zawarta jest w dodatkowych 6 bitach na końcu genotypu. Cały genotyp zawodnika zawiera zatem 70 bitów i całkowicie określa postepowanie zawodnika podczas gry w iteracyjny dylemat więźnia.

Algorytm

Populacja składa się z p więźniów. W każdym kroku symulacji rozgrywanych jest t zawodów iteracyjnego dylematu więźnia. W każdych zawodach, każdy zawodnik rozgrywa dokładnie dwie gry (każdą z losowo wybranym zawodnikiem z populacji), w których gra dokładnie tak jak wynika to z jego genotypu. Po zakończeniu wszystkich zawodów (przypomnijmy, że jest ich t) zawodnicy mają zgromadzoną odpowiednią liczbę punktów. Na ich podstawie program każdemu zawodnikowi przypisuje tzw. prawdopodobieństwo reprodukcji, które jest proporcjonalne do różnicy pomiędzy jego punktami, a punktami najgorszego (z największą liczbą punktów) gracza. Prawdopodobieństwa są unormowane tak, aby ich suma po wszystkich graczach z populacji wynosiła 1.

Użytkownik ma możliwość ustawienia opisanych parametrów p i t wpisując odpowiadające im liczby do pól tekstowych Population size [Wielkość populacji] i Sessions per generation [Liczba zawodów na krok symulacji]. Znajdują się one w formularzu dostępnym po naciśnięciu przycisku Settings [Ustawienia].

Po obliczeniu prawdopodobieństw reprodukcji program przystępuje do zbudowania nowej generacji graczy. Nowa generacja składa się z tej samej liczby graczy co poprzednia (chyba, że zmieniony został parametr Population size [Rozmiar populacji]). Dla każdego nowego gracza losowanych jest dwóch przodków spośród graczy poprzedniej generacji, przy czym prawdopodobieństwo wylosowania danego gracza jako przodka jest równe prawdopodobieństwu reprodukcji. Następnie geny przodków są krzyżowane, tzn. losowo zamieniane. Prawdopodobieństwo skrzyżowania każdej pary genów jest takie samo i jest równe c. Geny podlegają również mutacji, tzn. z pewnym prawdopodobieństwem m jest możliwe, że przy konstruowaniu nowego genotypu jeden z genów zmieni się na przeciwny. W ten sposób konstruowany jest genotyp każdego gracza nowej generacji. Ostatecznie, w wyniku naturalnej selekcji powstaje populacja, która potrafi uzyskiwać korzystniejsze wyniki od poprzedniej.

Prawdopodobieństwo krzyżowania c i mutacji m może zostać ustawione przez użytkownika. W tym celu należy wpisać odpowiednie liczby do pól tekstowych Crossover probability [Prawdopodobieństwo krzyżowania] i Mutation probability [Prawdopodobieństwo mutacji]. Znajdują się one w formularzu dostępnym po naciśnięciu przycisku Settings [Ustawienia].


Axelrod: wizualizacja wyników

Wizualizacja wyników w programie Axelrod

Axelrod - Informacje

Podczas rozgrywania gry w iteracyjny dylemat więźnia gracze podejmują decyzję winny/niewinny na podstawie wyników trzech poprzednich gier. Szczegółowe informacje na ten temat znajdują się w zakładce Zastosowany algorytm genetyczny. Nazwijmy dla uproszczenia wyniki trzech ostatnich gier sytuacją.

Oznaczenie decyzji

W programie Axelrod każda decyzja podjęta przez gracza ma przypisany kolor: zielony, czyli niewinny i czerwony, czyli winny.

Oznaczenie sytuacji

Konkretna sytuacja jest zbiorem 2 x 3=6 decyzji (dwóch graczy w trzech grach). Konkretną sytuację reprezentujemy przez prostokąt złożony z dwóch wierszy i trzech kolumn. Kolumny odpowiadają poszczególnym grom, a wiersze poszczególnym zawodnikom. Kolor każdego kwadratu odpowiadającego konkretnej decyzji odpowiada decyzji jaką podjął dany gracz w danej grze. Dla przykładu rozważmy diagram przedstawiony poniżej. Oznacza on sytuację, w której obaj gracze podjęli trzy gry wcześniej decyzję niewinny, później przeciwnik podjął decyzję winny, a zawodnik podjął znów decyzję niewinny. W ostatniej grze zawodnik zdecydował winny, a przeciwnik niewinny.

 | Trzy gry temu | Dwie gry temu | Ostatnia gra
Ja | b5 | b3 | b1
Przeciwnik | b4 | b2 | b0

Uwaga: Wszystkie możliwe sytuacje mogą być ponumerowane liczbami od 0 do 63 w następujący sposób. Decyzję niewinny oznaczamy przez 0, a decyzję winny przez 1. Każdy wynik pojedynczej gry jest parą bitów. Zatem sytuacja jest zbiorem 6 bitów i tym samym może być reprezentowana przez liczbę z wspomnianego zakresu. Należy się jedynie umówić jak mają być ustawione bity tworzące liczbę. Wygodnie jest ponumerować kolejność bitów tak jak, jest zaznaczone na powyższym diagramie. Wtedy liczbę odpowiadającą danej sytuacji można obliczyć ze wzoru:

Oznaczenie genotypu

Lista po lewej stronie okna programu zawiera informacje o genotypie każdego gracza z populacji. Genotyp jest podzielony na dwie części: zbiór 64 decyzji, które podejmuje gracz w zależności od sytuacji w jakiej się znajduje, oraz sytuację jaką należy założyć na początku rozgrywek. Decyzje są wyświetlone w kolumnie Response strategy [Strategia odpowiedzi], a sytuacje początkowe w kolumnie Initial assumption [Założenie początkowe]. Użytkownik może sortować populację względem każdej z tych kolumn naciskając nagłówek z nazwą odpowiedniej kolumny.

Własności całej populacji

Lista po prawej stronie okna programu zawiera uśrednione informacje o reakcji całej populacji na konkretną sytuację. W kolumnie Situation [Sytuacja] wyświetlone są wszystkie możliwe sytuacje w jakich może znaleźć się gracz. Dla każdej z tych sytuacji w kolumnie Response [Odpowiedź] znajduje się informacja o reakcji populacji. Długość zielonego słupka jest proporcjonalna do liczby graczy, którzy w danej sytuacji odpowiedzieliby niewinny. Długość słupka czerwonego jest proporcjonalna do liczby tych graczy, którzy w danej sytuacji odpowiedzieliby winny. Niebieski pasek w kolumnie Initially assumed [Początkowo założone] ma długość proporcjonalną do liczby tych graczy, którzy zakładają daną sytuację jako początkową. Dane prezentowane na tej liście można sortować naciskając odpowiedni nagłówek z nazwą kolumny.

Jeśli zaznaczona jest opcja Current [Aktualnie], to dane prezentowane w liście po prawej stronie ekranu dotyczą aktualnej generacji. Zaznaczenie opcji Average [Średnia] powoduje wyświetlenie danych, które są uśrednione po wszystkich populacjach graczy, które do tej pory powstały.


Benford - Informacje

(Naciśnij przycisk aby uruchomić program)

Program Benford oblicza liczbę wystąpień konkretnych cyfr w danym zbiorze danych liczbowych i porównuje ich rozkład z tzw. prawem Benforda.

Prawo Benforda jest na pierwszy rzut oka bardzo nieintuicyjne. Mówi ono bowiem, że cyfry występujące w liczbach, które opisują otaczający nas świat (np. w liczbach określających zaludnienie lub powierzchnię państw) występują z niejednakową częstością.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Benford?

Szczegółowe informacje na temat prawa Benforda można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 4.


Jak używać programu Benford?

Benford - Informacje

Zbiór danych, który jest analizowany wyświetlony jest w polu tekstowym po prawej stronie okna programu. Wykres na dole okna obrazuje liczbę wystąpień konkretnej cyfry w danym zbiorze i porównuje wynik z logarytmicznym rozkładem prawa Benforda.

Użytkownik ma możliwość wprowadzenia danych do analizy na trzy sposoby:

  • Wczytanie jednego z czterech przykładowych zbiorów danych załączonych do programu.
  • Przeanalizowanie plików na twardym dysku w celu utworzenia listy z ich rozmiarami.
  • Wczytanie danych ze wskazanego pliku.

Wczytywanie przykładowego zbioru danych

W sekcji Data to analyze [Dane do analizy] znajdują się cztery przyciski, które umożliwiają użytkownikowi wczytanie jednego z następujących przykładowych zbiorów danych:

  • Populations of countries worldwide [Zaludnienie państw na świecie] - liczba ludzi zamieszkująca poszczególne kraje świata w 2000 roku.
    Źródło: US Census Bureau, International Data Base.
  • Areas of countries worldwide [Powierzchnia państw na świecie] - podana w km2 powierzchnia wszystkich państw na świecie wg granic z 2000 roku.
    Źródło: US Census Bureau, International Data Base.
  • List of Magnitudes [Różne stałe] - zbiór różnych stałych występujących w naukach przyrodniczych.
    Źródło: Compiled by George Goth of Skyline College, San Bruno, CA; http://smccd.net/accounts/goth/MainPages/magphys.htm.
  • Company values [Wartości spółek] - notowania akcji różnych spółek z dnia 30 września 2003 roku na giełdzie w Nowym Jorku.
    Źródło: New York Stock Exchange (NYSE).

Analiza plików na dysku

Użytkownik ma możliwość wygenerowania zbioru danych do na podstawie analizy posiadanych plików zapisanych na twardym dysku komputera. Po naciśnięciu przycisku Scan disk for file sizes [Skanuj dysk w poszukiwaniu długości plików] oraz wskazaniu odpowiedniego dysku i katalogu program sprawdzi długość każdego występującego w nim pliku. Na tej podstawie zostanie stworzony obszerny zbiór danych, które można porównać z prawem Benforda. W każej chwili skanowanie wskazanego katalogu można przerwać naciskając przycisk Stop.

Uwaga: Podczas skanowania wskazanego katalogu skanowane są również wszystkie jego podkatalogi.

Czytanie danych ze wskazanego pliku

Można również analizować dowolne zbiory danych liczbowych. Aby przeanalizować dane zawarte w pliku stworzonym wcześniej przez użytkownika należy nacisnąć przycisk Import data from file [importuj dane z pliku] i następnie wskazać odpowiedni plik. Plik z danymi musi być plikiem tekstowym, w którym dane zawarte są w kolumnach oddzielonych znakiem tabulacji. Jeśli w pliku znajduje się tylko jedna kolumna, to dane w niej zawarte interpretowane są jako dane przeznaczone do analizy. Jeśli natomiast w pliku znajdują się dwie lub więcej kolumn, to wtedy informacje zawarte w pierwszej kolumnie interpretowane są jako opisy danych przeznaczonych do analizy, a dane wczytywane są z drugiej kolumny. Wszystkie następne kolumny są ignorowane.

Fragment przykładowego pliku zawierającego tylko jedną kolumnę:

647497
27399
2381730
...

Fragment przykładowego pliku zawierającego kolumnę z opisami oraz kolumnę z danymi:

Afghanistan<TAB>647497
Albania<TAB>27399
Algeria<TAB>2381730
...

Znak <TAB> oznacza znak tabulacji.

Takie pliki można łatwo wygenerować eksportując dane np. z programu Excel, Access lub dowolnego innego programu, który potrafi zapisywać dane do plików tekstowych oddzielając dane znakiem tabulacji.


Bernoulli - Informacje

Bernoulli

(Naciśnij przycisk aby uruchomić program)

Program Bernoulli służy do obliczania liczby wystąpień sekwencji jednakowych znaków (w tym przypadku 1) o określonej długości w danej próbce binarnej (złożonej z dwóch znaków 0 i 1). Pozwala to sprawdzić jak często w danym ciągu znaków występują powtarzające się sekwencje. Jest to jedna z metod sprawdzenia wiarygodności generatora liczb pseudolosowych.

Sekwencja do analizy może być wprowadzona przez użytkownika (np. skopiowana z innego programu, który chcemy przetestować) lub wylosowana przez komputer.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Bernoulli?.

Dodatkowe informacje na temat zastosowanego generatora liczb pseudolosowych można znaleźć w zakładce Generator liczb pseudolosowych.


Jak używać programu Bernoulli?

Bernoulli - Informacje

Wprowadzanie sekwencji binarnej, która zostanie poddana analizie odbywa się na jeden z dwóch sposobów określonych w sekcji Generate sequence [Generowanie sekwencji]:
  • Wprowadzanie ręczne sekwencji - należy zaznaczyć opcję Manually [Ręcznie], a następnie wpisać zadany ciąg binarny do okna tekstowego znajdującego się po prawej stronie. Sekwencja może być również wklejona ze schowka systemowego (np. jest to użyteczne gdy stosujemy inny program do generowania ciągów binarnych). Wszystkie wprowadzone znaki, które nie są 1 lub 0 są ignorowane.
  • Użycie generatora - należy zaznaczyć opcję Using a random number generator [Użycie generatora liczb losowych], a następnie podać długość ciągu jaki ma być wygenerowany. Po naciśnięciu przycisku Generate [Generuj] program wpisze do okna tekstowego wygenerowany ciąg.

Statystyka

Gdy ciąg, który ma być poddany analizie jest już wpisany do okna tekstowego możemy rozpocząć proces analizowania. W tym celu należy wcisnąć przycisk Calculate statistics [Zrób statystykę]. Po skończeniu analizowania ciągu program automatycznie wyświetli okno z histogramem otrzymanego rezultatu. Poziome słupki określają liczbę wystąpień sekwencji złożonych ze znaku 1 odpowiednio o długości 1, 2,...

Warto zauważyć, że przy losowaniu ciągów za pomocą wbudowanego generatora liczb pseudolosowych krótkie sekwencje jedynek występują odpowiednio częściej niż długie. Niemniej jednak sekwencje długie również występują. To spostrzeżenie pozwala łatwo odróżnić ciągi wygenerowane przez osobę naiwną od tych wygenerowanych przez komputer. Człowiek bowiem, gdy dostaje zadanie zbudowania losowego ciągu znaków, nie docenia częstotliwości występowania długich sekwencji tych samych znaków. W prawdziwych ciągach losowych występują one częściej, niż nam się wydaje.


Bertrand - Informacje

Bertrand

(Naciśnij przycisk aby uruchomić program)

Program Bertrand ilustruje słynny w teorii prawdopodobieństwa paradoks Bertranda. Wykorzystując metodę Monte Carlo program numerycznie oblicza prawdopodobieństwo, że losowo wybrana cięciwa okręgu jest dłuższa od boku trójkąta równobocznego wpisanego w ten okrąg.

W programie można wybrać jeden z czterech sposobów w jaki będzie losowana cięciwa. Wyznaczone w taki sposób prawdopodobieństwo dla każdego z tych przypadków okazuje się różne. Prowadzi do pozornej sprzeczności w teorii prawdopodobieństwa zwanej paradoksem Bertranda.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Bertrand?.

Dodatkowe informacje na temat zastosowanego generatora liczb pseudolosowych można znaleźć w zakładce Generator liczb pseudolosowych.

Szczegółowe informacje o Paradoksie Bertranda można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 3.


Jak używać programu Bertrand?

Bertrand - Informacje

Sposób w jaki mają być losowane cięciwy okręgu użytkownik określa wybierając jedną z dostępnych opcji w sekcji Random model [Sposób losowania]. Do wyboru są następujące możliwości:

  • Random shift [Losowe przesunięcie] - wylosowane cięciwy mają ustalony kierunek na płaszczyźnie (pionowy). Ich długość jest wyznaczona przez wylosowaną odległość od środka okręgu.
  • Random angle [Losowy kąt] - wylosowane cięciwy wychodzą z ustalonego punktu na okręgu. Ich długość jest wyznaczona przez wylosowany kąt jaki tworzą z promieniem okręgu.
  • Random center [Losowy środek] - długość cięciwy jest wyznaczona przez wylosowany punkt wewnątrz okręgu, który jest środkiem cięciwy.
  • Random two points [Losowe dwa punkty] - długość cięciwy jest wyznaczona przez wylosowane dwa punkty wewnątrz okręgu, przez które przechodzi cięciwa.

Program generuje kolejne cięciwy według ustalonego przez użytkownika schematu i sprawdza, czy wylosowana cięciwa jest dłuższa od boku równobocznego trójkąta wpisanego w ten okrąg. Cięciwy dłuższe od boku trójkąta wyświetlane są na czerwono, a krótsze na niebiesko. Dokładna liczba cięciw każdego rodzaju jest wyświetlana na dole okna i na tej podstawie szacowane jest prawdopodobieństwo.

Po naciśnięciu przycisku Reset [Wyczyść] zostają wymazane wszystkie cięciwy oraz usunięte z pamięci wszystkie zebrane informacje. Procedura opisana powyżej automatycznie rozpoczyna się od początku.

Aby zmienić prędkość losowania kolejnych cięciw można użyć suwaka po lewej stronie.


Buffon - Informacje

Buffon

(Naciśnij przycisk aby uruchomić program)

Program Buffon wykorzystując generator liczb pseudolosowych symuluje wielokrotny rzut monetą. Oblicza on automatycznie liczbę wystąpień orła i reszki. Podaje również w procentach stosunek liczby otrzymanych orłów do liczby wszystkich rzutów oraz odstępstwo od przewidywanego wyniku "pół na pół".

Program znakomicie ilustruje jak należy rozumieć to, że prawdopodobieństwo wypadnięcia orła jest równe 1/2. Jeśli rzut monetą powtórzymy wielokrotnie, to odstępstwo od przewidywanego wyniku "pół na pół" będzie tym mniejsze im więcej rzutów wykonamy. Zatem dopiero po hipotetycznym wykonaniu nieskończenie wielu rzutów wynikiem w połowie z nich byłby orzeł, a w połowie reszka.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Buffon?.

Dodatkowe informacje na temat zastosowanego generatora liczb pseudolosowych można znaleźć w zakładce Generator liczb pseudolosowych.

Szczegółowe informacje o zagadnieniu Buffona można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 3.


Jak używać programu Buffon?

Buffon - Informacje

Symulację wielokrotnego rzutu monetą użytkownik powinien rozpocząć od podania liczby rzutów monetą do wykonania. Liczbę należy podać w polu na samej górze okna. Powinna to być oczywiście liczba całkowita. Następnie aby rozpocząć losowanie należy nacisnąć przycisk Toss [Rzucaj].

Jeśli użytkownik poda bardzo dużą liczbę rzutów, to symulacja może trwać nawet kilka sekund. Pewność, że program działa i symulacja jest w toku obrazowany jest w pasku postępu na dole okna programu. Po zakończeniu symulacji program wyświetla następujące informacje:

  • The total number of tosses [Całkowita liczba rzutów].
  • The total number of heads [Całkowita liczba orłów].
  • Deviation [Odstępstwo] czyli różnica pomiędzy 1/2 a stosunkiem liczby orłów do całkowitej liczby rzutów.

Jeśli zadana przez użytkownika liczba rzutów jest większa niż 1 to na dole okna wyświetlany jest wykres obrazujący procentowy udział orłów we wszystkich rzutach wykonanych do danego momentu. Na wykresie widać jak wraz ze wzrostem liczby rzutów krzywa zbliża się do wartości 50%. Tym samym widzimy, że prawdopodobieństwo wystąpienia orła (które jest równe 1/2) ma interpretację stosunku liczby wystąpień orła do liczby wszystkich rzutów, gdy liczba rzutów dąży do nieskończoności.


Cantor - Informacje

Cantor

(Naciśnij przycisk aby uruchomić program)

Program Cantor pozwala użytkownikowi projektować i wykreślać dwuwymiarowe fraktale, czyli zbiory mające własność samopodobieństwa. Użytkownik ma możliwość określenia sposobu powstawania zbioru za pomocą interfejsu graficznego i jednoczesnego oglądania powstałego fraktala. Projekty fraktali mogą być przechowywane na dysku w postaci plików tekstowych. Program dostarczany jest wraz z zestawem kilku najpopularniejszych przykładów zbiorów fraktalnych takich jak paproć Barnsleya, czy dywan Sierpińskiego.

Szczegółowe informacje na temat obsługi programu można znaleźć w następujących zakładkach:


Jak używać programu Cantor?

Cantor - Informacje

Definiowanie i oglądanie fraktali

Użytkownik ma możliwość zdefiniowania własnego fraktala za pomocą pola Fractal definition [Definicja fraktala] oraz listy Components [Składniki]. Szczegółowe informacje na temat projektowania fraktali można znaleźć w zakładkach O projektowaniu zbiorów samopodobnych i Projektowanie fraktali za pomocą programu Cantor.

Podczas projektowania własnego fraktala w polu Preview [Podgląd] w czasie rzeczywistym generowany jest podgląd zbioru samopodobnego odpowiadającego aktualnej definicji. Aby zobaczyć zbiór ze szczegółami należy otworzyć okno Fractal [Fraktal] za pomocą przycisku Show fractal [Pokaż fraktal] na pasku narzędzi.

Uwaga: Każda zmiana w projekcie fraktala automatycznie skutkuje zmianami zarówno na podglądzie jak i w oknie Fractal. Przy bardziej skomplikowanych projektach rysowanie fraktala może zająć dłuższą chwilę.

Otwieranie i zapisywanie plików

Projekt fraktala stworzony przez użytkownika można w każdej chwili zapisać do pliku tekstowego. Szczegółowe informacje na temat parametrów opisujących zbiór samopodobny znajdują się w zakładce Projektowanie fraktali. Domyślnie plik zostaje zapisany z rozszerzeniem *.can i może być później otworzony programem Cantor.

Aby zapisać aktualny projekt do pliku należy nacisnąć przycisk Save [Zapisz] na pasku narzędzi i podać odpowiednią nazwę pliku.

Aby wczytać wcześniej zapisany projekt należy nacisnąć przycisk Open [Otwórz] na pasku narzędzi i wskazać odpowiedni plik. W katalogu gdzie zostały zainstalowane programy pakietu znajdują się przykładowe projekty fraktali opisane dokładnie w zakładce Przykładowe zbiory fraktalne.


Cantor: o projektowaniu zbiorów samopodobnych

O projektowaniu zbiorów samopodobnych

Cantor - Informacje

Figura samopodobna, ze względu na swoją naturę, może być zdefiniowana w sposób rekurencyjny. Taka definicja składa się z pewnych stałych elementów, które w określony sposób są transformowane w każdym kroku rekurencji. Dozwolonymi transformacjami są: przesuwanie, skalowanie poziome lub pionowe, obracanie, ścinanie i odbicie lustrzane. Krótko mówiąc dozwolone są wszystkie operacje na płaszczyźnie, które przekształcają punkt o współrzędnych (x,y) w punkt o współrzędnych (x',y') zgodnie ze wzorem:

Jako przykład niech posłuży nam słynny fraktal zwany liściem paproci Barnsley'a:

Liść ten jest zbudowany z czterech przetransformowanych mniejszych liści. Na rysunku przedstawionym poniżej zaznaczone są cztery mniejsze elementy (dla przejrzystości każdy innym kolorem), które definiują fraktal.

Uwaga: Czwarty (żółty) element, który tworzy nóżkę liścia jest ściśnięty niemal do odcinka. Niemniej jednak jest on nadal przetransformowaną wersją całego liścia.

Aby stworzyć na tej podstawie projekt fraktala wystarczy podać względne położenie i rozmiary odpowiednich czterech prostokątów zaznaczonych na rysunku. Rysunek takiego projektu znajduje się poniżej. Litera F wpisana w prostokąty pozwala odróżnić kierunek obrotów, odbicie lustrzane, itp.

Powyższa definicja paproci Barnsley'a może być skonstruowana w programie Cantor za pomocą interfejsu graficznego. Szczegółowe informacje, jak można wykonać różne transformacje w programie, znajdują się w zakładce Projektowanie fraktali za pomocą programu Cantor.


Cantor: projektowanie fraktali

Projektowanie fraktali za pomocą programu Cantor

Cantor - Informacje

Aby uzyskać podstawowe informacje na temat reguł konstruowania zbiorów samopodobnych należy zapoznać się z informacjami w zakładce O projektowaniu zbiorów samopodobnych.

Zaznaczanie elementów

Aby zaznaczyć odpowiedni element projektu należy wskazać jego wizualną reprezentację w polu Fractal definition [Definicja fraktala] i nacisnąć lewy przycisk myszki. Element można również zaznaczyć wybierając odpowiednią liczbę z listy Components [Elementy] po lewej stronie okna programu. Zaznaczony element jest dla odróżnienia narysowany kolorem ciemnoniebieskim.

Dodawanie i usuwanie elementów

Aby usunąć element z projektu należy zaznaczyć go i nacisnąć przycisk Remove [Usuń] lub nacisnąć klawisz Del na klawiaturze. Można również nacisnąć prawy klawisz myszki na konkretnym elemencie w polu Fractal definition [Definicja fraktala] i następnie wybrać z menu opcję Delete [Usuń].

Aby dodać nowy element do projektu należy nacisnąć przycisk Add [Dodaj] lub nacisnąć kombinację klawiszy Ctrl-N na klawiaturze. Można również nacisnąć prawy klawisz myszki w polu Fractal definition [Definicja fraktala] i wybrać opcję New transformation [Nowa transformacja]. Nowy element domyślnie nie jest obrócony, nie jest ściśnięty i jest przeskalowany w stosunku 1:2.

Program rozpoczyna pracę domyślnie z jednym elementem w skali 1:2. Aby fraktal miał interesującą strukturę jego projekt musi się oczywiście składać z więcej niż jednego elementu. W każdej chwili użytkownik ma możliwość rozpoczęcia pracy od samego początku naciskając przycisk New [Nowy].

Uwaga: Nie można usunąć wszystkich elementów z projektu. W każdej chwili projekt musi się składać przynajmniej z jednego elementu.

Transformacje elementów

Istnieją dwie możliwości zdefiniowania odpowiedniej transformacji elementu: za pomocą myszki w polu Fractal definition [Definicja fraktala] lub przez wprowadzenie odpowiednich parametrów w panelu Transformation properties [Własności transformacji].

Ustalanie transformacji za pomocą myszki

Aby określić transformację elementu należy go zaznaczyć. Wtedy określony element (zaznaczony kolorem ciemnoniebieskim) jest otoczony pięcioma mniejszymi kwadratami, które umożliwiają definiowanie transformacji.

  • Aby przesunąć element należy użyć standardowej metody drag-and-drop (Ciągnij-i-upuść).
  • Aby przeskalować element należy przesunąć za pomocą lewego przycisku myszki odpowiedni zielony kwadrat do uzyskania odpowiedniego rozmiaru.
  • Aby obrócić element należy przesunąć za pomocą lewego przycisku myszki czerwony kwadrat do uzyskania odpowiedniego kąta.
  • Aby ściąć element należy przesunąć za pomocą lewego przycisku myszki żółty kwadrat do uzyskania odpowiedniego współczynnika ścinania.

Ustalanie transformacji za pomocą parametrów

Aby określić transformację podając jej parametry należy zaznaczyć określony element, a następnie skorzystać z panelu Transformation properties [Własności transformacji].

Użytkownik ma możliwość ustawienia, czy panel ma być widoczny, czy też nie, naciskając odpowiedni przycisk Show / hide properties toolbox [Pokaż/ukryj panel ustawień] na pasku narzędzi. Widoczność panelu można również ustawić wybierając odpowiednią opcję po naciśnięciu prawego klawisza myszki.

Panel Transformation properties [Własności transformacji] umożliwia określanie transformacji na dwa sposoby naturalnie i analitycznie. Użytkownik może się przełączać pomiędzy tymi dwoma trybami wybierając odpowiednią zakładkę w panelu.

Naturalne parametry to Shift [Przesunięcie], Scale [Skala], Rotate [Obrót] i Skew [Ścinanie]. Przesunięcie jest określone pomiędzy środkiem pola Fractal definition [Definicja fraktala], a środkiem elementu przy założeniu, że bok pola ma długość 1. Skala, obrót i współczynnik ścinania są określone względem środka elementu. Odpowiednie parametry należy wpisać do pól tekstowych znajdujących się w panelu. Współczynniki skali należy podawać jako ułamki dziesiętne, a obrót i współczynnik ścinania jako kąt mierzony w stopniach.

Parametry analityczne definiują jak każdy punkt pola o współrzędnych (x,y) transformuje się w punkt elementu o współrzędnych (x',y'). Parametry te to liczby a, b, c, d, e i f, które definiują transformację

Ułatwienia i skróty klawiszowe

Program potrafi współpracować ze schowkiem systemowym. W związku z tym dostępne są standardowe funkcje systemowe Cut [Wytnij], Copy [Kopiuj] i Paste [Wklej]. Są one dostępne po naciśnięciu prawego przycisku na odpowiednim elemencie w polu Fractal definition [Definicja fraktala]. Funkcje te są również dostępne z klawiatury za pomocą standardowych skrótów klawiszowych Ctrl-X, Ctrl-C i Ctrl-V. Dodatkowo program daje możliwość wykonania duplikatu elementu wraz ze wszystkimi jego parametrami transformacyjnymi (bez przesunięcia). Funkcja ta jest dostępna z menu rozwijanego za pomocą prawego przycisku myszki (funkcja Duplicate) lub za pomocą kombinacji klawiszy Ctrl-D na klawiaturze.

Menu, które rozwija się po naciśnięciu prawego przycisku myszki zawiera podmenu Transform [Transformuj]. Są w nim zawarte najczęściej używane transformacje takie jak odbicie lustrzane (pionowe i poziome) oraz obrót o wielokrotność kąta 90 stopni.


Cantor: przykładowe zbiory fraktalne

Przykładowe zbiory fraktalne dla programu Cantor

Cantor - Informacje

Paproć Barnsleya(Fern.can)
 | Prawdopodobnie najbardziej znany rysunek samopodobny opisany szczegółowo przez Michaela Barnsleya w książce Fractals everywhere (Academic Press, San Diego, 1988).
Zbiór Cantora (Cantor.can)
 | Zbiór Cantora, znany również jako grzebień Cantora, jest specjalnym zbiorem liczb rzeczywistych. Powstaje on w drodze rekurencyjnego usuwania odpowiednich przedziałów z odcinka jednostkowego. W pierwszym kroku usuwamy z niego środkowy odcinek o długości 1/3. Następnie z każdego, który pozostał usuwamy znów środkowy odcinek o długości 1/3. I tak w nieskończoność. Ten matematyczny obiekt, przypisywany Georgowi Cantorowi, ma wiele zaskakujących i nieintuicyjnych własności matematycznych.
Choinka(Christmas.can)
 | Prosty fraktal bardzo podobny w swojej konstrukcji do Trójkąta Sierpińskiego. Dolne elementy w projekcie są w tym przypadku jednak odpowiednio obrócone.
Krzywa Smoka 1(Dragon1.can)
 | Krzywa smoka powstaje przez kolejne "złamanie" odcinka w połowie. Konstrukcja rozpoczyna się od jednostkowego odcinka, który zginamy dokładnie w połowie tak, aby powstałe w ten sposób dwa odcinki były ustawione do siebie pod kątem prostym. Tak postępujemy ze wszystkimi powstającymi odcinkami. W ten sposób powstaje fraktalna krzywa, która jest również znana jako fraktal Parku Jurajskiego.
Krzywa Smoka 2(Dragon2.can)
 | Kolejna krzywa typu smok. Tym razem odcinek zawsze dzielimy na trzy części.
Krzywa Kocha(Koch.can)
 | Słynna krzywa przypisywana Helge von Kochowi. Konstrukcja rozpoczyna się od jednostkowego odcinka, który dzielimy na trzy części. Środkowy odcinek zastępujemy dwoma odcinkami stanowiącymi pozostałe dwa boki trójkąta równobocznego. Tak postępujemy ze wszystkimi powstającymi odcinkami. W ten sposób powstaje też tzw. Wyspa Kocha (lub płatek śniegu Kocha) - figura o ograniczonej powierzchni, ale nieskończonym obwodzie.
Maze (Maze.can)
 | Struktura podobna do labiryntu z nieskończenie wieloma alejami i rozwidleniami dróg.
Dywan Sierpińskiego(Carpet.can)
 | Prostokątna wersja Trójkąta Sierpińskiego. Trójwymiarowa wersja dywanu Sierpińskiego jest znana jako gąbka Mengera.
Trójkąt Sierpińskiego (Triangle.can)
 | Najczęściej używany przykład figury samopodobnej opisany przez Wacława Sierpińskiego w roku 1915. Znany również jako uszczelka Sierpińskiego lub sito Sierpińskiego. Trójkąt Sierpińskiego, dzięki swoim niesamowitym własnościom matematycznym, może być uzyskany na bardzo wiele różnych sposobów. Np. przez wymazywanie liczb parzystych z trójkąta Pascala lub np. przez zastosowanie błądzenia przypadkowego jak ilustruje to program Sierpinski.
Płatek śniegu(Snowflake.can)
 | Ten wzór, czasami nazywany hexagonem Sierpińskiego, jest ściśle związany z Płatkiem śniegu Kocha. Może on być wygenerowany również za pomocą programu Sierpinski przy ustawieniu liczby wierzchołków na 6 i kroku na 2/3.
Drzewo 1(Tree1.can)
 | Pięcioelementowy fraktal, który odtwarza samopodobne drzewo.
Drzewo 2(Tree2.can)
 | Bardzo prosty fraktal, który zdumiewająco przypomina rzeczywiste drzewo.


Conway - Informacje

Conway

(Naciśnij przycisk aby uruchomić program)

Program Conway jest implementacją słynnej Gry w życie (The Game of Life). Jest to symulacja ewolucji pewnej grupy społecznej za pomocą uproszczonego modelu wykorzystującego automat komórkowy. Gra odbywa się na płaszczyźnie podzielonej na komórki, które w zależności od wersji są kwadratowe, trójkątne lub sześciokątne. Każda komórka może być w danym momencie albo żywa albo martwa. Ewolucja społeczeństwa polega na zmianie stanów poszczególnych komórek w zależności od ilości żywych komórek w sąsiedztwie, przy czym mówimy, że dwie komórki są w sąsiedztwie, gdy posiadają wspólną krawędź lub wierzchołek (w zależności od wyboru kształtu komórek). Jest to najbardziej znane zastosowanie automatu komórkowego w symulacjach komputerowych wymyślone Johna Hortona Conwaya.

Program pozwala wybrać użytkownikowi typ podziału płaszczyzny na komórki, a także ustawić zasady ewolucji. Symulację można oglądać w trybie pracy ciągłej lub zatrzymując się po każdym kroku.

Szczegółowe informacje na temat obsługi programu można znaleźć w następujących zakładkach:

Kontrolowanie symulacji
Ustawianie zasad ewolucji
Otwieranie i zapisywanie plików
Ustawianie parametrów pamiętania historii

Warto również zapoznać się ze szczegółowymi informacjami na temat zastosowanych rozwiązań programistycznych w zakładce Notatki programistyczne.

Szczegółowe informacje na temat gry w życie i automatów komórkowych można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 2.


Conway: kontrolowanie symulacji

Kontrolowanie symulacji w programie Conway

Conway - Informacje

Ustawianie stanu komórki

Aby zmienić stan komórki na przeciwny należy ją wskazać kursorem myszki i nacisnąć lewy przycisk. Komórka żywa zamienia się na martwą i odwrotnie. Aby wszystkie komórki zamienić na martwe należy nacisnąć przycisk Clear [Wyczyść].

Praca w przód

Po naciśnięciu przycisku Step [Krok] program utworzy nową generację na podstawie algorytmu. Aby wytworzyć nowe generacji w trybie ciągłym (jedna po drugiej) należy nacisnąć przycisk Run [Uruchom]. Zatrzymanie procesu następuje po naciśnięcia przycisku Stop.

Praca wstecz

Po naciśnięciu przycisku Step back [Krok wstecz] program przywróci poprzednią generację. Uruchomienie ewolucji wstecz w trybie ciągłym odbywa się po naciśnięciu przycisku Run back [Uruchom wstecz]. Przycisk Stop zatrzymuje ewolucję wsteczną.

Uwaga: Program może odtwarzać poprzednie generacje, tylko gdy aktualna generacja powstała z poprzedniej na podstawie pracy algorytmu. Ze względu na pamięć operacyjną komputera program umożliwia odtworzenie tylko ograniczonej liczby poprzednich generacji. Ograniczenie to może być zmieniane przez użytkownika. Szczegółowy opis jak to się robi znajduje się w zakładce Ustawianie parametrów pamiętania historii.

Przesuwanie pola widzenia

Aby przesunąć pole widzenia należy użyć standardowych suwaków znajdujących się na brzegach okna wyświetlającego komórki. Płaszczyzna, która jest podzielona na komórki jest nieograniczona w każdym kierunku.

Skalowanie pola widzenia

Poziom skalowania pola widzenia można ustawić używając odpowiednio przycisków Zoom in [Powiększ] i Zoom out [Zmniejsz].


Conway: ustawianie zasad ewolucji

Ustawianie zasad ewolucji w programie Conway

Conway - Informacje

Program Conway umożliwia użytkownikowi zmianę parametrów ewolucji. Aby tego dokonać należy nacisnąć przycisk Edit rules [Ustawianie zasad], po którym pojawi się okno umożliwiające wprowadzanie zmian. Zasady określają jak zachować się ma komórka w przypadku, gdy w jej sąsiedztwie jest dana liczba żywych komórek.

Dla żyjącej komórki istotne są parametry ustawione w kolumnie Survival [Przeżycie]. Komórka przeżywa jeżeli zaznaczona jest odpowiednia wartość określająca liczbę żywych sąsiadów. W przeciwnym wypadku komórka umiera.
Dla martwej komórki istotne są parametry ustawione w kolumnie Birth [Narodziny]. Komórka rodzi się (zamienia się w żywą) jeżeli zaznaczona jest odpowiednia wartość określająca liczbę żywych sąsiadów. W przeciwnym wypadku pozostaje martwa.

Liczba możliwych żyjących komórek w sąsiedztwie uzależniona jest ściśle od sposobu podziału płaszczyzny na komórki. Zmianę kształtu komórek (i tym samym sposobu podziału płaszczyzny) można dokonać wybierając odpowiednią opcję w sekcji Topology [Topologia]. Kolorem jasnoniebieskim zaznaczone są komórki, które będą zaliczane do sąsiadów komórki niebieskiej.

Użytkownik może również skorzystać z wcześniej zdefiniowanych zasad ewolucji, które pojawiają się w literaturze na temat gry w życie. Są one dostępne poprzez rozwijalny przycisk Predefined sets [Ustawienia zdefiniowane]

Kod Wolframa

Istnieje również inny sposób podania zasad ewolucji w grze w życie zwany kodem Wolframa. Został on pierwszy raz podany przez Stephena Wolframa. Kod ten składa się z liczby zapisanej w systemie dziesiątkowym z zakresu od 0 do 4n+1-1, gdzie n jest maksymalną liczbą sąsiadów jaką może mieć komórka.

Cyfra stojąca na miejscu 2 k-tym w binarnej reprezentacji kodu Wolframa mówi czy żywa komórka powinna przeżyć (wartość 1), czy umrzeć (wartość 0) jeśli w jej sąsiedztwie znajduje się dokładnie k żywych komórek.

Analogicznie cyfra stojąca na miejscu 2 k +1 w reprezentacji binarnej określa, czy martwa komórka ma się narodzić (wartość 1), czy pozostać martwa (wartość 0) jeśli w jej sąsiedztwie znajduje się dokładnie k żywych komórek.

Aby użyć tej metody przy definiowaniu parametrów ewolucji należy wcisnąć przycisk Wolfram code [Kod Wolframa] i po wprowadzeniu odpowiedniej liczby (w systemie dziesiątkowym) nacisnąć przycisk OK.


Conway: otwieranie i zapisywanie plików

Otwieranie i zapisywanie plików w programie Conway

Conway - Informacje

Po naciśnięciu przycisku Save [Zapisz] aktualny stan płaszczyzny (tzn. rozmieszczenie żywych komórek), typ podziału na komórki oraz zasady ewolucji zostaną zapisane do wskazanego pliku. Wczytanie danych z wcześniej zapisanego pliku odbywa się po naciśnięciu przycisku Open [Otwórz]. Więcej szczegółów na temat formatów plików akceptowanych przez program Conway znajduje się w zakładce Dozwolone formaty plików.

W katalogu, w którym zostały zainstalowane wszystkie programy pakietu można znaleźć pliki (przygotowane do otwarcia w programie Conway) z wieloma ciekawymi konfiguracjami żywych komórek ewoluujących w zaskakujący sposób. Podglądając te pliki za pomocą dowolnego programu tekstowego można w nich znaleźć opis co robi dana konfiguracja komórek.


Conway: dozwolone formaty plików

Dozwolone formaty plików w programie Conway

Conway - Informacje

Otwieranie i zapisywanie plików

Program Conway akceptuje format plików nazwany przez autorów Life w wersji 1.06 (dla zapisywania i otwierania) oraz starszą wersję Life 1.05 (dla otwierania). Format Life 1.06 pozwala zapisywać w pliku informacje o zastosowanym podziale płaszczyzny na komórki.

Oba typy plików są plikami tekstowymi z rozszerzeniem .life lub .lif. W pierwszej linii znajduje się informacja o typie pliku poprzedzona znakiem # czyli:

#Life 1.05

lub

#Life 1.06

Zasady ewolucji są zapisane w jednej linii, która ma następującą strukturę:

#R <s1><s2>...<s3>/<b1><b2>...<b3>

gdzie <s1><s2>...<s3> to pojedyncze znaki oznaczające liczbę sąsiadów, która pozwala komórce przeżyć, a <b1><b2>...<b3> to liczba sąsiadów pozwalająca komórce się narodzić. Na przykład:

#R 23/3

określa standardowe zasady Conwaya gry w życie, tzn. 2 lub 3 trzech żywych sąsiadów, aby przetrwać i 3 sąsiadów, aby się urodzić. Dla tej standardowej kombinacji stworzono osobny sposób kodowania:

#N

Jest ona całkowicie równoważna wyrażeniu #R 23/3.

Aby umożliwić zapisanie więcej niż 9 sąsiadów w jednym znaku dla trójkątnej sieci program Conway rozumie liczby zapisane w formacie szesnastkowym. Zatem linia :

#R 789ABC/A

jest dobrą definicją zasad dla trójkątnego podziału płaszczyzny i oznacza, że komórka przetrwa jeśli w sąsiedztwie jest 7 lub więcej żywych komórek, a narodziny są możliwe tylko wtedy gdy w sąsiedztwie jest dokładnie 10 żywych komórek.

Linie rozpoczynające się od znacznika #D zawierają informacje o sposobie podziału i sposobie zaliczania komórek jako sąsiadów. W pliku odpowiednia informacja podana jest w postaci dwóch linii, które w zależności od sieci mają następującą postać:

#D Extended properties:
#D 8 neighbors — standard lattice
oznacza kwadratową sieć, w której każda komórka ma 8 sąsiadów
(tzn. komórki narożne również zalicza się do sąsiadów).

lub

#D Extended properties:
#D 4 neighbors — square lattice
oznacza kwadratową sieć, w której każda komórka ma 4 sąsiadów
(tzn. komórek narożnych nie zalicza się do sąsiadów).

lub

#D Extended properties:
#D 12 neighbors — triangular lattice (rules in hexadecimal format)
oznacza trójkątną sieć, w której każda komórka ma 12 sąsiadów
(tzn. komórki narożne również zalicza się do sąsiadów).

lub

#D Extended properties:
#D 3 neighbors — triangular lattice
oznacza trójkątną sieć, w której każda komórka ma 3 sąsiadów
(tzn. komórek narożnych nie zalicza się do sąsiadów).

lub

#D Extended properties:
#D 6 neighbors — hexagonal lattice
oznacza sześciokątną sieć, w której każda komórka ma 6 sąsiadów .

Pozostała część pliku zawiera informacje o żywych komórkach na płaszczyźnie. Tzn. podane są odpowiednie współrzędne żywych komórek:

<x> <y>

gdzie <x> i <y> to współrzędne żywej komórki na sieci.


Conway: Ustawianie parametrów pamiętania historii

Ustawianie parametrów pamiętania historii w programie Conway

Conway - Informacje

Program Conway przechowuje informacje na temat ewolucji układu żywych komórek (zapamiętuje kolejne śmierci i narodziny komórek) w pamięci komputera, tak aby później istniała możliwość odtworzenia ewolucji wstecz. Liczba pamiętanych kroków jest ograniczona na wypadek nieświadomego uruchomienia symulacji na długi okres czasu. Mogłoby to bowiem spowodować przepełnienie pamięci operacyjnej komputera.

Aby zmienić limit liczby zdarzeń przechowywanych przez komputer należy nacisnąć przycisk Edit history settings [Zmień parametry historii] i podać odpowiednią (nieujemną całkowitą) liczbę. Zdarzeniem jest każda zmiana stanu komórki (śmierć lub narodziny) wynikająca z zasad ewolucji. Należy pamiętać, że określony limit liczby zdarzeń nie określa dokładnie liczby generacji pamiętanych przez komputer. W ciągu jednej zmiany ewolucyjnej może bowiem zajść bardzo wiele zdarzeń, które program zapamięta. Przy ustalonym limicie liczby zdarzeń dla dużych populacji będzie pamiętanych mniej kolejnych generacji, niż dla populacji małych.


Conway: notatki programistyczne

Notatki programistyczne do programu Conway

Conway - Informacje

Program Conway, podobnie jak wszystkie aplikacje pakietu Modelowanie Rzeczywistości, zostały napisane w Microsoft Visual Basic 6.0. Niemniej jednak, aby zapewnić większą prędkość przy przeprowadzaniu symulacji tzw. silnik gry (tzn. procedura odpowiedzialna za wykonywanie kolejnych kroków) został napisany w języku Microsoft Visual C++ 6.0 i skompilowany jako program COM. Program ten odpowiedzialny jest za pamiętanie rozkładu żywych komórek na sieci oraz zasad ewolucji, obliczanie na tej podstawie kolejnych generacji i pamiętanie historii.

Układ żywych komórek na płaszczyźnie jest pamiętany w specjalnej zagnieżdżonej dwukrotnie strukturze zwanej w teorii informacji zrównoważonym drzewem poszukiwań binarnych. W drzewie nadrzędnym węzły odpowiadają współrzędnym X żywych komórek na płaszczyźnie, a dana przechowywana w węźle to kolejne drzewo, w którym przechowywana jest informacja o współrzędnych Y żyjących komórek, których współrzędna X jest ustalona. Żadne inne informacje nie są przechowywane.

Podczas obliczania konfiguracji dla nowej generacji silnik zlicza liczbę sąsiadów dla każdej żywej komórki oraz każdej martwej komórki, która ma przynajmniej jednego żywego sąsiada. Następnie zmiany prowadzące do nowej generacji przechowywane są w strukturze zwanej stosem, tak aby zapewnić późniejsze uaktualnienie obrazu na ekranie.

Informacje o zmianach trzymane są w tzw. stosie dwukierunkowym, którego element wierzchni jest stosem przechowującym zmiany transformujące poprzednią generację do obecnej. Poprzednie elementy stosu zawierają informacje o poprzednich transformacjach.


Ehrenfest - Informacje

Ehrenfest

(Naciśnij przycisk aby uruchomić program)

Program Ehrenfest jest komputerową symulacją słynnego procesu Psy i pchły, który został opisany przez Paula Ehrenfesta. Jest to zabawna realizacja fizycznego procesu dochodzenia układu do stanu równowagi.

Układem fizycznym w tym przypadku są dwa psy oraz pchły, które mogą przeskakiwać z jednego psa na drugiego. Zaproponowany przez Ehrenfesta proces polega na tym, że w każdym kroku iteracji losowana jest jedna pchła, która przeskakuje na drugiego psa. Od razu widać, że jeśli prawdopodobieństwo wylosowania dla każdej pchły jest takie samo, to pchły będą częściej przeskakiwać z tego psa, na którym aktualnie jest ich więcej. Tym samym układ będzie dążył do równowagi - zrównania liczby pcheł na każdym z psów.

Aby dowiedzieć się więcej na temat tego programu proszę zajrzeć do zakładki Jak używać programu Ehrenfest?.

Dodatkowe informacje na temat zastosowanego generatora liczb pseudolosowych można znaleźć w zakładce Generator liczb pseudolosowych.

Dodatkowe informacje o Procesie Ehrenfesta można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 6.


Jak używać programu Ehrenfest?

Ehrenfest - Informacje

Program składa się z dwóch niezależnych okien. W górnym oknie prezentowany jest przebieg symulacji. W dolnym oknie uaktualniane są na bieżąco wyniki symulacji.

Po rozpoczęciu programu wszystkie pchły znajdują się na jednym psie. Następnie pchły zaczynają przeskakiwać z psa na psa wg schematu zaproponowanego przez Ehrenfesta. W każdym kroku losowana jest jedna pchła po czym przeskakuje ona na drugą stronę. Dwa słupki pod psami obrazują liczbę pcheł na każdym z psów.

Parametry symulacji

Użytkownik może ustawić całkowitą liczbę pcheł biorących udział w symulacji za pomocą rozwijalnej listy Total fleas [Suma pcheł]. Po wybraniu odpowiedniej liczby symulacja automatycznie rozpoczyna się od początku, tzn. wszystkie pchły są przeniesione na lewego psa.

Animację zawsze można rozpocząć od początku naciskając przycisk Reset.

Aby przyśpieszyć symulację użytkownik może wyłączyć animowanie przeskakiwania pcheł ustawiając odpowiednio przełącznik Animate [Animacja].

Interpretowanie wyników symulacji

W dolnym oknie rysowany jest na bieżąco wykres obrazujący zależność różnicy pcheł na każdym z psów od liczby kroków symulacji. Kolor wykresu określa kolor psa, na którym aktualnie znajduje się więcej pcheł. Wyraźnie widać jak wraz z upływem czasu (wzrostem liczby kroków) pomimo różnych fluktuacji różnica ta dąży do zera, co interpretujemy jako dochodzenie układu do stanu równowagi.

Linia pogrubiona na wykresie reprezentuje teoretyczne przewidywanie zachowania się rozkładu liczby pcheł wraz z upływem czasu. Jest to krzywa określona wzorem:

,

gdzie t to czas mierzony liczbą kroków symulacji od jej rozpoczęcia, f to całkowita liczba pcheł w układzie.

Z użyciem programu łatwo można sprawdzić, że wraz ze zwiększaniem liczby pcheł w układzie symulowany przebieg procesu lepiej zgadza się z przewidywaniem teoretycznym. Oznacza to, że wraz ze wzrostem liczby pcheł fluktuacje wywołane czynnikami losowymi (program w każdym kroku losuje pchłę) stają się mniej istotne.


Euler - Informacje

Euler

(Naciśnij przycisk aby uruchomić program)

Program Euler służy do analizowania grafów i znajdowania w nich najkrótszego tzw. cyklu Hamiltona. Problem ten jest ściśle związany z zagadnieniem matematycznym znanym jako Problem komiwojażera. Najczęściej jest on formułowany w następujący sposób:

Komiwojażer ma do odwiedzenia pewną liczbę miast. Niektóre miasta połączone są ze sobą liniami lotniczymi, a cena połączenia pomiędzy dowolnymi dwoma miastami (pomiędzy którymi istnieje połączenie) jest zawsze taka sama. Komiwojażer chce wybrać taką drogę, aby odwiedzić każde miasto dokładnie jeden raz i na końcu znaleźć się spowrotem w mieście, z którego startował. Oczywiście koszt podróży powinien być jak najmniejszy. Jaką drogę powinien wybrać komiwojażer?

Miasta są reprezentowane przez wierzchołki grafu, a połączenia lotnicze przez krawędzie grafu.

Taka droga, która łączy wszystkie miasta dokładnie jeden raz i wraca na końcu do miejsca z którego się zaczynała nazywana jest w teorii grafów Cyklem Hamiltona. Istnieją takie grafy, dla których istnieje wiele cyklów Hamiltona. Istnieją również takie, które cyklów Hamiltona nie mają. Zadaniem podstawowym jest zatem sprawdzenie, czy istnieją cykle Hamiltona w zadanym grafie (czyli czy zadanie ma w ogóle jakieś rozwiązanie), a następnie znalezienie najkrótszego z nich.

Uwaga: Z mocy definicji pusty graf (tzn. nie zawierający żadnego wierzchołka), jak i graf z jednym wierzchołkiem, posiadają zawsze cykl Hamiltona. Graf złożony z dwóch wierzchołków nie posiada cyklu Hamiltona, niezależnie od tego, czy są one połączone krawędzią, czy nie.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Euler?.

Dodatkowe informacje o grafach można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 10.


Jak używać programu Euler?

Euler - Informacje

Konstruowanie grafu

Graf można skonstruować na dwa sposoby:

  • zbudować za pomocą myszki - szczegółowe informacje jak konstruować graf za pomocą myszki można znaleźć w zakładce Konstruowanie grafu myszką,
  • wylosować za pomocą programu - po naciśnięciu przycisku Random full graph [Losuj pełny graf] program poprosi o podanie liczby wierzchołków, z których ma się składać graf. Następnie program rozłoży wierzchołki losowo na płaszczyźnie i połączy je krawędziami. Wylosowany graf będzie pełnym grafem , tzn. dowolne dwa wierzchołki będą ze sobą bezpośrednio połączone.
Aby usunąć wszystkie wierzchołki i krawędzie należy nacisnąć przycisk Clear [Wyczyść].

Znajdowanie najkrótszego cyklu Hamiltona

Po naciśnięciu przycisku Go [Start] program analizuje wszystkie możliwe połączenia wierzchołków i znajduje najkrótszy cykl Hamiltona. W każdej chwili analizowanie grafu może zostać przerwane naciśnięciem przycisku Stop. Postęp w analizowaniu grafu wyświetlany jest w pasku na dole okna programu.

Po zakończeniu analizowania grafu na ekranie pojawia się informacja, że najkrótszy cykl Hamiltona został znaleziony (Shortest cycle found) lub że graf nie ma cyklu Hamiltona (No Hamilton cycle in graph). Jeśli najkrótszy cykl Hamiltona występuje w grafie zostanie on zaznaczony kolorem zielonym na schemacie grafu.


Euler: konstruowanie grafu myszką

Konstruowanie grafu myszką w programie Euler

Euler - Informacje

Jak używać programu Euler?

Edycja wierzchołków

Aby dodać wierzchołek grafu należy dwukrotnie nacisnąć lewy przycisk myszki w odpowiednim miejscu. Wierzchołek można przesuwać za pomocą myszki standardową techniką drag-and-drop. Aby usunąć wierzchołek należy go zaznaczyć lewym przyciskiem myszki (zaznaczony wierzchołek zmienia kolor na granatowy) i nacisnąć przycisk Delete na klawiaturze.

Edycja krawędzi

Aby dodać krawędź pomiędzy dwoma wierzchołkami należy za pomocą prawego przycisku myszki przeciągnąć linię z jednego wierzchołka do drugiego. Aby skasować krawędź grafu należy zaznaczyć ją lewym przyciskiem myszki (zaznaczona krawędź zmienia kolor na czerwony) i nacisnąć przycisk Delete na klawiaturze.

Uwaga: Podczas przesuwania wierzchołka automatycznie przesuwają się krawędzie do niego przyłączone.


Feigenbaum - Informacje

Feigenbaum

(Naciśnij przycisk aby uruchomić program)

Program Feigenbaum służy do badania chaotycznego zachowania się funkcji iteracyjnych, tzn. takich których wartość w następnym kroku jest wyznaczona przez wartość bieżącą. Program wykreśla mapę obrazującą proces iteracji, dając użytkownikowi możliwość kontrolowania wszystkich parametrów wykresu.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Feigenbaum?.

Zalecenie: Aby lepiej zrozumieć do czego służy program i co ilustruje, proponujemy przed rozpoczęciem jego używania zapoznać się z rozdziałem 7. książki Modelowanie Rzeczywistości, w którym jest mowa o chaosie.


Jak używać programu Feigenbaum?

Feigenbaum - Informacje

Informacje podstawowe

W głównym oknie programu wyświetlana jest mapa badanego odwzorowania. Wzdłuż osi poziomej zmienia się parametr funkcji iteracji a. Wzdłuż osi pionowej wartość funkcji x. W pasku stanu wyświetlane są współrzędne punktu aktualnie wskazywanego przez wskaźnik myszki.

Przeglądanie mapy

Parametry mapy obrazującej zachowanie się danej funkcji można zmieniać za pomocą myszki.

  • przesuwanie mapy - Na każdym brzegu mapy znajdują się strzałki umożliwiające przesuwanie mapy do interesującego użytkownika miejsca.
  • zmiana skali - Aby powiększyć dany fragment mapy należy za pomocą lewego przycisku myszki wskazać lewy górny i prawy dolny róg obszaru, który chcemy powiększyć. Program automatycznie wyświetli mapę wskazanego obszaru. Aby pomniejszyć mapę (tzn. zwiększyć pole widzenia, zmniejszając przy tym dokładność rysunku) należy nacisnąć prawy przycisk myszki.
Zmiany parametrów mapy można również dokonać podając bezpośrednio ich wartości za pomocą klawiatury. W tym celu należy wpisać do pól po lewej stronie okna programu odpowiednie liczby. Zakres zmian parametru a funkcji iteracji oraz najmniejszej i największej wartości zmiennej x podane są w sekcji Zakres [Range].

Uwaga: Zbyt "głębokie" powiększanie mapy może spowodować, że program przestanie działać prawidłowo. Jest to spowodowane dokładnością obliczeń z jaką przeprowadzane są obliczenia podczas rysowania mapy.

Uwaga: Szare części mapy reprezentują te zakresy parametru a badanego odwzorowania, dla których punkt nie może być narysowany, gdyż wartość x ucieka do nieskończoności (lub minus nieskończoności).

Parametry iteracji

Parametry iteracji można zmienić w sekcji Iteracja [Iteration] w lewej części okna programu. Są to:

  • Pixels discarded [Pomijane punkty] - określa liczbę kroków iteracji, po której punkty będą wyświetlane na mapie. Liczba ta ma znaczenie ze względu na to, że pierwsze iteracje nie są reprezentatywne gdyż bardzo mocno zależą od wybranych warunków początkowych.
  • Pixels shown [Pokazywane punkty] - określa liczbę punktów rysowanych dla każdej wartości parametru a badanego odwzorowania. Im większa jest ta liczba, tym mapa jest dokładniejsza.

Odwzorowanie

Program umożliwia zmianę funkcji, która definiuje odwzorowanie iteracyjne. Można tego dokonać w sekcji Postać iteracji [Iteration formula] w lewej części okna. Domyślnie zaznaczona jest opcja Odwzorowanie logistyczne [Logistic], które jest zdefiniowane następującym wzorem iteracyjnym

z warunkiem początkowym x0=0,5. Użytkownik może zdefiniować dowolne odwzorowanie wybierając opcję Własne [Custom] i podając w ramce funkcję definiującą odwzorowanie.

Więcej informacji na temat wprowadzania własnych funkcji można znaleźć w zakładce Wprowadzanie funkcji.

Uwaga: Aby narysować mapę dla nowo wprowadzonych elementów należy nacisnąć przycisk Odśwież [Refresh]. Zmiana nie powoduje bowiem natychmiastowego narysowania nowej mapy.

Aby przywrócić domyślne ustawienia programu należy nacisnąć przycisk Reset.


Wprowadzanie funkcji

W tej części opisany jest sposób w jaki należy wprowadzać wyrażenia matematyczne określające funkcje, tak aby były one zgodne z wymaganiami programu. Składnia jest tu bardzo intuicyjna i powinna być całkowicie zrozumiała dla osób choć trochę zaznajomionych z językami programowania lub programami, w których istnieje możliwość wprowadzania wzorów matematycznych.

Zasady wprowadzania funkcji

  • Białe znaki (tzn. spacje i znaki tabulacji) są ignorowane.
  • Liczby należy wprowadzać używając cyfr i kropki. Na przykład liczba 3.1416 jest przybliżeniem jakie można zastosować dla wartości liczby pi.
  • Zmienne są reprezentowane przez pojedyncze litery. Funkcja zmiennej x może mieć np. następującą postać: (x + 1)/(x - 1).
  • +, -, *, / i ^ są akceptowanymi operatorami matematycznymi odpowiednio: dodawania, odejmowania, mnożenia, dzielenia i potęgowania. Zachowywana jest przy tym standardowa kolejność wykonywania działań, tzn. 2+3*4 to 14 (a nie 20), a 3-2-1 to 0 (a nie 2). Potęga ^ wykonywana jest jako pierwsza, następnie mnożenie * i dzielenie /, a na końcu dodawanie + i odejmowanie -. Dla operatorów równorzędnych działania są wykonywane po kolei. Do zmiany kolejności działań można wykorzystać nawiasy okrągłe ( ).
  • Znak - służy również do oznaczania liczb ujemnych. W związku z tym wyrażenia -3.5, -x i -(x+1) są prawidłowymi wyrażeniami. Znak + przed wyrażeniem jest również dopuszczalny, jednak jego stosowanie nie ma oczywiście żadnego wpływu na wartość funkcji.
  • Dopuszczalne jest również stosowanie najbardziej znanych funkcji matematycznych, których argument podaje się bezpośrednio po nazwie funkcji w nawiasach okrągłych, np. Sin(x/10). Można tu używać dowolnej kombinacji dużych i małych liter. Następujące funkcje są dopuszczalne:
    • Sin — trygonometryczna funkcja sinus.
    • Cos — trygonometryczna funkcja kosinus.
    • Tan — trygonometryczna funkcja tangens.
    • ArcTan — trygonometryczna funkcja arcus tangens.
    • Log — logarytm naturalny (logarytm o podstawie e).
    • Exp — funkcja wykładnicza (Exp(x)=ex).
    • Sqrt — pierwiastek kwadratowy.
    • Floor — funkcja Int (największa liczba całkowita mniejsza lub równa argumentowi).
    • Sign — funkcja znakowa (signum) (-1 jeśli argument jest ujemny, 1 jeśli dodatni i 0 gdy równy zero).


Galton - Informacje

Galton

(Naciśnij przycisk aby uruchomić program)

Program Galton służy do wizualizacji zasady działania tzw. deski Galtona. Jest ona praktyczną realizacją procesu Bernoulliego - wielokrotnie powtarzanego doświadczenia losowego (np. rzutu monetą), w którym możliwe są tylko dwa wyniki. Deska Galtona pozwala lepiej zrozumieć jakie ciągi wyników w procesie Bernoulliego są najbardziej i najmniej prawdopodobne.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Galton?.

Dodatkowe informacje na temat zastosowanego generatora liczb pseudolosowych można znaleźć w zakładce Generator liczb pseudolosowych.

Szczegółowe informacje o desce Galtona można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 4.


Jak używać programu Galton?

Galton - Informacje

Przed rozpoczęciem symulacji użytkownik w polu Levels [Poziomy] podaje liczbę rzędów gwoździ na desce Galtona określając tym samym liczbę prób w procesie Bernoulliego. Po rozpoczęciu symulacji za pomocą przycisku Go [Start] ze szczytu deski wypuszczane są kulki, które po napotkaniu gwoździa z równym prawdopodobieństwem mogą polecieć w lewo lub prawo. Tym samym po pokonaniu wszystkich rzędów gwoździ kulka wpada do jednego z pojemników na dole (w zależności od drogi jaką pokonała).

Na dole okna rysowany jest histogram obrazujący rozkład liczby kulek, które wpadły do kolejnych pojemników. Niebieska linia ciągła obrazuje rozkład Gaussa, do którego wraz ze wzrostem liczby wypuszczonych kulek powinien dążyć wykreślany rozkład na histogramie. Zgodność jest tym lepsza im więcej będzie rzędów gwoździ na desce Galtona.

Symulację można w każdej chwili zatrzymać naciskając przycisk Stop [Stop] lub rozpocząć ją od początku naciskając przycisk Clear [Wyczyść]. Program umożliwia wyłączenie animowania spadającej kulki (pole Animate [Animacja]), co pozwala na szybsze przeprowadzenie doświadczenia dla bardzo wielu kulek. Prędkość przeprowadzanego doświadczenia można regulować ustawiając odpowiednio pozycję suwaka w prawym górnym roku okna programu.

Program umożliwia przeprowadzanie doświadczenia dla desek, które zawierają od 1 do 30 rzędów gwoździ.


Holland - Informacje

Holland

(Naciśnij przycisk aby uruchomić program)

Program Holland pozwala znajdować numerycznie maksimum funkcji określonej na przedziale [0, 1] wykorzystując prosty algorytm genetyczny. Każda liczba z zakresu [0,1] (organizm) ma odpowiadający jej genotyp czyli 32-bitowy ciąg binarny. Każdy taki ciąg (reprezentujący pewną liczbę należącą do dziedziny funkcji) jest oceniany za pomocą zadanej funkcji, której maksimum chcemy znaleźć.

Ewolucja rozpoczyna się od losowo wybranego organizmu, tzn. genotyp jest losowym ciągiem bitów. W każdym kroku ewolucji genotyp podlega mutacji z podanym przez użytkownika prawdopodobieństwem. Mutacja z prawdopodobieństwem n% oznacza, że podczas mutowania każdy bit genotypu zamieniany jest na przeciwny z prawdopodobieństwem n%, niezależnie od pozostałych bitów. Następnie program sprawdza, czy dopasowanie nowego genotypu jest lepsze niż dotychczasowego. Jeśli tak jest, to nowy genotyp zastępuje stary.

Program doskonale ilustruje biologiczne prawo naturalnej selekcji, podczas której przeżywają organizmy najlepiej dopasowane do środowiska. W naszym przypadku środowisko określone jest przez daną funkcję, a organizmy to liczby z zakresu [0, 1]. W procesie naturalnej selekcji za każdym razem przeżywa ten organizm (czyli ta liczba), który jest lepiej dopasowany, czyli funkcja ma większą wartość.

Program daje możliwość wyboru, w jaki sposób mają być kodowane liczby z przedziału [0, 1]. Dostępne jest kodowanie binarne (standardowy sposób) jak również tzw. kodowanie Graya.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Holland?.

Szczegółowe informacje na temat algorytmów genetycznych można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 12.


Jak używać programu Holland?

Holland - Informacje

Ustawianie parametrów programu

Przed rozpoczęciem symulacji do pola Function [Funkcja] należy wprowadzić wyrażenie matematyczne określające funkcję, funkcję przystosowania, której maksimum chcemy znaleźć. Aby uzyskać dodatkowe informacje na temat sposobu wprowadzania funkcji proszę zajrzeć do zakładki Wprowadzanie funkcji.

Ćwiczenie: Pouczające jest wprowadzenie takiej funkcji, która w zadanym przedziale ma kilka lokalnych maksimów. Można np. podać funkcję x * (1 + sin(24*x)), która ma cztery lokalne maksima w przedziale [0, 1].

Prawdopodobieństwo z jakim genotyp ma podlegać mutacji użytkownik może zmieniać ustawiając odpowiednią pozycję suwaka Mutation probability [Prawdopodobieństwo mutacji].

Sposób kodowania genotypu może być ustawiony w sekcji Genetic code [Kod genetyczny]. Do wyboru są dwie możliwości:

  • Binary [Binarny] - kodowanie standardowe binarne,
  • Gray [Graya] - kodowanie metodą Graya.

Symulacja

Po naciśnięciu przycisku Go [Start] rozpoczyna się proces ewolucji za pomocą przyjętego algorytmu genetycznego. W każdej chwili użytkownik może zatrzymać ewolucję naciskając przycisk Stop lub rozpocząć ewolucję od początku naciskając przycisk Reset. W dolnym pasku okna programu wyświetlany jest numer aktualnej generacji.

Wyniki

Informacje na temat aktualnie najlepszego genotypu znajdują się w sekcji Current value [Aktualna wartość]. Jest tam wyświetlony aktualny kod genetyczny (Genotype), odpowiadający mu organizm czyli wartość z dziedziny (Phenotype) oraz wartość funkcji w tym punkcie (Fitness).

Funkcja przystosowania podana przez użytkownika, której maksimum chcemy znaleźć wykreślona jest niebieską linią na wykresie. Duże czerwone kółko reprezentuje aktualny stan genotypu. Jego położenie na wykresie jest określone przez wartość liczby reprezentowanej przez genotyp oraz przez wartość funkcji w tym punkcie. Małe czerwone kółka połączone czerwoną linią reprezentują poprzednie genotypy, które ewoluowały zgodnie z przyjętymi zasadami.


Hopfield - Informacje

Hopfield

(Naciśnij przycisk aby uruchomić program)

Program Hopfield jest realizacją sieci neuronowej, która umożliwia rozpoznawanie pisma ręcznego. Użytkownik za pomocą myszki podaje wzorce, na podstawie których program uczy się rozpoznawać litery. Proces uczenia jest oparty na najbardziej popularnym algorytmie uczenia sieci neuronowych tzw. wstecznej propagacji błędów (ang. backpropagation). Po zakończeniu procesu uczenia program potrafi rozpoznawać litery napisane tą samą ręką, która wcześniej napisała wzorce.

Podstawowe informacje jak można używać tego programu znajdują się w zakładce Szybki start.

Szczegółowe informacje na temat używania programu Hopfield znajdują się w następujących zakładkach:

Jak używać programu Hopfield?
Ustawianie parametrów zbioru próbek
Projektowanie sieci neuronowej
Uczenie sieci neuronowej

Warto również zapoznać się ze szczegółami programistycznymi, które są opisane w zakładce Notatki programistyczne.


Hopfield: szybki start

Szybki start (program Hopfield)

Hopfield - Informacje

Aby nauczyć swój komputer rozpoznawać pismo ręczne należy zapoznać się z poniższą instrukcją. Należy przy tym pamiętać, że zawiera ona jedynie podstawowe informacje, które nie wyczerpują możliwości programu. Szczegółowe informacje znajdują się w zakładce Jak używać programu Hopfield?

Uwaga: Ta krótka instrukcja zakłada, że użytkownik używa programu Hopfield po raz pierwszy i tym samym po jego uruchomieniu wszystkie ustawienia będą domyślne. Jeśli program był już wcześniej używany (np. przez inną osobę) należy usunąć lub zmienić nazwy następujących plików _RecentPatternSet.pat i _RecentNetwork.net, które znajdują się w katalogu, gdzie został zainstalowany pakiet programów Modelowanie Rzeczywistości.

Aby zapoznać się z możliwościami programu należy:

  1. wprowadzić za pomocą myszki trzy próbki każdej z liter alfabetu angielskiego do pola Drawing workspace [Pole rysowania]. Zaczynając od litery a, następnie b, i tak aż do litery z. Każda próbka powinna być wprowadzona przy wciśniętym lewym przycisku myszki, tzn. aby wprowadzić konkretną próbkę należy nacisnąć lewy przycisk myszki i trzymając go narysować odpowiedni kształt litery. Program zapamięta kształt po puszczeniu przycisku myszki.

    Po wprowadzeniu każdej próbki wypełnia się odpowiednie pole w sekcji Pattern set [Zbiór próbek]. Niebieski kwadrat dookoła oznacza to pole, które jest aktualnie wypełniane. Aby poprawić wprowadzoną wcześniej próbkę należy ją zaznaczyć lewym przyciskiem myszki i wprowadzić ponownie odpowiedni kształt.

  2. nacisnąć przycisk Train network [Trenuj sieć]. Otworzy się nowe okno Network training progress [Postęp treningu sieci], w którym użytkownik naciskając przycisk Start training [Rozpocznij trening] rozpoczyna proces uczenia się sieci neuronowej. Wartość błędu (podana na samej górze okna) spada wraz z postępami w nauce sieci. Gdy błąd jest dostatecznie mały (np. mniejszy niż 0.2) należy przerwać proces uczenia naciskając przycisk Exit training [Zakończ trening].

  3. przełączyć tryb pracy programu w sekcji Mode [Tryb] z Edit patern set [Wprowadzanie próbek] na Recognize [Rozpoznawanie]. Od tej chwili pole rysowania służy do zadawania pytań programowi.

  4. narysować w polu Drawing workspace [Pole rysowania] dowolną literę, podobnie jak to było robione podczas wprowadzania próbek. Sieć neuronowa "zgadnie" jaka litera została wpisana i zaznaczy ją w sekcji Pattern set [Zbiór próbek]. Słupek obok każdej z liter wskazuje jak bardzo sieć jest pewna, że chodzi o daną literę. Aby rozpoznać inne litery należy rysować kolejne kształty w polu rysowania.

Opis wszystkich możliwości programu znajduje się w zakładce Jak używać programu Hopfield?.


Jak używać programu Hopfield?

Hopfield - Informacje

Jeśli program Hopfield uruchamiasz po raz pierwszy i chcesz szybko zobaczyć jakie są jego podstawowe możliwości zajrzyj do zakładki Szybki start.

Tworzenie zbioru próbek

Zbiór próbek zawiera symbole pisane ręcznie przyporządkowane do różnych kategorii. Każda kategoria jest abstrakcyjnym obiektem, który ma tę cechę, że różni się od pozostałych kategorii, ale wszystkie obiekty do niej przypisane są uznawane za tożsame. W tym sensie kategoriami mogą być np. litery, cyfry, symbole lub jakiekolwiek inne obiekty, które w swej definicji są odróżnialne od siebie. Zadaniem programu jest sprawdzanie, do jakiej kategorii należy dany symbol, na podstawie stworzonego wcześniej zbioru próbek różnych kategorii. Zbiór treningowy, na podstawie którego program uczy się rozpoznawać symbole powinien zawierać kilka próbek z każdej kategorii, aby zwiększyć szanse na prawidłowe nauczenie się abstrahowania od szczegółowych kształtów znaków. Więcej informacji w jaki sposób można definiować nowe i usuwać już istniejące kategorie oraz jak zmieniać liczbę próbek można znaleźć w zakładce Ustawianie parametrów zbioru próbek. Domyślnie kategoriami są małe litery alfabetu angielskiego, a każda z nich jest reprezentowana za pomocą trzech próbek.

Uwaga: Po zmianie parametrów zbioru próbek wszystkie próbki w zbiorze zostają usunięte.

Aby tworzyć lub zmieniać próbki w zbiorze należy ustawić tryb pracy programu na Edit pattern set [Wprowadzanie próbek] w sekcji Mode [Tryb]. Następnie należy zaznaczyć odpowiednią próbkę w sekcji Pattern set [Zbiór próbek] i narysować za pomocą myszki odpowiedni kształt. Po wprowadzeniu kształtu program automatycznie zaznaczy kolejną próbkę do edycji.

W każdej chwili użytkownik może zapisać wprowadzone próbki naciskając przycisk Save pattern set [Zapisz zbiór próbek] i podając odpowiednią nazwę pliku. Aby wczytać wcześniej zapisane próbki należy nacisnąć przycisk Load pattern set [Wczytaj zbiór próbek].

Tworzenie sieci neuronowej

Wykorzystana w programie sieć neuronowa jest tzw. perceptronem wielowarstwowym (więcej informacji na ten temat można znaleźć np. w Wikipedii) z dowolną liczbą węzłów w każdej pośredniej warstwie. Musi ona oczywiście pasować do zdefiniowanego przez użytkownika zbioru próbek w następującym sensie:

  • Liczba węzłów w warstwie wejściowej musi być równa podwojonej dokładności próbki, mierzonej liczbą punktów, za pomocą których przybliżany jest kształt każdej próbki.
  • Liczba węzłów w warstwie wyjściowej musi być równa liczbie różnych kategorii określonych przez użytkownika.
Powodem takiego zdefiniowania sieci jest fakt, że do warstwy wejściowej wprowadzane są punkty odczytane z kształtu (dwie współrzędne na każdy punkt), a warstwa wyjściowa jest wektorem, którego elementy odpowiadają konkretnym kategoriom. Więcej szczegółów na ten temat można znaleźć w zakładce Notatki programistyczne. Dodatkowe informacje na temat ustawiania parametrów zbioru próbek oraz definiowania liczby i wielkości warstw sieci neuronowej można znaleźć w zakładkach odpowiednio Ustawianie parametrów zbioru próbek i Projektowanie sieci neuronowej .

Uwaga: Zmiana projektu sieci (np. dodanie nowych warstw lub zmiana ich wielkości) skutkuje usunięciem wszystkich wag. W związku z tym przed rozpoczęciem rozpoznawania symboli sieć musi zostać ponownie wyuczona.

Więcej informacji jak należy uczyć sieć (tzn. dopasowywać wagi tak, aby pasowały do podanych próbek symboli) z wykorzystaniem algorytmu wstecznej propagacji błędów znajduje się w zakładce Uczenie sieci neuronowej .

Aktualny stan sieci neuronowej (tzn. jej projekt oraz wagi) może być w każdej chwili zapisany przez użytkownika. W tym celu należy nacisnąć przycisk Save network [Zapisz sieć] i podać nazwę odpowiedniego pliku. Aby wczytać wcześniej zapisany stan sieci należy nacisnąć przycisk Load network [Wczytaj sieć].

Uwaga: Wczytanie sieci nie będzie możliwe jeśli nie będzie ona pasowała (w sensie podanym powyżej) do aktualnych parametrów zbioru próbek.

Używanie sieci do rozpoznawania wprowadzonych znaków

Aby rozpocząć rozpoznawanie symboli za pomocą programu należy wybrać opcję Recognize [Rozpoznawanie] w sekcji Mode [Tryb]. Od tego momentu każdy symbol narysowany w oknie Drawing workspace [Pole rysowania] jest traktowany jako dane wejściowe dla sieci neuronowej. Dane z warstwy wyjściowej są wyświetlone w sekcji Pattern set [Zbiór próbek] jako poziome słupki histogramu przy każdej z kategorii zdefiniowanej przez użytkownika. Dodatkowo zostanie zaznaczona kategoria, do której najlepiej pasuje wprowadzony symbol.


Hopfield: ustawianie parametrów zbioru próbek

Ustawianie parametrów zbioru próbek w programie Hopfield

Hopfield - Informacje

Aby zmienić parametry zbioru, w którym przechowywane są próbki należy nacisnąć przycisk Pattern set settings [Parametry zbioru próbek]. Otworzy się nowe okno, które umożliwia zmianę różnych parametrów opisanych poniżej.

Definiowanie kategorii

Lista zdefiniowanych kategorii znajduje się po lewej stronie w sekcji Pattern categories [Kategorie próbek]. Aby dodać nową kategorię należy wpisać jej nazwę do pola tekstowego po prawej stronie i nacisnąć przycisk Add [Dodaj]. Aby usunąć zdefiniowaną wcześniej kategorię należy podświetlić ją lewym przyciskiem myszki, a następnie nacisnąć przycisk Remove [Usuń]. Użytkownik może również usunąć wszystkie wcześniej zdefiniowane kategorie naciskając przycisk Clear all [Usuń wszystkie].

Uwaga: Do prawidłowego działania programu musi być zdefiniowana przynajmniej jedna kategoria.

Inne ustawienia

Za pomocą suwaka Samples per category [Próbek na kategorię] użytkownik może określić liczbę próbek dla każdej zdefiniowanej kategorii, na podstawie których program będzie uczył sieć neuronową.

Suwak Pattern accuracy [Dokładność wzoru] pozwala określić liczbę punktów, które będzie przechowywał program jako próbkę. Punkty te są generowane na podstawie kształtów wykreślanych przez użytkownika.

Uwaga: Gdy dokładność wzoru jest wysoka, to zbyt szybkie przesuwanie myszki podczas rysowania kształtu może przeszkadzać w ustaleniu wystarczającej liczby punktów. W takim przypadku należy myszkę przesuwać odpowiednio wolniej, aby program mógł wygenerować na tej podstawie odpowiednią liczbę punktów.

Dokładność wzoru jak i liczba kategorii determinują wejściową i wyjściową warstwę sieci neuronowej. Więcej informacji na temat wpływu tych parametrów na budowę sieci znajduje się w zakładce Jak używać programu Hopfield?.

Aby wprowadzone dane zostały wykorzystane podczas dalszej pracy z programem należy nacisnąć przycisk OK. Naciśnięcie przycisku Cancel [Anuluj] przywraca poprzednie ustawienia parametrów zbioru próbek.


Hopfield: projektowanie sieci neuronowej

Projektowanie sieci neuronowej w programie Hopfield

Hopfield - Informacje

Po naciśnięciu przycisku Edit network design [Edytuj projekt sieci] zostanie otwarte okno, które umożliwia zmianę różnych parametrów sieci.

Za pomocą suwaka Number of hidden layers [Liczba ukrytych warstw] użytkownik może określić z ilu warstw ma się składać projektowana sieć neuronowa (nie wliczając warstwy wejściowej i wyjściowej). Po ustawieniu suwaka na określonej liczbie, użytkownik może ustawić rozmiar (tzn. liczbę węzłów) każdej z warstw pośrednich za pomocą odpowiednich suwaków w sekcji Layer sizes [Rozmiar warstw].

Uwaga: Użytkownik nie może zmienić rozmiarów warstwy wejściowej i wyjściowej, gdyż są one jednoznacznie zdeterminowane poprzez odpowiednie parametry zbioru próbek. Szczegółowe informacje jak parametry zbioru próbek wpływają na wielkość warstwy wejściowej i wyjściowej znajdują się w zakładce Jak używać programu Hopfield?. Informacje jak zmienia się parametry zbioru próbek można znaleźć w zakładce Ustawianie parametrów zbioru próbek.

Aby wszystkie wprowadzone zmiany w projekcie sieci neuronowej zostały zapamiętane należy nacisnąć przycisk OK. Naciśnięcie przycisku Cancel [Anuluj] przywraca wszystkie poprzednie ustawienia projektu sieci.


Hopfield: uczenie sieci neuronowej

Uczenie sieci neuronowej w programie Hopfield

Hopfield - Informacje

Aby dopasować za pomocą algorymu wstecznej propagacji błędów wagi sieci neuronowej do aktualnie wprowadzonych próbek poszczególnych kategorii należy nacisnąć przycisk Train network [Trenuj sieć]. Otworzy się dodatkowe okno, w którym użytkownik może kontrolować proces uczenia sieci.

Całkowity błąd sieci (czyli miara niedopasowania wag do próbek uczących) wyświetlony jest na samej górze okna. Wykres poniżej prezentuje przebieg zmiany tego błędu podczas procesu uczenia się. Program automatycznie przeskalowuje wykres.

Aby rozpocząć proces uczenia sieci należy nacisnąć przycisk Start training [Rozpocznij uczenie]. Użytkownik może w każdej chwili wstrzymać proces uczenia naciskając przycisk Pause training [Wstrzymaj proces uczenia].

Uwaga: Podczas procesu uczenia na wykresie prezentującym połączenia wewnątrz sieci neuronowej przedstawiany jest proces wstecznej propagacji. Prędkość tej animacji nie jest związana z rzeczywistą prędkością algorytmu. W rzeczywistości prędkość algorytmu jest na tyle duża, że nie dałoby się jej zobrazować na takim rysunku.

Aby usunąć wszystkie wagi sieci i przypisać im wartość losową należy nacisnąć przycisk Reset weights [Wyzeruj wagi].

W każdej chwili użytkownik może dodać do wag drobne losowe zaburzenie poprzez naciśnięcie przycisku Bump weights [Zaburz wagi]. Naciśnięcie tego przycisku skutkuje dodaniem do każdej z wag liczby z zakresu -n..n, gdzie n jest określone pozycją suwaka Amplitude of weight bumps [Amplituda zaburzeń wag]. Zaburzanie wag może być pomocne, gdy algorytm uczenia "ugrzęźnie" w lokalnym minimum funkcji błędu.

Za pomocą suwaków Learning rate [Współczynnik uczenia] oraz Momentum [Bezwładność] użytkownik może określić parametry algorytmu wstecznej propagacji, które wraz z algorytmem są dokładnie opisane w zakładce Notatki programistyczne.

Aby zamknąć okno uczenia należy nacisnąć przycisk Exit training [Opuść okno uczenia].


Hopfield: notatki programistyczne

Notatki programistyczne do programu Hopfield

Hopfield - Informacje

Wejście i wyjście sieci neuronowej

Aby przetłumaczyć kształt wykreślony myszką na wzór, który będzie zrozumiały dla sieci neuronowej program wybiera z narysowanego kształtu punkty w regularnych odstępach. Jak liczba tych punktów może zostać określona przez użytkownika, opisano w zakładce Ustawianie parametrów zbioru próbek. Punkty stanowiące wzór danego kształtu są wybierane w równych odstępach czasu i w związku z tym odzwierciedlają one prędkość z jaką są rysowane kolejne fragmenty kształtu. Współrzędne tych punktów są następnie skalowane tak, aby punkt wysunięty najbardziej na lewo miał współrzędną x=0, a najbardziej na prawo x=1. Analogicznie punkty wysunięte najbardziej do góry i na dół mają współrzędne odpowiednio y=0 i y=1. Tak przygotowane współrzędne punktów stanową dane wejściowe dla sieci neuronowej.

Każdy węzeł warstwy wyjściowej sieci neuronowej jest przypisany do jednej z kategorii zdefiniowanych przez użytkownika. Po wprowadzeniu danych do warstwy wejściowej na węzłach warstwy wyjściowej pojawiają się liczby z zakresu od 0 do 1. Można je interpretować jako prawdopodobieństwo, że zadany na wejściu kształt należy do danej kategorii.

Rysunek poniżej prezentuje sposób w jaki sieć neuronowa analizuje podany kształt i przypisuje mu przynależność do różnych kategorii z różnymi prawdopodobieństwami. W tym przypadku ustawiona przez użytkownika dokładność kształtu jest równa 3.

Sieć neuronowa

Wykorzystana w programie sieć neuronowa jest perceptronem wielowarstwowym z dowolną liczbą węzłów w każdej pośredniej warstwie i dokładnie określoną (poprzez ustawienia parametrów zbioru próbek) liczbą węzłów w warstwie wejściowej i wyjściowej. Informacje jak parametry zbioru próbek wpływają na liczbę węzłów w warstwach można znaleźć w zakładce Ustawianie parametrów zbioru próbek. Sposób definiowania liczby i wielkości warstw pośrednich opisany jest w zakładce Projektowanie sieci neuronowych. Tzw. funkcja aktywacyjna dla każdego z węzłów dana jest wzorem

Każde połączenie (tzw. synaps) między węzłami dwóch sąsiednich warstw ma przypisaną liczbę zwaną wagą. Dodatkowo każdy węzeł ma również przypisaną liczbę, tzw. wagę decyzyjną. Sygnał pojawiający się w danym węźle obliczany jest wg następującego przepisu: obliczamy sumę ważoną wagami synapsów sygnałów z poprzedniej warstwy. Do tej liczby dodajemy wagę decyzyjną węzła. Następnie obliczamy wartość funkcji aktywacyjnej na tak otrzymanej liczbie. Wynik jest sygnałem, który pojawia się w danym węźle.

Proces przetwarzania sygnału wejściowego do uzyskania sygnału na warstwie wyjściowej sieci neuronowej polega na kolejnym przekazywaniu sygnału z warstwy do warstwy i prezentuje go poniższy algorytm.

Uwaga: Algorytm ten jest napisany w języku semantycznym z angielskimi wyrazami. Przetłumaczenie ich na język polski mogłoby utrudnić zrozumienie algorytmu szczególnie dla osób, które mają związek z językami programowania.

// kopiowanie danych wejściowych na pierwszą warstwę
for each node i in the input layer (layer number 1)
   signal(1, i)=input(i)
next i

// przysyłanie sygnału warstwa po warstwie
for each layer j beyond input (layers number 2, 3, ..., m)
   for each node i in layer j
      s=0
      for each node k in layer j - 1
         s=s + signal(j - 1, k) * weight(j - 1, k, i)
      next k
      s=s + bias_weight(j, i);
      signal(j, i)=f( 1 / (exp(-s) + 1) )
   next i
next j

// kopiowanie danych z ostatniej warstwy na wyjście sieci neuronowej
for each node i in the output layer (layer number m)
   output(i)=signal(m, i)
next i

Trenowanie sieci neuronowej

Proces uczenia sieci neuronowej oparty jest o algorytm tzw. wstecznej propagacji błędów z bezwładnością. Tzn. na podstawie danych treningowych program modyfikuje wagi sieci neuronowej. Modyfikacja ta jest proporcjonalna do współczynnika uczenia (ang. learning rate). Bezwładność (ang. momentum) oznacza, że poprawianie wag odbywa się z pewnym "oporem" proporcjonalnym do aktualnej wartości wagi. Tym samym proces uczenia się jest bardziej stonowany i regularny. Oba te parametry, tzn. współczynnik uczenia i bezwładność użytkownik może modyfikować. Jak można to robić opisane jest w zakładce Uczenie sieci neuronowej. Algorytm stosuje tzw. metodę gradientową modyfikacji wag wykorzystując w sposób jawny fakt, że pochodna funkcji wagowej ma postać

Dzięki temu wartość pochodnej funkcji wagowej może być obliczona bezpośrednio na podstawie wartości funkcji. Jest to bardzo przydatna obserwacja upraszczająca algorytm programu.

Iteracyjny algorytm uczenia sieci przedstawiony jest poniżej.

Uwaga: Algorytm ten jest napisany w języku semantycznym z angielskimi wyrazami. Przetłumaczenie ich na język polski mogłoby utrudnić zrozumienie algorytmu szczególnie dla osób, które mają związek z językami programowania.

Take the next training pattern and run it through the network (forward feed)

// obliczanie błędów (pomnożonych przez odpowiednią
// pochodną funkcji wagowej) na warstwie wyjściowej
for each node i in the output layer (layer number m)
   error(m, i)=(desired_output(i) - output(i)) * signal(m, i) * (1 - signal(m, i))
next i

// obliczanie błędów (pomnożonych przez odpowiednią
// pochodną funkcji wagowej) w warstwach pośrednich
for each layer j before output (layers number m - 1, m - 2, ..., 1)
   for each node i in layer j
      s=0
      for each node k in layer j + 1
         s=s + error(j + 1, k) * weight(j, i, k)
      next k
      error(j, i)=s * signal(m, i) * (1 - signal(m, i))
   next i
next j

// poprawianie wag sieci na podstawie wykrytych błędów
for each layer j
   for each node i in layer j
      for each node k in layer j + 1
         correction(j, i, k)=learning_rate * signal(j, i) * error(j + 1, k) + momentum * correction(j, i, k)
         weight(j, i, k)=weight(j, i, k) + correction(j, i, k)
      next k
      bias_correction(j, i)=learning_rate * error(j, i) + momentum * bias_correction(j, i)
      bias_weight(j, i)=bias_weight(j, i) + bias_correction(j, i)
   next i
next j


Huffman - Informacje

Huffman

(Naciśnij przycisk aby uruchomić program)

Program Huffman służy do opracowywania optymalnej strategii w grze Pytania. W tym celu na podstawie podanych przez użytkownika danych buduje on drzewo binarne zgodnie z algorytmem Huffmana. Drzewo to zawiera pełen przepis jak należy zadawać pytania podczas gry, aby średnio zadać ich jak najmniej.

Analogiczną metodę wykorzystuje się przy kompresowaniu plików. Na podstawie częstości występowania liter w pliku konstruuje się drzewo binarne, które umożliwia zakodowanie całej informacji w mniejszej liczbie bitów. Program Huffman potrafi skonstruować odpowiednie drzewo binarne wskazanego pliku i na tej podstawie skompresować go. Możliwa jest również dekompresja pliku do jego pierwotnej postaci.

Szczegółowe informacje na temat różnych opcji programu można znaleźć w następujących zakładkach:

Ręczne konstruowanie drzewa
 Przeglądanie drzewa
Kompresowanie pliku
Dekompresowanie pliku

Warto również zapoznać się z algorytmem wykorzystywanym przez program, który jest opisany w zakładce Notatki programistyczne.

Szczegółowe informacje na temat gry Pytania, algorytmu Hufmana i drzew binarnych można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 5.


Huffman: ręczne konstruowanie drzewa

Ręczne konstruowanie drzewa w programie Huffman

Huffman - Informacje

Aby ręcznie skonstruować drzewo należy podać rozkład prawdopodobieństwa wyników gry. Każdy wynik reprezentowany jest przez liść drzewa z przypisanym do niego prawdopodobieństwem. Liście połączone są za pomocą gałęzi z węzłami. Dokładny opis jak tworzy się liście z odpowiednimi prawdopodobieństwami znajduje się w dalszej części tej zakładki.

Po podaniu prawdopodobieństw dla wszystkich wyników gry program samoczynnie konstruuje drzewo wg przepisu podanego pierwszy raz przez Huffmana. Dokładny opis tego algorytmu znajduje się w książce Modelowanie Rzeczywistości. Program daje możliwość prześledzenia każdego etapu konstruowania drzewa. Szczegółowy opis jak można śledzić konstrukcję drzewa znajduje się w zakładce Przeglądanie drzewa.

Wprowadzanie prawdopodobieństw

Program rozpoczyna pracę z pustym drzewem binarnym. Podczas pracy z programem w każdej chwili można usunąć drzewo naciskając przycisk New [Nowy].

Edycja liści odbywa się poprzez okno dialogowe Edit probabilities [Edycja prawdopodobieństw] pokazane poniżej.

Aby dodać liść i przypisać do niego prawdopodobieństwo p należy wpisać liczbę p do pola tekstowego i nacisnąć przycisk Add [Dodaj]. Prawdopodobieństwo może być podane w formie ułamka dziesiętnego lub ułamka zwykłego. Zatem np. prawdopodobieństwo 3/4 można podać jako .75, 0.75, 3/4, 6/8, itd. Prawdopodobieństwo musi być liczbą dodatnią, ale może być większe od jedności. W takim przypadku liczba ta ma interpretację liczby prób przypadających na dane zdarzenie z pośród wszystkich prób, tzn. prawdopodobieństwo takiego zajścia jest równe stosunkowi podanej liczby do sumy wszystkich podanych liczb.

Aby usunąć wprowadzony wcześniej liść należy go znaznaczyć lewym przyciskiem myszki i naciśnąć przycisk Remove selected node [Usuń zaznaczony liść].

Program daje możliwość przeskalowania wszystkich prawdopodobieństw tak, aby sumowały się do jedności. W tym celu należy nacisnąć przycisk Normalize [Normalizuj]. Po jego naciśnięciu program podzieli wszystkie wprowadzone prawdopodobieństwa przez ich sumę. W związku z tym wprowadzenie prawdopodobieństw w następujący sposób:

1/3
1/5
1/5
2/15
1/15
1/15

daje ten sam efekt co:

5
3
3
2
1
1

i naciśnięcie przycisku Normalize [Normalizuj].

Aby sprawdzić jak wygenerować drzewo na podstawie wprowadzonych prawdopodobieństw proszę zajrzeć do zakładki Przeglądanie drzewa.


Przeglądanie drzewa w programie Huffman

Huffman - Informacje
Ręczne konstruowanie drzewa

Program Huffman umożliwia skonstruowanie drzewa potrzebnego do jednego z dwóch zadań:

  • Strategy [Strategia] - znalezienie najlepszej strategii w grze Pytania,
  • File [Plik] - skompresowanie pliku.
W zależności od postawionego zadania różne elementy drzewa reprezentują różne dane. Ich dokładny opis przedstawia poniższa tabela.

 | Strategia | Plik
Liść | Wynik gry | Znak
Węzeł | Pytanie | -
Gałąź | Odpowiedź (tak lub nie) | Bit (0 lub 1)

Algorytm Huffmana tworzenia drzewa

Program daje możliwość przeglądania postępów w tworzeniu drzewa binarnego na cztery sposoby:

  • Po naciśnięciu przycisku Step [Krok] program konstruuje następny poziom węzłów w drzewie.
  • Po naciśnięciu przycisku Step back [Krok wstecz] program wymazuje ostatni poziom węzłów w drzewie.
  • Po naciśnięciu przycisku Create tree [Stwórz drzewo] program skonstruuje całe drzewo do ostatniego węzła.
  • Po naciśnięciu przycisku Reset program wymaże całe drzewo pozostawiając jedynie liście ze zdefiniowanymi prawdopodobieństwami.
Uwaga: Jeśli drzewo pochodzi z wczytanego skompresowanego pliku, to opcje te są niedostępne. W takim przypadku bowiem kompletne drzewo (wraz z gałęziami) zostało wczytane z pliku, a nie stworzone krok po kroku. Dla zadanego rozkładu prawdopodobieństw może istnieć wiele nierównoważnych drzew Huffmana. Jednak tylko jedno z nich prawidłowo nadaje się do rozkodowania skompresowanych danych.

Informacje podstawowe o drzewie

Podstawowe informacje o właściwościach drzewa są cały czas wyświetlane na pasku na dole okna programu. W zależności od zadania dla jakiego drzewo zostało skonstruowane (strategia czy plik) różne informacje są wyświetlane. W poniższej tabelce znajduje się dokładny ich opis.

Strategia |  | Plik
Atrybut | Opis | Atrybut | Opis
Sum [Suma] | Aktualna suma wszystkich prawdopodobieństw | Characters [Znaki] | Całkowita liczba znaków w pliku nieskompresowanym
Information [Informacja] | Informacja wyliczona na podstawie wprowadzonych prawdopodobieństw ze wzoru Shannona | Information [Informacja] | Informacja zawarta w pliku obliczona na podstawie występowania pojedynczych znaków ze wzoru Shannona
Average [Średnia] | Średnia liczba pytań potrzebna do znalezienia skarbu | Bits [Bity] | Liczba bitów potrzebnych do zapisania skompresowanej wersji pliku bez nagłówka i informacji o drzewie binarnym

Informacje o węzłach drzewa

Użytkownik może uzyskać informację o każdym z węzłów i liści drzewa wskazując odpowiedni element myszką. Podobnie jak w poprzednim przypadku podane informacje zależą od zadania dla jakiego drzewo zostało skonstruowane. Dokładne ich znaczenie znajduje się w poniższej tabelce.

 |  | Pierwsza własność | Druga własność
Strategia | Węzeł | Pytanie | Prawdopodobieństwo zadania pytania
 | Liść | Wynik | Prawdopodobieństwo osiągnięcia wskazanego liścia
Plik | Węzeł | Znaki, które należą do węzła | Całkowita liczba wystąpień znaków przypisanych do tego węzła w pliku
 | Liść | Znak | Całkowita liczba wystąpień znaku w pliku

W przypadku liścia pierwsza własność jest dodatkowo wyświetlana w jego wnętrzu jeśli tylko powiększenie jest wystarczające, aby informacja się w nim zmieściła. Druga własność (określająca prawdopodobieństwo wystąpienia) jest odzwierciedlona w kolorze liścia. Liście mniej prawdopodobne są bardziej niebieskie, a bardziej prawdopodobne są bardziej karmazynowe.

Przewijanie pola widzenia

Pole widzenia można przewijać wykorzystując standardowe suwaki na brzegach pola, w którym wyświetlane jest drzewo binarne.

Powiększanie

Aby powiększyć lub pomniejszyć wyświetlane drzewo należy skorzystać odpowiednio z przycisków Zoom in [Powiększ] i Zoom out [Pomniejsz].


Huffman: kompresowanie pliku

Kompresowanie pliku za pomocą programu Huffman

Huffman - Informacje

Aby skompresować plik za pomocą programu Huffman należy nacisnąć przycisk Open [Otwórz] i wybrać plik do kompresji. Program automatycznie przeanalizuje plik i policzy liczbę wystąpień każdego znaku występującego w pliku.

Po przeanalizowaniu pliku automatycznie zostanie zbudowane drzewo binarne, które będzie służyło do zakodowania skompresowanej informacji.

Aby skompresować wybrany plik należy nacisnąć przycisk Compress [Kompresuj], a następnie podać nazwę pliku, do którego ma zostać zapisana skompresowana informacja.

Uwaga: Domyślnie program Huffman proponuje nadać nazwę skompresowanemu plikowi powstałą przez dodanie rozszerzenia .huf do nazwy pliku źródłowego. Takie rozszerzenie nie jest jednak konieczne do prawidłowego działania programu, gdyż program rozpoznaje skompresowany plik po nagłówku umieszczonym na początku jego zawartości, a nie po rozszerzeniu.

Informacje na temat sposobu dekompresowania plików utworzonych przez program Huffman można znaleźć w zakładce Dekompresowanie pliku


Huffman: dekompresowanie pliku

Dekompresowanie pliku za pomocą programu Huffman

Huffman - Informacje
Kompresowanie pliku

Program Huffman umożliwia dekompresowanie plików skompresowanych wcześniej za pomocą tego programu. Więcej informacji o tym, jak można skompresować plik można znaleźć w zakładce Kompresowanie pliku.

Aby dokonać dekompresji wcześniej skompresowanego pliku należy nacisnąć przyciskOpen [Otwórz] i podać nazwę pliku skompresowanego. Program automatycznie wczyta zapisane w nim drzewo binarne i wyświetli je na ekranie. Nie jest jednak możliwe przeglądanie kolejnych kroków powstawania drzewa, gdyż ta informacja nie jest zapisywana w pliku.

Aby odkodować skompresowaną informację i zapisać ją do pliku należy nacisnąć przycisk Decompress [Dekompresuj] i podać nazwę pliku, do której mają zostać zapisane dane.


Huffman: notatki programistyczne

Notatki programistyczne do programu Huffman

Huffman - Informacje

Konstrukcja drzewa

Drzewo binarne jest konstruowane w oparciu o algorytm Huffmana dokładnie opisany w książce Modelowanie Rzeczywistości w rozdziale 5.

Kompresowanie i dekompresowanie plików

Skompresowany plik programem Huffman składa się z następujących części:

  • Nagłówek zawierający rozmiar oryginalnego pliku.
  • Drzewo binarne.
  • Oryginalne dane zakodowane z wykorzystaniem drzewa.

Nagłówek pliku skompresowanego służy do dwóch rzeczy. Po pierwsze pozwala on odróżnić programowi Huffman plik skompresowany od nieskompresowanego. Po drugie zawiera on rozmiar oryginalnego pliku, który został poddany kompresji. Jest to informacja bardzo ważna ze względu na następującą komplikację. W skompresowanym pliku znaki są kodowane za pomocą zmiennej liczby bitów (w zależności od budowy drzewa binarnego). To umożliwia zapisanie tej samej informacji w mniejszej liczbie bajtów. W ogólności może zdarzyć się tak, że długość ciągu bitów, w który została zakodowana informacja nie jest wielokrotnością bajtu. Jednak najmniejszą jednostką informacji w każdym pliku jest bajt i w związku z tym ciąg musi być uzupełniony do najbliższej pełnej ósemki. Znakiem dla algorytmu dekodującego jest natomiast koniec pliku skompresowanego. To sprawia, że przy dekompresji program nie jest w stanie poprawnie znaleźć miejsca, na którym kończy się informacja w zakodowanym ciągu bitów. Jeśli jednak dodatkowo znana jest długość pliku oryginalnego można ten problem łatwo ominąć. Potrafimy bowiem znaleźć miejsce w ostatnim bajcie, od którego zaczyna się jedynie uzupełnienie bajtu do całości.

Nagłówek pliku skompresowanego to następujący ciąg znaków:

File compressed with Modeling Reality — Huffman. Size: <file_size>

gdzie <file_size> to rozmiar oryginalnego pliku przed skompresowaniem. W związku z tym rozmiar nagłówka to 57 bajtów plus tyle znaków ile cyfr ma zapisany rozmiar pliku w systemie dziesiętnym.

Drzewo zapisywane jest do pliku przez procedurę rekurencyjną Seria(.) z parametrem węzeł_główny (tzn. Seria(węzeł_główny)).

Seria(węzeł)
    Jeżeli węzeł jest liściem to
        wpisz do pliku bit z wartością 0
        wpisz do pliku 8 bitów kodujących znak liścia
    w przeciwnym razie
        wpisz do pliku bit z wartością 1
        Seria(droga w lewo od węzeł)
        Seria(droga w prawo od węzeł)
    Koniec

Z tego algorytmu wynika, że liczba bitów potrzebnych do zakodowania drzewa binarnego dla n różnych znaków wynosi:
(8 + 1) n + 1 (n - 1)=10 n - 1.

Znaki kodowane są w pliku jako ciąg bitów reprezentujących ścieżkę w drzewie binarnym prowadzącą od wierzchołka głównego do odpowiedniego liścia. Przy czym ruch po gałęzi w lewą stronę kodowany jako 0, a w prawą jako 1.


Hyman - Informacje

Hyman

(Naciśnij przycisk aby uruchomić program)

Program Hyman oparty jest na eksperymencie wymyślonym przez Raya Hymana. Eksperyment pokazuje jak zmienia się reakcja człowieka na zewnętrzne bodźce w zależności od ich liczby. Dokładniej mówiąc jak zależy czas reakcji człowieka od informacji jaką musi przeanalizować po otrzymaniu sygnału.

Program umożliwia użytkownikowi przeprowadzenie uproszczonego eksperymentu Hymana na sobie samym. Bodźcami są informacje pojawiające się na ekranie, zaś reakcją jest naciśnięcie odpowiedniego klawisza na klawiaturze.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Hyman?


Jak używać programu Hyman?

Hyman - Informacje

Test oparty na doświadczeniu Hymana realizowany przez komputer jest bardzo prosty. Program podświetla litery widoczne na ekranie, a zadaniem użytkownika jest jak najszybsze naciśnięcie odpowiadającego im klawisza na klawiaturze. Czas pomiędzy podświetleniem litery, a naciśnięciem klawisza na klawiaturze jest mierzony i jest podstawą do sporządzenia wyników testu.

Test składa się z kilku etapów. Pierwszy etap to rozgrzewka, której zadaniem jest przyzwyczajenie użytkownika do interfejsu i jasności monitora. Dla uzyskania dokładnego wyniku zaleca się, aby użytkownik przechodził rozgrzewkę przed rozpoczęciem każdego testu, nawet gdy program nie jest używany po raz pierwszy. Podczas rozgrzewki nie jest zbierana informacja o uzyskanych czasach reakcji.

Podczas kolejnych etapów liczba możliwych liter rośnie za każdym razem o jeden. Tym samym w każdym etapie użytkownik musi być przygotowany na więcej możliwości (więcej informacji do przeanalizowania). Każdy etap składa się z kilku prób, tak aby pomiar był jak najdokładniejszy.

Ustawienia programu

W głównym oknie programu użytkownik może ustawić parametry przeprowadzanego testu. Można ustawić następujące parametry:

  • Number of stages [Liczba etapów] - pozwala ustawić liczbę etapów składających się na test.
  • Number of trials per stage [Liczba prób na etap] - pozwala ustawić liczbę pojedynczych prób składających się na każdy etap testu.
  • Warm up [Rozgrzewka] - pozwala zdecydować czy przed testem ma być przeprowadzona rozgrzewka.
  • Sounds [Dźwięki] - pozwala zdecydować czy podczas testu ma być włączona sygnalizacja dźwiękowa.
Im więcej etapów i więcej prób będzie wykonanych podczas testu, tym wynik będzie dokładniejszy (czas reakcji użytkownika jest uśredniany po liczbie prób). Oczywiście wtedy test trwa odpowiednio dłużej.

Przeprowadzanie testu

Przed rozpoczęciem każdego z etapów testu (również rozgrzewki) użytkownik jest proszony o naciśnięcie dowolnego klawisza na klawiaturze. Po uruchomieniu etapu na ekranie wyświetlany jest zbiór liter, które są dostępne na danym etapie. Po podświetleniu litery należy jak najszybciej nacisnąć na klawiaturze prawidłową literę.

Na dole ekranu znajduje się pasek postępu, w którym program informuje użytkownika o przebiegu testu.

Wyniki

Po zakończeniu całego testu program automatycznie wyświetli wyniki. Czerwona linia reprezentuje czas reakcji w funkcji liczby bodźców N (liczby możliwych wyborów). Niebieska linia to wykres funkcji logarytmicznej

,

której parametry są dobrane tak, aby najlepiej pasowała ona do wyników pomiaru.

Parametry krzywej T i P można interpretować jako odpowiednio treshold reaction time [średni czas odpowiedzi na bodziec] czyli czas potrzebny człowiekowi na zareagowanie na zmianę w środowisku oraz average procesing time per bit [średni czas przetwarzania danych] czyli czas potrzebny człowiekowi na przetworzenie 1 bitu informacji. Różnice pomiędzy linią niebieską i czerwoną powodują różne fluktuacje, które można zmniejszyć zwiększając liczbę prób i etapów.

Wyniki testu można zapisać do pliku naciskając przycisk Save results [Zapisz wyniki]. Tak utworzony plik może być później przeglądany za pomocą programu Hyman. Aby tego dokonać należy nacisnąć przycisk View stored results [Pokaż przechowywane wyniki] i wskazać odpowiedni plik. Dane można również otworzyć w innym programie np. MS Excel.


Lorenz - Informajce

Lorenz

(Naciśnij przycisk aby uruchomić program)

Program Lorenz realizuje ogromnie uproszczony model zjawisk meteorologicznych dogłębnie studiowany przez Edwarda Lorenza. Wykreśla on rzut na płaszczyznę trajektorii zakreślanych przez dwa motyle poruszające się w trójwymiarowej przestrzeni.

Ruch motyli zdefiniowany jest przez odpowiednie równania, które pierwszy raz podał Lorenz. Okazuje się, że dla tak zdefiniowanego ruchu motyle poruszają się zupełnie inaczej, nawet gdy wyruszyły z miejsc bardzo blisko położonych od siebie. Jest to przejaw chaotycznego zachowania, które powszechnie znane jest jako efekt motyla. Minimalna różnica w położeniu początkowym dwóch motyli powoduje po pewnym czasie znaczne różnice.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Lorenz?.

Szczegółowe informacje na temat chaosu i efektu motyla można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 7.


Jak używać programu Lorenz?

Lorenz - Informacje

Po uruchomieniu program automatycznie rozpoczyna symulację ruchu motyli na podstawie domyślnych ustawień. Poruszające się motyle, aby było łatwiej je odróżnić, są dwóch kolorów (niebieski i czerwony). Pozostawiają one za sobą ślad o odpowiednim kolorze. Gdy motyle są na tyle blisko siebie, że stają się nierozróżnialne ze względu na rozdzielczość ekranu, są reprezentowane przez fioletowego motyla zostawiającego fioletowy ślad. W każdej chwili symulację można zatrzymać naciskając przycisk Pause simulation [Wstrzymaj symulację]. Aby wznowić symulację należy nacisnąć przycisk Resume simulation [Wznów symulację].

Aby uruchomić symulację od początku należy nacisnąć przycisk Reset.

Ustawianie warunków początkowych

Aby ustawić początkowe położenia motyli należy podać ich współrzędne w trójwymiarowej przestrzeni wpisując je do odpowiednich pól w sekcjach Red starting point [Czerwony punkt startowy] i Blue starting point [Niebieski punkt startowy].

Użyty model matematyczny

Program oblicza współrzędne danego motyla na podstawie współrzędnych z poprzedniego kroku na podstawie następujących wzorów:

Na ekranie wykreślany jest rzut trajektorii motyla na płaszczyznę. W tym przypadku płaszczyzna ta wybrana jest w taki sposób, że współrzędne punktów na ekranie mają postać (x+y,z).


Mandelbrot - Informacje

Mandelbrot

(Naciśnij przycisk aby uruchomić program)

Program Mandelbrot pozwala użytkownikowi wygenerować i przebadać najsłynniejsze przykłady obiektów samopodobnych, tzw. fraktali. Są to zbiór Mandelbrota, zbiór Julii oraz fraktal Newtona. Ściśle mówiąc wymienione obiekty, w odróżnieniu od matematycznych fraktali, zbioru Cantora, czy trójkąta Sierpińskiego, są jedynie w przybliżeniu samopodobne. Użytkownik ma możliwość wielokrotnego powiększania wybranych fragmentów narysowanych zbiorów, dzięki czemu może przekonać się o ich samopodobnej strukturze. W przypadku zbioru Julii dodatkowo wyświetlany jest zbiór Mandelbrota, na którym zaznaczony jest punkt odpowiadający aktualnie wyświetlanemu zbiorowi Julli.

Uwaga: Program Mandelbrot do prawidłowego działania wymaga zainstalowanego programu DirectX w wersji 8 lub późniejszej. Można go zainstalować bezpośrednio z płyty Modelowanie Rzeczywistości lub pobierając jego najnowszą wersję z internetu.

Szczegółowe informacje na temat używania programu Mandelbrot można znaleźć w następujących zakładkach:

Jak używać programu Mandelbrot?
Zaawansowane opcje programu

Warto również zapoznać się ze szczegółami programistycznymi, które są opisane w zakładce Notatki programistyczne.

Zalecenie: Aby lepiej zrozumieć do czego służy program i co ilustruje proponujemy przed jego użyciem zapoznać się z rozdziałem 8. książki Modelowanie Rzeczywistości, w którym jest mowa o iteracyjnych sposobach tworzenia fraktali.


Jak używać programu Mandelbrot?

Mandelbrot - Informacje

Fraktal jest wyświetlany w polu graficznym umieszczonym po prawej stronie okna programu. Użytkownik może wybrać rodzaj wyświetlanego fraktala zaznaczając odpowiednią opcję w sekcji Fractal [Fraktal] umieszczonej na górze po lewej stronie okna programu. Do wyboru są:

  • Mandelbrot set [Zbiór Mandelbrota],
  • Julia set [Zbiór Julii],
  • Newton's fractal [Fraktal Newtona].

Przesuwanie obrazu

Aby zmienić położenie pola wyświetlającego obraz można wykorzystać odpowiednie przciski ze strzałkami znajdujące się na brzegach pola. W tym samym celu użytkownik może również używać przycisków ze strzałkami na klawiaturze lub podać dokładną pozycję pola. Współrzędne lewego górnego rogu pola wyświetlającego należy wpisać do odpowiednich pól tekstowych Real left corner [Współrzędna rzeczywista lewego górnego rogu] oraz Imaginary top corner [Współrzędna urojona lewego górnego rogu], które znajdują się w sekcji Parameters [Parametry].

Powiększanie obrazu

Aby powiększyć lub zmniejszyć wyświetlany obraz w polu należy użyć odpowiednio klawiszy A i Z na klawiaturze aktywując wcześniej pole wyświetlające fraktal. Użytkownik może również podać dokładną wartość współczynnika powiększenia wpisując go do pola tekstowego Zoom [Powiększenie] znajdującego się w sekcji Parameters [Parametry]. Powiększenie obrazu jest również możliwe poprzez zaznaczenie konkretnego fragmentu obrazu za pomocą lewego przycisku myszki.

Uwaga: Współczynnik powiększenia odpowiada odległości pomiędzy punktami, w których fraktal jest rysowany i tym samym zależy od ustawionej gęstości tych punktów. Dodatkowe informacje jak można zmienić gęstość rozłożenia punktów, w których rysowany jest fraktal znajdują się w zakładce Zaawansowane opcje programu.

Uwaga: Nadmierne powiększanie obrazu może spowodować, że program przestanie działać prawidłowo. Jest to związane ze ograniczoną dokładnością obliczeniową komputera.

Ustawianie liczby powtórzeń

Aby zwiększyć lub zmniejszyć liczbę powtórzeń, które generują fraktal należy użyć odpowiednio klawiszy S i X na klawiaturze aktywując wcześniej pole wyświetlające fraktal. Użytkownik może również podać dokładną liczbę powtórzeń wpisując ją do pola tekstowego Number of iterations [Liczba powtórzeń]. Większa liczba powtórzeń zwiększa czas generowania fraktala, ale daje większą dokładność rysunku.

Ustawianie parametrów dla zbioru Julii

Dla każdej liczby zespolonej określony jest jeden zbiór Julii. Dlatego przy wyświetlaniu tego fraktala w dodatkowym oknie Julia set location [Pozycja zbioru Julii] na płaszczyznie zespolonej jest zaznaczony punkt (tzw. punkt startowy), któremu odpowiada aktualnie wyświetlany zbiór Julii. Na tej płaszczyźnie wyświetlony jest dodatkowo zbiór Mandelbrota, którego punkty odpowiadają tzw. spójnym zbiorom Julii. Ta zaskakująca własność zbioru Julii została odkryta przez Mandelbrota.

W oknie Julia set location [Pozycja zbioru Julii] użytkownik może ustawić punkt startowy dla zbioru Julii. Można również dokładnie określić położenie punktu startowego wpisując jego współrzędne do pól tekstowych Real shift [Część rzeczywista] i Imaginary shift [Część urojona].

Przywracanie ustawień domyślnych

Po zmianie typu fraktala za pomocą stosownej opcji w sekcji Fractal [Fraktal] program rysuje zbiór używając domyślnych parametrów. Po zmianie parametrów wyświetlania (np. zmiana położenia pola, zmiana współczynnika powiększenia itp.) użytkownik może przywrócić domyślne ustawienia naciskając przycisk Reset [Przywróć].

Informacje o zaawansowanych opcjach programu znajdują się w zakładce Zaawansowane opcje programu.


Mandelbrot: zaawansowane opcje programu

Zaawansowane funkcje programu Mandelbrot

Mandelbrot - Informacje

Zaawansowane funkcje programu są dostępne w sekcji Settings [Ustawienia] znajdującej się po prawej stronie okna programu.

Wybór schematu barw

Po naciśnięciu przycisku Change color scheme... [Zmiana schematu kolorów...] otworzy się nowe okno, które umożliwia użytkownikowi określić sposób kolorowania wyświetlanych fraktali. Punkty należące do zbioru Mandelbrota lub zbioru Julii zawsze są rysowane w kolorze czarnym. Kolory pozostałych punktów zależą od liczby powtórzeń, po których algorytm wyprowadza je poza okrąg o promieniu 2. Zakres kolorów odpowiada określonemu zakresowi dopuszczalnej liczby powtórzeń. W zakładce Jak używać programu Mandelbrot? opisano, jak zmienić liczbę powtórzeń. Zakres ten może być odwzorowany w dowolną liczbę cykli kolorów. Liczba cykli może być określona przez użytkownika poprzez wpisanie jej do pola tekstowego Number of cycles [Liczba cykli]. Kolejność kolorów w cyklu może zostać ustalona przez wybranie odpowiedniej opcji w sekcji Order [Porządek].

Uwaga: Sposób wyświetlania fraktala Newtona nie zależy od określonej liczby cykli. Jest tak dlatego, że z definicji każdy punkt tego zbioru może mieć tylko jeden z trzech kolorów. Jedynie kolejność kolorów określona w sekcji Order [Porządek] wpływa na zmianę kolorowania punktów tego zbioru.

Zmiana rozdzielczości

Po naciśnięciu przycisku Change resolution... [Zmiana rozdzielczości] otworzy się nowe okno, które umożliwia użytkownikowi zmieniać rozdzielczość wyświetlanego obrazu, czyli liczbę punktów, w których dokonywane są obliczenia. Ponieważ rozdzielczość musi zachowywać proporcję 1:1 program umożliwia jej zmiany jedynie w jednym kierunku.

Uwaga: Rozdzielczość jest całkowicie niezależna od wielkości wyświetlanego obrazu. Jeśli jest mniejsza niż liczba punktów aktualnie wyświetlanych to obraz będzie niewyraźny na skutek rozmycia pikseli. Jeśli jest większa, to część obrazu zostanie pominięta ze względu na to, że nie wszystkie punkty można wyświetlić. Ustawienia domyślne odpowiadają dokładnie wielkości okna, w którym wyświetlany jest obraz. Wtedy jeden wyświetlany piksel odpowiada dokładnie jednemu punktowi, w którym prowadzone są obliczenia.

Pasek postępu

Podczas generowania obrazu fraktala na dole okna programu wyświetlany jest pasek postępu, w którym użytkownik jest informowany o postępie obliczeń. Wyświetlanie tego paska, przy pewnych parametrach, może jednak spowolniać proces obliczeń. Dlatego użytkownik ma możliwość ukrycia tego paska za pomocą przycisku Show/hide progress bar [Pokaż/ukryj pasek postępu].


Mandelbrot: notatki programistyczne

Notatki programistyczne dla programu Mandelbrot

Mandelbrot - Informacje

Program Mandelbrot jest tak zoptymalizowany by zapewnić jak najszybsze wykonywanie obliczeń i generowanie rysunków fraktali. Szybkie odtwarzanie obrazów zapewnione jest przez wykorzystanie technologii DirectX, która daje możliwość bezpośredniego zapisywania danych do pamięci video. Aby zapewnić jak najszybsze wykonywanie obliczeń program wykorzystuje zewnętrzną bibliotekę napisaną w Visual C++ i skompilowaną do pliku DLL. Dodatkowo w programie zastosowano inne sposoby optymalizacji, które są oparte na wieloletnich doświadczeniach nad generowaniem obrazów. Poniżej znajduje się ich przegląd.

Tracing

Nie wszystkie punkty fraktala są generowane na podstawie algorytmu służącego do konstruowania fraktala. Obraz powstaje poprzez zaznaczenie brzegów tych regionów, które powstają w wyniku tej samej liczby powtórzeń (tzw. tracing). Zostało bowiem udowodnione, że takie obszary zawierają wewnątrz tylko takie punkty, które odpowiadają takiej samej liczbie powtórzeń (lub należą do tego samego atraktora w przypadku fraktala Newtona) i w związku z tym mogą być automatycznie wypełnione jednolitym kolorem.

Ograniczenie liczby operacji procesora

Podczas generowania obrazu fraktala iterowane są operacje, które wykonywane są na liczbach zespolonych. W związku z tym bardzo ważne jest efektywne ograniczenie do niezbędnego minimum takich operacji. W przypadku zbiorów Mandelbrota i Julii wyniki dwóch kosztownych operacji (podniesienie do kwadratu części rzeczywistej i urojonej) są przechowywane do późniejszego sprawdzenia, czy iteracja wyprowadziła punkt poza okrąg o promieniu 2. Dodatkowo sprawdzenie to wykonywane jest jedynie raz na osiem iteracji. Jeśli punkt wyszedł poza okrąg, wtedy sprawdzanie jest przeprowadzane wstecz, aby określić dokładną liczbę powtórzeń.

Optymalizacja przesuwania i pomniejszania

Przesuwanie i zmniejszanie obrazu jest zoptymalizowane w ten sposób, aby było można wykorzystać informacje wcześniej uzyskane. Nowy obraz powstaje poprzez uzupełnienie starych danych punktami, które wcześniej nie były widoczne. Procedura ta mogłaby być również zastosowana przy powiększaniu obrazu. Ze względu jednak na optymalizację metodą tracing stosowanie tej metody nie daje już dużego przyśpieszenia.

Optymalizacja iterowania

Należy zauważyć, że zwiększenie możliwej liczby iteracji nie zmienia liczby iteracji dla tych punktów, które zostały wykryte jako uciekające (czyli nienależące do zbioru) już w poprzednim przypadku. Dla tych punktów nie trzeba wykonywać obliczeń ponownie, a wystarczy jedynie zmienić odpowiednio ich kolory tak, aby pasowały do nowego zakresu. Obliczenia trzeba natomiast prowadzić jedynie dla tych punktów, które wcześniej zostały uznane za należące do zbioru, ze względu na ograniczoną liczbę dozwolonych iteracji.

Zmniejszenie liczby dozwolonych iteracji wymaga natomiast ponownego przeliczenia tylko tych punktów, które nie zostały zaliczone wcześniej do zbioru.

Naszkicowana tutaj procedura nie ma zastosowania w przypadku fraktala Newtona.


Pasteur - Informacje

Pasteur

(Naciśnij przycisk aby uruchomić program)

Program Pasteur to prosta implementacja automatu komórkowego, który modeluje rozprzestrzenianie się choroby zakaźnej w pewnej populacji. Organizmy stanowiące tę populację mogą się przemieszczać i spotykać zgodnie z określonymi regułami. Podczas spotkania z osobnikiem zarażonym może nastąpić zarażenie zdrowego osobnika.

Aby dowiedzieć się więcej na temat programu, proszę zajrzeć do zakładki Jak używać programu Pasteur?


Jak używać programu Pasteur?

Pasteur - Informacje

Model układu

W przyjętym modelu społeczeństwo żyje na ograniczonej kwadratowej przestrzeni, która jest podzielona na komórki. W każdej komórce może znajdować się co najwyżej jeden osobnik. Każdy osobnik ma w danej chwili określony stopień zarażenia, który jest liczbą z zakresu 0% - 100%. W każdym kroku symulacji każdy organizm losuje jeden z czterech kierunków świata (północ, południe, wschód lub zachód) i jeśli komórka sąsiednia w tym kierunku jest pusta przemieszcza się w nowe miejsce. Reguły określające sposób zarażania się osobników oraz dochodzenia do zdrowia są następujące:

  • W każdym kroku symulacji układ immunologiczny każdego organizmu niszczy R% bakterii, czyli zmniejsza stopień zarażenia o R%.
  • Jeśli stopień zarażenia organizmu jest większy od ustalonej wartości T, wtedy organizm nie może zostać powtórnie zarażony.
  • Jeśli organizm może być zarażony (tzn. jego stopień zarażenia jest mniejszy niż T) i spotka się on z innym chorym organizmem, może wtedy dojść do zarażenia (stopień zarażenia wzrośnie do 100%). Prawdopodobieństwo zarażenia jest równe stopniowi zarażania spotkanego chorego organizmu.

Wizualizacja symulacji

W lewej części okna programu znajduje się pole podzielone na komórki, w których żyją organizmy. Puste komórki oznaczone są kolorem białym. Komórki, w których znajdują się organizmy oznaczone są kolorem zależnym od stopnia zarażenia osobnika, który się w niej znajduje. Kolor niebieski oznacza zdrowy organizm (zarażenie 0%), kolor czerwony organizm całkowicie zarażony (100%). Kolory pośrednie oznaczają odpowiednio mniejsze stopnie zarażenia. Na dole okna programu w pasku statusu znajduje się informacja o postępie symulacji.

Kontrolowanie symulacji

Aby uruchomić symulację należy nacisnąć przycisk Run [Uruchom]. W każdej chwili symulacja może zostać zatrzymana przez naciśnięcie przycisku Stop. Dodatkowo użytkownik może obserwować ewolucję społeczeństwa krok po kroku naciskając kolejno przycisk Step [Krok]. Aby rozpocząć całą symulację od początku, tzn. ustawić stan początkowy symulacji zgodnie z parametrami zdefiniowanymi w sekcji Simulation parameters [Parametry symulacji] należy nacisnąć przycisk Reset.

Ustawianie parametrów modelu

W sekcji Simulation parameters [Parametry symulacji] użytkownik może dokładnie określić różne parametry modelu.

  • Sposób podziału obszaru na komórki można ustawić za pomocą menu rozwijalnego Grid size [Rozmiar siatki].
  • Za pomocą suwaka Density [Gęstość] można określić procent komórek, które mają być zajęte przez organizmy. Zwiększenie zagęszczenia osobników zmniejsza możliwość przemieszczania się.
  • Za pomocą suwaka initial percentage of sick [Początkowy procent zarażonych] można ustalić ilu osobników jest zarażonych na początku symulacji.
  • Suwak Recovery rate [Zdolność zdrowienia] pozwala określić wartość parametru R opisanego dokładnie w części Model układu.
  • Suwak Infection threshold [Próg infekcji] pozwala określić wartość parametru T opisanego dokładnie w części Model układu.

Uwaga: Zmiana parametrów modelu jest uwzględniona dopiero po ponownym uruchomieniu symulacji.


Poe - Informacje

Poe

(Naciśnij przycisk aby uruchomić program)

Program Poe pozwala wykonać statystyczną analizę dowolnego tekstu. Program zlicza liczbę wystąpień w tekście poszczególnych liter, par liter oraz trójek liter. Wyniki są wyświetlane w postaci histogramu i umożliwiają statystyczne rozpoznanie języka, w którym został napisany. Wykorzystując generator liczb pseudolosowych program daje również możliwość wygenerowania ciągu znaków, który będzie miał dokładnie takie same własności statystyczne jak oryginalny tekst.

Szczegółowe informacje na temat używania programu Poe można znaleźć w następujących zakładkach:


Jak używać programu Poe?

Poe - Informacje

Wprowadzanie tekstu

Tekst, który ma zostać poddany analizie statystycznej należy umieścić w polu tekstowym po lewej stronie okna programu. Program daje użytkownikowi możliwość wprowadzenia tekstu z klawiatury, wklejenia go ze schowka systemowego lub wczytania z pliku tekstowego.

Aby wczytać tekst z pliku należy nacisnąć przycisk Load from file [Wczytaj z pliku] i wskazać odpowiedni plik.

Uwaga: Po wczytaniu tekstu z pliku wszystkie znaki, które do tej chwili znajdowały się w polu tekstowym zostaną zastąpione przez wczytany tekst.

Za pomocą przycisku Clear [Wyczyść] użytkownik może usunąć całą zawartość pola tekstowego.

Analizowanie tekstu

Aby przeanalizować tekst pod względem statystycznym należy nacisnąć przycisk Analyze [Analizuj]. Pojawi się okno, w którym będzie przedstawiony aktualny postęp analizy. Użytkownik może w każdej chwili zatrzymać proces analizowania tekstu naciskając przycisk Cancel [Anuluj] umieszczony w tym oknie.

Wyniki analizy są przedstawiane w zakładkach po prawej stronie okna programu w postaci histogramów. Dokładne informacje na temat informacji zawartych w tych zakładkach można znaleźć w zakładce Interpretacja wyników analizy tekstu.

Podczas analizowania tekstu nie wszystkie znaki są brane pod uwagę. Dodatkowo program uznaje niektóre różne znaki jako tożsame. Domyślnie program traktuje utożsamia ze sobą litery, które mają jedynie różną wielkość, np. litera A jest traktowana jako równoważna literze a. Również wszystkie tzw. białe spacje są traktowane jako spacje zwykłe. Szczegółowe informacje na temat rozróżnialności znaków oraz sposobu zmieniania domyślnych ustawień programu można znaleźć w zakładce Parametry dotyczące liter.

Uwaga: Każda zmiana tekstu zmienia oczywiście jego statystyczne własności. Dlatego wyniki analizy są widoczne tylko po zakończeniu analizy i do momentu, w którym zostanie wprowadzona pierwsza poprawka do tekstu.

Generowanie losowego tekstu

Program daje użytkownikowi możliwość wygenerowania losowego tekstu, którego własności statystyczne będą dokładnie odpowiadały własnościom tekstu wprowadzonego do pola tekstowego. Aby tego dokonać należy nacisnąć przycisk Generate random text [Wygeneruj losowy tekst] i podać długość tekstu, który ma być wygenerowany. Liczba, którą podaje użytkownik musi być większa niż 2. Jeśli wprowadzony tekst, na podstawie którego ma powstać nowy losowy tekst, nie został wcześniej przeanalizowany, to przed rozpoczęciem generowania losowego tekstu program dokona analizy. Po zakończeniu generowania losowego tekstu program wyświetli go w osobnym oknie, dając możliwość zapisania go do pliku lub skopiowania do schowka systemowego. Aby zapisać tekst do pliku należy nacisnąć przycisk Save [Zapisz]. Po naciśnięciu przycisku OK okno z wylosowanym tekstem zostanie zamknięte.


Poe: interpretacja wyników analizy tekstu

Interpretacja wyników analizy tekstu programem Poe

Poe - Informacje

Po zakończeniu analizy tekstu znajdującego się w polu tekstowym jego własności statystyczne są wyświetlane w zakładkach po prawej stronie okna programu. Szczegółowe informacje jak wprowadzać tekst do okna i jak przeprowadzać jego analizę można znaleźć w zakładce Jak używać programu Poe?.

Wyniki analizy podzielone są na cztery zakładki Letters [Litery], Pairs [Pary], Triplets [Trójki] i Language [Język]. Pomiędzy zakładkami można się przełączać wybierając odpowiednią nazwę lewym przyciskiem myszki.

Litery

W zakładce Letters [Litery] jest wyświetlanych dwanaście najczęściej występujących w tekście liter uporządkowanych od najczęściej występującej. Obok każdej litery wyświetlany jest słupek histogramu, którego długość jest proporcjonalna do liczby wystąpień litery w tekście. Dodatkowo wyświetlana jest dokładna liczba wystąpień konkretnej litery. Aby uzyskać informację o częstości wystąpień wszystkich liter należy nacisnąć przycisk Complete report [Pełny raport]. Dodatkowe informacje na temat raportów generowanych przez program znajdują się w części Raporty na końcu tego tematu.

Pary

W zakładce Pairs [Pary] wyświetlanych jest dwanaście najczęściej występujących par liter (dwójek liter występujących obok siebie) uporządkowanych od najczęściej występującej. Obok każdej pary wyświetlany jest słupek histogramu, którego długość jest proporcjonalna do liczby wystąpień danej pary w tekście. Dodatkowo wyświetlana jest dokładna liczba wystąpień danej pary. Aby uzyskać informację o częstości wystąpień wszystkich par należy nacisnąć przycisk Complete report [Pełny raport]. Dodatkowe informacje na temat raportów generowanych przez program znajdują się w części Raporty na końcu tego tematu.

Trójki

W zakładce Triplets [Trójki] wyświetlanych jest dwanaście najczęściej występujących trójek liter (trójek liter występujących obok siebie) uporządkowanych od najczęściej występującej. Obok każdej trójki wyświetlany jest słupek histogramu, którego długość jest proporcjonalna do liczby wystąpień danej trójki w tekście. Dodatkowo wyświetlana jest dokładna liczba wystąpień danej trójki. Aby uzyskać informację o częstości wystąpień wszystkich trójek należy nacisnąć przycisk Complete report [Pełny raport]. Dodatkowe informacje na temat raportów generowanych przez program znajdują się w części Raporty na końcu tego tematu.

Język

W zakładce Language [Język] program wyświetla zestawienie rozpoznawalnych języków, które zostały porównane z językiem badanego tekstu. Przy każdym języku wyświetlany jest słupek histogramu, który jest proporcjonalny do współczynnika podobieństwa do języka wprowadzonego tekstu. Aby uzyskać szczegółowe informację o podobieństwie tekstu do wszystkich rozpoznawalnych języków należy nacisnąć przycisk Complete report [Pełny raport]. Dodatkowe informacje na temat raportów generowanych przez program znajdują się w części Raporty na końcu tego tematu.

Szczegółowe informacje w jaki sposób program oblicza współczynnik podobieństwa oraz w jaki sposób użytkownik może wprowadzić informacje o własnościach statystycznych innych języków znajdują się w zakładce Rozpoznawanie języka.

Raporty

Po naciśnięciu przycisku Complete raport [Pełny raport], który znajduje się w każdej zakładce program wyświetla (w zależności od zakładki) szczegółowe informacje o częstości wystąpień liter, par lub trójek liter albo o podobieństwie językowym tekstu. Raport wyświetlany jest w nowym oknie i składa się z dwóch kolumn. Użytkownik może sortować dane względem danej kolumny rosnąco lub malejąco naciskając nazwę odpowiedniej kolumny. Aby zapisać raport na dysku należy nacisnąć przycisk Save [Zapisz]. Po naciśnięciu przycisku OK okno z raportem zostanie zamknięte.


Poe: rozpoznawanie języka

Rozpoznawanie języka w programie Poe

Poe - Informacje

Odległość między tekstami

Podobieństwo dwóch tekstów można określić na podstawie częstości występowania liter i par liter w porównywanych tekstach. Zdefiniujmy w tym celu następującą funkcję tekstu t i litery x:

Odległość względem liter pomiędzy dwoma tekstami t1 i t2 możemy wtedy zdefiniować jako sumę po wszystkich możliwych literach x:

Odległość względem par pomiędzy dwoma tekstami można zdefiniować analogicznie traktując x jako konkretną parę, a nie literę.

Podobieństwo językowe

Podobieństwo tekstu do konkretnego języka (a raczej do próbki konkretnego języka) jest odwrotnie proporcjonalne do odległości pomiędzy danym tekstem, a próbką danego języka. Długość słupka histogramu w zakładce Language [Język] (patrz Interpretacja wyników) jest odwrotnie proporcjonalna do sumy odległości względem liter i względem par pomiędzy tekstem, a próbką danego języka. Kompletny raport uzyskany po naciśnięciu przycisku Complete raport zawiera dokładną odległość względem liter i względem par do wszystkich dostępnych próbek językowych.

Próbki językowe

Podczas analizowania tekstu program porównuje jego własności statystyczne z własnościami próbek językowych, które są przechowywane w plikach z rozszerzeniem .poe. Aby program mógł skorzystać z próbek językowych, pliki te muszą znajdować się w katalogu, w którym zostały zainstalowane programy z pakietu.

Program dostarczany jest razem z próbkami sześciu języków: angielskiego, francuskiego, niemieckiego, włoskiego, łaciny, hiszpańskiego, oraz polskiego. Próbki językowe powstały na podstawie wybitnych dzieł literackich pochodzących z danego języka po uprzednim zapisaniu ich w alfabecie angielskim złożonym z 26 liter (zostały ominięte akcenty, niemieckie znaki diakrytyczne zostały zastąpione ich dwuliterowymi odpowiednikami, zaś polskie litery ą, ę, itp. zostały zastąpione przez a, e, itp.). Dzieła, na podstawie których powstały próbki to:

  • angielski — Oliver Twist, Charles Dickens;
  • polski — Quo vadis?, Henryk Sienkiewicz;
  • francuski — La Dame aux Camelias, Alexandre Dumas;
  • niemiecki — Faust, Johann Wolfgang von Goethe;
  • włoski — La Divina Commedia, Dante Alighieri;
  • łacina — Aeneidos, Virgil;
  • hiszpański — Don Quijote, Miguel de Cervantes.
Wszystkie teksty zostały pobrane z ogólnodostępnej biblioteki elektronicznej Projektu Gutenberg. Dodatkowe informacje na temat tego projektu można znaleźć na stronach internetowych http://gutenberg.net oraz http://promo.net/pg.

Własne próbki językowe

Użytkownik ma możliwość stworzenia własnej próbki językowej. W tym celu należy wprowadzić odpowiedni tekst do pola tekstowego (szczegółowy opis jak można to zrobić znajduje się w zakładce Jak używać programu Poe?), a następnie nacisnąć przycisk Save language definition [Zapisz próbkę językową] i podać odpowiednią nazwę pliku. Nazwa pliku jest jednocześnie nazwą języka, która będzie używana podczas pracy z programem. Należy się przy tym upewnić, że plik zostanie zapisany w katalogu, z którego uruchamiany jest program Poe. Tylko w takim przypadku program będzie mógł skorzystać z tego pliku podczas analizowania tekstów. Aby skasować próbkę językową należy skasować odpowiedni plik z rozszeżeniem .poe.

Uwaga: Załączone do programu próbki językowe zostały przygotowane przy domyślnych parametrach rozróżnialności i ignorowania znaków.


Poe: parametry dotyczące liter

Parametry dotyczące liter w programie Poe

Poe - Informacje

Po naciśnięciu przycisku Character settings [Parametry znaków] otworzy się nowe okno, gdzie użytkownik może określić, które znaki będą brane pod uwagę podczas analizowania tekstu, a które będą traktowane jako nierozróżnialne.

Określanie znaków ignorowanych

W zakładce Characters [Znaki] użytkownik określa za pomocą odpowiednich przełączników, które znaki mają być brane pod uwagę podczas analizowania tekstu. Jeśli kwadrat stojący obok konkretnego znaku jest zaznaczony, wtedy program będzie brał go pod uwagę podczas analizy. W przeciwnym wypadku znak będzie ignorowany.

Uwaga: Użytkownik nie może zmieniać przełączników przy znakach, które są utożsamione z innymi znakami. Szczegółowe informacje na temat utożsamiania znajdują się w dalszej części.

Określanie utożsamień

Znaki utożsamione program uznaje za nierozróżnialne i tym samym są one zliczane tak jakby były tym samym znakiem. Jednym z najczęściej używanych utożsamień jest utożsamienie ze sobą liter wielkich i małych. Użytkownik ma możliwość definiowania utożsamień w zakładce Aliases [Utożsamienia]. Lista po lewej stronie tej zakładki zawiera spis wszystkich zdefiniowanych utożsamień. Każdy wiersz listy odpowiada jednemu utożsamieniu. Wszystkie znaki występujące w danym wierszu będą traktowane tak, jakby były pierwszym znakiem w wierszu.

Dodawanie utożsamienia

Aby dodać nowe utożsamienie należy nacisnąć przycisk New alias [Nowe utożsamienie]. Program domyślnie utworzy utożsamienie dla znaku [0]. Aby zmienić je na odpowiednie należy postępować zgodnie z dalszymi instrukcjami.

Poprawianie utożsamienia

Aby zmienić parametry danego utożsamienia, należy zaznaczyć odpowiadający mu wiersz na liście utożsamień,a następnie z rozwijalnego menu obok słowa is wybrać znak, z którym chcemy utożsamić inne znaki. Wybrany znak będzie pierwszym znakiem w wierszu na liście utożsamień. Lista poniżej zawiera te znaki, które są utożsamione z wybranym znakiem, czyli te które będą uważane za wybrany znak. Aby dodać lub usunąć znak z listy znaków utożamionych z wybranym znakiem należy skorzystać z odpowiednich przycisków --> i <--. Umożliwiają one przenoszenie konkretnych znaków pomiędzy listą znaków utożsamionych, a listą Available characters [Dostępne znaki], która zawiera znaki nieutożsamione z żadnym innym znakiem.

Usuwanie utożsamienia

Aby usunąć konkretne utożsamienie należy zaznaczyć odpowiadający mu wiersz na liście utożsamień i nacisnąć przycisk Remove alias [Usuń utożsamienie].

Zapisywanie, wczytywanie i przywracanie domyślnych ustawień

Użytkownik może zapisać zdefiniowane utożsamienia i znaki ignorowane do pliku naciskając przycisk Save [Zapisz] i podając odpowiednią nazwę pliku. Aby wczytać wcześniej zapisany plik należy nacisnąć przycisk Load [Wczytaj] i wskazać odpowiedni plik. Po naciśnięciu przycisku Default [Domyślne] zostaną przywrócone ustawienia domyślne programu, tzn. utożsamione są wielkie i małe litery alfabetu angielskiego, a pozostałe znaki są ignorowane.


Schelling - Informacje

Schelling

(Naciśnij przycisk aby uruchomić program)

Program Schelling jest prostą implementacją automatu komórkowego, który symuluję segregacje rasowe w społeczeństwie. Dwa rodzaje komórek reprezentujące dwie różne rasy ludzi umieszczone są w zamkniętej przestrzeni. Ze względu na chęć przebywania osobników z osobnikami tej samej rasy oraz ze względu na niechęć do przebywania w zdominowanym przez inną rasę środowisku osobniki przemieszczają się. Tym samym wraz z upływem czasu formują się odrębne enklawy różnych ras. Następuje segregacja rasowa społeczeństwa.

Program symuluje zachowanie się społeczeństwa złożonego z dwóch ras. Pozwala zmieniać parametry przyjętego modelu i obserwować ewolucję społeczeństwa.

Więcej informacji na temat funkcjonowania programu oraz opis przyjętego w programie modelu społeczeństwa można znaleźć w zakładce Jak używać programu Schelling?.


Jak używać programu Schelling?

Schelling - Informacje

Model społeczeństwa

Przyjęte w modelu społeczeństwo składa się z jednostek żyjących w zamkniętej kwadratowej przestrzeni. Przestrzeń ta jest podzielona na kwadratowe komórki, w każdej z nich może się znajdować co najwyżej jeden osobnik. Każdy osobnik jest przedstawicielem jednej z dwóch ras. W każdym kroku symulacji każdy osobnik losuje jeden z czterech kierunków świata (N, S, E, W) i sprawdza czy w tym kierunku w sąsiedniej komórce jest wolne miejsce (czyli czy nie ma tam żadnego osobnika). Jeśli rozpatrywana komórka jest pusta podejmuje on decyzję o przemieszczeniu się na podstawie posiadanych informacji o swoim otoczeniu (Otoczenie komórki to dana komórka oraz osiem komórek z którymi ma ona kontakt). Przemieszczenie osobnika do pustej komórki następuję wtedy i tylko wtedy gdy procentowy udział osobników innej rasy w otoczeniu komórki jest większy od ustalonej liczby P, która jest parametrem modelu.

Wizualizacja symulacji

Przestrzeń, w której żyją osobniki wyświetlona jest z lewej strony okna programu. Jeśli w komórce znajduje się osobnik, komórka jest zamalowana na niebiesko lub czerwono (w zależności od rasy osobnika). Puste komórki są zaznaczone na biało. W pasku na dole okna programu wyświetlony jest numer aktualnej generacji.

Parametry modelu

Program umożliwia zmianę różnych parametrów modelu za pomocą odpowiednich pól w sekcji Simulation parameters [Parametry symulacji].

  • Grid size [Rozmiar sieci] określa gęstość podziału dostępnej przestrzeni na komórki.
  • Density [Gęstość] określa procent komórek, które są zajęte przez osobniki. Im parametr jest większy tym większa jest gęstość zaludnienia powierzchni i tym samym utrudnione jest przemieszczanie się osobników.
  • Racial group size ratio [Współczynnik rozmiarów ras] określa stosunek liczby osobników rasy niebieskiej do liczby wszystkich osobników. Ustawienie tego współczynnika na wartość 50% oznacza, że rasy są równoliczne.
  • Acceptable foreign neighbor percentage [Akceptowalny udział obcych w otoczeniu] jest określony przez współczynnik P opisany w części Model społeczeństwa.

Kontrolowanie symulacji

Symulacja rozpoczyna się po naciśnięciu przycisku Run [Start]. W każdej chwili symulacja może zostać zatrzymana przez naciśnięcie przycisku Stop. Użytkownik może również obserwować ewolucję społeczeństwa krok po kroku naciskając kolejno przycisk Step [Krok]. Aby rozpocząć symulację od początku należy nacisnąć przycisk Reset.

Uwaga: Zmiana parametrów modelu ma wpływ dopiero po ponownym uruchomieniu symulacji.


Shannon - Informacje

Shannon

(Naciśnij przycisk aby uruchomić program)

Program Shannon to narzędzie, które pozwala szybko obliczać entropię zawartą w informacji, która jest dana w postaci zbioru prawdopodobieństw. Entropia jest obliczana za pomocą słynnego wzoru Shannona.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Shannon?

Szczegółowe informacje o entropii i wzorze Shannona można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 5.


Jak używać programu Shannon?

Shannon - Informacje

Aby wprowadzić nowe zdarzenie, które ma być uwzględnione przy obliczaniu entropii należy wpisać jego prawdopodobieństwo do pola tekstowego w lewym górnym rogu ekranu okna i nacisnąć przycisk Add [Dodaj]. Ułamki mogą być wprowadzane jako ułamki zwykłe lub dziesiętne, tzn. aby podać prawdopodobieństwo równe trzy czwarte można wpisać 0.75, 3/4, .75, 6/8, itd. Po naciśnięciu przycisku Add [Dodaj] obliczony zostaje czynnik p log(p) i dodany do listy po prawej stronie okna.

Uwaga: Wszystkie logarytmy użyte w programie mają podstawę 2.

Informacje o danych wprowadzonych dotychczas wyświetlone są w trzech polach tekstowych na dole okna programu. Są to:

  • sum [suma] zawiera sumę wprowadzonych prawdopodobieństw,
  • uncertainty [niepewność] zawiera sumę wyrażeń p log(p) dla wszystkich wprowadzonych prawdopodobieństw,
  • information [Informacja] zawiera entropową miarę informacji.

Aby usunąć jakieś zdarzenie z listy należy wskazać je za pomocą myszki, a następnie nacisnąć przycisk Remove [Usuń]. Aby usunąć wszystkie zdarzenia należy nacisnąć przycisk Clear [Wyczyść].

Wszystkie wprowadzone do danego momentu prawdopodobieństwa można przeskalować tak, aby ich suma była równa 1. W tym celu należy nacisnąć przycisk Normalize [Normalizuj]. Program podzieli wtedy wszystkie dotychczas wprowadzone dane przez ich sumę. Jest to przydatna funkcja podczas wprowadzania rozkładu prawdopodobieństw wielu zdarzeń, np. zamiast wprowadzać prawdopodobieństwa tak:

1/3
1/5
1/5
2/15
1/15
1/15

można kolejno wprowadzić liczby

5
3
3
2
1
1

i następnie nacisnąć przycisk Normalize [Normalizuj]. Oba sposoby będą miały dokładnie ten sam efekt.


Sierpinski - Informacje

Sierpinski

(Naciśnij przycisk aby uruchomić program)

Program Sierpinski pozwala rysować fraktale (figury samopodobne) wykorzystując własności dwuwymiarowego błądzenia przypadkowego. Okazuje się, że choć błądzenie przypadkowe jest zagadnieniem czysto losowym, to odpowiednio wykorzystane może produkować bardzo regularne figury.

Algorytm programu

Na płaszczyźnie zdefiniowanych jest N punktów zwanych wierzchołkami. Każdy z nich ma inny kolor. Wybieramy losowo jeden wierzchołek jako nasz punkt startowy. Następnie w każdym kroku iteracji w drodze losowania wybieramy jeden z wierzchołków i przesuwamy punkt w kierunku tego wierzchołka. Odległość o jaką przesuwamy punkt jest zdefiniowana jako iloczyn aktualnej odległości punktu od wylosowanego wierzchołka L oraz ustalonej liczby S zwanej krokiem. W miejscu do jakiego się przesunęliśmy stawiamy kropkę w kolorze odpowiadającym wierzchołkowi jaki został wylosowany.

Powstaje w ten sposób figura bardzo regularna, która do złudzenia przypomina fraktal, przy powiększeniu okazałoby się, że ma ona inną strukturę. Kształt tej figury oczywiście zależy od wybranych parametrów. Dla trzech wierzchołków (N=3) i kroku połówkowego (S=1/2) otrzymujemy powszechnie znany Trójkąt Sierpińskiego.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Sierpinski?.

Dodatkowe informacje na temat zastosowanego generatora liczb pseudolosowych można znaleźć w zakładce Generator liczb pseudolosowych.

Szczegółowe informacje o fraktalach można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 8.


Jak używać programu Sierpinski?

Sierpinski - Informacje

Program wykonuje algorytm opisany w zakładce Informacje dla zadanej przez użytkownika liczby wierzchołków oraz zdefiniowanego kroku. Parametry te można zmieniać wypełniając odpowiednio pola tekstowe Number of vertices [Liczba wierzchołków] oraz Step [Krok]. Po ustaleniu liczby wierzchołków są one rozmieszczone na ekranie w wierzchołkach odpowiedniego wielokąta foremnego. Można je jednak przesuwać w dowolne miejsce za pomocą myszki.

Dla uzyskania lepszego efektu wierzchołki można ukryć wykorzystując opcję Show vertices [Pokazuj wierzchołki]. Proszę zwrócić uwagę, że niezależnie od tego czy wierzchołki są widoczne czy ukryte przesuwanie ich jest zawsze możliwe.

Każda zmiana parametrów lub przesunięcie wierzchołka w inne miejsce rozpoczyna rysowanie od początku. Aby wstrzymać rysowanie fraktala należy nacisnąć przycisk Pause refreshing [Wstrzymaj odświeżanie]. Aby wznowić pracę należy nacisnąć przycisk Resume refreshing [Przywróć odświeżanie].

Wprowadzanie kroku

Program akceptuje różne wartości kroku. Jednak ciekawe rysunki otrzymuje się dla kroków z zakresu [0, 2]. Oczywiście wszystko zależy również od liczby wierzchołków i ich rozmieszczenia na płaszczyźnie. Krok może być wprowadzany zarówno jako ułamek zwykły (3/4) jak i jako ułamek dziesiętny (0.75).

Ciekawe parametry

Poniżej znajdują się parametry, dla których program Sierpinski generuje pewne ciekawe figury samopodobne.

Liczba wierzchołków | Krok
3 | 1/2
3 | 2/5
3 | 3/2
4 | 4/3
5 | 1/2
5 | 34/25
6 | 4/3
8 | 6/5
9 | 2/3
12 | 6/5
30 | 9/8
100 | 17/16
300 | 13/14


Smoluchowski - Informacje

Smoluchowski

Naciśnij przycisk aby uruchomić program)

Program Smoluchowski pozwala symulować ruchy Browna grupy cząstek w jednym, dwóch i trzech wymiarach. Wszystkie cząstki rozpoczynają swój ruch z jednego miejsca - początku układu współrzędnych i poruszają się zgodnie z zasadami tzw. błądzenia przypadkowego. Oznacza to, że w każdym kroku cząstka przesuwa się o stały odcinek w kierunku losowo wybranym. W ten sposób chmura cząstek rozprzestrzenia się. Jest to zatem matematyczny model zjawiska fizycznego znanego jako dyfuzja. Okazuje się, że odchylenie standardowe położenia cząstek, które można interpretować jako promień rozszerzającej się chmury, rośnie jak pierwiastek kwadratowy z czasu.

Co to jest odchylenie standardowe położenia cząstek?

Aby obliczyć odchylenie standardowe położenia cząstek należy najpierw znaleźć odległość każdej z nich od początku układu współrzędnych i podnieść do kwadratu.
Następnie należy obliczyć średnią tak otrzymanych liczb (kwadratów odległości) i wyciągnąć z niej pierwiastek kwadratowy.
Tak otrzymana liczba nazwana jest odchyleniem standardowym i jest dobrą miarą średniego promienia rozprzestrzeniającej się w czasie chmury cząstek.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Smoluchowski?.

Dodatkowe informacje na temat zastosowanego generatora liczb pseudolosowych można znaleźć w zakładce Generator liczb pseudolosowych.

Jeśli jesteś ciekawy dlaczego w ikonie programu jest kufel piwa zajrzyj do zakładki Dlaczego taka ikona?

Szczegółowe informacje o ruchach Browna można znaleźć w książce Modelowanie Rzeczywistości w rozdziale 4.


Jak używać programu Smoluchowski?

Smoluchowski - Informacje

Program Smoluchowski w każdym kroku symulacji przesuwa każdą cząstkę o określoną długość wzdłuż losowo wybranego kierunku. W zależności od ustawienia pola Smooth turns [Gładki ruch] cząstki poruszają się w każdym kroku tylko wzdłuż osi układu współrzędnych (opcja wyłączona) lub w dowolnym kierunku (opcja włączona). Aby rozpocząć symulację od początku należy nacisnąć przycisk Reset.

Ustawienia podstawowe

Liczbę wymiarów, w której przeprowadzana jest symulacja można określić wybierając odpowiednią opcję w sekcji Dimensions [Wymiary] w lewym górnym rogu okna programu.

Liczbę cząstek biorących udział w symulacji można ustawić za pomocą rozwijalnego menu Number of particles [Liczba cząstek].

Ustawienia wizualizacji

Program daje możliwość zmiany sposobu wyświetlania informacji podczas symulacji. Dostępne są następujące opcje:

  • Length of trail [Długość ścieżki] - określa długość pozostawianego przez cząstkę śladu. Ze względu na ograniczenia programu sumaryczna długość śladów wszystkich cząstek nie może być większa niż 200.
  • Zoom level [Stopień powiększenia] - określa stopień powiększenia wyświetlanego obrazu.

Szybkość animacji można ustalić za pomocą suwaka w lewym dolnym rogu okna programu.

Okno z wynikami symulacji

W drugim oknie programu Distance from origin [Odległość od początku] wykreślany jest na bieżąco wykres zależności odchylenia standardowego położenia cząstek od czasu (czerwona linia).

Linia niebieska pokazuje zależność od czasu pierwiastka kwadratowego z czasu (przy założeniu, że każdy krok symulacji trwa tak samo długo). Aktualny czas t, aktualne odchylenie standardowe oraz pierwiastek z czasu Sqrt(t) wyświetlone są na dole okna.

Symulacja pokazuje, że promień rozchodzącej się chmury cząstek (rozumiany jako odchylenie standardowe położeń) rośnie z czasem jak pierwiastek. Zgodność z tym prawem jest tym większa im więcej cząstek bierze udział w symulacji. Warto zatem zwrócić uwagę, że proces dyfuzji nie jest jednostajny, ale spowalnia się w czasie, tzn. prędkość rozprzestrzeniania się chmury cząstek maleje jak pierwiastek z czasu do potęgi -1.


Dlaczego program Smoluchowski ma w ikonie kufel piwa?

Dlaczego w ikonie programu Smoluchowski jest kufel piwa?

Smoluchowski - Informacje

Błądzenie przypadkowe bardzo często nazywane jest zagadnieniem pijanego marynarza, gdyż w przypadku dwuwymiarowym odtwarza ono ścieżkę jaką podąża marynarz po opuszczeniu knajpy o piątej nad ranem...

Matematyczny problem związany z zagadnieniem pijanego marynarza może być sformułowany w następujący sposób:

Bar, z którego wychodzi marynarz znajduje się w samym środku okrągłego rynku o promieniu 200 m. Pijany marynarz opuścił lokal dokładnie o godzinie piątej nad ranem i ze względu na zawartość promili we krwi jego ruch jest całkowicie chaotyczny. W każdej sekundzie wykonuje krok o długości jednego metra w losowym kierunku. Ile czasu minie (średnio) zanim marynarz opuści rynek?


Turing - Informacje

Turing

(Naciśnij przycisk aby uruchomić program)

Program Turing symuluje pracę tzw. Maszyny Turinga - ważnego urządzenia w teorii informatyki. Program pozwala użytkownikowi zbudować maszynę Turinga poprzez zdefiniowanie stanów głowicy i symboli używanych na taśmie, określenie reguł przejścia oraz ustawienie danych początkowych na taśmie. Tak zdefiniowany układ może być uruchomiony - następuje wykonanie programu przez maszynę Turinga.

Program umożliwia zapisywanie aktualnego stanu maszyny Turinga oraz wczytywanie wcześniej zapisanych danych. Dostępnych jest również kilka przykładowych programów dla maszyny Turinga.

Szczegółowe informacje na temat używania programu Turing można znaleźć w następujących zakładkach:

Jak używać programu Turing?
Praca maszyny Turinga
Ustawianie parametrów maszyny
Ustawianie reguł przejścia
Przykładowe programy dla maszyny Turinga

Zalecenie: Aby lepiej zrozumieć do czego służy program, jak można go wykorzystywać oraz jakie znaczenie w teorii informatyki ma maszyna Turinga polecamy przed rozpoczęciem używania programu zapoznać się z rozdziałem 15. książki Modelowanie Rzeczywistości.


Jak używać programu Turing?

Turing - Informacje

Głowna sekcja programu nazwana Machine [Maszyna] obrazuje aktualny stan maszyny Turinga, tzn. stan taśmy oraz położenie i stan głowicy. Stan maszyny Turinga może być zmieniany przez użytkownika. Za pomocą przycisku Run [Uruchom] można uruchomić maszynę. Po naciśnięciu przycisku Stop maszyna zatrzymuje się. Aby obserwować pracę maszyny Turinga krok po kroku należy naciskać przycisk Step [Krok]. Dodatkowe informacje na temat ustawiania stanu maszyny Turinga oraz kontrolowania pracy maszyny znajdują się w zakładce Praca maszyny Turinga.

W sekcji Settings [Ustawienia] użytkownik może zdefiniować wszystkie dopuszczalne stany głowicy (podsekcja States) i liczbę rodzajów znaków na taśmie (podsekcja Tape symbols). Dodatkowe informacje jak należy to robić znajdują się w zakładce Ustawianie parametrów maszyny.

Sekcja Transition rules Reguły przejścia pozwala użytkownikowi przeglądać i zmieniać reguły przejścia dla maszyny Turinga, czyli określać jak ma się zachowywać głowica będąc w określonym stanie i po napotkaniu określonego znaku na taśmie. Jak określać reguły przejścia dokładnie opisano w zakładce Ustawianie reguł przejścia.

Aktualny stan głowicy i taśmy oraz reguły przejścia można w każdej chwili zapisać do pliku .tur naciskając przycisk Save configuration [Zapisz konfigurację] i podając nazwę pliku. Wczytanie wcześniej zapisanych danych odbywa się po naciśnięciu przycisku Load configuration [Wczytaj konfigurację] i wskazaniu odpowiedniego pliku.

Razem z programem udostępnione są pliki zawierające różne ciekawe programy dla maszyny Turinga, które można wczytać naciskając przycisk Load configuration. Szczegółowy opis dostarczonych programów znajduje się w zakładce Przykładowe programy dla maszyny Turinga.


Turing: praca maszyny

Praca maszyny Turinga

Turing - Informacje

Taśma

Taśma maszyny Turinga znajduje się w górnej części sekcji Machine [Maszyna]. Dla uproszczenia każda komórka taśmy może być tylko albo pusta albo wypełniona cyfrą. Taśmę można przewijać w lewo i prawo naciskając odpowiednie przyciski ze strzałką znajdujące się na końcach wyświetlanej części taśmy. Aby zmienić zawartość komórki na taśmie należy podświetlić ją lewym przyciskiem myszki, a następnie podać odpowiedni znak (cyfrę lub spację). Naciskając klawisz strzałki (w lewo lub prawo) na klawiaturze, podczas gdy komórka taśmy jest podświetlona można przesunąć podświetlenie na sąsiednią komórkę.

Aby wyczyścić całą zawartość taśmy (tzn. ustawić wszystkie komórki jako wypełnione spacją) należy nacisnąć przycisk Clear tape [Wyczyść taśmę].

Aktualne położenie głowicy maszyny Turinga (nie należy go mylić z komórką aktualnie podświetloną) oznaczone jest strzałką. Jeśli strzałka jest ustawiona, na jeden z przycisków służących do przewijania taśmy, oznacza to, że aktualne położenie głowicy znajduje się poza wyświetlaną częścią taśmy. Aby ustawić głowicę maszyny Turinga w innej komórce należy wybraną komórkę podwójnie kliknąć lewym przyciskiem myszki.

Stan głowicy

Aktualny stan głowicy jest wyświetlany w rozwijalnym menu tekstowym, które łączy się z głowicą maszyny. Aby ręcznie zmienić aktualny stan głowicy należy wybrać go z tego menu.

Symulacja pracy

Maszynę można uruchomić za pomocą przycisku Run [Uruchom]. Po naciśnięciu przycisku Stop maszyna zatrzymuje się. Aby obserwować pracę maszyny Turinga krok po kroku należy naciskać przycisk Step [Krok].

Uwaga: Podczas pracy maszyny Turinga lub przy wykonywaniu jednego kroku symulacji stosowana reguła przejścia jest podświetlana w sekcji Rules [Reguły]. Dodatkowe informacje na ten temat znajdują się w sekcji Ustawianie reguł przejścia.

Uwaga: Jeśli głowica jest w stanie końcowym STOP to naciśnięcie przycisku Run [Uruchom] lub Step [Krok] nie powoduje żadnego skutku. Stan STOP z definicji nie ma bowiem określonej żadnej reguły przejścia. Gdy głowica w wyniku realizowania algorytmu przejdzie w stan STOP, to automatycznie kończy się praca maszyny Turinga.

Szybkość pracy maszyny Turinga można kontrolować ustawiając w odpowiedniej pozycji suwak znajdujący się w sekcji Machine [Maszyna].


Turing: Ustawianie parametrów maszyny

Ustawianie parametrów maszyny Turinga

Turing - Informacje

W sekcji States [Stany] użytkownik może zdefiniować możliwe stany głowicy, w których może się ona znajdować. Każdy stan głowicy posiada nazwę. Aby dodać stan o określonej nazwie należy nacisnąć przycisk Add state [Dodaj stan] i wprowadzić odpowiednią nazwę. Aby skasować stan wcześniej zdefiniowany należy wskazać go lewym przyciskiem myszki i nacisnąć przycisk Delete state [Skasuj stan].

Uwaga: Każdy zdefiniowany stan musi mieć swoją indywidualną nazwę, przy czym nazwa STOP jest zarezerwowana dla stanu końcowego maszyny. Program rozróżnia wielkość liter w nazwie stanu.

Użytkownik może określić liczbę możliwych znaków zapisywanych na taśmie maszyny za pomocą rozwijalnego menu Tape symbols. Znaki zapisywane na taśmie to cyfry 0, 1, 2, ..., n-1 gdzie n to liczba znaków wybrana przez użytkownika. Znak pusty (spacja) jest zawsze dostępny.


Turing: Reguły przejścia

Ustawianie reguł przejścia maszyny Turinga

Turing - Informacje

W sekcji Transition rules [Reguły przejścia] użytkownik ma możliwość przeglądania i ustawiania reguł, zgodnie z którymi będzie pracowała maszyna Turinga. Lista po lewej stronie sekcji zawiera spis wszystkich możliwych reguł (tzn. wszystkich możliwych kombinacji stanu głowicy i odczytanego znaku z taśmy). Każda reguła określa, co ma zrobić maszyna po napotkaniu danej kombinacji podczas swojej pracy. Po napotkaniu danej kombinacji maszyna Turinga może zmienić znak wskazywany przez głowicę na inny, zmienić stan głowicy (również na stan STOP) i przesunąć głowicę w lewo lub w prawo. Maszyna powtarza ten algorytm tak długo jak długo głowica nie znajdzie się w stanie końcowym STOP.

Uwaga: Podczas pracy maszyny stosowana reguła przejścia jest podświetlana na liście reguł.

Aby zmienić konkretną regułę przejścia należy ją zaznaczyć lewym przyciskiem myszki i następnie ustawić odpowiednie parametry w podsekcji Edit selected rule [Edycja zaznaczonej reguły]. Rozwijalne menu Write symbol [Zapisz symbol] pozwala określić jaki znak ma zapisać maszyna na taśmie (w komórce, którą wskazuje aktualnie głowica). Wybierając odpowiednią opcję można określić czy głowica ma przejść w stan końcowy STOP (opcja Stop execution), czy też ma pracować nadal (opcja Continue execution). Jeśli zaznaczona jest druga z tych opcji to użytkownik ma możliwość wyboru, w którą stronę ma się przesunąć głowica (menu Move) i w jaki stan ma ona przejść (menu Assume state).


Turing: Przykładowe programy dla maszyny Turinga

Przykładowe programy dla maszyny Turinga

Turing - Informacje

W katalogu, w którym został zainstalowany pakiet programów Modelowanie Rzeczywistości znajduje się kilka przykładowych programów przygotowanych specjalnie dla programu Turing. Poniżej podajemy ich szczegółowy opis.

Licznik (wersja dwójkowa) CountB.tur | Program ten zapisuje na taśmie kolejne liczby w zapisie dwójkowym zaczynając od 1. Jest to realizacja standardowej procedury dodawania. Gdy głowica ustawiona jest na końcu liczby stan maszyny ustawiony jest na pamiętanie 1. Głowica przemieszcza się do przodu dodając jedynkę z pamięci. Jeśli trafia na komórkę z cyfrą 1, to zamienia ją na 0 i w pamięci nadal trzyma 1. Gdy głowica natrafia na komórkę z cyfrą 0 lub komórkę pustą wpisuje do niej cyfrę 1 i zmienia stan na wracanie. Głowica wraca na koniec liczby i po trafieniu na komórkę pustą (czyli na koniec liczby) zamienia stan na pamiętanie 1 i proces dodawania rozpoczyna się od początku.
Licznik (wersja dziesiątkowa) CountD.tur | Program ten jest analogiczny do jego dwójkowego odpowiednika. Tym razem jednak program generuje kolejne liczby w systemie dziesiątkowym.
Sortowanie przez wstawianie (wersja dwójkowa) SortB.tur | Ten program dla maszyny Turinga potrafi sortować dowolny ciąg znaków 0 i 1, tak aby po zakończeniu wszystkie 0 były ustawione na lewo od 1. Zaczynając od lewej strony głowica przesuwa się tak długo, aż natrafi na cyfrę 0 lub komórkę pustą. W drugim przypadku program się zatrzymuje, gdyż to oznacza, że ciąg został już posortowany. Po natrafieniu na 0 zmienia się stan maszyny i cyfra w komórce zostaje zamieniona na 1. Głowica wraca w lewą stronę tak długo, aż napotka 0 lub komórkę pustą. Wtedy wstawia tam 0 zmieniając jednocześnie stan maszyny z powrotem na szukanie cyfry 0 tak jak na początku algorytmu.
Licznik potęgowy (wersja dziesiątkowa) TwoPowersD.tur | Jest to program analogiczny do standardowego licznika dziesiątkowego CountD. Tym razem jednak program zamiast generować kolejne liczby za każdym razem podwaja je (tzn. mnoży przez 2). Jest to realizacja standardowej metody dodawania liczby do samej siebie.
Trójkąt Sierpinskiego Sierpinski.tur | Program generuje kolejno linie tworzące trójkąt Sierpińskiego zaczynając od liczby 1 (pierwsza linia trójkąta Sierpińskiego). Algorytm programu polega na zamianie liczby w każdej komórce na liczbę, która jest wynikiem logicznej różnicy symetrycznej (XOR) tej liczby i liczby znajdującej się w komórce sąsiadującej z lewej strony. W ten sposób powstają linie trójkąta Sierpińskiego. Wykorzystana jest w ten sposób pewna ciekawa własność tzw. trójkąta Pascala polegającą na tym, że po usunięciu z niego liczb parzystych pozostałe liczby układają się w geometryczną strukturę trójkąta Sierpińskiego. Więcej informacji można znaleźć w zakładce Przykłady zbiorów Cantora.
Sprawdzanie palindromów Palindrome.tur | Ten prosty algorytm sprawdza czy zapisany na taśmie ciąg znaków jest palindromem, tzn. czy czytany wstecz wygląda tak samo jak czytany od przodu. Maszyna porównuje kolejno skrajne cyfry tworzące ciąg i usuwa je z ciągu gdy są identyczne. Następnie rozpoczyna sprawdzanie kolejnej pary. Jeśli cyfry są różne (co oznacza, że ciąg nie jest palindromem) maszyna zatrzymuje się (przechodzi w stan STOP) wpisując do aktualnej komórki cyfrę 0. Jeśli początkowa sekwencja była palindromem maszyna zatrzymuje się w momencie, gdy wszystkie skrajne cyfry zostały porównane zapisując na taśmę cyfrę 1.


Ulam - Informacje

Ulam

(Naciśnij przycisk aby uruchomić program)

Program Ulam wykorzystuje metodę Monte Carlo do oszacowania całki z podanej przez użytkownika funkcji obliczonej dla danego przedziału. Program wykreśla podaną funkcję a następnie losowo wybiera punkty. Ponieważ prawdopodobieństwo, że wylosowany punkt będzie znajdował się pomiędzy wykresem funkcji, a osią X jest równe stosunkowi pola powierzchni ograniczonej przez ten wykres (całki z funkcji) do całej dostępnej powierzchni, to zliczając punkty można oszacować całkę z funkcji. Oczywiście oszacowanie to będzie tym lepsze im więcej punktów wylosujemy.

Wprowadźmy następujące oznaczenia:

  • N - całkowita liczba wylosowanych punktów,
  • p - liczba punktów, które znajdują się nad osią X i pod wykresem funkcji,
  • n - liczba punktów, które znajdują się pod osią X i nad wykresem funkcji,
  • A - powierzchnia prostokąta, w którym losowane są punkty.
Całka z funkcji w danym przedziale jest przybliżana przez liczbę:

Całka z funkcji w danym przedziale jest bowiem różnicą pól powierzchni nad i pod osią X ograniczonych przez wykres tej funkcji.

Aby dowiedzieć się więcej na temat programu proszę zajrzeć do zakładki Jak używać programu Ulam?.

Dodatkowe informacje na temat zastosowanego generatora liczb pseudolosowych można znaleźć w zakładce Generator liczb pseudolosowych.


Jak używać programu Ulam?

Ulam - Informacje

Przed rozpoczęciem symulacji użytkownik powinien podać funkcję, której całkę chce oszacować. W tym celu należy wpisać wzór określający funkcję w pole tekstowe Function [Funkcja]. Więcej informacji na temat sposobu w jaki należy wpisywać wyrażenia matematyczne można znaleźć w zakładce Wprowadzanie funkcji. Funkcja może zależeć tylko od jednej zmiennej x.

Użytkownik powinien również określić przedział w jakim ma być oszacowana całka z funkcji. W tym celu należy podać dwie wartości w polach tekstowych Min x oraz Max x. Jeśli funkcja nie jest dobrze określona, w którymś z punktów podanego przedziału, to podczas działania programu mogą pojawić się błędy. Określony zakres musi mieć oczywiście długość większą od 0.

Po naciśnięciu przycisku Go [Start] program rozpoczyna losowanie punktów i zaznacza je na wykresie. Wyniki oszacowania są na bieżąco wyświetlane w sekcji Results [Wyniki], która znajduje się w lewym dolnym rogu okna programu. Zmienna Trials [Kroki] określa liczbę wszystkich wylosowanych punktów. Oszacowanie całki określone jest przez wartość Aproximated integral [Przybliżona całka]. Aby zatrzymać generowanie punktów należy nacisnąć przycisk Stop.

Aby usunąć wszystkie dane i rozpocząć symulację od początku należy nacisnąć przycisk Clear [Wyczyść].


Generator liczb pseudolosowych

Co to jest generator liczb pseudolosowych?

Komputer, jako urządzenie deterministyczne, nie może być źródłem zjawisk losowych. Niemniej jednak większość programów z pakietu Modelowanie Rzeczywistości (szczególnie te, które wykonują symulacje zdarzeń losowych) muszą mieć dostęp do liczb, które możemy uznać za prawie losowe. Algorytmy, które generują liczby prawie losowe w teorii informatyki nazywa się generatorami liczb pseudolosowych. Podstawowymi parametrami, które umożliwiają porównywanie różnych algorytmów ze sobą są:

  • precyzja czyli liczba cyfr znaczących z jaką generator może wygenerować liczbę pseudolosową z zakresu 0,..,1,
  • okres czyli liczba losowań kolejnych liczb, po których generator zaczyna generować od początku ten sam ciąg liczb.
Idealny generator, który nazwalibyśmy losowym ma zarówno precyzję jak i okres nieskończone. Ze względów oczywistych takich generatorów nie da się skonstruować za pomocą maszyny deterministycznej o skończonych możliwościach przetwarzania danych jaką jest komputer.

Generator użyty w programach z pakietu

Generator liczb pseudolosowych nazwany Mersenne Twister (Wir Mersenne'a), który jest wykorzystany we wszystkich programach z pakietu został skonstruowany przez Makoto Matsumoto oraz Takuji Nishimurę. Jest to obecnie jeden z najlepszych generatorów, który potrafi generować liczby zmiennoprzecinkowe z precyzją 53 bitów i okresem 219937-1. Więcej informacji na temat tego generatora można znaleźć na stronie domowej Makoto Matsumoto .


Pasek narzędzi programu Cantor

Cantor - Informacje


Pasek narzędzi programu Conway

Conway - Informacje


Conway: wybór kształtu komórek

Wybór kształtu komórek w programie Conway

Conway - Informacje

Aby zmienić aktualnie wybrany sposób podziału płaszczyzny na komórki należy nacisnąć przycisk Edit rules [Ustawianie zasad] i w oknie wybrać pożądany kształt sieci. Patrz także Ustawianie zasad ewolucji.


Pasek narzędzi programu Huffman

Huffman - Informacje