Introduzione a Complexity Compito 1 - Opzione avanzata Questo è un tutorial che analizza l'opzione avanzata del compito. Aprite il modello netlogo denominato multipleants.nlogo, che è situato nella sezione del materiale del corso sul sito web. Quando si apre, l'interfaccia dovrebbe essere come questa. Ci sono due modifiche già fatte nella prima sezione del compito e non le abbiamo eliminate. Quindi, la prima cosa da fare è modificare il colore delle formiche in modo che sia rosso. Elimino queste due linee di codice, che rende tutto più semplice. Torniamo all'interfaccia. Il compito ci chiede di creare una traccia di ferormone che le formiche rilasciano dietro, quando hanno trovato cibo, e che le altre formiche possono seguire. Per provare, se c'è un metodo più veloce, andiamo nella sezione del codice. Per prima cosa creiamo una variabile per la patch e la chiamiamo 'pheromone', qui. Scorriamo giù al 'setup'. Dobbiamo impostare le patches, non solo quelle della tana, ma anche per il 'pheromone'. Modifico quindi questo 'set-up-nest' in 'set-up-patches', e modifichiamo 'ask-patches' per inizializzare 'pheromone' a 0 quindi 'set pheromone 0'. Lo controlliamo. Poi vogliamo che le formiche lascino una traccia di ferormone dopo che hanno mangiato, per tracciare la via del ritorno alla tana. Quindi vogliamo che le altre formiche seguano la traccia. Per questo, scorriamo alla procedura return-to-nest e aggiungiamo una riga per impostare il livello di ferormone della patch. Impostiamo il livello a +1. Per visualizzare il livello di ferormone su ciascuna patch imposto una etichetta sulla patch, 'plabel', in modo che sia semplicemente il valore di 'pheromone'. Possiamo utilizzare anche un diverso colore ma penso che sia più interessante usare l'etichetta. Controlliamo. Vediamo se funziona. Sembra che le formiche che stanno prendendo cibo ritornino alla tana e intanto lasciano una traccia di ferormone che permette alle formiche di aumentare. Ora vogliamo che il ferormone evapori nel tempo. Torniamo al codice. Creiamo una riga nella procedura 'go', che chiamiamo 'evaporate-pheromone'. Quindi scriviamo questa procedura, 'to evaporate-pheromone'. Vogliamo che il ferormone abbia una certa probabilità di evaporare, cioè un numero tra 0 e 1. Impostiamo una variabile temporanea, che chiamiamo x, che sarà un numero decimale casuale tra 0 e 1, quindi 'random-float 1' poi 'ask patches whit [pheromone > 0]' quindi scriviamo che se la variabile x è minore della probabilità che vogliamo, che sarà impostata da uno slider nell'interfaccia, chiameremo questo slider 'probability-to-evaporate', poi imposteremo il ferormone al valore corrente -1, per evaporare gradualmente. Vediamolo, in modo che impostiamo la 'plabel' è il nuovo numero, e dobbiamo aggiungere la slider di cui ho detto. Per farlo andiamo all'interfaccia clicchiamo questo pulsante, scegliamo 'slider' e lo posizioniamo qui un momento, e qui lo chiamiamo 'probability-to-evaporate', e deve essere un numero tra 0 e 1, o lo incrementiamo di 0.01, e lo impostiamo inizialmente a 0.1. Mi sono dimenticato un 'e'. Premiamo 'OK'. Sposto lo slider sotto questo altro. Sposto questo 'plot' e lo allineo con il 'mondo' che sembra migliore, poi questo slider sopra. Facciamo lo stesso con gli altri sliders, Sembra corretto. Controllo. Torniamo all'interfaccia e facciamo girare. Il livello di ferormone deve decrescere, e sembra che lo faccia, quindi bene. Il problema finale è avere altre formiche che seguono la traccia di ferormone. A proposito, per selezionare diverse finestre sull'interfaccia si clicca su un spazio libero con il cursore e si trascina sul pulsante o lo slider o quello che si vuole. Si può anche fare click destro dopo aver selezionato il pulsante, poi editare in modi differenti, Ora torniamo al codice e modifichiamo il movimento delle formiche nel 'mondo'. Andiamo a 'to look-for-food' e aggiungiamo qui il codice. Dobbiamo impostare alcune nuove variabili in 'look-for-food', quindi 'let pheromone-ahead? scent-at-angle 0' e spiego cosa significa tra un secondo 'let pheromone-right? scent-at-angle 45' 'let pheromone-left? scent-at-angle -45' Questo codice è molto simile al modello della NetLogo Library. Stiamo semplicemente chiedendo alle formiche di guardare un po' avanti, un po' a destra e a sinistra per determinare se c'è ferormone, e se c'è seguirlo. Se non c'è, andare avanti casualmente, che corrisponde a lasciare lo stesso codice qui sotto. Poi scriviamo una serie di cicli if-else 'if-else' - aperta parentesi - pheromone-right? è maggiore di pheromone-ahead? oppure pheromone-left? è maggiore di pheromone-ahead? - chiusa parentesi - 'if-else pheromone-right? è maggiore di pheromene-left? andiamo a destra di 45 gradi, altrimenti a sinistra di 45 gradi, e se niente di ciò è vero, non c'è feromone davanti o non c'è del tutto. Quindi se pheromone-ahead? è uguale a 0 andiamo avanti con il resto. Ci occorre un parentesi aperta e una parentesi chiusa. Controlliamo. Ci dice che non c'è niente chiamato 'scent-at-angle' E' vero, non abbiamo ancora impostato il scent-at-angle, scorriamo alla fine del codice. Mettiamo un reporter 'to report scent-at-angle' e mettiamo un angolo, [angle] 'let p patch-right-and-ahead' E queste sono primitive, proprie di NetLogo. Per controllare a cosa corrisponde una primitiva potete selezionarla e fare click destro, e andare in 'Quick Help', che fornisce una sinopsi della primitiva. Quindi, a destra e davanti. Useremo l'angolo appena inserito e la distanza davanti pure uguale a 1. Se p non è uguale a niente, quindi se non c'è ferormone, quindi riporta 0, altrimenti riporta la quantità di ferormone di p. Controlliamo il codice. Non abbiamo chiuso la parentesi. Abbiamo un messaggio di errore. Sembra che la parentesi che manca vada qui. Ho notato anche un'altra coppia di parentesi che mancano per queste righe. Le aggiungo. Scusate. Controlliamo. Sembra tutto a posto. Ritorniamo all'interfaccia. Sembra che il comportamento sia corretto. Analizziamo un po' meglio. Possiamo fare alcune osservazioni su come funziona. Le lascio a voi. Noto che molte formiche si posizionano ai bordi del 'mondo'. Possiamo mettere a posto andando in 'setting' e facendo click su 'world wraps horizontally' e 'world wraps vertically' e fare click su ok. Sembra che le formiche siano molto veloci e mangino tutto il cibo, circa 73 ticks, e nel precedente modello, prima di aggiungere il ferormone, avevamo 128 ticks. E' tutto per il compito n.1, spero che vi sia piaciuto. Non vedo l'ora di spiegarvi il prossimo!