Boids - Emergentes Schwarmverhalten autonomer Agenten

Download boids.zip

Dieses PythonProgramm demonstriert das Entstehen von Schwärmen durch die Selbstorganisation ihrer Agenten, hier Boids genannt. In der Natur finden wir solche Phänomene z.B. bei Vögeln und Fischen. Obwohl im vorliegenden Programm nur zwei Dimensionen betrachtet werden und das Verhalten der Agenten vergleichsweise simpel ist, entsteht für uns der Eindruck eines lebendigen Systems. In einer grundsätzlichen Art simuliert das Programm also natürliche Prozesse.
Beim Start des Programms werden 100 Boids auf zufällige Positionen gesetzt und mit zufälligen Geschwindigkeiten ausgestattet. Sofort setzt eine Schwarmbildung ein: Mehrere Boids bewegen sich nahe beieinander in dieselbe Richtung. Doch dieser Prozess ist instabil: Der Schwarm teilt sich auf, ein Flügel reißt ab, Bruchtücke vereinen sich wieder sanft oder stoßen regelrecht ineinander. Ausreißer reihen sich wieder ein. Man beobachtet ein chaotisches Verhalten. Meine Vermutung ist, dass auch nach Millionen von Jahren Laufzeit sich kein Bild exakt wiederholen würde.

Die Boids bewegen sich in einem endlosen Raum (Torus): Verlassen sie das Bild nach oben hin, kommen sie unten wieder hinein. Entsprechendes gilt für die drei anderen Ränder.

Boids sind ein Spezialfall sogenannter Autonomer Agenten. Für diese gilt:

  • Autonome Agenten nehmen einen Teil ihrer Umwelt wahr.
  • Aus diesen Wahrnehmungen berechnen sie Aktionen, z.B. bestimmte Bewegungen.
  • Autonome Agenten haben keinen Anführer.

Drei Regeln oder „innere Befehle” bestimmen das Verhalten der Boids:

  • Align – (Ausrichtung): Orientiere dich an der Flugrichtung deiner Nachbarn!
  • Cohere – (Zusammenhalt): Bleibe bei deiner Gruppe bzw. schließe dich einer an!
  • Separate – (Distanzierung): Komme deinen Nachbarn nicht zu nahe!

Bedienung des Programms
Das Programm reagiert auf folgende Eingaben:

Tastatur

  • Return: Startet die Simulation mit anderen zufälligen Startwerten neu
  • Leertaste: Pausiert die Simulation bzw. lässt sie weiter laufen
  • Taste r (restart): Neustart, auch die Einstellungen der Schieberegler werden zurückgesetzt.
  • Taste s (step): Führt während der Pause einen Simulationsschritt durch
  • Taste w (wall): Die Welt der Boids wird mit einer Mauer eingefasst, welche sie abstößt. Durch nochmaliges Drücken wird die Mauer wieder entfernt.
  • Taste q (quit): Beendet das Programm

Maus
Drei Schieberegler bestimmen die Stärke der oben genannten Befehle in einem Bereich von 0 –99.

Experimente

  1. Stelle alle Regler auf null: Die Boids laufen geradeaus, ohne voneinander Notiz zu nehmen.
  2. Schiebe nur den alignRegler nach rechts: Nach einiger Zeit bewegen sich alle Boids in dieselbe Richtung, ohne dass eine besondere Schwarmbildung zu erkennen wäre.
  3. Schiebe nur den cohereRegler nach rechts: Die Boids ballen sich, finden aber nur zögerlich eine gemeinsame Richtung.
  4. Schiebe nur den separateRegler nach rechts: Die Boids gehen sich aus dem Weg, haben ansonsten auch kein Interesse aneinander.
  5. Eine besondere Dynamik kann sich bei schwachen Ausrichtungs- und Zusammenhaltswerten ausbilden. Formationen durchdringen und verstärken bzw. zerreißen sich. (align = 10, cohere = 10, separate = 50)
  6. Mit align = 0, cohere = 99, separate = 99 stellt sich ein „Feuerwerk” ein.
  7. Wiederhole die Experimente oben mit eingeschalteter Mauer. Beachte, wie deren Abstoßung die Boids zueinander führt.

