1 Punkte von GN⁺ 2023-12-30 | 1 Kommentare | Auf WhatsApp teilen

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

  1. Eine Funktion zum Speichern und Laden von Parametern hinzufügen, damit Menschen interessante Modelle leicht teilen können.
  2. Eine Funktion hinzufügen, mit der mehr Partikeltypen ergänzt werden können (derzeit auf vier Partikeltypen festgelegt).
  3. Der derzeit größte Flaschenhals ist die verschachtelte for-Schleife zur Berechnung der paarweisen Distanzen zwischen allen Partikeln; die Rechenkomplexität ist quadratisch.
  4. Als Alternative zu Punkt 3 ist die Berechnung paarweiser Distanzen ausreichend parallelisierbar, um auf der GPU ausgeführt zu werden.
  5. Eine Funktion zur Anpassung der Bildschirmgröße hinzufügen und die Grenzprüfung verbessern (Partikel mit viel schneller Bewegung können den Bildschirmrand verlassen).
  6. Eine intuitivere UI hinzufügen, die eine feinere Steuerung der Parameter ermöglicht.
  7. 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.
  8. 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

 
GN⁺ 2023-12-30
Hacker-News-Kommentare
  • Mein erstes Coding-Projekt in der Schule war Conways Game of Life, aber Schwarz-Weiß war langweilig, also habe ich RGB-"Gene" eingeführt und die Farben der Eltern kombiniert, um Mutationen zu erzeugen. Es macht Spaß, den "Fraktionen" dabei zuzusehen, wie sie das Board erobern.
  • Das interessanteste Ergebnis war, dass sich für eine Weile große instabile Klumpen und stabile Klumpen bildeten und dann in diesem Zustand zum Stillstand kamen. Davor konnte ich wie erwartet beobachten, wie Objekte aufeinandertrafen und miteinander verschmolzen.
  • Ich habe vor Kurzem etwas Ähnliches gebaut; diese Version verarbeitet alles in WebGL-Shadern und hält den Simulationszustand in Texturen/Uniforms. Sie kann mehr Partikel simulieren und rendern, läuft aber möglicherweise nicht auf allen Geräten, weil sie einige nicht unterstützte WebGL-Erweiterungen verwendet.
  • Das ist eine komplexere Version von John Conways Game of Life, und es ist erstaunlich, wie leicht sich auf kleiner Skala lebensähnliche Formen bilden; es wirkt, als würden die Parameter unseres Universums die Entstehung von Leben eher erschweren.
  • Verwandte Links:
  • Bunte "Gene" in Conways Game of Life zu mischen, ist, als würde man mit einer Regenbogenpalette programmieren, und die Klumpen führen ihr eigenes kleines Drama auf, bevor sie sich einfach ausruhen. In der Simulation tauchen coole Bewegungen und Formen auf, fast wie ein Mini-Superheldenfilm mit Formen statt Figuren.
  • Ich habe ein 3D-Experiment namens "Altphy" begonnen, aber es ist für Echtzeitverarbeitung zu komplex und funktioniert nicht so, wie es gedacht war. Ich teile es trotzdem, weil sich Teile des Codes oder der Ideen irgendwann weiterentwickeln könnten.
  • Ich habe versucht, etwas Ähnliches in Godot 4 mit Compute-Shadern zu machen. Wenn es dich interessiert, lohnt es sich, mal reinzuschauen.
  • Ich schaue mir die 3D-JS-Version an, und das könnte seit Conways ursprünglichem Game of Life oder dem Primordial-Life-Bildschirmschoner aus den 90ern mein Favorit sein. Ich würde empfehlen, über Shader-Support nachzudenken. Ich würde gern eine langsame und "blobigere" Version im Vollbild laufen sehen. Vielleicht macht das den Mac zu einem Heizkörper, aber im Moment wäre selbst das ein Bonus.
  • Sehr coole Arbeit, aber schade, dass ich das nicht auf einem an der Wand montierten Fernseher laufen lassen kann. Ich hatte "Particle Life" erst für eine T-Shirt-Marke für Physiker gehalten, und ich hatte erwartet, dass auf den T-Shirts Slogans stehen wie: "Nachdem ich dir zugehört habe, habe ich das Gefühl, dass du nur eine unglückliche Schwingung in einem Quantenfeld bist, also ist es gerechtfertigt, alles zu ignorieren, was du sagst."