Kosmos. 7 Jahre

Hallo Habr!

2012 schrieb ich einen Beitrag über mein Hobby - Cosmos: Modellierung der Evolution mehrzelliger Organismen


Seitdem sind fast 7 Jahre vergangen, in denen ich an der Entwicklung dieses Projekts gearbeitet habe. Heute möchte ich Ihnen ein wenig darüber erzählen, was ich gelernt habe und wie ich das Projekt weiterentwickeln möchte.

Motivation "Big Evolution"


Cosmos 2012 ist ein großartiges Beispiel für das Gefühl des "Immersions-Effekts" beim Betrachten, der der Ausgangspunkt für die Entwicklung der Idee war, eine "Simulation des Lebens auf der GPU" zu erstellen.

Dort fand jedoch keine wirkliche Entwicklung statt: Der Prozess sollte sich kontinuierlich entwickeln und wenige Minuten nach dem Start nicht zu einem endgültigen Zustand gelangen.

Es stellte sich heraus, dass es am schwierigsten ist, eine möglichst lange Evolution von Arten zu erreichen, die "nicht an die Grenze der Entwicklung konvergiert" und eine echte Vielfalt von Formen erzeugt. Dann wird es möglich sein, diese Formulare zu untersuchen, und dann besteht ein echtes Interesse daran, die Simulation für Tage, Wochen, Monate auszuführen - und auf das Erscheinen immer komplexer werdender und entwickelter Formulare für das Studium zu warten.

Physik


Sie können sich jede Physik vorstellen: Mit Hilfe der GPU können Sie eine Vielzahl von Modellen mit der Anzahl der Elemente erstellen, die für die Evolutionsprozesse in Echtzeit ausreichen. Jede Kombination der Prinzipien der Interaktion bestimmter "Elemente", "Atome", "Zellen" - führt zu einem sich entwickelnden Konstruktor von Formen, in denen sich eine komplex organisierte Simulation buchstäblich aus dem Nichts selbst zusammensetzen kann.

Am Anfang wollte ich vielzellige Materie schaffen, die es dem Kosmos ermöglicht, sich direkt zu berühren, „ohne durchzufliegen“, wobei eine Struktur von Kugeln in einem Mosaik miteinander verbunden ist, wie es das Zellgewebe realer Organismen tut.

Es war notwendig, dass die Organismen realer wurden, und die physikalische Bedeutung zeigte sich in der unterschiedlichen Struktur ihres Körpers. Sie können einen Körper mit Haut, Gliedmaßen, Muskeln, Beinen und inneren Organen mit solchen Zellen "zeichnen" - und solche Körper werden buchstäblich innerhalb der Simulation existieren und sich entwickeln.

Ein Beispiel für das CUDA SDK war die Realisierung von Kollisionen runder Partikel auf der Grundlage eines räumlichen Gitters, sodass Partikel nur mit nahegelegenen interagieren können.

Ich fand heraus, wie das 3D-Beispiel funktioniert - und schrieb meine Simulation für 2D.
Auf der damaligen GTX 580 konnten damit 256.000 Partikel in Echtzeit berechnet werden.


CUDA + JavaScript


Ein weiteres Problem war, dass es für mich praktisch war, ein kosmisches Konzept in JavaScript zu entwickeln, während wirklich umfangreiche Simulationen nur auf der GPU möglich wurden.

Ungefähr 100-mal bequemer und schneller unter JS.
Und ungefähr 1000-mal schneller auf einer GPU.

Die Lösung bestand darin, die Physik der Partikelinteraktion auf CUDA zu schreiben und die Möglichkeit zu geben, Partikel zu erstellen und ihre Parameter über JavaScript zu steuern. Dabei wurde die Google V8-Engine integriert, die damals in der Simulation als Skriptsprache erschien.

Ich habe die Möglichkeit hinzugefügt, die Partikel mit denselben „Gummibändern“ zu verbinden, wie sie in den ersten Räumen verbunden wurden. Infolgedessen könnte man den Code in das JS-Steuerungsskript schreiben:

var ball1 = new Ball(); var ball2 = new Ball(); ball1.xy = [0,0]; ball1.rgb = [1,1,1]; ball2.xy = [1,0]; ball2.rgb = [1,1,1]; var link = new Link(ball1, ball2); 

und zwei weiße Kugeln erschienen auf dem Bildschirm, die durch ein „Gummiband“ miteinander verbunden waren.

Bereits auf diesem Entwicklungsstand des Motors ergaben sich interessante Möglichkeiten für Experimente mit virtueller Physik:


Gebäude


Durch Hinzufügen mehrerer Eigenschaften zu den Kugeln, wie z. B. Bindungsstärke, Masse, Größe, Elastizität, erhielt ich einen JavaScript-gesteuerten Konstruktor, mit dem ich die Strukturen von Tausenden von Kreaturen zeichnen konnte, die aus Zellen mit unterschiedlichen physikalischen Eigenschaften bestehen. All dies wurde von der GPU in Echtzeit berechnet.

Als Gleichgewicht zwischen Preis und Qualität wurde eine weiche, stromlinienförmige Form eines Oktopus gewählt.

Jedes Element des Körpers (Zentrum, Gliedmaßen) wird mit Hilfe der minimal erforderlichen Anzahl von Kugeln realisiert, während das Volumen und die Masse auf natürliche Weise verteilt werden - wobei sich die Gliedmaßen zur Mitte hin verdicken -, wird die Materie dauerhafter und massiver:


