原子のような粒子間の引力や斥力の単純なルールを使って、原始的な人工生命をシミュレートし、複雑な自己組織化する生命のようなパターンを作り出すシンプルなプログラム。GUI要素を除くと、コードは1ページにも満たない。ビデオチュートリアルとチュートリアルは以下からご覧いただけます。

このコードは、おそらく世の中にある他の人工生命コードよりも桁違いに単純なものだろう。というのも、私はこのコードを、非プログラマーや一般聴衆のための教材として、単純さから複雑さが生まれるという点を証明するためだけに始めたからだ。

パラメーターの保存と読み込み機能の追加(見つけた面白いモデルを簡単に共有できるようにするため)
粒子の種類を増やす機能(現在は4種類に固定されています。)
現在、最大のボトルネックは、入れ子になったfor-loop(全粒子間のペア距離を計算する)であり、計算量を2次関数化しています。これを回避する方法が見つかれば素晴らしいことです。
ポイント3の代替案として、ペアワイズ距離を計算するのは恥ずかしいほど並列なので、GPUで計算できます。
スクリーンのサイズを変更する機能を追加し、境界チェックを改善する。
より直感的なUIを追加し、パラメータをより細かくコントロールできるようにする。
ランダム化ボタンを追加するか、あるいは、初期ルールを継続的かつ再帰的に変異させる単純なメタルールを持つことがさらによい。こうすることで、パターンが局所的な最大値に留まることはなく、変化し続ける!
より良い微調整の方法は、進化的アルゴリズムを使ってパラメーターを選択し最適化することだが、そのためにはフィットネス関数を書く必要がある。今のところ、このプログラムの領域でフィットネス関数が何に相当するのか、私にはわからない。我々の世界では、適性関数は競争であり、適者生存である。しかし、ここでは、我々にとって興味深いパターンを生み出すパラメーターを微調整し、選択する!
引力と反発力は物理学の基本概念であり、粒子(ここではアトム)の相互作用をシミュレートする際に使用されます。このスクリプトでは、これらの力をシンプルなモデルで表現しています。
引力(Attraction)
引力は、2つの粒子が互いに引き寄せ合う力です。このスクリプトでは、引力が正の力(g > 0)として表現されています。
反発力(Repulsion)
反発力は、2つの粒子が互いに押し離す力です。このスクリプトでは、反発力が負の力(g < 0)として表現されています。
rule(green, green, -0.32);
rule(green, red, -0.17);
rule(green, yellow, 0.34);
rule(red, red, -0.1);
rule(red, green, -0.34);
rule(yellow, yellow, 0.15);
rule(yellow, green, -0.2);
緑のアトム同士は弱い反発力(-0.32)を持ちます。
緑のアトムと赤のアトムは引き合う(-0.17)。
緑のアトムと黄色のアトムは強く引き合う(0.34)。
赤のアトム同士は弱い反発力(-0.1)を持ちます。
赤のアトムと緑のアトムは強く引き合う(-0.34)。
黄色のアトム同士は弱い引力(0.15)を持ちます。
黄色のアトムと緑のアトムは中程度の引力(-0.2)を持ちます。
これにより、キャンバス上でアトムが引き合ったり反発し合いながら動く様子がシミュレートされ、複雑なパターンや動きが生まれます。