スクリーンショット_2019-05-15_23

セルオートマトンで近傍セルをずらしてみた

今日もセルオートマトンです。2ヶ月以上ローグライク(仮)の作業をしていませんが、体調的にそのほうが好調のようなので、もうしばらく作業はお休みしようと思います。

セルオートマトンの近傍セルの参照ベクトル

ちょっといい名前が思い浮かばなくて参照ベクトルという言葉を使っています。「参照ベクトル」でググると自己組織化マップ(SOM)という、ニューラルネットワークの自己組織化モデルに登場する単語だったりします。

が、ここではそういう意味ではないです。まずは動画を。

この動画では、ライフゲーム(厳密には High Life という 23/36 ルール)を動かしていますが、全てが左上方向に移動しているように見えますね。これは描画位置をずらしているわけではなく、実際にセルオートマトンのルールでセルが左上に移動しているように見えるのです。

このとき近傍セル参照ベクトルは (1, 1) という値を与えています。近傍セルとはここではムーア近傍(8近傍)と呼ばれるもので、あるセルの次の状態を決定するときに使われる周囲8個のセルのことです。この8個のセルはそれぞれ、基準となるセルの座標から (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1) というそれぞれのベクトルを加算した参照されています。このベクトルに対して更に (1, 1) を加算したことで先程の動画のように移動しているように見えるわけです。簡単に言えば、前の状態をずらして参照しているわけです。これが近傍セル参照ベクトル、と今の所ぼくは呼んでいます。

再帰的組織化への期待

なぜこんなことをしたかというと、数日間、それよりもっと長いかもしれません。結構長く考えていたことなのですが、セルオートマトンにおいて自己組織化が行われるルールは、得てして癒着してしまい、その場から動かないことがとても多いのです。これは多くの面白いルールで組織が移動しないということであり、組織を例えば原子や素粒子のようなものだと捉えようとしても、移動しなければただの石ころになってしまいます。原子はくっついて分子になります。組織が上位の組織に化けることの繰り返しがこの宇宙の複雑さを創発したと考えているので、それが行われやすいルールを作りたいと考えたからです。

新ルール 推進力を持ったセルオートマトン

そして実際にこの近傍セル参照ベクトルを扱って新ルールを作ってみました。

まずは普通のセルオートマトンのルールがあります。そして、各セルには近傍セル参照ベクトルをそれぞれに持たせています。あるセルは別のセルとベクトルが違っている可能性があるわけですね。

そして、セルが生まれるとき(例えば状態が0から1になったとき)、そのセルを生んだ生きた(ベクトルを加味した)近傍セルのベクトルを継承します。継承とは、生きた各近傍セルのベクトルの平均を自身のベクトルとする、ということです。

ここまでが一旦、推進力を持ったセルオートマトンのルールとします。しかし、このルールではすべての初期セルのベクトルが(0, 0)に設定されていると、生まれたセルはすべて(0, 0)の平均値のベクトルになって、変化がありません。(1, 1) でも同じです。ここがポイントです。ベクトルの初期値や、継承のルールを少し考え直す必要があります。なお、セルは離散的なので、小数を含めた数でできたベクトルは参照時に四捨五入されます。

セル間の相対位置ベクトル加算方式

そこで、まず試したのが継承時のベクトルに対して、基準セルと近傍セルの位置ベクトルの差を係数を掛けたものを加算するようにしてみました。そうすると次のような動画になりました。

この動画ではすべてのセルの近傍セル参照ベクトルを(1, 1)で初期化した状態で開始しています。最初は思ったとおり左上に移動していますが、組織化が始まると位置が移動しなくなり、推進力を失っています。これはなぜなのかはわかりません。色々なルールで試しましたが、だいたいこの結果です。

ベクトルのランダム初期化方式

こちらはとてもシンプルで、すべての各セルの近傍セル参照ベクトルをランダムに初期化したときのものです。

