Einführung
Seit der Zeit, als es nichts Besseres als das ZX-Spectrum gab, erinnere ich mich an ein Spielzeug, in dem es notwendig war, ein Programm für den Roboter festzulegen, damit er den Feind beim autonomen Schwimmen besiegen konnte. In meiner Freizeit von Arbeit und Ruhe begann ich mit der Arbeit an einem Programm, mit dem Sie mithilfe von Einstellungen, die aus einer Textdatei im XML-Format gelesen wurden, Folgendes tun können:
- Erstellen Sie eine flache Welt, deren Größe durch Computerressourcen begrenzt ist. Anstelle einer Eiswand entlang der Kante erscheint sie von der gegenüberliegenden Kante, für Objekte innerhalb der Welt scheint sie durchgehend zu sein.
- Fügen Sie eine unbegrenzte Anzahl stationärer Geothermiequellen hinzu
- Beobachten Sie das Sonnenlicht in Form eines Flecks, der die Bewegung der Leuchte mit den sich ändernden Tages- und Jahreszeiten nachahmt.
- beschreiben Mineralien mit unterschiedlichem Grad an "Flüchtigkeit", dh Anfälligkeit für willkürliche Bewegungen auf der Oberfläche aufgrund von Diffusion
- beschreiben die chemischen Reaktionen zwischen Substanzen, die lebende Organismen unter dem Einfluss von Energie ausführen können
- und natürlich die "lebenden" Organismen beobachten.
Der Hauptunterschied zu bestehenden Spielen - im Modell gibt es kein vom Skript vordefiniertes Ende.
Modellwelt
Die Welt ist auf dem Bild dargestellt - ein großer Punkt ist Sonnenlicht (das sich im Laufe der Zeit bewegt), zwei kleinere Punkte sind Quellen einer anderen Art von Energie, die als Geothermie bezeichnet wird. Die beleuchtete Oberfläche ist überwiegend blau, da sie an jeder Stelle Wasser enthält. Punkte einer anderen Farbe entstehen und verschwinden, wenn die relative Konzentration des entsprechenden Elements aufgrund der Diffusion vorübergehend überdurchschnittlich geworden ist.

Um Speicherplatz zu sparen, werden die Materiemengen an jedem Punkt im Float-Typ gespeichert, der 7 signifikante Bits ergibt. Für das Modell wurden 100.000 Einheiten an jedem Punkt Wasser eingestellt, 20.000 Kohlendioxid, 10 Einheiten Wasserstoff (dh zehntausendmal weniger als Wasser) und null Sauerstoff und Methan. Ein Beispiel dafür, wie die Beschreibung der in das Modell eingeführten Substanzen aussieht:
<Element name="CarbonDioxide" color="yellow" volatility="0.12" visibility="true"> <rect left="0" top="0" right="max" bottom="max" amount="20000"/> </Element> <Element name="Oxygen" color="green" volatility="0.12" visibility="false"> <rect left="0" top="0" right="max" bottom="max" amount="0"/> </Element> ...
Als nächstes wurde die Reaktion der Bildung von Methan und Wasser aus Kohlendioxid und Wasserstoff in Gegenwart von Geothermie beschrieben.
<Reaction name="CO2+4H2=CH4+2H2O" geothermalEnergy="0.00001" solarEnergy="0"> <LeftReagent name="CarbonDioxide" amount="1"/> <LeftReagent name="Hydrogen" amount="4"/> <RightReagent name="Methane" amount="1"/> <RightReagent name="Water" amount="2"/> </Reaction>
Der erste LUCA-Protoorganismus mit dieser Reaktion wurde in eine der geothermischen Quellen gepflanzt.
<section name="Organisms"> <item name="LUCA" author="DEMI" x="300" y="30" reaction="CO2+4H2=CH4+2H2O"/> </section>
Ferner wurde ein Filter in das Programm aufgenommen, um Punkte zu zeigen, die Methan enthielten, und ein Methanfleck begann sich im Körper auszubreiten. Die erste Zelle kann Substanzen nur von dem Punkt aufnehmen, an dem sie sich selbst befindet, und die Übertragung von Substanzen erfolgt aufgrund von Diffusion. Wenn Sie die Menge der verfügbaren Substanzen reduzieren, verlangsamt sich die Ausbreitungsrate der Reaktionsprodukte stark.

