Partikelsystembiologie
von Christoph
Ich habe kürzlich, also vor zwei Jahren, mal wieder das Spiel des Lebens implementiert. Viel zu spielen gibt es dabei allerdings nicht. Es macht mehr Spaß es zu bauen, als dann ewig zuzugucken (auch wenn sich im Verlauf Muster ergeben, die einem wie Gleiter erscheinen können). Vielleicht wäre es interessanter, wenn sich die "Lebewesen" bewegen würden. Gesagt, getan!
Wenn sich kleine Dinge bewegen und dabei einen Lebenszyklus durchlaufen, haben wir es technisch mit einem Partikelsystem zu tun. Das schreit nach Hardwarebeschleunigung, sowohl in der Simulation/Physik als auch in der Grafik/Rendering. Also alles, was ich schonmal gemacht habe. Der Anspruch kommt davon, sich neue Regeln auszudenken und zu sehen, was passiert. Haben kleine Änderungen große Auswirkungen? Ist das System stabil? Ab wann? Für wie lange?
Hier die Regeln, die ich mir für den Anfang überlegt habe:
- Simuliert werden Kugeln verschiedener Farbe mit Bewegungsimpulsen, die übertragen aber nicht verloren gehen können (keine Reibung).
- Berühren sich zwei verschiedenfarbige Kugeln, entsteht eine neue Kugel (Geburt) mit zufälliger Farbe eines "Elternteils". Berühren sich zwei gleichfarbige Kugeln, geschieht nichts.
- Nach einer Kollision gibt es eine Abklingzeit während der weitere Kollisionen keine Nachfahren erzeugen (Kugeln werden heller dargestellt).
- Kollidiert eine Kugel in kurzer Zeit zu häufig (Überbevölkerung, Impulssammler), wird sie vom Spielfeld entfernt (Tod).
Das erzeugte bei mir immer stabile Systeme. Ich habe nicht genügend Versuche gemacht, um eine Population aussterben zu sehen. Es gab auch immer einen quasi-stabilen Endzustand ab dem sich bevölkerungsmäßig nichts mehr getan hat. Offensichtlich kann ein begrenzter Raum nur begrenzt viel Energie aufnehmen, McFly. Ab dann regelt sich alles selbst.
Das Hantieren mit den Regeln ist hier das eigentliche Spiel. Man könnte es in Lua-Scripting verpacken und damit Leuten das Programmieren schmackhaft machen. Die schwere Technik und Simulation bliebe im C++-Kern. Hier bin ich mir aber nicht sicher, wieviel Macht man letztlich ins Scripting übergeben müsste. Wenn das Marshalling zu umfangreich wird, frisst es einerseits Performance und andererseits auch Einfachheit und Zugänglichkeit. Deswegen lasse ich das mal weg und hier gibt es nur etwas zu schauen: lifesim-win64.zip [1,3 MByte Download].