1 ポイント 投稿者 GN⁺ 2023-12-30 | 1件のコメント | WhatsAppで共有

粒子生命シミュレーション

  • 原子のような粒子同士の単純な引力と斥力のルールを使って、原始的な人工生命をシミュレーションするシンプルなプログラム。
  • GUI要素を除けば、コードは1ページ未満。
  • 動画チュートリアルと案内は以下で確認可能。

詳しく見る (YouTube動画チュートリアル)

  • YouTube動画チュートリアルへのリンクあり。

オンラインデモ (JavaScript版)

  • 2Dおよび3Dのライブデモへのリンクあり。

インターフェース (C++版)

例示結果

再現できるいくつかの興味深いパターン

  • これらのパターンを再現するために、パラメータを正確に一致させる必要はない。
  • 興味深いパターンを得る最良の方法は、まずランダムなパラメータ探索を試すこと。
  • 興味深いパターンを見つけたら、段階的に微調整を試みる。
  • 局所最大値にとどまらないよう、ときどき大きくパラメータを飛ばすこともできる。

使い方

  • このリポジトリをダウンロードして展開し、/particle_life/bin/フォルダへ移動してからparticle_life.exeをクリックする。

コード

  • ソースコードはC++、JavaScript、Pythonで提供されている。
  • YouTube動画チュートリアルへのリンクあり。
  • C++プログラムに貢献したい場合、コアアルゴリズムは"/particle_life/src/ofApp.cpp"の最初の100行にある。
  • 残りはopenFrameworksライブラリが提供するGUIコンポーネントとレンダリング制御。
  • 始めるには、このリポジトリとopenFrameworksライブラリをダウンロードし、openFrameworksのprojectGeneratorを使って/particle_life/フォルダをプロジェクトに取り込む。
  • あるいは、新しいopenFrameworksプロジェクトを作成してofxGuiを追加し、生成されたプロジェクトファイルをここで提供されている/src/フォルダで置き換える。
  • これでC++コードをコンパイルできる。

他の移植版

  • Godot、Rust、Go-1、Go-2、Go-3、Python、Lua、QB64-PE、WebGL、Java、C# Winforms、FreeBasicなど、さまざまな言語へ移植された版の一覧あり。

JavaScriptコード例

  • JavaScriptコード例と、最適化版であるparticle_life.htmlファイルを確認できる。

関連トピック

  • 粒子生命シミュレーション、原始スープ - 進化、コンウェイのライフゲーム、セル・オートマトン、自己組織化パターンなどに関する説明。
  • このプロジェクトはJeffery VentrellaのClustersに着想を得ており、衝突検知を実装しないことで、数千個の粒子をリアルタイムでシミュレーションできた。
  • GUIコントロールを追加し、パラメータをリアルタイムで簡単に微調整・探索できるようにしたことで、非常に単純な関係モデルから、これまで見たことのないパターンが現れるようになった。
  • このコードは教育資料として始まり、複雑さが単純さから生まれうることを示すために、非プログラマと一般大衆を対象としている。

やることリスト

  1. パラメータを保存・読み込みできる機能を追加する(興味深いモデルを人々が簡単に共有できるようにするため)
  2. より多くの粒子タイプを追加できる機能(現在は4種類の粒子タイプに固定されている)
  3. 現在最大のボトルネックは、すべての粒子間のペアごとの距離を計算する入れ子のforループであり、計算量は二次的。
  4. 3番の代案として、ペアごとの距離計算はGPUで計算できるほど並列化しやすい。
  5. 画面サイズを調整する機能の追加と境界チェックの改善(高速で動く粒子が多数あると、画面境界の外へ出ることがある)。
  6. パラメータをより細かく制御できる、より直感的なUIの追加。
  7. ランダムボタンの追加、またはより良い方法として、初期ルールを継続的に変化させる単純なメタルールを持たせ、パターンが局所最大値にとどまらず変化し続けるようにする。
  8. パラメータの選択と最適化には進化アルゴリズムを使う方がよいが、そのためには適応度関数を書く必要がある。現時点では、このプログラムの領域において適応度関数が何であるべきか分かっていない。

GN⁺の見解

  • このプロジェクトは、複雑な生命現象が単純なルールからどのように発生しうるかを視覚的に示す点で大きな価値がある。
  • プログラミングや人工生命研究に関心のある初級ソフトウェアエンジニアにとって、興味深い入門資料になりうる。
  • さまざまな言語に移植された版があるため、多様なプログラミング言語への理解を広げる助けになる可能性がある。

1件のコメント

 
GN⁺ 2023-12-30
Hacker Newsの意見
  • 学校で最初のコーディングプロジェクトとしてConwayのライフゲームをやったが、白黒では退屈だったのでRGBの「遺伝子」を導入し、親の色を組み合わせて変異を与えた。盤面を占領する「派閥」を見るのが面白い。
  • 最も興味深い結果は、しばらくの間大きく不安定な塊と安定した塊が形成され、その状態で停止することだった。その前には、期待どおり物体が出会って結合する現象を観察した。
  • 最近似たようなものを作ったが、このバージョンではすべてをWebGLシェーダーで処理し、シミュレーション状態をテクスチャ/ユニフォームに保持している。より多くの粒子をシミュレートして描画できるが、一部の未対応WebGL拡張機能を使っているため、すべてのデバイスで動作するとは限らない。
  • これはJohn Conwayのライフゲームよりも複雑なバージョンであり、小さなスケールで生命のような形が簡単に形成されるのは驚くべきことで、まるで私たちの宇宙のパラメータが生命形成を難しくしているように見える。
  • 関連リンク:
  • Conwayのライフゲームに色鮮やかな「遺伝子」を混ぜるのは、まるで虹色のパレットでコーディングしているようで、塊たちはそれぞれの小さなドラマを演じたあと、そのまま休憩に入るように見える。シミュレーションでは見事な動きや形が現れ、まるでキャラクターの代わりに形を主役にしたミニ・スーパーヒーロー映画のようだ。
  • 「Altphy」という3D実験を始めたが、リアルタイム処理には複雑すぎて、意図したとおりには動いていない。コードの一部やアイデアがいつか発展するかもしれないと思い、共有する。
  • Godot 4でコンピュートシェーダーを使ってこれに似たことを試した。興味があれば見てみることを勧める。
  • 3D JS版を見ているが、これはオリジナルのConwayのライフゲームや90年代のPrimordial Lifeスクリーンセーバー以来、おそらく一番気に入っているものかもしれない。シェーダー対応を追加することを検討してみるとよいと思う。遅くて「もっとブヨブヨした」バージョンをフルスクリーンで動かすのを見てみたい。たぶんMacを暖炉にしてしまうだろうが、今となってはそれもおまけだ。
  • とても素晴らしい作品だが、壁掛けのテレビでこれを動かせないのが残念だ。「Particle Life」を物理学者向けのTシャツブランドと勘違いしていて、Tシャツには「あなたの話を聞いた結果、あなたは単に量子場における不運な振動にすぎないので、あなたの言うことはすべて無視しても正当だと感じる」のようなスローガンが書かれているのだろうと期待していた。