数万の仮想エージェントが、共有する化学物質の濃度場を読み、そこへ軌跡を残します。全体の形を指示する設計図を与える代わりに、各粒子に同じ局所ルールを適用しています。
1ステップの処理
前が最も濃ければ直進。左右のどちらかが優勢ならそちらへ旋回。前が左右より薄いときは左右をランダムに選びます。探索の揺らぎを加え、移動後に化学物質を分泌します。場には3×3近傍の平均による拡散と蒸発を適用します。
sense → turn → move
T′ = max(0, mix(T, mean₃ₓ₃(T), D) × (1 − E) − ε)
Tnext = clamp(T′ + deposits, 0, 1)
D は拡散率、E は1ステップあたりの蒸発率。ε = 0.0021 は低濃度の残留を防ぐ小さな減衰項です。GPU版の場は8bitで量子化されます。栄養点は継続的な誘引濃度場を重ねる拡張で、摂食による消費は省略しています。
試してみる
センサー距離を大きくすると、より遠くの道しるべを参照します。蒸発率を上げると軌跡の記憶が短くなります。「栄養」で数点置き、誘引の影響を観察してください。停止中も値を変更でき、1ステップずつ進められます。
操作
Space 停止・再開 → 1ステップ R 同じ初期条件で再生成 N 新しいSeed 1〜4 ブラシ切替 F 全画面 S PNG保存 H 画面内の表示切替。画面を押しながら動かすとブラシが作用し、Shift で一時的に忌避へ切り替わります。右クリックは近くの栄養点を除去します。
モデルと計算環境
Jeff Jonesの粒子モデルを参考にした、自己組織化を観察するための実験です。実生物の忠実な成長予測や経路最適性の検証には、追加の生物モデル・定量評価が必要です。粒子は仮想エージェントであり、細胞数への対応は仮定していません。占有制約や増殖は省略しています。
WebGL 2では粒子更新をTransform Feedbackで実行し、化学物質場を2枚のテクスチャで交互に更新します。利用環境に応じてCanvas 2DのCPU版へ切り替わります。CPU版は解像度と粒子数を抑えています。描画方式・端末による数値精度の差で模様は変化します。FPSは端末依存で、低速時はモデル時間の進み方を抑えて負荷を制限します。
HTML・CSS・JavaScript・シェーダーをこのファイルに内包。起動やシミュレーションはオフラインで動作します。下記の文献リンクを開く場合はインターネット接続を利用します。
参考:Jeff Jones (2010), Characteristics of Pattern Formation and Evolution in Approximations of Physarum Transport Networks. Artificial Life 16(2), 127–153. 原論文 / DOI ↗
実装資料:MDN / WebGLTransformFeedback ↗