Sigmawelt_(Testanleitung)
Soziobiologie
© 2016
- 2025
Basiswissen|
Test 1: keine Evolution|
Test 2: nur Vertauschung|
Test 3: nur Verdrängung|
Test 4: nur Mutation|
Test 5: schnelle Konvergenz|
Test 6: identitäre Evolution|
Test 7: kosmopolitische Evolution|
Fußnoten
Basiswissen
Sigmawelt simuliert eine Welt, in der Individuen in wechselnden Gruppen kombiniert gegeneinander konkurrieren. Hier steht eine Testanleitung für die Version 01 eine Simulation einer Sigmawelt in der Programmiersprache in PHP.
Test 1: keine Evolution
Im Quellcode des Programms können Parameter zur Steuerung der Evolution von Hand auf bestimmte Werte gesetzt werden. Stelle zum testen zunächst genau diese Werte ein:
$anzahlgruppen=3;
$gruppengroesse=3;
$mutationsrate=0.0; # von 0 bis 1: wie groß die Wahrscheinlichkeit für eine Mutation ist
$mutationsweite=0.0; # von 0 bis 1: nur positive reelle Zahlen
$generationen=4; # die Anzahl der Generationen, die durchlaufen werden
$shufflerate=0.0; # pro Individuum und pro Generationswechsel
$verdraengungsfaktor=0; # wie stark die besten die schlechtesten verdrängen
$optimumswanderung=0; # wie stark sich das Optimum pro Generation verändern kann, ab Version 02
Desweiteren kann man in der Funktion Bericht (function generationBericht) Variablen setzen, um bestimmte Werte während der Laufzeit anzueigen.
$gruppengroesse_anzeigen="ja";
$population_anzeigen="ja";
$standardabweichungen_anzeigen="ja"; # für jede einzelne Gruppe
$standardabweichung_anzeigen="ja"; # Durchschnitt aller Gruppen
$durchschnittliche_zielentfernung_anzeigen="ja"; # Abstand zur Standardabweichung 4
$optimum_anzeigen="ja"; die Zielgröße für die Gruppen
$durchschnittlicher_zielabstand_aktuelle_generation_anzeigen="ja"; # ab Version 02
$durchschnittlicher_zielabstand_gesamtevolution_anzeigen="ja"; # ab Version 02
Startet man dann das Programm, so sollte sich bei der Simulation von einer zur nächsten Generation keinerlei Änderung ergeben. Die Werte sollten über die eingestellen vier Generationen hinweg immer gleich bleiben.
- Test Version 01 vom 1. April 2024 ✔
- Test Version 02 vom 2. April 2024 ✔
Test 2: nur Vertauschung
Im Quellcode des Programms können Parameter zur Steuerung der Evolution von Hand auf bestimmte Werte gesetzt werden. Die Werte werden so eingestellt, dass sich die Individuen in jeder Generation in neuen Gruppen zusammenfinden ($shufflerate=1). Es gibt aber ansonsten keinerlei Mutation oder Selektion (Verdrängung). Stelle zum testen zunächst genau diese Werte ein:
$anzahlgruppen=3;
$gruppengroesse=3;
$mutationsrate=0.0; # von 0 bis 1: wie groß die Wahrscheinlichkeit für eine Mutation ist
$mutationsweite=0.0; # von 0 bis 1: nur positive reelle Zahlen
$generationen=4; # die Anzahl der Generationen, die durchlaufen werden
$shufflerate=1.0; # pro Individuum und pro Generationswechsel
$verdraengungsfaktor=0; # wie stark die besten die schlechtesten verdrängen
Desweiteren kann man in der Funktion Bericht (function generationBericht) Variablen setzen, um bestimmte Werte während der Laufzeit anzueigen.
$gruppengroesse_anzeigen="ja";
$population_anzeigen="ja";
$standardabweichungen_anzeigen="ja"; # für jede einzelne Gruppe
$standardabweichung_anzeigen="ja"; # Durchschnitt aller Gruppen
$durchschnittlicher_zielabstand_aktuelle_generation_anzeigen="ja"; # Abstand zum Optimum
$durchschnittlicher_zielabstand_gesamtevolution_anzeigen="ja"; # über alle Generationen
Für die angezeigten Größen sollten dann über die getesten 4 Generationen hinweg die folgenden Werte angezeigt werden:
$gruppengroesse: ist immer konstant über jede Generation
$population: gleiche Individuen aber unterschiedliche Reihenfolge
$standardabweichungen: ändert sich von Generation zu Generation
$standardabweichung: ändert sich von Generation zu Generation
$durchschnittliche_zielentfernung: ändert sich von Generation zu Generation
- Test Version 01 vom 1. April 2024 ✔
- Test Version 02 vom 2. April 2024 ✔
Test 3: nur Verdrängung
Im Quellcode des Programms können Parameter zur Steuerung der Evolution von Hand auf bestimmte Werte gesetzt werden. In allen Generationen bleiben die Individuen in denselben Gruppen. Dabei verdrängen die Individuen der besten Gruppe vollständig die Individuen der schlechtesten Gruppe. Stelle zum testen zunächst genau diese Werte ein:
$anzahlgruppen=3;
$gruppengroesse=3;
$mutationsrate=0.0; # von 0 bis 1: wie groß die Wahrscheinlichkeit für eine Mutation ist
$mutationsweite=0.0; # von 0 bis 1: nur positive, reelle Zahlen
$generationen=4; # die Anzahl der Generationen, die durchlaufen werden
$shufflerate=0.0; # pro Individuum und pro Generationswechsel
$verdraengungsfaktor=1; # wie stark die besten die schlechtesten verdrängen
Desweiteren kann man in der Funktion Bericht (function generationBericht) Variablen setzen, um bestimmte Werte während der Laufzeit anzueigen.
$gruppengroesse_anzeigen="ja";
$population_anzeigen="ja";
$standardabweichungen_anzeigen="ja"; # für jede einzelne Gruppe
$standardabweichung_anzeigen="ja"; # Durchschnitt aller Gruppen
$durchschnittlicher_zielabstand_aktuelle_generation_anzeigen="ja"; # Abstand zum Optimum
$durchschnittlicher_zielabstand_gesamtevolution_anzeigen="ja"; # über alle Generationen
Für die angezeigten Größen sollten dann über die getesten 4 Generationen hinweg die folgenden Werte angezeigt werden:
$gruppengroesse: ist immer konstant über jede Generation
$population: innerhalb der zweiten und dritten Generationen sollten alle Gruppe gleich sein.
$standardabweichungen: sollten ab der zweiten Generation konstant sein.
$standardabweichung: sollte ab der zweiten Generation konstant sein.
$durchschnittlicher_zielabstand_aktuelle_generation: sollte ab der zweiten Generation konstant bleiben.
$durchschnittlicher_zielabstand_gesamtevolution: sollte ab der zweiten Generation kleiner werden.
- Test Version 01 vom 1. April 2024 ✔
- Test Version 02 vom 2. April 2024 ✔
Test 4: nur Mutation
Im Quellcode des Programms können Parameter zur Steuerung der Evolution von Hand auf bestimmte Werte gesetzt werden. Nun gibt es von einer Generation zur nächsten Generation nur Mutation. Es gibt keine Vertauschung und keine Verdrängung. Stelle zum testen zunächst genau diese Werte ein:
$anzahlgruppen=3;
$gruppengroesse=3;
$mutationsrate=1.0; # von 0 bis 1: wie groß die Wahrscheinlichkeit für eine Mutation ist
$mutationsweite=0.2; # von 0 bis 1: nur positive, reelle Zahlen
$generationen=100000; # die Anzahl der Generationen, die durchlaufen werden
$shufflerate=0.0; # pro Individuum und pro Generationswechsel
$verdraengungsfaktor=0; # wie stark die besten die schlechtesten verdrängen
Desweiteren kann man in der Funktion Bericht (function generationBericht) Variablen setzen, um bestimmte Werte während der Laufzeit anzueigen.
$gruppengroesse_anzeigen="ja";
$population_anzeigen="ja";
$standardabweichungen_anzeigen="ja"; # für jede einzelne Gruppe
$standardabweichung_anzeigen="ja"; # Durchschnitt aller Gruppen
$durchschnittlicher_zielabstand_aktuelle_generation_anzeigen="ja"; # Abstand zum Optimum
$durchschnittlicher_zielabstand_gesamtevolution_anzeigen="ja"; # über alle Generationen
Für die angezeigten Größen sollten dann über die getesteten 100 tausend Generationen hinweg die folgenden Werte angezeigt werden:
$gruppengroesse: ist immer konstant über jede Generation
$population: innerhalb der zweiten und dritten Generationen sollten alle Gruppe gleich sein.
$standardabweichungen: sollten über die Generationen driften.
$standardabweichung: sollte über die Generationen driften.
$durchschnittlicher_zielabstand_aktuelle_generation: sollte stark schwanken, ohne Tendenz.
$durchschnittlicher_zielabstand_gesamtevolution: sollte schwanken, stabiler werdend.
- Test Version 01 vom 1. April 2024 ✔
- Test Version 02 vom 2. April 2024: ✔
Über 100 tausend Generationen hinweg schwankte der Zielabastand meist zwischen Werten von 0,1 bis 2,0. Es war keine Annäherung an den Zielabstand 0 erkennbar. Es war keine Konvergenz hin zu einem Grenzwert erkennbar.
Test 5: schnelle Konvergenz
Im Quellcode des Programms können Parameter zur Steuerung der Evolution von Hand auf bestimmte Werte gesetzt werden. Die folgenden Parameter sind so eingestellt, dass der Algorithmus spätestens 1000 Generationen einen Zielabstand von etwa nur 0,1 oder weniger erreicht hat. Alle Gruppen bestehen aus zwei Individuen. Die zwei Individuen einer Gruppe haben bei einem Zielabstand von unter 0,1 immer einen Abstand von etwa 8. Zwei Zahlen mit einem Abstand von 8 haben immer eine Standardabweichung von genau 4.
$anzahlgruppen=5;
$gruppengroesse=2;
$mutationsrate=1.0; # von 0 bis 1: wie groß die Wahrscheinlichkeit für eine Mutation ist
$mutationsweite=0.05; # nur positive, reelle Zahlen
$generationen=1000; # die Anzahl der Generationen, die durchlaufen werden
$shufflerate=0.0; # pro Individuum und pro Generationswechsel
$verdraengungsfaktor=1.0; # wie stark die besten die schlechtesten verdrängen
Desweiteren kann man in der Funktion Bericht (function generationBericht) Variablen setzen, um bestimmte Werte während der Laufzeit anzueigen.
$gruppengroesse_anzeigen="ja";
$population_anzeigen="ja";
$standardabweichungen_anzeigen="ja"; # für jede einzelne Gruppe
$standardabweichung_anzeigen="ja"; # Durchschnitt aller Gruppen
$durchschnittlicher_zielabstand_aktuelle_generation_anzeigen="ja"; # Abstand zum Optimum
$durchschnittlicher_zielabstand_gesamtevolution_anzeigen="ja"; # über alle Generationen
Für die 1000ste Generation sollte immer gelten:
$durchschnittlicher_zielabstand_aktuelle_generation: sollte 0,1 oder weniger sein.
Die Differenz zwischen zwei Individuen einer Gruppe sollte gerundet immer 8 ergeben.
- Test Version 02 vom 2. April 2024 ✔
Test 6: identitäre Evolution
Im Quellcode des Programms können Parameter zur Steuerung der Evolution von Hand auf bestimmte Werte gesetzt werden. Nun gibt es ein kleines Maß Mutation und vor allem Verdrängung, aber keine Vertauschung: Individuen wandern nicht zwischen Gruppen. Dies simuliert eine idealisierte Gruppenselektion[1].
$anzahlgruppen=3;
$gruppengroesse=3;
$mutationsrate=1.0; # von 0 bis 1: wie groß die Wahrscheinlichkeit für eine Mutation ist
$mutationsweite=0.05; # nur positive, reelle Zahlen
$generationen=100000; # die Anzahl der Generationen, die durchlaufen werden
$shufflerate=0.0; # pro Individuum und pro Generationswechsel
$verdraengungsfaktor=1.0; # wie stark die besten die schlechtesten verdrängen
Desweiteren kann man in der Funktion Bericht (function generationBericht) Variablen setzen, um bestimmte Werte während der Laufzeit anzueigen.
$gruppengroesse_anzeigen="ja";
$population_anzeigen="ja";
$standardabweichungen_anzeigen="ja"; # für jede einzelne Gruppe
$standardabweichung_anzeigen="ja"; # Durchschnitt aller Gruppen
$durchschnittlicher_zielabstand_aktuelle_generation_anzeigen="ja"; # Abstand zum Optimum
$durchschnittlicher_zielabstand_gesamtevolution_anzeigen="ja"; # über alle Generationen
Für die angezeigten Größen sollten dann über die getesten 4 Generationen hinweg die folgenden Werte angezeigt werden:
$gruppengroesse: ist immer konstant über jede Generation
$population: innerhalb der zweiten und dritten Generationen sollten alle Gruppe gleich sein.
$standardabweichungen: sollten sich fast monoton der Zahl 4 nähern.
$standardabweichung: sollte sich fast monoton dem Optimum nähern.
$durchschnittliche_zielentfernung: sollte sich fast monoton der 0 nähern.
Ab der 20ten Generationen wurde bei mehreren Testdurchgängen meist schon eine Zielentfernung von 0,1 oder weniger erreicht. Ideal wäre die Zielentfernung 0,0. Wegen der aktiven Mutation kann diese Zielentfernung vielleicht zufälig getroffen, aber nicht exakt beibehalten werden. Ab der 20ten Generation wandert die Zielentfernung aber nur selten und dann auch nur kurzfristig aus de Bereich zwischen 0 und der eingestellten Mutationsweite heraus.
- Test Version 01 vom 1. April 2024 ✔
Test 7: kosmopolitische Evolution
Im Quellcode des Programms können Parameter zur Steuerung der Evolution von Hand auf bestimmte Werte gesetzt werden. Nun gibt es ein kleines Maß Mutation, Verdrängung sowie auch Vertauschung: Individuen wandern nun frei und häufig zwischen Gruppen. Dies simuliert Gesellschaftsform, in der die Individuen von Gruppen sich ständig austauschen.
$anzahlgruppen=3;
$gruppengroesse=3;
$mutationsrate=1.0; # von 0 bis 1: wie groß die Wahrscheinlichkeit für eine Mutation ist
$mutationsweite=0.05; # nur positive, reelle Zahlen
$generationen=100000; # die Anzahl der Generationen, die durchlaufen werden
$shufflerate=1.0; # pro Individuum und pro Generationswechsel
$verdraengungsfaktor=1; # wie stark die besten die schlechtesten verdrängen
Desweiteren kann man in der Funktion Bericht (function generationBericht) Variablen setzen, um bestimmte Werte während der Laufzeit anzueigen.
$gruppengroesse_anzeigen="ja";
$population_anzeigen="ja";
$standardabweichungen_anzeigen="ja"; # für jede einzelne Gruppe
$standardabweichung_anzeigen="ja"; # Durchschnitt aller Gruppen
$durchschnittlicher_zielabstand_aktuelle_generation_anzeigen="ja"; # Abstand zum Optimum
$durchschnittlicher_zielabstand_gesamtevolution_anzeigen="ja"; # über alle Generationen
Für die angezeigten Größen sollten dann über die getesten 4 Generationen hinweg die folgenden Werte angezeigt werden:
$gruppengroesse: ist immer konstant über jede Generation
$population: innerhalb der zweiten und dritten Generationen sollten alle Gruppe gleich sein.
$standardabweichungen: sollten sich mit starken Schwankungen sehr langsam der 4 nähern.
$standardabweichung: sollte sich mit starken Schwankungen sehr langsam der 4 nähern.
$durchschnittliche_zielentfernung: sollte sich mit starken Schwankungen der 0 nähern.
Anders als in im Test 5 (identitäre Evolution), lag hier die Zielentfernung ab der 20ten Generation oft noch deutlich über dem Wert 1. So lag bei einem Testlauf noch in der Generation 99770 die Zielentfernung knapp über der Zahl 3.
- Test Version 01 vom 1. April 2024 ✔
Fußnoten
- [1] Von Gruppenselektion spricht man, wenn der evolutionäre Erfolg von Individuen über den Erfolg von Gruppen von Individuen bestimmt wird. Siehe auch Gruppenselektion ↗