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.