Implementierung

Von den drei Dateien boid.pyslider.py und flocking.py muss das letztere gestartet werden.
Das Programm habe ich unter Windows 10 mit Thonny in der Version 3.2.7 entwickelt. Somit kam Python in der Version 3.7.7 zum Einsatz. Pygame zeigte die Version 1.9.6 an.

Die Torus-Geometrie gilt zwar für den Ort der Boids, jedoch können sie nicht über den Rand des Rechtecks hinausschauen. Das kann man als Schwäche der Implementierung bezeichnen, doch kommt dadurch eine belebende Unruhe ins Spiel: Kommt ein Boid an den Rand, verliert er alle seine vorauseilenden Nachbarn kurzzeitig aus den Augen.

Quellen

Emergenz
Boids geben ein gutes Beispiel für das Konzept der Emergenz: Die Dynamik des Schwarmverhaltens ist in der „Natur” jedes einzelnen Agenten angelegt, doch kommt diese erst zum Vorschein, falls viele Boids aufeinandertreffen. Analysiert man einen einzelnen Boid, erkennt man keine Tendenz zu dessen Fähigkeiten im Kollektiv. Das Schwärmen ist demnach als emergentes Phänomen zu betrachten.

Transfer ins Soziale
Man überlege sich, ob und wie man die beobachtete Dynamik auf Menschen übertragen kann.

Folgende Gedanken fallen mir dazu ein: Gibt es Menschen, die ebenso wie die Boids, ihr Leben weitgehend nach den drei Regeln ausrichten? Boids haben keinen Anführer. Sie orientieren sich aneinander ohne Absprache. Keiner hat einen Plan, wohin genau es gehen sollte. So ergeben sich entweder (schwankende!) Richtungen, in die alle marschieren oder aber es bilden sich separate Gruppierungen. Begegnen sich zwei von ihnen, kann es vorkommen, dass sie verschmelzen oder es zerreißt sie: Die Mitglieder schließen sich dann einer der Splittergruppen an oder gehen eigene Wege.

Bemerkenswert finde ich jedenfalls, dass die Beobachtung der Boids in mir Assoziationen mit Menschen auslöst. Vermutlich geht das vielen anderen auch so. Es zeigt, dass unser Gehirn laufend damit beschäftigt ist, in der Welt nach Bedeutungen zu suchen. Auch dann, wenn nur ein paar weiße Dreiecke über den Bildschirm tanzen.

Erweiterungen

Man könnte das Programm nun dahin gehend erweitern, dass man Agenten (Anführer) programmiert, welche sich gerade nicht an den Anderen orientieren, sondern versuchen, möglichst viele Anhänger um sich zu scharen und dann gemeinsam eine Richtung einzuschlagen. Gibt es mehrere von diesen, wird sich Konkurrenz ausbilden, bei der jeder versucht, dem anderen Lager Mitglieder abspenstig zu machen.

Auch das Gegenteil ist denkbar. Wie reagiert die Masse auf einen gefährlichen Boid? Dazu müsste zusätzlich ein Fluchtverhalten programmiert werden, welches bei Annäherung an die Gefahr eine Abstoßung hervorruft.

Erzeuge zwei Arten von Boids, die sich wie folgt unterscheiden:

  • Die eine Hälfte ist rot, die andere grün.
  • Nur gleichfarbige Boids ziehen sich an bzw. alignen sich. (die Distanzierung ist für alle gleich)

Unter diesen Voraussetzungen sollte sich eine besondere Dynamik einstellen!

Viel Freude beim Experimentieren, Philosophieren und Programmieren mit Boids!