Implementiamo un secondo modello basato sul precedente. La prima cosa da fare è fare una copia di questo "ant1.nlogo". Posso farla facendo click-destro e facendo 'copia'. Poi facciamo 'cmd + v' oppure 'ctrl + v', dipende da come il vostro sistema fa 'copia e incolla' Faccio una copia di questo, e lo rinomino "ant2.logo". Poi lo seleziono e faccio doppio click per aprirlo. Poi lo modifico facendo click destro su questa etichetta, selezionando 'edit' e chiamandolo "Ant 2". Adesso abbiamo una formica (ant) che si può muovere. Diamole qualcosa da mangiare. Andiamo nella tab "code" e produciamo cibo per la formica. Quindi, nella procedura di setup, scriveremo 'grow-food' (= produci cibo). Bene, ma ora dobbiamo dire al sistema in che modo produrre il cibo. Dobbiamo andare giù, qui, e scrivere una nuova procedura 'to grow-food' E ciò che dobbiamo fare è 'ask patches [set pcolor green] end' Fatemi spiegare le patches. Ritorniamo nell'interfaccia, vedete qui, nel 'mondo', che è questa area nera, possiamo fare click destro e 'edit', e potete vedere che questo mostra il sistema di coordinate per il mondo. Probabilmente è difficile vedere nel vostro schermo, ma lo potete fare in netlogo e dare un'occhiata. Le coordinate (0,0) sono nel centro e questo va da -16 a 16 in verticale e da -16 a 16 in orizzontale e quindi l'intera scatola è una griglia di 33 per 33 quadrati, che sono chiamati 'patches'. E c'è un numero di pixel per patch, qui, è 13 e così via. Quindi ciascun patch ha le sue proprietà, come il colore, Se ritorno al codice, e chiedo (ask) a tutte le patches di settare il loro colore - 'pcolor' è il colore delle patch - a verde. Vediamo quindi cosa succede quando faccio 'setup'. Ecco, sono diventate tutte verdi. Quindi possiamo definirlo come un modello di formica che vive in un mondo di erba. Torniamo ora al tab 'code' e scriviamo il codice per far mangiare l'erba alle formiche. Per fare questo scriveremo qui il seguente codice: 'If pcolor = green' e qui scriverò un commento se la 'turtle' è posizionata su una patch verde. Questo codice comanda alla 'turtle' di controllare la propria 'patch' la patch su cui sono le 'turtles' ciascuna 'turtle' è su una particolare 'patch'. E se la patch è verde, allora ciò che deve fare è mangiare il pezzo di erba verde rimettendo il colore a nero (=black) Quindi settiamo il pcolor a black E ora manteniamo traccia di quanto cibo è stato mangiato quindi dobbiamo aggiungere 1 a food eaten (= cibo mangiato) Dobbiamo fare anche un'altra cosa: ogni formica deve avere sul corpo un'etichetta che ci indica quanto cibo ha mangiato quindi impostiamo la label a 'food eaten' Dovete notare che tutto questo è ciò che chiediamo alle 'turtles' di fare e mi sono accorta che qui devo mettere le parentesi. Inoltre metto le tabs. Ogni volta che premo il pulsante tab indenta in modo corretto. Così adesso ho due parentesi, questa e questa, che comprendono tra loro tutti i comandi che servono per chiedere alle turtles ciò che devono fare. Chiederemo di girare a destra e a sinistra, andare avanti di 4 e controllare la propria patch se è di colore verde. Cambiare il colore a nero, incrementare la quantità di cibo di 1 e avere un'etichetta che indica il cibo che ciascuna formica ha mangiato. Adesso dobbiamo fare una cosa. che è il cibo mangiato che dobbiamo impostare Quindi le 'turtles' hanno una variabile associata chiamata 'food eaten' (= cibo mangiato) Potremmo pensarle come lo stomaco delle 'turtles', che mantiene traccia di quanto cibo mangiano e le 'turtles' non digeriscono nulla in questo modello quindi ciò che dico è turtles_own [food eaten] E quello che viene fatto è impostare una variabile chiamata 'food-eaten' che è specifica per ogni 'turtle'. Ciascuna 'turtle' ha la sua variabile 'food-eaten' Quindi ciascuna 'turtle' avrà una quantità differente di cibo che ha mangiato. Qui, in 'setup' la imposterò a zero. 'Set food-eaten 0' Così siamo sicuri che inizia da zero. quindi nel tempo le 'turtle' o formiche accumuleranno la quantità di cibo che mangiano Qui mettiamo la spunta. Click su ok. Torniamo all'interfaccia. Rallentiamolo un po' in modo da vedere le 'turtles' che mangiano. Quindi la 'turtle' si muove scusate, dovrei dire la formica, si muove nel mondo e ogni volta che si posiziona su un quadrato verde, mangia il cibo. Ricordate che fa un passo di misura da 1 a 3 e mangia il cibo dopo ogni movimento. Così osserviamo il movimento. Velocizziamo un po' E potete vedere la formica muoversi mangiando il cibo. Probabilmente non riuscite a vedere ma la formica mostra un'etichetta che indica la quantità di cibo che ha mangiato. E' una grande quantità di cibo per una piccola formica. La prossima cosa da fare è creare una colonia per la formica. Aggiungiamo quindi altre formiche. Il modo per farlo è aggiungere una popolazione E permettere agli utenti del nostro modello di impostare la grandezza della popolazione. Ritorno nel menu dell'interfaccia. E vado in 'slider' e metto in uno slider una variabile che chiamerò 'population'. Imposto come minimo 1. Diciamo che il massimo sia 200. Permettiamo di incrementare di uno E impostiamo 50 come valore iniziale. E quindi clicchiamo su ok. Lo muoviamo - selezioniamo e spostiamolo qui. Ma ora dobbiamo scrivere che cosa fare con la variabile 'population'. Vado nel 'tab' 'code'. e invece si creare 'turtles of one' creo 'turtles population'. in modo che l'utente possa impostare il numero e quindi il codice creerà il numero di 'turtles' impostato. Vediamo cosa succede quando facciamo il set up. Abbiamo tutte le formiche nel centro. Ne abbiamo 50. Facciamole partire. le vediamo muoversi rallentiamo un po' fanno tutte la stessa cosa ma ciascuna fa alcune scelte casuali Possiamo vedere che ciascuna si comporta im modo un po' diverso. E, se aumentiamo la velocità, vediamo alcune cose che sembrano quasi formiche vere. che si muovono e mangiano Proviamo ad aumentare la popolazione. 130 mi sembra una buona quantità di formiche E' veramente molto affollato. C'è una tale folla che credo che dobbiamo andare nel codice e farle più piccole impostiamo la loro taglia a 1 Vediamo cosa succede Lo imposto. Adesso ci sono formiche più piccole probabilmente non le potete vedere bene Sicuramente hanno più posto DI nuovo è troppo piccolo per vederlo sul vostro schermo. Ma ciascuna ha la sua etichetta che indica quanto cibo ha mangiato. Ci piacerebbe sapere la quantità totale di cibo mangiato Quindi aggiungo un 'plot' che indica nel tempo la quantità totale di cibo mangiato. Andiamo di nuovo nel menu dell'interfaccia e scegliamo 'plot'. Mi chiede molte cose riguardo il 'plot'. Lo chiamo 'Total Food Eaten'. Bisogna impostare il minimo e il massimo Lascio che si impostino da soli. Chiamo l'asse x 'cibo totale mangiato' L'asse y è il tempo Dobbiamo dare un nome alla 'pen', e lasciamo il colore nero la chiamiamo 'cibo totale mangiato' Imposto il comando di plot Qui indico di plottare la somma delle quantità di cibo mangiato dalle 'turtles'. Questo significa: per ciascuna 'turtle' controlla quanto cibo ha mangiato. E somma il tutto E fai il plot nel tempo. Bene, 'apply'. Abbiamo un errore. Dovremmo avere sull'asse y il cibo totale e l'asse x deve essere il tempo ora è corretto Quindi selezioniamo questo Facciamo muovere questo. Un po' più alto così possiamo vedere ok, e ora vediamo come funziona. 'Setup'. 'Go'. Puoi fare il plot e modificarlo Il numero si modifica e questo mostra la velocità del cibo mangiato E potete modificare la grandezza della popolazione per vedere quanto influenza la velocità di mangiare il cibo. Per finire il modello utilizziamo altre variabile a cui le formiche fanno riferimento. Per esempio prendiamo uno 'slider' Impostiamo il numero massimo di passi e il massimo angolo di rotazione. Seleziono il plot Lo muovo giù per altri due sliders. Vado su e seleziono 'slider' Abbiamo la variabile, chiamiamola 'max step size' Impostiamo il minimo a 1 e il massimo a 10 Impostiamo il valore iniziale a 4 Mettiamolo qui. E questi spostiamoli su. E facciamo un altro slider. Chiamiamolo 'maximum turn angle' (= massimo angolo di rotazione) impostiamo il minimo a 1 grado e il massimo a 180. Come valore iniziale abbiamo 60 applichiamo 'ok'. Selezioniamo move Ora dobbiamo definire queste variabili nel codice Qui, invece di impostare 60 impostiamo 'max turn angle' e qui lo stesso 'max turn angle' Quindi adesso abbiamo il massimo angolo di rotazione impostiamo 'max turn angle' Bene, potreste notare se fate attenzione che questo statement dà come risultato un intero tra 0 e -1 'max turn angle' = -1 Quindi il massimo angolo di rotazione è un nome sbagliato veramente dovrebbe essere questo meno uno ma non mi preoccupo molto di questo Qui facciamo la stessa cosa invece di scrivere 4 impostiamo 'max step size'. Bene, controlliamo questo codice. A proposito, mi sono accorta che forse è difficile vedere questo codice sullo schermo Lo carico e lo rendo disponibile nella pagina del materiale del corso. con il nome ant2.logo Così lo potete scaricare e darci un'occhiata e lo potrete utilizzare per fare i compiti Vediamo se funziona. Di nuovo, ok. Sembra funzionare. Un'altra cosa molto utile che dovrei dirvi di netlogo. Alcune volte si può bloccare e quando si fa click su 'go' non si ferma più. Perché sta eseguendo troppi comandi. Nei 'tools' qui in alto c'è il comando 'halt' che si può sempre usare per fermare il progrmma Funziona sempre per fermare il programma. Può essere utile per qualche ragione Il programma si ferma e si può fare click su 'go' di nuovo. Facciamo una prova. Aumentiamo la grandezza di 'max step' Impostiamolo a 10 e vediamo cosa succede. Molte sembrano bloccarsi ai bordi. Potete modificare queste -- questre tre diverse variabili e vedere quanto tempo ci vuole per finire tutto il cibo. Ma vogliamo che si fermi quando il cibo è finito cos' possiamo vedere esattamente quanti 'tic' sono stati utilizzati per consumare il cibo Quindi inserisco qui un comando per fare ciò. Vano nella procedura 'go' e questo è il comando per farlo fermare bisogna indicare che se non ci sono patches che hanno pea color uguale a 'green' cioè se tutte sono diventate nere allora lo fermiamo Questo è il tipo di sintassi utilizzato da netlogo non si possono utilizzare punti interrogativi patches con alcune proprietà e stop Proviamo Impostiamo la popolazione a 200 e la lunghezza del passo a 4 e l'angolo di rotazione a 60 e vediamo con che velocità viene consumato il cibo. CI sono voluti 105 tics Ora salviamo il nostro modello andando nel menu 'file' e facendo click su 'save' e il nostro secondo modello è completato.