Partikel-Lebenssimulation
- Ein einfaches Programm, das primitives künstliches Leben simuliert, indem es einfache Regeln für Anziehung und Abstoßung zwischen Partikeln wie Atomen verwendet.
- Ohne die GUI-Elemente umfasst der Code weniger als eine Seite.
- Video-Tutorial und Anleitung sind unten verfügbar.
Mehr erfahren (YouTube-Video-Tutorial)
- Link zum YouTube-Video-Tutorial vorhanden.
Online-Demo (JavaScript-Version)
- Links zu 2D- und 3D-Live-Demos vorhanden.
Oberfläche (C++-Version)
Beispielergebnisse
Einige interessante Muster, die reproduziert werden können
- Es ist nicht nötig, die Parameter exakt abzugleichen, um diese Muster zu reproduzieren.
- Der beste Weg, interessante Muster zu erhalten, ist zunächst eine Erkundung mit zufälligen Parametern zu versuchen.
- Wenn ein interessantes Muster gefunden wird, kann schrittweise Feintuning versucht werden.
- Um nicht in lokalen Maxima stecken zu bleiben, kann man gelegentlich große Parametersprünge machen.
Verwendung
- Dieses Repository herunterladen und entpacken, in den Ordner /particle_life/bin/ wechseln und dann auf particle_life.exe klicken.
Code
- Der Quellcode ist in C++, JavaScript und Python verfügbar.
- Link zum YouTube-Video-Tutorial vorhanden.
- Wenn du zum C++-Programm beitragen möchtest, befindet sich der Kernalgorithmus in den ersten 100 Zeilen von "/particle_life/src/ofApp.cpp".
- Der Rest sind GUI-Komponenten und Rendering-Steuerungen, die von der openFrameworks-Bibliothek bereitgestellt werden.
- Um loszulegen, dieses Repository und die openFrameworks-Bibliothek herunterladen und dann den projectGenerator von openFrameworks verwenden, um den Ordner /particle_life/ in ein Projekt zu importieren.
- Alternativ ein neues openFrameworks-Projekt erstellen, ofxGui hinzufügen und dann die erzeugten Projektdateien durch den hier bereitgestellten Ordner /src/ ersetzen.
- Jetzt kann der C++-Code kompiliert werden.
Weitere Ports
- Liste portierter Versionen in verschiedenen Sprachen wie Godot, Rust, Go-1, Go-2, Go-3, Python, Lua, QB64-PE, WebGL, Java, C# Winforms, FreeBasic und weiteren vorhanden.
JavaScript-Codebeispiel
- Es gibt ein JavaScript-Codebeispiel sowie die optimierte Version in der Datei particle_life.html.
Verwandte Themen
- Erläuterungen zu Partikel-Lebenssimulation, Ursuppe – Evolution, Conways Spiel des Lebens, zellulären Automaten, selbstorganisierenden Mustern und mehr.
- Dieses Projekt wurde von Jeffery Ventrellas Clusters inspiriert und konnte durch den Verzicht auf Kollisionsdetektion Tausende von Partikeln in Echtzeit simulieren.
- Durch das Hinzufügen von GUI-Steuerelementen, mit denen sich Parameter in Echtzeit leicht feinjustieren und erkunden lassen, entstehen Muster, die man in einem so einfachen Beziehungsmodell noch nie gesehen hat.
- Dieser Code begann als Lehrmaterial und richtet sich an Nicht-Programmierer und die breite Öffentlichkeit, um zu zeigen, dass Komplexität aus Einfachheit entstehen kann.
To-do-Liste
- Eine Funktion zum Speichern und Laden von Parametern hinzufügen, damit Menschen interessante Modelle leicht teilen können.
- Eine Funktion hinzufügen, mit der mehr Partikeltypen ergänzt werden können (derzeit auf vier Partikeltypen festgelegt).
- Der derzeit größte Flaschenhals ist die verschachtelte
for-Schleife zur Berechnung der paarweisen Distanzen zwischen allen Partikeln; die Rechenkomplexität ist quadratisch.
- Als Alternative zu Punkt 3 ist die Berechnung paarweiser Distanzen ausreichend parallelisierbar, um auf der GPU ausgeführt zu werden.
- Eine Funktion zur Anpassung der Bildschirmgröße hinzufügen und die Grenzprüfung verbessern (Partikel mit viel schneller Bewegung können den Bildschirmrand verlassen).
- Eine intuitivere UI hinzufügen, die eine feinere Steuerung der Parameter ermöglicht.
- Einen Zufalls-Button hinzufügen oder besser noch einfache Meta-Regeln einführen, die die Anfangsregeln fortlaufend verändern, sodass Muster nicht in lokalen Maxima verharren, sondern sich weiterentwickeln.
- Ein besserer Ansatz wäre die Verwendung evolutionärer Algorithmen zur Auswahl und Optimierung von Parametern, dafür müsste jedoch eine Fitnessfunktion geschrieben werden. Derzeit ist unklar, was in diesem Programmkontext eine Fitnessfunktion sein sollte.
Meinung von GN⁺
- Dieses Projekt ist sehr wertvoll, um visuell zu zeigen, wie komplexe Lebensphänomene aus einfachen Regeln entstehen können.
- Für Einsteiger unter Software Engineers, die sich für Programmierung und Forschung zu künstlichem Leben interessieren, kann es ein spannender Einstieg sein.
- Da es in viele Sprachen portierte Versionen gibt, kann es helfen, das Verständnis verschiedener Programmiersprachen zu erweitern.
1 Kommentare
Hacker-News-Kommentare