mirror of
https://github.com/Steffo99/turtle007.git
synced 2024-11-24 05:54:19 +00:00
È successo un disastro, ma per fortuna sono riuscito a sistemare
ooooooooooooooooooops
This commit is contained in:
parent
e12eaeb8e0
commit
3decc22084
2 changed files with 145 additions and 192 deletions
214
Progetto.nlogo
214
Progetto.nlogo
|
@ -1,7 +1,7 @@
|
||||||
breed [ants ant]
|
breed [ants ant]
|
||||||
patches-own [pheromone food nest distance-from-nest]
|
patches-own [pheromone food nest distance-from-nest]
|
||||||
ants-own [carrying-food speed metabolism hunger]
|
ants-own [carrying-food speed metabolism hunger]
|
||||||
globals [ant-deaths ant-hatches ants-to-respawn]
|
globals [ant-deaths ant-hatches ants-to-respawn mutazioni]
|
||||||
|
|
||||||
to setup
|
to setup
|
||||||
clear-all
|
clear-all
|
||||||
|
@ -13,6 +13,7 @@ to setup
|
||||||
ask ants [t-paint-ant]
|
ask ants [t-paint-ant]
|
||||||
set ant-deaths 0
|
set ant-deaths 0
|
||||||
set ants-to-respawn 0
|
set ants-to-respawn 0
|
||||||
|
set mutazioni 0
|
||||||
end
|
end
|
||||||
|
|
||||||
to p-paint-patch
|
to p-paint-patch
|
||||||
|
@ -225,6 +226,11 @@ to t-inherit [parents]
|
||||||
set metabolism (bottom-metabolism + random (top-metabolism - bottom-metabolism + 1))
|
set metabolism (bottom-metabolism + random (top-metabolism - bottom-metabolism + 1))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
to t-mutation
|
||||||
|
set speed (random(max-speed-with-mutation) + 1)
|
||||||
|
set metabolism (random(max-metabolism) + 1)
|
||||||
|
end
|
||||||
|
|
||||||
to t-hatch
|
to t-hatch
|
||||||
let partners t-partners
|
let partners t-partners
|
||||||
if any? partners [
|
if any? partners [
|
||||||
|
@ -235,7 +241,9 @@ to t-hatch
|
||||||
]
|
]
|
||||||
hatch-ants 1 [
|
hatch-ants 1 [
|
||||||
t-setup-ant
|
t-setup-ant
|
||||||
t-inherit parents
|
ifelse random 100 > mutation-chance [t-inherit parents]
|
||||||
|
[t-mutation
|
||||||
|
set mutazioni (mutazioni + 1)]
|
||||||
]
|
]
|
||||||
set ant-hatches ant-hatches + 1
|
set ant-hatches ant-hatches + 1
|
||||||
]
|
]
|
||||||
|
@ -784,7 +792,7 @@ INPUTBOX
|
||||||
875
|
875
|
||||||
570
|
570
|
||||||
max-speed
|
max-speed
|
||||||
2.0
|
3.0
|
||||||
1
|
1
|
||||||
0
|
0
|
||||||
Number
|
Number
|
||||||
|
@ -817,7 +825,7 @@ INPUTBOX
|
||||||
950
|
950
|
||||||
570
|
570
|
||||||
min-metabolism
|
min-metabolism
|
||||||
1.0
|
3.0
|
||||||
1
|
1
|
||||||
0
|
0
|
||||||
Number
|
Number
|
||||||
|
@ -926,7 +934,7 @@ Ant speeds
|
||||||
NIL
|
NIL
|
||||||
NIL
|
NIL
|
||||||
1.0
|
1.0
|
||||||
3.0
|
7.0
|
||||||
0.0
|
0.0
|
||||||
10.0
|
10.0
|
||||||
true
|
true
|
||||||
|
@ -1011,7 +1019,7 @@ count ants with [metabolism = 5]
|
||||||
MONITOR
|
MONITOR
|
||||||
1440
|
1440
|
||||||
245
|
245
|
||||||
1535
|
1490
|
||||||
290
|
290
|
||||||
Speed 1
|
Speed 1
|
||||||
count ants with [speed = 1]
|
count ants with [speed = 1]
|
||||||
|
@ -1020,9 +1028,9 @@ count ants with [speed = 1]
|
||||||
11
|
11
|
||||||
|
|
||||||
MONITOR
|
MONITOR
|
||||||
1540
|
1495
|
||||||
245
|
245
|
||||||
1635
|
1545
|
||||||
290
|
290
|
||||||
Speed 2
|
Speed 2
|
||||||
count ants with [speed = 2]
|
count ants with [speed = 2]
|
||||||
|
@ -1139,80 +1147,109 @@ partner-radius
|
||||||
0
|
0
|
||||||
Number
|
Number
|
||||||
|
|
||||||
|
SLIDER
|
||||||
|
730
|
||||||
|
640
|
||||||
|
875
|
||||||
|
673
|
||||||
|
mutation-chance
|
||||||
|
mutation-chance
|
||||||
|
0
|
||||||
|
100
|
||||||
|
2.0
|
||||||
|
1
|
||||||
|
1
|
||||||
|
%
|
||||||
|
HORIZONTAL
|
||||||
|
|
||||||
|
INPUTBOX
|
||||||
|
880
|
||||||
|
640
|
||||||
|
1032
|
||||||
|
700
|
||||||
|
max-speed-with-mutation
|
||||||
|
6.0
|
||||||
|
1
|
||||||
|
0
|
||||||
|
Number
|
||||||
|
|
||||||
|
MONITOR
|
||||||
|
1550
|
||||||
|
245
|
||||||
|
1600
|
||||||
|
290
|
||||||
|
Speed 3
|
||||||
|
count ants with [speed = 3]
|
||||||
|
17
|
||||||
|
1
|
||||||
|
11
|
||||||
|
|
||||||
|
MONITOR
|
||||||
|
1605
|
||||||
|
245
|
||||||
|
1655
|
||||||
|
290
|
||||||
|
Speed 4
|
||||||
|
count ants with [speed = 4]
|
||||||
|
17
|
||||||
|
1
|
||||||
|
11
|
||||||
|
|
||||||
|
MONITOR
|
||||||
|
1660
|
||||||
|
245
|
||||||
|
1710
|
||||||
|
290
|
||||||
|
Speed 5
|
||||||
|
count ants with [speed = 5]
|
||||||
|
17
|
||||||
|
1
|
||||||
|
11
|
||||||
|
|
||||||
|
MONITOR
|
||||||
|
1715
|
||||||
|
245
|
||||||
|
1765
|
||||||
|
290
|
||||||
|
Speed 6
|
||||||
|
count ants with [speed = 6]
|
||||||
|
17
|
||||||
|
1
|
||||||
|
11
|
||||||
|
|
||||||
|
MONITOR
|
||||||
|
1660
|
||||||
|
295
|
||||||
|
1765
|
||||||
|
340
|
||||||
|
Mutazioni
|
||||||
|
mutazioni
|
||||||
|
17
|
||||||
|
1
|
||||||
|
11
|
||||||
|
|
||||||
@#$#@#$#@
|
@#$#@#$#@
|
||||||
# `2-evoluzione`
|
# `2-Random-Mutation`
|
||||||
|
|
||||||
Questo progetto estende il progetto [`2-metabolismo`](https://github.com/Steffo99/turtle007/tree/2-metabolismo). In questa versione vengono aggiunti i parametri riproduttivi e i meccanismi di scelta del partner, che portano ad un’evoluzione del formicaio nel suo complesso.
|
|
||||||
|
|
||||||
|
Questo progetto estende il progetto [`2-evoluzione`](https://github.com/Steffo99/turtle007/tree/2-evoluzione). In questa versione viene aggiunta l'aspetto della mutazione casuale nel modello: le caratteristiche migliori, come la velocità più alta o il metabolismo più basso, possono venire ottenute solo mediante mutazione in quanto non presenti nella popolazione originale.
|
||||||
## Ambiente
|
## Ambiente
|
||||||
|
|
||||||
### Variabili globali
|
### Variabili globali
|
||||||
|
|
||||||
Sono state aggiunte al modello le seguenti variabili globali:
|
Sono state aggiunte al modello le seguenti variabili globali:
|
||||||
|
|
||||||
- `reproduction-hunger`, la quantità di `hunger` al di sopra della quale una formica può tentare di riprodursi;
|
- `mutazioni`, contiene il numero di mutazioni che si sono verificate dall'inizio della simulazione;
|
||||||
- `reproduction-cost`, la quantità di `hunger` che sarà sottratta alle formiche dopo essersi riprodotte;
|
- `mutation-chance`, la probabilità che si verifichi una mutazione;
|
||||||
- `partner-radius`, la distanza massima a cui una formica può scegliere il suo partner.
|
- `max-speed-with-mutation`, la velocità massima ottenibile mediante mutazione.
|
||||||
|
|
||||||
### Comportamento delle formiche
|
### Comportamento delle formiche
|
||||||
|
|
||||||
Il comportamento delle formiche è stato cambiato nei seguenti modi:
|
Il comportamento delle formiche è stato cambiato nei seguenti modi:
|
||||||
|
|
||||||
#### Modificato: `t-die`
|
#### Modificato: `t-hatch`
|
||||||
|
|
||||||
```
|
```diff
|
||||||
to t-die
|
let partners t-partners
|
||||||
set ant-deaths ant-deaths + 1
|
|
||||||
set ants-to-respawn ants-to-respawn + 1
|
|
||||||
; Die interrompe la funzione!
|
|
||||||
die
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Dopo che sono morte, le formiche non respawnano più.
|
|
||||||
|
|
||||||
#### Modificato: `t-consume-food`
|
|
||||||
|
|
||||||
```
|
|
||||||
to t-consume-food
|
|
||||||
set hunger hunger - metabolism
|
|
||||||
if hunger <= 0 [
|
|
||||||
t-die
|
|
||||||
]
|
|
||||||
if hunger >= reproduction-hunger [
|
|
||||||
t-hatch
|
|
||||||
]
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Se le formiche hanno abbastanza cibo per riprodursi, chiameranno la procedura `t-hatch` descritta in seguito.
|
|
||||||
|
|
||||||
#### Aggiunto: `t-partners`
|
|
||||||
|
|
||||||
```
|
|
||||||
to-report t-partners
|
|
||||||
report other turtles in-radius partner-radius with [hunger >= reproduction-hunger]
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Nella scelta dei partner, le formiche considerano solo le altre formiche entro `partner-radius` patch di distanza aventi abbastanza `hunger` per riprodursi.
|
|
||||||
|
|
||||||
> Nota: La funzione `in-radius` rallenta significativamente il modello all'aumentare delle formiche presenti dall'interno di esso.
|
|
||||||
>
|
|
||||||
> È possibile realizzare una versione più efficiente utilizzando:
|
|
||||||
> ```
|
|
||||||
> to-report t-partners
|
|
||||||
> report other turtles-here with [hunger >= reproduction-hunger]
|
|
||||||
> end
|
|
||||||
> ```
|
|
||||||
>
|
|
||||||
> Ciò però sacrifica la possibilità di decidere il raggio a cui le formiche si possono riprodurre, limitandolo al valore "0" (ovvero, la patch stessa in cui si trova attualmente la formica).
|
|
||||||
|
|
||||||
#### Aggiunto: `t-hatch`
|
|
||||||
|
|
||||||
```
|
|
||||||
to t-hatch
|
|
||||||
let partners t-partners
|
|
||||||
if any? partners [
|
if any? partners [
|
||||||
let partner item 0 sort-on [hunger] partners
|
let partner item 0 sort-on [hunger] partners
|
||||||
let parents (turtle-set self partner)
|
let parents (turtle-set self partner)
|
||||||
|
@ -1221,43 +1258,28 @@ to t-hatch
|
||||||
]
|
]
|
||||||
hatch-ants 1 [
|
hatch-ants 1 [
|
||||||
t-setup-ant
|
t-setup-ant
|
||||||
t-inherit parents
|
+ ifelse random 100 > mutation-chance [t-inherit parents]
|
||||||
]
|
+ [t-mutation
|
||||||
|
+ set mutazioni (mutazioni + 1)]
|
||||||
|
+ ]
|
||||||
set ant-hatches ant-hatches + 1
|
set ant-hatches ant-hatches + 1
|
||||||
]
|
]
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Se le formiche trovano almeno un partner con cui riprodursi, scelgono il partner con il valore di `hunger` più alto e creano una nuova formica, che eredita i valori di `speed` e `metabolism` dei genitori con `t-inherit` (descritta sotto).
|
|
||||||
|
|
||||||
### Aggiunto: `t-inherit`
|
|
||||||
|
|
||||||
```
|
```
|
||||||
to t-inherit [parents]
|
|
||||||
let top-speed max [speed] of parents
|
|
||||||
let bottom-speed min [speed] of parents
|
|
||||||
set speed (bottom-speed + random (top-speed - bottom-speed + 1))
|
|
||||||
|
|
||||||
let top-metabolism max [metabolism] of parents
|
|
||||||
let bottom-metabolism min [metabolism] of parents
|
#### Aggiunto: `t-mutation`
|
||||||
set metabolism (bottom-metabolism + random (top-metabolism - bottom-metabolism + 1))
|
|
||||||
end
|
```diff
|
||||||
|
+to t-mutation
|
||||||
|
+ set speed (random(max-speed-with-mutation) + 1)
|
||||||
|
+ set metabolism (random(max-metabolism) + 1)
|
||||||
|
+end
|
||||||
```
|
```
|
||||||
|
|
||||||
Le nuove formiche nate prendono come `speed` e `metabolism` un valore casuale tra i valori dei rispettivi parametri posseduti dai genitori.
|
|
||||||
|
|
||||||
## Feedback del sistema
|
|
||||||
|
|
||||||
In aggiunta ai feedback precedenti, in questo progetto abbiamo nuovi feedback:
|
|
||||||
|
|
||||||
- <span style="background-color: lightgreen; color: darkgreen;">**Positivo**: Le formiche con più `hunger` (praticamente la funzione *fitness* del modello), hanno più possibilità di riprodursi e passare i loro parametri ai figli.</span>
|
|
||||||
- <span style="background-color: lightcoral; color: darkred;">**Negativo**: Il `reproduction-cost` fa diminuire l'`hunger` dei genitori, rendendo più probabile la loro morte (e quindi sostituzione).</spaw>
|
|
||||||
|
|
||||||
## Dinamica del sistema
|
## Dinamica del sistema
|
||||||
|
|
||||||
Le formiche con i parametri migliori si riprodurranno più spesso, e passeranno i loro parametri ai loro figli.
|
La dinamica del sistema rimane pressochè invariata rispetto alla precedente versione, seppur rendendo inaccessibili le caratteristiche migliori se non mediante mutazione. La presenza di mutazione, inoltre, evita una stagnazione in una situazione sub-ottimale.
|
||||||
|
|
||||||
*Il sistema tende all’ottimo*: dopo un certo numero di ticks (~2100 con la configurazione predefinita), le uniche formiche restanti nel sistema saranno quelle con valori ideali per le variabili `speed` e `metabolism`; tutte le altre si saranno **estinte**.
|
|
||||||
@#$#@#$#@
|
@#$#@#$#@
|
||||||
default
|
default
|
||||||
true
|
true
|
||||||
|
|
123
README.md
123
README.md
|
@ -1,6 +1,8 @@
|
||||||
# `2-evoluzione`
|
# `2-random-mutation`
|
||||||
|
|
||||||
Questo progetto estende il progetto [`2-metabolismo`](https://github.com/Steffo99/turtle007/tree/2-metabolismo). In questa versione vengono aggiunti i parametri riproduttivi e i meccanismi di scelta del partner, che portano ad un’evoluzione del formicaio nel suo complesso.
|
Questo branch estende il progetto [`2-evoluzione`](https://github.com/Steffo99/turtle007/tree/2-evoluzione).
|
||||||
|
|
||||||
|
In questa versione viene aggiunta l'aspetto della mutazione casuale nel modello: le caratteristiche migliori, come la velocità più alta o il metabolismo più basso, possono venire ottenute solo mediante mutazione in quanto non presenti nella popolazione originale.
|
||||||
|
|
||||||
## Ambiente
|
## Ambiente
|
||||||
|
|
||||||
|
@ -8,115 +10,44 @@ Questo progetto estende il progetto [`2-metabolismo`](https://github.com/Steffo9
|
||||||
|
|
||||||
Sono state aggiunte al modello le seguenti variabili globali:
|
Sono state aggiunte al modello le seguenti variabili globali:
|
||||||
|
|
||||||
- `reproduction-hunger`, la quantità di `hunger` al di sopra della quale una formica può tentare di riprodursi;
|
- `mutazioni`, contiene il numero di mutazioni che si sono verificate dall'inizio della simulazione;
|
||||||
- `reproduction-cost`, la quantità di `hunger` che sarà sottratta alle formiche dopo essersi riprodotte;
|
- `mutation-chance`, la probabilità che si verifichi una mutazione;
|
||||||
- `partner-radius`, la distanza massima a cui una formica può scegliere il suo partner.
|
- `max-speed-with-mutation`, la velocità massima ottenibile mediante mutazione.
|
||||||
|
|
||||||
### Comportamento delle formiche
|
### Comportamento delle formiche
|
||||||
|
|
||||||
Il comportamento delle formiche è stato cambiato nei seguenti modi:
|
Il comportamento delle formiche è stato cambiato nei seguenti modi:
|
||||||
|
|
||||||
#### Modificato: `t-die`
|
#### Modificato: `t-hatch`
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
to t-die
|
let partners t-partners
|
||||||
set ant-deaths ant-deaths + 1
|
if any? partners [
|
||||||
- set ants-to-respawn ants-to-respawn + 1
|
let partner item 0 sort-on [hunger] partners
|
||||||
; Die interrompe la funzione!
|
let parents (turtle-set self partner)
|
||||||
die
|
ask parents [
|
||||||
end
|
set hunger hunger - reproduction-cost
|
||||||
```
|
|
||||||
|
|
||||||
Dopo che sono morte, le formiche non respawnano più.
|
|
||||||
|
|
||||||
#### Modificato: `t-consume-food`
|
|
||||||
|
|
||||||
```diff
|
|
||||||
to t-consume-food
|
|
||||||
set hunger hunger - metabolism
|
|
||||||
if hunger <= 0 [
|
|
||||||
t-die
|
|
||||||
]
|
]
|
||||||
+ if hunger >= reproduction-hunger [
|
hatch-ants 1 [
|
||||||
+ t-hatch
|
t-setup-ant
|
||||||
|
+ ifelse random 100 > mutation-chance [t-inherit parents]
|
||||||
|
+ [t-mutation
|
||||||
|
+ set mutazioni (mutazioni + 1)]
|
||||||
+ ]
|
+ ]
|
||||||
end
|
set ant-hatches ant-hatches + 1
|
||||||
|
]
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Se le formiche hanno abbastanza cibo per riprodursi, chiameranno la procedura `t-hatch` descritta in seguito.
|
#### Aggiunto: `t-mutation`
|
||||||
|
|
||||||
#### Aggiunto: `t-partners`
|
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
+to-report t-partners
|
+to t-mutation
|
||||||
+ report other turtles in-radius partner-radius with [hunger >= reproduction-hunger]
|
+ set speed (random(max-speed-with-mutation) + 1)
|
||||||
|
+ set metabolism (random(max-metabolism) + 1)
|
||||||
+end
|
+end
|
||||||
```
|
```
|
||||||
|
|
||||||
Nella scelta dei partner, le formiche considerano solo le altre formiche entro `partner-radius` patch di distanza aventi abbastanza `hunger` per riprodursi.
|
|
||||||
|
|
||||||
> Nota: La funzione `in-radius` rallenta significativamente il modello all'aumentare delle formiche presenti dall'interno di esso.
|
|
||||||
>
|
|
||||||
> È possibile realizzare una versione più efficiente utilizzando:
|
|
||||||
> ```
|
|
||||||
> to-report t-partners
|
|
||||||
> report other turtles-here with [hunger >= reproduction-hunger]
|
|
||||||
> end
|
|
||||||
> ```
|
|
||||||
>
|
|
||||||
> Ciò però sacrifica la possibilità di decidere il raggio a cui le formiche si possono riprodurre, limitandolo al valore "0" (ovvero, la patch stessa in cui si trova attualmente la formica).
|
|
||||||
|
|
||||||
#### Aggiunto: `t-hatch`
|
|
||||||
|
|
||||||
```diff
|
|
||||||
+to t-hatch
|
|
||||||
+ let partners t-partners
|
|
||||||
+ if any? partners [
|
|
||||||
+ let partner item 0 sort-on [hunger] partners
|
|
||||||
+ let parents (turtle-set self partner)
|
|
||||||
+ ask parents [
|
|
||||||
+ set hunger hunger - reproduction-cost
|
|
||||||
+ ]
|
|
||||||
+ hatch-ants 1 [
|
|
||||||
+ t-setup-ant
|
|
||||||
+ t-inherit parents
|
|
||||||
+ ]
|
|
||||||
+ set ant-hatches ant-hatches + 1
|
|
||||||
+ ]
|
|
||||||
+end
|
|
||||||
```
|
|
||||||
|
|
||||||
Se le formiche trovano almeno un partner con cui riprodursi, scelgono il partner con il valore di `hunger` più alto e creano una nuova formica, che eredita i valori di `speed` e `metabolism` dei genitori con `t-inherit` (descritta sotto).
|
|
||||||
|
|
||||||
### Aggiunto: `t-inherit`
|
|
||||||
|
|
||||||
```diff
|
|
||||||
+to t-inherit [parents]
|
|
||||||
+ let top-speed max [speed] of parents
|
|
||||||
+ let bottom-speed min [speed] of parents
|
|
||||||
+ set speed (bottom-speed + random (top-speed - bottom-speed + 1))
|
|
||||||
+
|
|
||||||
+ let top-metabolism max [metabolism] of parents
|
|
||||||
+ let bottom-metabolism min [metabolism] of parents
|
|
||||||
+ set metabolism (bottom-metabolism + random (top-metabolism - bottom-metabolism + 1))
|
|
||||||
+end
|
|
||||||
```
|
|
||||||
|
|
||||||
Le nuove formiche nate prendono come `speed` e `metabolism` un valore casuale tra i valori dei rispettivi parametri posseduti dai genitori.
|
|
||||||
|
|
||||||
## Feedback del sistema
|
|
||||||
|
|
||||||
In aggiunta ai feedback precedenti, in questo progetto abbiamo nuovi feedback:
|
|
||||||
|
|
||||||
- <span style="background-color: lightgreen; color: darkgreen;">**Positivo**: Le formiche con più `hunger` (praticamente la funzione *fitness* del modello), hanno più possibilità di riprodursi e passare i loro parametri ai figli.</span>
|
|
||||||
- <span style="background-color: lightcoral; color: darkred;">**Negativo**: Il `reproduction-cost` fa diminuire l'`hunger` dei genitori, rendendo più probabile la loro morte (e quindi sostituzione).</spaw>
|
|
||||||
|
|
||||||
## Dinamica del sistema
|
## Dinamica del sistema
|
||||||
|
|
||||||
Le formiche con i parametri migliori si riprodurranno più spesso, e passeranno i loro parametri ai loro figli.
|
La dinamica del sistema rimane pressochè invariata rispetto alla precedente versione, seppur rendendo inaccessibili le caratteristiche migliori se non mediante mutazione. La presenza di mutazione, inoltre, evita una stagnazione in una situazione sub-ottimale.
|
||||||
|
|
||||||
*Il sistema tende all’ottimo*: dopo un certo numero di ticks (~2100 con la configurazione predefinita), le uniche formiche restanti nel sistema saranno quelle con valori ideali (o prevalenti, in caso di convergenza prematura) per le variabili `speed` e `metabolism`; tutte le altre si saranno **estinte**. Il sistema tende quindi ad una condizione in cui tutte le formiche sono uguali, oppure estinte in caso di convergenza prematura tremendamente sfavorevole (ad esempio, velocità 1 e metabolismo 5).
|
|
||||||
|
|
||||||
## Branches
|
|
||||||
|
|
||||||
E' presente una variazione di questo modello, [`2-random-mutation`](https://github.com/Steffo99/turtle007/tree/2-random-mutation).
|
|
||||||
|
|
Loading…
Reference in a new issue