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.