p5.jsでいろんな2次元セル・オートマトンを見てみる


2017年10月30日
With
p5.jsでいろんな2次元セル・オートマトンを見てみる はコメントを受け付けていません。

ジェネラティブ・アート」には、前のエントリで紹介した「コンウェイのライフゲーム」をベースに、世代更新のルールやセルの振る舞いを変えたセル・オートマトンが3つほど掲載されています。


■ [普及版]ジェネラティブ・アート―Processingによる実践ガイド

いずれも大枠のロジックは同じなのですが、ちょっとしたルール変更で、できあがるビジュアルや動きがまったく別物に変わるのが大変興味深いです。p5.js向けに書き換えるのと合わせて、見栄えも少し変えてみました。

Vichniac Vote(多数決ルール)

Vichniac Voteのルールは、

・各セルは、自分も含めた9セルの生死状況を見て、次世代で数の多いほうに自分を合わせる
・ただし、自分の隣接セルの数が4、もしくは5の場合は自分の生死状態を反転させる(収束回避ルール)

というものです。

●[DEMO] Vichniac Vote(クリックすると別タブが開きます)

なんとなく牛の模様みたいな感じに収束します。しばらく放っておいても、完全な静止状態にならず、領域の境目がちらちらと変化し続けるのは、2番目の「収束回避ルール」があるためです。このルールをなくしてしまうと、セルの状態はあっという間に静止した状態に収束します。こんな感じで。

フィールドはトーラス型になっているので、最終的に収束したパターンは、上下と左右がつながった形になっています。

地形とか、テクスチャタイル画像とかの自動生成に使えそうですね。

Brian’s Brain(セルが3状態)

コンウェイのライフゲームやVichniac Voteでは、セルの状態が「true(生)」か「false(死)」かの2状態ですが、Brian’s Brainのセルは「発火」「休息」「オフ」の3状態を持ちます。その上で、

・状態が「発火」なら、次の状態は「休息」
・状態が「休息」なら、次の状態は「オフ」
・状態が「オフ」で、隣接するセルのうち2個が「発火」していれば、次の状態は「発火」

というルールに従って変化します。

●[DEMO] Brian’s Brain(クリックすると別タブが開きます)

炎が一気に延焼したり、燃え上がった煤がひらひら舞ったりするようなパターンが出てきます。収束後も画面上に小さい燃え滓のような固まりが残って動き続けるのに趣を感じます。

カスタマイズされた波(平均化ルール)

このルールでは、セル状態が0~255の数値で、隣接セルの数値の平均値に影響を受けて変化します。

・隣接セルの状態の平均が255なら、次の状態は0
・隣接セルの状態の平均が0なら、次の状態は255
・それ以外であれば、次の状態は「現在の状態+隣接セルの状態の平均-前の状態」
・最大値は255、最小値は0で、その範囲を超えた場合はどちらか近い値に調整

●[DEMO] カスタマイズされた波(クリックすると別タブが開きます)

最初に画面全体に大きな波がきて、状態がいったん落ち着いてからは、ポツンポツンと水面に水滴が落ちているかのような波紋のパターンが出てきます。2番目のルールがあるおかげで、完全な静止状態にならずにいつまでも波紋を眺めていられます。個人的には、3つの派生形CAの中で、これが一番お気に入りです。

こうやって、いろんなCAを見ていると、自分でもオリジナルのルールを作って動かして見たくなりますよね。次のエントリでは、その試みの結果をご披露しようかと。

※補遺:CAについていろいろ調べていたところ「ジェネラティブ・アート」の「セル・オートマトン」に関する章が「Code Project」に掲載されているのを見つけました(英語ですが)。Processing向けのコードも出ていますので、実装にご興味がある方はそちらも合わせてどうぞ。