Motilität


Der nächste Schritt bestand darin, die Beweglichkeit kosmischer Körper zu schaffen. Muskeln waren leicht zu machen - es genügte, um die Bindungen zwischen den Bällen entlang der Pfoten zu festigen, und dies verursachte den Effekt der Muskelkontraktion.

Aktive Neuronen verbinden sich mit diesen Muskeln, und wenn ein Signal vorliegt, zieht sich der Muskel zusammen. Zwei Muskeln pro Glied - ein vollständig kontrollierbarer zweidimensionaler Tintenfisch.

Mit Hilfe eines kleinen zufällig mutierenden wiederkehrenden neuronalen Netzwerks (in der Größenordnung von 10 bis 100 Neuronen) und einer einfachen Auswahl der besten Individuen nach dem Kriterium „Wer könnte sich weiter bewegen?“ Können Sie die notwendige Bewegungskinematik für jede einzelne Körperform aufrufen:


Genesis


Eine weitere aktiv erforschte Körperform sind die „Hexoide“. Die Körper solcher Kreaturen bestehen aus Zellen, die aus Kugeln gleicher Größe auf der Grundlage eines nicht strengen Gitters nahe dem Sechseck beliebige Formen bilden.

Diese Form eignet sich gut, um die gleichzeitige Entwicklung von Körperform und Motilität „in Verbindung“ zu untersuchen und gleichzeitig das Potenzial von Experimenten mit Zellen verschiedener Typen zu maximieren, die sich in Stärke und Funktion unterscheiden. Zum Beispiel können kosmische Körper aus Kombinationen fester Zellen bestehen, die den Rahmen der Kreatur bilden, und den Muskeln, die die Struktur in Bewegung setzen.

In Zukunft können, wenn man in einen komplexen Lebensraum eintaucht, auf der Grundlage dieser Prinzipien deutlich unterschiedliche Formen von Kreaturen entwickelt werden - von denen einige „gepanzerter“ sind, andere für schnelle Bewegungen ausgelegt sind, andere für einen effektiven Angriff usw.


Jagen und Züchten


Wenn dem Kosmos beigebracht wird, sich gegenseitig zu jagen, kann die Menge an Materie in der Simulation konstant bleiben, während Generationen von Kreaturen aufeinander folgen.

Dann können sich stabile Nahrungsketten bilden und ein großer Prozess der Koevolution verschiedener Arten von Kreaturen beginnt.

Für das erste Experiment habe ich 4 Zelltypen verwendet:

  • Verdauungszelle (farbig) - bei Berührung eines anderen kosmischen Körpers ein Stück abbeißen
  • Rüstung (leicht) - ein stärkerer mechanischer Käfig, der nicht abgebissen werden kann
  • Bindegewebe (grau) - weiches elastisches Gewebe
  • Motorzelle (dunkel) - Ermöglicht es dem Raum, sich schneller zu bewegen

Sobald der Kosmos eine ausreichende Anzahl von Zellen frisst, "teilt" er sich und bildet in der Nähe seine leicht mutierte Kopie.

Ein solcher Prozess erzeugt bereits Formen mit einer differenzierten Struktur und einem differenzierten Verhalten:



Lebensraum


Leerer kalter Raum ist nicht der beste Ort zum Leben.

Um ein virtuelles Biom zu erstellen, können Sie grundlegende Baumaterialien verwenden - Partikel aus Boden, Wasser, Licht und Pflanzenzellen, die wachsen können.

Bodenpartikel haften zusammen und bilden eine feste Plattform. Der Boden kann nass werden, wenn Wasserpartikel darauf gelangen.

Auf feuchtem Boden können Pflanzen bei gutem Licht wachsen. Pflanzenmasse ist die Hauptquelle für Bio-Lebensmittel für Tierformen.

Verfallende Tierkörper geben anorganische Substanzen an das Biomökosystem zurück.





PS


Dies ist ein Übersichtsartikel, dessen Dimensionen keine kohärente Offenlegung aller Bereiche ermöglichen, in denen sich das Projekt entwickelt.

Jetzt arbeite ich an einem interaktiven Designer mit vollem Funktionsumfang, der Ihnen die Möglichkeit bietet, im Sandbox-Modus „Weltraumspiele“ zu spielen, neue Arten von Kreaturen zu entwerfen, Ökosysteme „im Gott-Modus“ zu zeichnen und die Evolution in Echtzeit zu beobachten.

Was den technischen Teil betrifft, so steht der Fortschritt nicht still: Seit 2012 hat sich das Entwicklungsparadigma viermal geändert und schrittweise vom in diesem Artikel beschriebenen CUDA + JS-Konzept zu GPU-ORM-Modellen übergegangen, die vollständig auf der GPU-Seite arbeiten und über eine eigene Objektsprache für gespeicherte Prozeduren verfügen.

Das ist alles, danke für Ihre Aufmerksamkeit!

Verfolgen Sie die Entwicklung des Projekts und unterstützen Sie die Entwicklung hier:

https://www.patreon.com/samadhi_toolbox

Es gibt immer noch wenige Blog-Beiträge, aber wenn es Abonnenten gibt, verspreche ich, sie zu veröffentlichen. Im Laufe von 7 Jahren habe ich skrupellos viele Inhalte gesammelt

Abschließend - ein kleiner Einblick:

Source: https://habr.com/ru/post/de458612/


All Articles