大半のルールではカオスになってしまいましたが、このルール (035678/245678/7) では意外と面白い現象が起こりました。組織化された白い塊が流体のように動いています。誕生する新たなセルは周囲のベクトルの平均になるので、同じベクトルの塊の縁で誕生すれば同じベクトルになりますが、別のベクトルの塊と衝突するときには中和されたり、方向が変わったりするため、このように流体のような世界が生まれたのだと思います。

そしてこれはそのベクトルで色を付けたときの様子です。いくつかのベクトルのグループがあって、それが混じり合いながらもグループを維持しているように見えます。何かをきっかけにベクトルが変化し、それが定着する様子もあったりして面白いです。

このパターンが生まれるルールの特徴はだいたいわかりました。

これは 35678/245678/6 というルール、ベクトルの初期化方法は X, Y それぞれが -5 から 5 に疑似乱数で斑なく設定する方式です。これも流体に近い動きをしていました。678/678 が肝になっています。これは広い範囲でセルをのっぺりさせるのに役立っていて、こののっぺりが大変重要なのです。相対的にずれた場所でも似た結果が得られやすいということです。セルの状態がとても似ていますからね。

また、この方式で初期化時にやや傾向を与えてみたらどうなるかも試しました。X 方向だけ通常の乱数ではなく少しだけマイナスが出現しやすくしてみました。そうすると、驚くことに、全体がその影響を強く受けました。

考察ですが、早い段階で局所的に平均化されるので、その平均がややXがマイナス方向になって、それが組織化されていくからだと思います。どの組織もXがややマイナスになるため、右側に移動しているように見えるわけですね。考えてみれば驚くようなことではありませんでした。

ちなみに十分放置するとすべてが右側に移動するベクトルグループ一色に染まってしまいました。

もう一度実行すると2色の色で同じような状態になりました。ベクトルは四捨五入されて参照されますが、色は四捨五入する前のものなので、傾向が同じベクトルが残ったからです。また、平均化されずに残っているのは、干渉が少ないためです。

個体が残ることも。

しかし、この平均化の現象で不思議なのが、傾向を与えず完全ランダムな初期状態にしたときの挙動です。推進力を持つ組織は色々な方向を持っていて、中和されずに維持されています。傾向が無いから、どれも外敵(別のベクトルグループ)に強く、維持されやすいからではないかと考えていますが、本当にそうなのかは、よくわかりません。初期状態が数ステップ後には平均化されると考えるなら、どの場所をとっても同じように (0, 0) に収束しやすいはずなのですが。

セルオートマトンは思っているより上の現象を創発させますね。

別のルール、かの有名な StarWars の名をもったルール (345/2/4) では残念ながらほぼカオスになります。

徐々に淘汰が発生し、馴染みやすい2色でほぼ安定しました。何故カオスになるか、というのは理解するのはとても簡単です。参照している近傍セルがずれると、組織を作るためのルールの解釈の仕方が全く異なってしまうからです。ルールが違うと言えるわけですから、組織化されやすいルールはこの推進力をもたせたセルオートマトンでも組織化されるとは限りません。組織を安定させるには、一旦その組織がゼロベクトルの状態で完成し、その後その組織に推進力を与えなければならないからです。

この方式では、組織化しやすいルールというのが、ずれた近傍セルで行われやすいものだと考えなければいけません。なので、最初に上げた 035678/245678/7 のようなのっぺり系が有効で、他のルールはまだ多くは発見できていません。

一見画面を覆い尽くしてカオスっぽい現象に見えますが、これは複雑系でしょう。

動画で見ると、固定した組織(固形)とその中を移動する液体のようなものが両立していて、います。初期状態からは想像できない結果ですから、これは複雑な創発が発生していると考えて良いです。

そう思って、組織化するまでは普通のルール(潜在的にベクトルを保持)して、同一組織は同じベクトルを持っている状態で 345/2/4 を実行してみたのですが、結果的には思ったとおりにならず、組織がただれるように崩れていきました。組織の移動がうまくいきませんね。

今日はここまで。眠いです。おやすみなさい。

応援してくださると嬉しいです。よろしくお願いいたします!