Das Programm implementiert den Approximationsmodus, wenn der Punkt auf ein Quadrat ansteigt, das eine Liste der darin enthaltenen Substanzen und lebenden Organismen anzeigt. Wenn der Filter für mehrere Elemente eingeschaltet ist, wird die Farbe des Elements mit der höchsten relativen Konzentration an diesem Punkt verwendet, um den Punkt zu färben. Andernfalls wäre immer nur das Wasser sichtbar, das am besten sichtbar wäre.

Auswahl
Die Ausgangsmaterialien sind reichlich vorhanden, aber früher oder später werden sie alle erschöpft sein. Wenn eine Zelle erfolgreich Nahrung "verdaut", sammelt sie "Fett" (innere Energie) an und kann sich durch Teilung vermehren und während der Teilung mutieren. Oder vor Erschöpfung sterben. Ihr Verhalten ist ebenfalls vererbt und unterliegt Mutationen, bei denen sich ein unbedeutender Teil der Parameter des Zellautomaten ändert. Als nächstes werden kontrollierte Mutationen in das Modell eingeführt, wenn der Benutzer nur angibt, für welche Art von Mutation er erhalten möchte. Die erwartete Mutation wird mit einiger Wahrscheinlichkeit auftreten und die neue Art muss überleben können, um weiter mutieren zu können.
Wir haben also eine Art Protoorganismus-Methanogen, das Geothermie benötigt. Es siedelt sich in der Zone der Geothermie an, und die einzelnen Arten, die durch die Diffusion daraus hervorgehen, sterben. Tote Organismen nehmen noch eine Weile ihren Platz ein und verschwinden dann, wenn niemand sie gegessen hat. Der Verbrauch von Mineralien für das Wachstum von Organismen wird nicht realisiert, bzw. wenn sie zerfallen, verschwinden sie einfach. Nach dem Start der Simulation vermehren sich Organismen schnell und nehmen das gesamte Gebiet um die geothermische Quelle ein. Nach einiger Zeit erscheinen tote Zellen jenseits der Wirkung von Geothermie. Es ist interessant, dass man manchmal bemerkt, dass Organismen im Zentrum sterben - diejenigen, die nicht genug Mineralien hatten, aßen alles bei den Annäherungen. Die Abbildung zeigt lebende Organismen in Weiß und Totbraun, Blau zeigt Wasser, der rosa Kreis zeigt den Bereich, in dem Geothermie gefühlt wird (ihre Intensität nimmt mit der Entfernung vom Zentrum ab).

In der Welt sind mehrere geothermische Energiequellen beschrieben, in einer davon wurde der erste Protoorganismus gepflanzt. Als die Simulation lange genug dauerte (mehrere Stunden), stellte ich überrascht fest, dass auch die benachbarte Quelle besiedelt war - ein Körper hatte das Glück, lebend dorthin zu gelangen.
Egal wie groß die Welt ist, wenn nur eine Reaktion darin stattfindet, wird früher oder später alles Kohlendioxid (oder Wasserstoff) verbraucht, wonach alle Organismen verhungern und riesige Methanreserven zurücklassen.
Das Bild zeigt eine Darstellung eines lebenden Organismus und Methans (ein violetter Fleck, der um eine geothermische Quelle gewachsen ist) mit einer Hintergrundbeleuchtung der Sonne (die ersten Strahlen treffen früh am Morgen auf den Methanfleck, die Sonne ist rechts und Schwarz wird angezeigt, da nur Methan und Lebewesen angezeigt werden Organismen) und nach dem Einschalten der vollen Beleuchtung.

Angesichts einer sehr schlechten Verteilung der Bodenschätze steht die Bevölkerung kurz vor dem Überleben - nicht mehr als ein paar Dutzend Menschen. Die Abbildung zeigt eine Option, wenn anfangs nur zwei Reaktionen an jedem Wasserstoffpunkt stattfanden.

