Ora che abbiamo visto un po' come funziona NetLogo costruiamo il nostro semplice modello
Questo modello consiste semplicemente in una formica che si muove in maniera random. Tutto qui.
Avviamo NetLogo. Dobbiamo cliccare sull'icona Netlogo 5.0.3 o qualsiasi versione abbiate.
La prima cosa che faremo è di creare i bottoni "Setup" e "Go"
perciò andiamo a quella parte del menù con scritto "button" , che in effetti è il menù per la costruzione dell'interfaccia
dato che cliccandoci sopra possiamo vedere tutti i tipi di oggetti che possiamo aggiungere all'interfaccia
creo un bottone cliccando su interfaccia e riempio questo bottone con "setup" e poi un altro bottone per "go"
ora lo seleziono questo bottone cliccandoci sopra, clicco select, e posso spostarlo e ridimensionarlo,
se voglio, dopo averlo selezionato, mediante il trascinamento, si trascina qui
così adesso abbiamo i bottoni "setup" and "go"
sono rossi perché non hanno ancora alcun codice associato
al momento non fanno niente se vengono cliccati, perciò scriviamo il codice
adesso creiamo il codice che funzioni con i bottoni "setup" e "go"
Lo facciamo andando alla linguetta "code"
e scrivendo le procedure. La prima sarà "setup" associata a "setup"
è quello che faremo quando viene cliccato il bottone "setup"
"clear all", clear all è un comando che pulisce il "mondo"
cioè il posto dove si vedono le formiche e qualsiasi altra azione, pulisce la finestra, da qualsiasi cosa sia rimasto dalla precende esecuzione
adesso scriveremo "reset-ticks" che rimette tutte le "ticks" al tempo zero
adesso creeremo una formica. Dobbiamo sapere che ogni cosa ogni agente in NetLogo è chiamato "turtle"
questo è per ragioni storiche che provengono da linguaggio originale LOGO, che è quello su cui si basa NetLogo, dove c'era solo una "turtle" mentre adesso come agenti abbiamo molte "turtles"
quindi adesso diremo "create-turtles" dobbiamo dire quante ne creiamo
ne creeremo solo una e quindi le chiederemo di fare alcune cose
poi scriveremo ask turtle
e gli diamo una lista di cose da chiedergli e la lista parte con le parentesi
apriamo le parentesi quadre e scriveremo set shape "bug"
scriveremo la misura che è 3 "set size 3"
scriveremo il colore che è rosso "set color red"
e chiudiamo la partentesi e scriveremo end
ora clicciamo sul tasto "check" e otteniamo una segnalazione di errore
cerchiamo dove sia l'errore eccolo: è "ask turtles" invece che "ask turtle"
ho dimenticato una esse, la ragione è che in NetLogo c'è una popolazione di turtles o agenti
e quando chiedi lo devi fare all'intera popolazione e non ad uno soltanto
rifacciamo check e adesso sembra funzionare tutto
e questo mi riporta all'interfaccia clicchiamo setup
e adesso vediamo la nostra formica proprio nel mezzo
il bottone "go" è ancora rosso
che vuol dire che non abbiamo ancora scritto il codice per esso
adesso scriviamo la procedura per "go"
torniamo indietro alla linguetta "code"
e scriveremo "to go"
"ask turtles" la prima cosa che faremo è quella di farle voltare
a destra di 30 gradi
così scriveremo "right 30"
e le faremo camminare avanti di 4 passi
"forward 4"
quindi incrementeremo il tempo del passo di 1
che è il comando tick
perciò ricordiamo abbiamo il comando reset-ticks
e il comando tick che incrementa di uno
ogni volta che lanciamo questa procedura
e quindi "end"
facciamo il controllo con check
sembra andare tutto bene
andiamo all'interfaccia
e pigiamo "go"
e così possiamo vedere che la "turtle" si muove e gira il suo corpo di 30 gradi e cammina avanti per 4 passi
e possiamo pigiare il bottone di nuovo e ancora
e girerà in tondo
per ottenere il movimento per sempre senza dover continuamente pigiare il bottone "go"
lo posso fare cliccando sul tasto destro su "go" e quindi edit e possiamo vedere l'opzione "forever"
che posso cliccare e che ripeterà "go" per sempre
facciamolo, rallentiamo un pochino, la formica girerà da sola in circolo
clicchiamo il bottone "go" per fermarla.
adesso rincominciamo di nuovo
posso pigiare "go" di nuovo
e di nuovo inizia, fermiamolo pigiando "go"
se vogliamo rincominciare da capo
clicchiamo di nuovo su setup
se continuamo a cliccare su setup ricomincia dallo stesso punto
ma girato in direzioni diverse
questo perché set up rimette la formica al centro ma voltata in direzioni diverse in maniera random
adesso possiamo salvare il modello cliccando sulla etichetta file e save as e lo salverò come "ant1"
e così vediamo che appare sul desktop ant1.NetLogo
quindi vado al menù NetLogo e lo chiudo (quit)
poi faccio doppio clic su questo (ant1.NetLogo)
e NetLogo si avvia con questo modello
se c'è qualcosa che non va nel nostro modello
è che è noioso, tutto ciè che fa è andare in circolo
perciò rendiamolo un po' più interessante
e posso farlo andando nel codice
e scrivendo un semplice comando
che è, invece di voltare a destra 30 gradi,
aggiungerò la parola "random"
così adesso la formica sceglierà un numero random fra zero e 30 meno 1
e girerà a destra di altrettanti gradi
e ogni volta che va avanti sceglierà un numero diverso
e possiamo fare lo stesso qui: possiamo avere che la formica si muova avanti di un numero random di passi fra zero e 4 meno 1 ossia 3
vediamo allora cosa succede
torniamo all'interfaccia
facciamo setup e go
e vediamo che si muove sempre in circolo ma che il comportamento è un po' più interessante
Adesso notiamo che la formica sembra passare attraverso la parete da una parte e rientrare dalla parte opposta
e infatti il "mondo", questa area nera
è circondato da barriere
così il "mondo" ha una forma
come una ciambella
questo mondo che noi vediamo è piatto
e circondato da queste pareti in cui la formica ci passa attraverso... va un po' troppo veloce...
così se la formica passa attraverso l'alto
ritorna dal basso
se passa attraverso una parte
ritorna dall'altra parte
questo tipo di aspetto può apparire un po' strano
allora cosa possiamo fare
clicchiamo col destro sul "mondo" questa area nera
clicchiamo "edit" ... questa finestra dà parecchie informazioni su come il mondo è diviso e sul numero di pezzi che lo compongono
ma ciò che a noi interessa sono questi due flag che sono selezionati di default su "world wrap"
deselezionamoli, clicchiamo su applica e okay e vediamo cosa succede adesso
la formica adesso quando incontra un muro si ferma e non è più in grado di passarci attraverso ma gira intorno e questo la rende più realistica
tuttavia anche se nel mondo può muoversi intorno in maniera random
è ancora poco realistico che volti sempre a destra
scrivendo un po' di codice possiamo permetterle di scegliere una svolta casuale a destra o a sinistra
di fatto è come se lanciassimo una moneta. Ogni volta che si muove viene lanciata la moneta per decidere se girare a destra o a sinistra
per implementare la procedura di "coin-flip" adopererò qualcosa chiamato "to-report"
ok ... "coin flip?"
la procedura report è diversa dalla precedente perché questa di fatto restituisce un valore booleano.
Restituisce Vero o Falso che corrisponde alla testa o alla coda
tutto ciò che dobbiamo dire qui è "report random 2 = 0" "end"
Random 2, se ricordate, restituisce un intero fra zero e questo numero (2) meno 1 e quindi restituirà 0 metà delle volte e 1 metà delle volte, ma in maniera casuale
se è zero, che sarebbe "random = 0", è una dichiarazione che è "vero", se random 2 è zero, "falso" in tutti gli altri casi.
e ciò riporta se questo è vero o falso, è perciò da tutta questa cosa avremo il risultato della procedura "coin-flip" che è vero per metà delle volte e falso per metà delle volte, ma in maniera casuale.
così si può usare dicendo "ifelse" (se allora) "coin-flip": vale a dire se coin-flip è vero fai questa prima cosa che inserirò fra parentesi,
altrimenti se è falso fai la seconda cosa che inserirò fra parentesi [left random 30]
così se coin-flip è vera avremo [right random 30] se coin-flip? è falsa avremo [left random 30]
così ogni volta che lanciamo la procedura "go" ad ogni passo essa deciderà in maniera casuale se girare a destra o girare a sinistra.
allora vediamo come va. "setup" e "go"
possiamo vedere che gira in direzioni differenti ma rimane bloccata, gira a destra o a sinistra ma resta bloccata troppo spesso.
allora possiamo risolvere il problema, facendo una piccola miglioria, cambiando 30 in 60 l'ampiezza con cui la formica gira
riproviamo. Sì sembra restare bloccata un po' meno spesso e sembra un po' più realistica.
Ogni volta che si scrive un programma è una buona idea lasciare commenti
torniamo quindi al codice, un commento è un po' di testo, che è ignorato dal computer, ma è meglio per le persone quando devono leggere il codice
e in NetLogo il commento è un po' di testo dopo un punto e virgola.
così posso scrivere qui qualsiasi cosa io voglia, sarà ignorata dal computer, scriviamo "restituisce un valore vero o falso in maniera casuale"
Possiamo scrivere un altro commento qui "se coin-flip? è vero gira a destra, altrimenti gira a sinistra"
così abbiamo dei piccoli promemoria per noi stessi o per chiunque altro leggerà il programma
relativo a cosa fa ciascun pezzettino. Questo è molto utile se si scrivono programmi più complicati
specialmente se ci si ritorna sopra dopo qualche giorno è davvero di aiuto aiuta per ricordare che cosa intendevamo fare
i commenti sono davvero importanti anche se nessuno a parte te leggerà il programma.
Adesso siamo pronti a salvare il nostro modello, prima di denominarlo
andrò al menù interfaccia, e sceglierò "note" e metterò qui un po' di testo: sceglierò il nome del modello "ant 1"
farò il testo un po' più grande: 18 e posso selezionare questo e questo e spostarli un po' più giù e centrarli
e qualsiasi altra cosa che li renda più gradevoli a vedersi. Abbiamo finito. Quindi salviamo.
Chiudiamo NetLogo, il modello è salvato.
Voglio far presente che l'obiettivo di insegnare NetLogo è per dare un senso di come NetLogo lavora.
Noi useremo molti modelli di simulazione NetLogo in questo corso.
Non scriveremo moltissimo ma voglio darvi un senso di come funziona il codice, di come funziona l'interfaccia, e così via.
Potrete apportare modifiche ai modelli che abbiamo visto e se avrete più esperienza e sarete motivati potrete provare a scriverli da voi.
Come esercizio per questa sessione direi di implementare i modelli che ho fatto come ant1
usando gli stessi temi che io ho usato e farlo funzionare
potrà sembrare non troppo specialistico ma è sufficiente per capire se avete capito quello che vi ho mostrato
e non esitate a fare domande sul forum degli studenti: è lì per questo.