Kiedy już wiemy nieco jak działa Netlogo
zbudujmy nasz własny prosty model
Nasz model będzie składał się z pojedynczej
losowo wędrującej mrówki
Tyle na początek
Włączmy więc Netlogo
Zamierzam kliknąć na tę ikonę Netlogo
Kliknij na taką wersję jaką posiadasz
Pierwszą rzeczą jaką zrobię
będzie stworzenie przycisków Setup (ustawienia) i Go (start)
W tym celu przechodzę do części menu pod nazwą Interface Builder Menu
Jest to menu budowania interfejsu
a klikając na nie zobaczysz całą listę obiektów
które możesz dodać do własnego interfejsu.
Dodam więc swój przycisk
Po prostu klikam na interfejs
I już mogę go wypełnić
ten przycisk będzie uruchamiał Setup
Mogę teraz dodać następny przycisk
Klikamy i dodajemy następny przycisk dla Go
Mogę wybrać go przez kliknięcie prawym klawiszem myszki
Klikamy Select
mogę go przesuwać
mogę zmieniać jego rozmiar jeśli zechcę
jeśli przeciągnę go tutaj
będzie można dopasować dowolnie przyciski
Mamy więc przyciski Setup i Go
Są jednak czerwone, ponieważ nie są jeszcze powiązane
z żadnym fragmentem kodu
co oznacza, że na razie nic się nie dzieje po ich kliknięciu
musimy więc teraz dopisać dla nich kod
Napiszmy więc fragment kodu dla naszych nowych przycisków
dla Setup
i dla Go
Możemy to zrobić, przechodząc do zakładki kodu ('Code')
i pisząc odpowiednie komendy.
Najpierw dla przycisku Setup
Piszemy 'to setup'
oraz to, co będzie się działo, kiedy zostanie kliknięty
Wyczyścimy wszystko pisząc 'clear-all'
Komenda 'clear-all', powoduje 'oczyszczenie' naszego świata
tzn. miejsca, gdzie są widoczne działania mrówek i wszystkich innych obiektów
Komenda czyści okno i usuwa wszystkie inne pozostałości z poprzedniego uruchomienia
Chcemy teraz zresetować taktowanie
to jest, ustawiamy taktowanie
czy też odliczanie czasu na zero
Teraz stworzymy mrówkę
Każdy agent w Netlogo nazywa się żółwiem
To ze względów historycznych
kiedy w oryginalnym języku Logo na którym opiera się Netlogo
każdy agent był żółwiem
W Logo mieliśmy po prostu jednego żółwia.
Tutaj mamy ostatecznie więcej żółwi
Teraz zaczniemy od komendy
'create turtles' (stwórz żółwie)
Chcemy zdefiniować, ile żółwi potrzebujemy
Na tę chwilę powiedzmy, że jednego
więc tworzymy jednego żółwia
i chcemy zlecić mu wykonanie określonych czynności
Piszemy 'ask turtle' (zleć żółwiowi)
i podajemy listę
Listę rzeczy, które chcemy, żeby zostały zrobione
Zaczynamy ją otwartym nawiasem
Chcemy, żeby miał kształt owada
To jest kształt mrówki w Netlogo
to jest wbudowane w Netlogo
Rozmiar określamy na 3
To optymalny rozmiar do oglądania obiektów w Netlogo
Kolor definiujemy na czerwony
Ok, myślę, że to na razie wszystko czego potrzebujemy
więc wpisujemy End (koniec)
Mamy tu w pasku zielony znacznik
który sprawdza poprawność kodu.
Klikamy na niego
i mamy informację, że mamy błąd
mamy informację gdzie on jest
i widzę również
że powinnam napisać 'ask-turtles'
zapomniałem o 's' na końcu. (liczba mnoga)
Przyczyną tego jest to, że Netlogo zakłada istnienie
populacji żółwi lub agentów
i kiedykolwiek zlecimy jakąś czynność
to odnosi się ona do całej populacji
mamy tylko jednego żółwia, ale później będzie ich więcej
Sprawdźmy ponownie
Przenosi mnie do interfejsu z komunikatem
że wszystko działa
więc klikamy Setup
i widzimy naszą mrówkę
w samym środku
Przycisk 'Go' (idź) jest wciąż czerwony
co oznacza, że nie określiliśmy dla niego kodu
Napiszmy teraz procedurę Go
Przejdźmy znów do zakładki z kodem
Piszemy 'to go' (idź)
Dalej napiszmy 'ask turtles'
każąc zółwiom zrobić kilka rzeczy
Po pierwsze, będzie to zwrot w prawo o 30 stopni
następnie nakażemy ruch do przodu o 4 kroki
piszemy 'forward' (naprzód) 4
Następnie zwiększymy kroki czasowe o 1
to właśnie realizuje komenda 'tick'
zresetujemy liczbę taktów (ticks) na zero
następnie wpiszemy komendę 'tick', która zwiększa krok czasowy o 1
przy każdym przejściu przez procedurę
i kończymy komendą 'end'
Sprawdźmy to, wygląda dobrze
Przejdźmy do interfejsu
i klikamy Go
Możecie zobaczyć, że żółw
obrócił się o 30 stopni
następnie posunął się do przodu o 4 kroki
Ponownie klikamy 'Go'
i znowu i znowu
Widzimy, że żółw chodzi po okręgu
Chciałabym, żeby tak chodził bez końca
bez konieczności klikania 'Go'
Mogę to zrobić klikając na 'Go'
prawym klawiszem myszy
i przechodząc do opcji edycji (Edit)
tu widzimy tę opcję, na zawsze, którą moge wybrać
a która oznacza ciągle powtarzanie komendy 'Go'
Wybierzmy to teraz
jeśli zwolnię wszystko odrobinę
można będzie dostrzec, że mrówka chodzi dookoła
i teraz klikam 'Go', żeby ją zatrzymać.
Mogę też w ten sam sposób ponownie ją uruchomić
znów zaczyna się ruszać i zatrzymuje po kliknięciu Go
Jeśli chiałabym zacząć od początku
klikam na Setup
Mrówka zaczyna w tym samym miejscu w środku,
ale wskazuje za każdym razem inny kierunek.
po użyciu Setup lokalizowana jest w środku,
ale skierowana jest w losowym kierunku za każdym razem
Możemy zapisać obecny stan modelu
idziemy do zakładki 'File' i klikamy 'SaveAs'
Zapisuję model jako Ant1
Widzicie to tu na pulpicie Ant1.logo
Możemy teraz przejść do Netlogo menu
i zamknąć Netlogo
Jeśli chcę otworzyć je ponownie klikam podwójnie na tym
Netlogo wystartuje
i wczyta ten model
Jest tylko jedna kiepska rzecz w naszym modelu
a to taka, że jest nudny
Jedyną rzeczą, jaką robi mrówka jest chodzenie w kółko
Wprowadźmy tu coś interesującego
Mogę to zrobić przechodząc do kodu
i dodając jedną, prostą komendę
Zamiast zmiany kierunku na prawo o 30 stopni
dodamy słowo 'random' (przypadkowy)
Teraz mrówka będzie wybierać przypadkową liczbę pomiędzy 0 a 29
To zawdzięczamy komendzie 'random'
i będzie zmieniać kierunek na prawo o taką liczbę stopni
przy każdym wykonaniu tego kodu
Możemy w tym miejscu zrobić to samo
możemy nakazać, by mrówka ruszyła do przodu
o losową liczbę kroków pomiędzy 0 a 3
Zobaczmy jak to teraz zadziała
Wróćmy do interfejsu
Klikamy na Setup i Go
i widzimy, że mrówka biega jak poprzednio
po ścieżkach zbliżonych do okręgów
ale jej zachowanie stało się ciekawsze
Możecie zauważyć, że mrówka
zdaje się przechodzić przez ścianę
i wychodzi z drugiej strony
Jej świat jest czarnym obszarem
który zawija się na brzegach jakby w torus
A więc świat mimo, iż wygląda płasko
jest zawinięty i połączony brzegami
jak pączek z dziurą w środku
A więc mimo, że tego nie widzimy
świat jest połączony brzegami
Spróbujemy coś z tym zrobić
Mrówka porusza się nam zbyt szybko..
A więc, kiedy wchodzi przez górę
to następnie pojawia się na dole
A kiedy przechodzi przez bok
to wychodzi z drugiego boku
To wygląda trochę dziwnie
A więc, co mogę z tym zrobić
Klikam prawym klawiszem myszy na czarnym polu
i wybieram 'Edit' (edytuj)
Mamy tu sporo informacji
o ustawieniach w tym świecie
Liczba tzw. pól na którą podzielony jest obszar świata
I co dla nas jest tu interesujące
że mamy tu zaznaczone domyślnie opcje
'zawiaj pionowo' i 'zawijaj poziomo'
możemy je "odhaczyć"
Robimy to i to, klikamy OK.
Zobaczmy, co się teraz stanie.
Teraz, gdy mrówka dociera do ściany
zatrzymuje się na niej do momentu, gdy się nie obróci
To sprawia, że nasza mrówka wygląda bardziej realistycznie
Chociaż wprowadziliśmy teraz element losowości
ciągle nie jest to zbyt ciekawe
bo nasza mrówka wciąż obraca się wyłącznie na prawo
Napiszmy kod, który sprawi, że będzie się obracać losowo
w prawo, lub w lewo
Zasadniczo jej skręt w prawo lub w lewo
zależy jakby od rzucenia monetą
Zapiszemy teraz procedurę "rzucania monetą"
Coś co nazywa się procedurą 'to report'
'to report' 'coin-flip' (raportuj rzut monetą)
'to report' jest czym innym niż procedura 'to'
ponieważ 'to report' zwraca wartość
w tym przypadku będzie to prawda lub fałsz
Napiszmy 'report random 2= 0' (zwróć wartość losową 2=0)
dalej piszemy 'end' (koniec)
Komenda ta zwraca nam wartość
losową pomiędzy liczbami 0 oraz zadaną pomniejszoną o 1
W tym przypadku, będzie to 0 w połowie przypadków
oraz 1 w pozostałych przypadkach
wybrane w losowy sposób
Jeśli będzie to 0
to zdanie to zwróci wartość PRAWDA
w przeciwnym wypadku zwróci FAŁSZ
i funkcja 'report' zwróci nam tą wartość
A więc funkcja 'to report'
zwróci nam w połowie przypadków 'prawdę'
a w połowie 'fałsz'
Wybierając te wartości losowo
Możemy użyć tej wartości zdania
przez wpisanie 'if else' (w przeciwnym razie)
coin-flip (rzut monetą)
Komenda 'if coin-flip is true'
wykonuje to, co wpisuję w nawiasie
w przeciwnym wypadku
wykona się to, co wpiszę w drugim nawiasie
'left random 30' (skręć w lewo losowo o 30)
Za każdym razem, gdy wykonujemy procedurę Go
podejmowana jest losowa decyzja
czy wybrany zostanie
zwrot w prawo, lub w lewo
Każdorazowo zapada wybór, czy mrówka skręci w prawi, czy w llewo
Zobaczmy więc jak teraz to działa
Wybieramy Setup i Go
Widzimy jak żółw skręca w różnych kierunkach
Jeśli utknie to próbuje skręcać w prawi i w lewo
zwraca się do przodu, na prawo i lewo.
Jedyny problem jest taki,
że zbyt często się blokuje.
Możemy to poprawić, zmieniając nasze 30 stopni na 60
Zwiększamy promień skrętu, to znaczy że żółw skręci bardziej za każdym razem
Spróbujmy teraz..
Wydaje się, że teraz blokuje się rzadziej
i model sprawia wrażenie jeszcze bardziej rzeczywistego
Kiedykolwiek piszecie program
zawsze dobrze jest dodać komentarz
Pozwólcie, że znów powrócę do kodu
Komentarz jest po prostu tekstem
który jest ignorowany przez komputer
ale pomaga ludziom czytać program
W Netlogo komentarz jest tekstem
następującym po średniku
Mogę napisać tu co zechcę, a komputer to zignoruje
Napiszmy, że tu kod zwraca wartość prawda lub fałsz w sposób losowy
co się rzeczywiście dzieje
W tym miejscu możemy też dodać komentarz
że jeśli rzut monetą zwraca wartość 'prawda'
skręć w prawo
w przeciwnym wypadku skręć w lewo
Mamu tu teraz notatki
dla nas albo dla kogoś innego
kto kiedyś odczytywałby kod programu
na temat tego, co te kawałki kodu mają realizować
To bardzo pomocne, zwłaszcza przy bardziej złożonych programach
Szczególnie, gdy mamy program
do którego wracamy po kilku dniach
To pozwala nam przypomnieć sobie, o co nam chodziło
W zasadzie komentarze są niezbędne
nawet wtedy, gdy nie planujemy, że ktoś inny będzie czytał nasz program
Teraz chcemy zachować nasz model
Najpierw muszę nadać mu nazwę
To kwestia estetyki
Przechodzę do menu interfejsu
wybieram Note (notatka)
Chcę tu wprowadzić trochę tekstu
który określi nazwę modelu na Ant1.
Powiększmy nieco tekst, do 18,
Teraz mogę zaznaczyć to i to
i przesunąć w dół odrobinę
teraz wycentrować
i zrobić co uznam, że to wyglądało ładniej
Gotowe
Klikam Save (zachowaj)
i nasz model jest zachowany
Chciałbym tu wspomnieć, że celem uczenia Netlogo
jest danie Wam wyczucia o orientacji
jak ten język działa
Będziemy bardzo często używać modeli Netlogo w trakcie tego kursu
Nie będziemy pisać szczególnie dużo
ale chciałbym pokazać Wam jak działa kod Netlogo
jak działa interfejs
i tak dalej
Możecie samodzielnie wprowadzać
modyfikacje do tego, co napisaliśmy
Jeśli jesteście bardziej zaawansowani lub zmotywowani
możecie sami napisać swój kod
Jako zadanie do wykonania do tej lekcji
chciałbym Was prosić, abyście wdrożyli dokładnie taki sam model jak Ant1
używając tych samych komend
i żebyście sprawili, aby zadziałał
To nie będzie oceniane
ale zróbcie to dla siebie
abyście zrozumieli to, co Wam właśnie pokazałam
I nie wahajcie się zadawać pytań
na forum dla studentów
jeśli takowe się pojawią
Po to ono właśnie jest