1
Fork 0
mirror of https://github.com/Steffo99/turtle007.git synced 2024-11-25 14:34:20 +00:00
apprevol-2020-turtle007/README.md

80 lines
3.6 KiB
Markdown
Raw Normal View History

2020-05-05 15:09:11 +00:00
# `1-efficiency-tiredness`
2020-05-05 15:09:11 +00:00
Questo progetto estende il progetto [`1-base`](https://github.com/Steffo99/turtle007/tree/1-base) aggiungendo parametri di stanchezza e controlli di efficienza alle termiti.
## Ambiente NetLogo
### Aggiunti toggle
2020-06-17 15:49:42 +00:00
Aggiunti due toggle, `Efficiency` e `Tiredness`, che attivano e disattivano le due funzioni.
### Aggiunto slider
Aggiunto slider `EnergyLostPerAction`, settata di defaut al 20%, che regola l'energia persa dalle formiche per ogni azione non andata a buon fine.
## Comportamento delle formiche
2020-06-17 15:49:42 +00:00
### Aggiunti boolean `efficient?` e `tired?`
2020-06-17 15:49:42 +00:00
Al programma netLogo sono state aggiunte le seguenti due funzioni booleane:
#### `efficient?`
```
to-report efficient? [needEmptyArea]
2020-06-17 15:49:42 +00:00
; Funzione booleana che dice se è efficiente eseguire l'azione che la evoca
; needEmptyArea è un bool che mi definisce l'obiettivo tra:
; - cercare una zona semi-vuota da cui prelevate cibo (true)
; - cercare una zona semi-piena in cui appoggiare il cibo (false)
2020-06-17 15:49:42 +00:00
; se non ho attivato la modalità efficiente, il bool è sempre soddisfatto
if not Efficiency [report true]
2020-06-17 15:49:42 +00:00
; altrimenti, entra in gioco il needEmptyArea
ifelse needEmptyArea [
; è considerata "vuota" un'area in cui ci sia meno del 40% di caselle con del cibo
report (count patches in-radius 2 with [pcolor != black] /
count patches in-radius 2 < 0.4)
2020-06-17 15:49:42 +00:00
][
; è considerata "piena" un'area in cui ci sia più del 40% di caselle con del cibo
report (count patches in-radius 2 with [pcolor != black] /
count patches in-radius 2 > 0.4)
]
end
```
#### tired?
```
to-report tired? [energy]
; Funzione booleana che monitora l'energia rimasta alla termite
; se non ho attivato la modalità tiredness, la formica avrà sempre energia sufficiente
; altrimenti, controllo se l'energia rimasta è sufficiente
2020-06-17 15:49:42 +00:00
ifelse not tiredness [
report false
][
report (energy < random-float 10)
]
end
```
### Modificate condizioni
2020-06-17 15:49:42 +00:00
Sono state modificate alcune condizioni all'interno del programma, aggiungendovi `efficient?` o `tired?` a seconda della situazione.
Nello specifico sono stati aggiunti:
- un `or not efficient?(true)` dentro al `while[ pcolor = black ]` nella funzione `cerca-cibo`. In questo modo la formicha continuerà a vagare alla ricerca di cibo anche dopo averne visto, se non considererà efficiente raccoglierlo;
- un `or not efficient?(false)` è stato invece messo nella `appoggia-cibo`, nel `while[ pcolor != black ]`. La formica vagherà cercando un posto dove appoggiare cibo finchè non troverà una patch vuota E in cui appoggiare cibo sia efficiente;
- un `and not tired?(energy)` all'interno del `while[ pcolor != black ]` nella funzione `allontanati`. La formica potrebbe smettere di allontanarsi se stanca.
All'interno di `allontanati` è stato inoltre aggiunto un meccanismo che riduceva l'energia della formica ad ogni ciclo del while.
## Dinamica del sistema
Quando `Efficiency` sarà attivo, le formiche preleveranno e appoggeranno cibo solo se questa azione è efficiente. Questo porta a meno "spostamenti indesiderati" e a gruppi di cibo più tondeggianti e dai contorni ben definiti. All'inizio, con il cibo molto sparso, le formiche formeranno gruppi molto velocemente, ma appena ogni gruppo raggiungerà una certa dimensione il sistema subirà un brusco rallentamento.
Quando `Tiredness` sarà attivo, le formiche avranno una chance di smettere di allontanarsi prima di aver trovato una pezza con del cibo. Questo prota alla formazione di gruppi più frastagliati.
2020-06-17 15:49:42 +00:00
Quando entrambi gli switch saranno attivi, il comportamento descritto da `Efficiency` avrà la predominanza sul `Tiredness`.