1
Fork 0
mirror of https://github.com/Steffo99/turtle007.git synced 2024-11-22 04:54:19 +00:00
Una serie di progetti NetLogo realizzati per l'esame di Apprendimento ed evoluzione in sistemi artificiali
Find a file
2020-06-08 18:04:22 +02:00
img Aggiungi le immagini (che non avevo committato) 2020-05-18 20:01:01 +02:00
Progetto.nlogo Integra README nel file NetLogo 2020-06-08 17:20:01 +02:00
README.md Update README.md 2020-06-08 18:04:22 +02:00

2-evoluzione

Questo progetto estende il progetto 2-metabolismo. In questa versione vengono aggiunti i parametri riproduttivi e i meccanismi di scelta del partner, che portano ad unevoluzione del formicaio nel suo complesso.

Ambiente

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;
  • reproduction-cost, la quantità di hunger che sarà sottratta alle formiche dopo essersi riprodotte;
  • partner-radius, la distanza massima a cui una formica può scegliere il suo partner.

Comportamento delle formiche

Il comportamento delle formiche è stato cambiato nei seguenti modi:

Modificato: t-die

 to t-die
   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 [
+    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

+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:

  • Positivo: Le formiche con più hunger (praticamente la funzione fitness del modello), hanno più possibilità di riprodursi e passare i loro parametri ai figli.
  • Negativo: Il reproduction-cost fa diminuire l'hunger dei genitori, rendendo più probabile la loro morte (e quindi sostituzione).

Dinamica del sistema

Le formiche con i parametri migliori si riprodurranno più spesso, e passeranno i loro parametri ai loro figli.

Il sistema tende allottimo: 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 metabolismo 5).