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