Die Datei Snapshoot2017.rar enthält eine ausführbare Datei, die für Windows kompiliert wurde und unterstützende Dateien dafür enthält. Es ist keine Installation erforderlich, er hinterlässt keine Spuren seiner Arbeit - um sie zu starten, entpacken Sie sie einfach und löschen Sie sie dann. So ändern Sie die Standardeinstellungen: Die Datei ThemeAero / template.demi kann in einem einfachen Texteditor geöffnet werden. Die Steuerelemente werden im entsprechenden Abschnitt des Projekt-Wikis beschrieben.
Weitere Pläne
Die Auswahl der Organismen anhand ihres Glücks und ihrer Variabilität wirkt. Jetzt müssen wir zur Evolution übergehen, während wir manuell sind. Fügen Sie der Konfigurationsdatei eine Mutation hinzu - einen Organismus mit einer Rückreaktion, der keine externe Energie benötigt, aber viel weniger effektiv ist. Wenn nun ein Protoorganismus geteilt wird, entsteht gelegentlich eine Tochterart, die nicht mehr an eine geothermische Energiequelle gebunden ist, sondern ein Produkt lebenswichtiger Aktivität der ersten Art benötigt. Das Ergebnis sollte ein Gleichgewicht zwischen den beiden Arten sein.
Als nächstes haben wir ungenutzte Sonnenenergie. Nur ein Organismus kann sich an einem Punkt im Raum befinden, wodurch sie nicht nur um Energie und Materie, sondern auch um den Raum konkurrieren.
Fazit
Derzeit besteht die Hauptschwierigkeit darin, ein Verhältnis der vorhandenen Objekte des Modells so zu wählen, dass es stabil und interessant bleibt. Dies ist das Verhältnis der Volumina an Mineralstoffen, Energien, Geschwindigkeiten, Stoffwechselreaktionen und dann der Aufgaben aus dem Bereich der "lebenden Natur" - wie die Kodierung von Zellautomaten sichergestellt werden kann. Genauer gesagt, wir brauchen nur Daten über die umgebende Welt in angepasster Form. "DNA" sollte kompakt sein, atomare zerstörungsfreie Mutationen aufweisen und sowohl die Struktur des Körpers (eine Reihe von Zellen - Nervensystem, Rezeptor, Muskel, Rüstung usw.) als auch den Algorithmus seiner Wirkung beschreiben.
In ferner Zukunft kann das Modell verbreitet werden - jeder Benutzer hat seinen eigenen Garten, in dem er seine eigenen Organismen züchtet, die im Bezirk verstreut sind und in die das Vieh seiner Nachbarn gelangt. Die Steilheit kann als Prävalenz einer Art gemessen werden.
Für mich ist dieses Projekt Unterhaltung und ich habe nicht vor, irgendwelche Vorteile daraus zu ziehen. Der Zweck des Artikels besteht darin, nach Personen zu suchen, die an diesem Bereich interessiert sind und ihre Best Practices und Ideen austauschen können.
Im Programm wird das Modell technisch in einem separaten Thread berechnet, seine Geschwindigkeit kann anhand der Geschwindigkeit der Modellzeit geschätzt werden und hängt dementsprechend nicht davon ab, in welchem Maßstab und mit welchen Details das Bild auf dem Bildschirm gezeichnet wird. Es gibt auch einen separaten Stream, der ein Bild aus der Welt des Modells rendert. Die Geschwindigkeit ist höher, je weniger Punkte des Modells angezeigt werden. Wenn beispielsweise eine kleine Anzahl von Punkten mit hoher Vergrößerung auf dem Bildschirm platziert wird, sind die Bilder pro Sekunde höher als wenn sich die ganze Welt auf dem breiten Monitor in maximaler Entfernung auf dem Bildschirm befindet. Die Anzeigegeschwindigkeit, die auf 60 fps begrenzt ist, wird in der oberen linken Ecke angezeigt, es macht keinen Sinn schneller.
PS: Das Modell ist Open Source unter der GNU GPL Version 3 vom 29. Juni 2007 und steht allen zum Download zur Verfügung , die experimentieren oder Gabeln erstellen möchten. Zusammengestellt mit der plattformübergreifenden ClanLib-Bibliothek auf MS VS2015. Die Binärdatei für OS Windows befindet sich im Archiv - sie wird überhaupt nicht installiert, sondern startet einfach nach dem Entpacken. Ich gehe davon aus, dass das Kompilieren für andere Plattformen keine Probleme verursachen wird. Template.xml kann in einem geeigneten Texteditor bearbeitet werden, einige Dokumentationen befinden sich auf dem Github im Wiki-Bereich.