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 17:20:01 +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 Migliora README.md 2020-06-08 17:17:24 +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 per le variabili speed e metabolism; tutte le altre si saranno estinte.