見出し画像

自作セル・オートマトン「skyfish」

どうも、108Hassiumです。

タイトルの通り、かつて私が研究(?)していた「skyfish」というセル・オートマトンを紹介します。

なお、タイトルの「自作」というのは私が自力で発見したルールであるというだけの意味で、ルールそのものは大した新規性はないものです。

定義

skyfishは以前紹介したStarWarsと同じ4状態2次元ムーア近傍ルールで、Gollyのルール表記では「23568/35/4」と表されます。

☝動作例

具体的には、以下のようなルールです。

  • 0番のセル(黒)は、周囲にある1番のセルの個数が3個か5個なら1番のセルに変化する。

  • 1番のセル(赤)は、周囲にある1番のセルの個数が2、3、5、6、8のいずれかなら1番のまま変化せず、それ以外なら2番のセルに変化する。

  • 2番のセル(橙)は、3番のセルに変化する。

  • 3番のセル(黄)は、0番のセルに変化する。

固定物体

このルールはライフゲームと少し似ていて、固定物体の種類もライフゲームと共通のものがたくさんあります。

☝skyfishとライフゲームに共通する固定物体の例

誕生条件にライフゲームには無かった「5」が含まれてるため、1番のセル5個が0番のセルを囲むような箇所がある固定物体(ボート、ハチの巣、イーター等)は存在できなくなります。

一方、ライフゲームでは存在しないような固定物体は以下のようなものがあります。

☝ライフゲームには存在しない固定物体の例

ライフゲームやStarWarsほど簡単ではありませんが、慣れると手作業で大きめの固定物体を作れるようになります。

☝大型固定物体の例

移動物体

このルールでは、以下の3つの移動物体が見つかっています。

上の2つの移動物体の速度がc/2(2世代で1セル進む)で、下のやつが5c/12(12世代で5セル進む)です。

c/2の方の移動物体はどちらも非常にレアですが、5c/12の方の移動物体はライフゲームにおけるグライダー並みに出現頻度が高いです。

以下、この5c/12で移動するパターンを「F5/12」と呼ぶことにします。

skyfishというルール名はこの移動物体に由来しており、移動物体を同名の未確認生物に見立てて命名したと記憶しています。(見た目は大して似ておらず、そもそも当時未確認生物に興味があったわけでもないので正確な理由は謎です)

振動物体

このルールで一番よく見かける振動物体は、多分これです。

☝20周期

以下、この振動物体を「R20」と呼ぶことにします。

私はセル・オートマトンのパターンに対してあまり名前を付けず、付けたとしても記事内ではあまり使わないようにしたいと思っているのですが、「R20」と「F5/12」だけはこの記事内で何度も触れざるを得ないので覚えてください。

R20の他には、以下のような振動物体が見つかっています。

☝上から順に4、5、6周期

また、左右の端がループした空間でしか存在できない不完全な振動物体として、11周期と12周期のものも存在します。

☝11、12周期

こんなパターンもあります。

☝60周期

R20はF5/12を跳ね返すことができ、それをうまくループさせることで振動物体にできます。

説明は省きますが、ループの形状とF5/12の間隔を調整することで任意の2以上の整数$${n}$$について$${20n}$$周期の振動物体を作れるようになります。

なお、このループ型振動物体に使われているR20のような「反応(この場合は移動物体との衝突反応)の前後でそれ自身は変化しない物体」のことを、「触媒」と呼びます。

長寿物体

以下の6セルのパターンは、安定な状態に落ち着くまで1791世代掛かります。

☝長寿物体
☝動作の様子

このパターンは移動物体の衝突などで簡単に発生するためランダムなパターンからの発生確率が高く、そのためかこのルールはライフゲームより高活性(安定化しにくい)になっています。

ちなみに、この6セルのパターン自体の成長過程でもこのパターンと同じ動きをする部分構造が何度も現れています。

☝例:263世代で出現するこの部分は初期配置と同じ動きをする

無限増殖物体

Puffer&Rake

F5/12を複数個干渉させることで、簡単にpuffer(移動しながら固定物体、振動物体、移動物体等を吐き出すパターン)とrake(移動しながら移動物体だけを吐き出すパターン)を作ることができます。

☝移動物体2個でできたpufferの例
☝rakeの例4つ

また、rakeに関するこんなパターンが見つかっています。

F5/12が2つ並んでいるだけですが、これに対して特定の位置・タイミングでF5/12を衝突させると、

衝突したF5/12が向きを変え、元のパターンに並走するようになります。

さらに、移動物体が増えた状態で先程と全く同じ位置・タイミングで移動物体をぶつけると、

並走していたF5/12は消滅し、代わりに3方向に移動物体が飛んでいきます。

このパーツを「横向きにF5/12を射出するrake」に接続することで、rakeの周期を2倍にすることができます。

さらに、パーツ1個につき2個のF5/12を追加することで、最終的に射出される3つの移動物体のうち2つを消去できます。

☝配置例(下向きと右向きに射出される移動物体が消える)

これによりこのパーツを複数個連結できるようになり、パーツを$${n}$$個つけることでrakeの周期を$${2^n}$$倍にすることができます。

☝周期倍化機構を4連結して周期が16倍になったrake

※実は副生成物の消去を行わなくても周期倍化機構の接続自体はできるのですが、まず間違いなく副生成物が邪魔になるのでF5/12が4個で1パーツとして扱ったほうが良いです。

過去の私(多分高校生)は膨大な試行錯誤の末に、以下のような触媒反応を発見したようです。

R20群にF5/12が衝突し、最終的にF5/12が2つに分裂します。

このパターンを環状につなぐことで、銃(それ自身は移動せずに移動物体を射出し続けるパターン)ができます。

☝銃の例(2120周期)

発見した当時のことはよく覚えていないのですが、確か以下のような手順で発見したんだったと思います。

  1. F5/12とR20の衝突パターン(710通り)を総当たりで調べ、触媒として使えそうなパターンを収集する。

  2. 収集したパターンを観察し、どんな状態のR20がどんな構造に対して触媒作用を示すのか調べる。

  3. 1.で収集した触媒反応の反応中間体に対して、2.の結果を基にしてさらに追加の触媒を作用させ、いい感じの結果になるパターンを探す。

例えば、1.の結果として以下のような触媒反応の例が得られます。

☝R20のF5/12に対する触媒反応の例

このパターンを観察してみると、R20の下方向に飛び出した1セルがF5/12の赤いセルが2つ並んだ場所に作用していることがわかります。

☝反応箇所

このことから、これと同様に赤いセルが2つ並んだ箇所があれば、R20を触媒として作用させて何らかの変化を起こせることが期待できます。(結果の予測はほぼ不可能です)

そして、銃のパーツでは同じ反応が以下のように使用されています。

☝実際に使用された反応例

Breeder

今のところ、このルールで一番シンプルなbreeder(世代数の2乗のオーダーで増殖するパターン)は以下のパターンです。

移動しながらpufferを生み出していく「puffer rake」と呼ばれるタイプのbreederです。

他には、

移動しながらrakeを生み出す「rake rake」や、

移動しながら銃を組み立てる「gun puffer」等があります。

既存パターンの組み合わせだと「rake gun」というのも可能なのですが、めちゃくちゃ大変そうなのでまだ作ったことはありません。

これらのほかにも、特殊(?)な構造のbreederが見つかっています。

まずはこちら。

※Gollyでは表示倍率を下げまくると2番目以降のセルも全て1番のセルの色で表示されます。

左端の方を見てみると、以下のようになっています。

このパターンでは固定物体に対してF5/12を触媒として繰り返し作用させ、

  1. 特定の配置の固定物体群を作る

  2. 固定物体群から上方向に向かってF5/12を発生させる

  3. 残った固定物体を移動させ、1.の反応を再度行えるように位置調整を行う

という作業を行っています。

☝反応過程

そして、反応物と触媒をそれぞれpufferとrakeで無限に生成することでbreederになっています。

ちなみに、このパターンを設計したのは先程紹介したrakeの周期倍化機構が見つかる前だったので、このパターンでは旧式の周期倍化機構(でかい)を使用しています。

続いて、こんなbreederがあります。

このパターンは以下の反応を基にしています。

F5/12の群れがすれ違うことで、上方向に新たなF5/12が射出されています。

あえて「触媒」という表現を使うと、「触媒と触媒が反応して反応物無しで生成物が出現する」という化学的に絶対あり得ない反応になります。

対数成長

以前のJvN29の記事でも$${O(\text{log}(t))}$$で成長するパターンを紹介しましたが、このルールではそれとは全く違う原理の対数成長物体が存在します。

☝対数成長物体

大量のF5/12が並んでいますが、両端をよく見ると既に紹介したc/2の移動物体がいます。

☝左端の方

動作原理は以下の通りです。

まずc/2の移動物体がF5/12に追突し、その際の生成物に対して触媒反応を駆使して最終的に固定物体群を残してc/2の移動物体を逆方向に撃ち返しています。

撃ち返した先にも全く同じ配置のF5/12群があるのでそっちでも同じ反応が起き、その後もc/2の移動物体が両側のF5/12群の間を往復し続け、追突する度に発生する固定物体群(c/2の移動物体がぶつからないような配置になっています)の数だけセル数が増え続けます。

このパターンにおける各パーツの動きを図示すると、大体こんな感じになります。

※大まかな動作原理を説明するための模式図なので、線の傾きなどは不正確です。

初期位置から左右に離れていくF5/12群を赤の線が表し、緑の線がその間を往復するc/2の移動物体を表しています。

総セル数が増えるのはc/2の移動物体がF5/12に追突した直後、つまりグラフ上では緑の線が曲がっている所になります。

緑の線が曲がっている所でグラフを区切ると相似な台形の列ができるので、1回目と2回目、2回目と3回目の衝突間隔をそれぞれ$${1}$$、$${a}$$とするとその後の衝突間隔の長さは$${a^2,a^3,a^4…}$$と指数関数的に伸びていきます。

☝セル数の増加の様子の模式図

1回の衝突で増えるセルの量は一定なので、衝突間隔が指数関数的に伸びるとセル数の増加速度は対数関数のオーダーになります。

ちなみに、ライフゲームでもこのパターンのような「低速の移動物体の間を高速の移動物体が往復する」という仕組みの対数成長物体が作られています。

この「caber tosser」という物体、実は以前紹介したRCT(Reverse Caver-Tosser)の名前の由来になった物体です。

caber tosserは固定されたパーツとそこから低速で遠ざかる移動物体の間をグライダーが往復するパターンでしたが、RCT(の初期案)は固定パーツに向かって接近する移動物体の間をグライダーが往復する構造でした。

つまり低速の移動物体の動きが逆なので、caber tosserの逆という意味でReverse Caver-Tosserと命名されたようです。

自己複製物体

skyfishの研究(?)を始めてから1~2年ほど経ったある日、偶然こんなパターンを発見しました。

一定の世代数ごとに初期配置と同じ形が増殖していく、いわゆる自己複製物体です。

ライフゲームやJvN29でも自己複製物体は存在しますが、あちらは人工的に設計された非常に巨大なパターンです。

こういった小さな初期配置の自己複製物体もルールによっては簡単に見つかったりするのですが、そういうルールは大抵「ランダムなパターンから自己複製物体が高頻度で自然発生するして大爆発する」という性質を持つことが多いです。

なのでこのルールのような「小さい自己複製物体が存在するのに自然発生はめったにしない」というケースはあまり見たことが無かったので驚きました。

ちなみに似たような性質を持つルールとしては、「HighLife(B236/S23)」というものを以前紹介したことがあります。

※☟HighLifeと自己複製物体について書いた記事

実際にランダムなパターンを生成して動かしてみるとわかるのですが、HighLifeの自己複製物体は結構レアです。

skyfishの話に戻ります。

小型の自己複製物体は上手く制御できれば振動物体や銃、移動物体、puffer、rake等いろいろなものをつくれるのですが、残念ながらskyfishではまだ何もできていません。

そもそもこのルール、ライフゲームにおけるイーターのような触媒作用のある固定物体が一つも見つかっていないので、今のところ周期が12か20の倍数でない物体(自己複製物体の複製周期は22)を扱うのはかなり難しそうです。

もし自己複製物体の動きを制御して他の種類の物体を作れるような技術が生まれたとしたら、長寿物体として紹介した6セルのパターンでも同様に様々なパターンが作れる気がしています。

余談ですが、自己複製に関連するパターンとしてこんなものがあります。

上下ループ空間でしか存在できない自己複製物体です。

見た目が若干F5/12と似ていますが、移動速度は5c/12ではなく4c/11です。

さらに余談なのですが、ライフゲームにも似たようなパターンが存在します。

こちらは7c/40という中々奇妙な移動速度です。

その他

ここまで紹介したグループにも属さない無限増殖物体として、カオス状態が永遠に続くパターンというのが考えられます。

例えば以下のパターンは自己複製物体にブロックを添えたような見た目をしていますが、

5000世代ほど動かすとこうなります。

外側の四角い部分は自己複製物体で、内側のぐちゃぐちゃの部分はブロックとの衝突により生まれた瓦礫です。

この後も軸複製物体は外側に向かって成長し続け、なおかつ内側にのぐちゃぐちゃと干渉してカオスな状態を保ち続けると予想できます。(本当にそうなると言い切れるわけではないですが)

さて、このパターンは自己複製物体という無限増殖物体が使われているので無限に増殖しても何ら不思議ではないのですが、既知の無限増殖物体を含まないにもかかわらずカオスな無限増殖を続けそうなパターンが見つかっています。

F5/12が固定物体に衝突するだけに見えるパターンなのですが、観察してみると延々とカオスな状態が続きます。

昔の私は、これまでに紹介してきたパターンを作るためにF5/12と様々な物体の衝突パターンを総当たりで調べ上げ、記録が残っている分だけでも1758種類の衝突反応を観察してきたのですが、そんな中でも安定化が確認できなかったのはこの1パターンのみでした。

なお、自己複製物体を使ったパターンと同様に、このパターンもカオス状態が永遠に続くと厳密に証明されたわけではないので、膨大な時間をかけて莫大な量の瓦礫をまき散らしてから安定化する可能性も残されています。

類似ルール

最後に、skyfishと似たルールをいくつか紹介します。

まず、conwaylife.comのフォーラムの以下のポストでは、F5/12が存在するルール(投稿者は「5c/12 bullet ship rule」と呼んでいます)を全列挙し、それぞれの特徴を分析していました。

そして、その中でも特に面白いルールとして「23567/358/4」(skyfishは23568/35/4)を挙げています。

23567/358/4では、F5/12のほかに

  • 3c/85の移動物体

  • c/2(40周期)のrake

  • 9c/20(60周期)のpuffer

・・・等が存在します。

☝23567/358/4の移動物体、rake、puffer

また、R20は存在できないものの小さな7周期の振動物体が存在し、それを使った小さめの銃が作れるようです。

☝23567/358/4の銃

続いて、2356/3/4ではF5/12そっくりな自己複製物体が存在します。

このパターンはランダムな初期条件から高確率で自然発生するため、このルールはskyfishと比べると非常に活性(安定化しにくさ)の高いルールとなっています。

特定のルールに対して生存条件か誕生条件を足すと活性が上がるというのはよくあることですが、このルールのように特定のパターンが存在するせいで条件を減らしたのに活性が上がるということもたまに起こります

他に「F5/12に似てるけど違う物体が存在する」という性質のルールとして、2356/3-k5-an/4があります。

このルールでは、F5/12は48周期のデカい移動物体へと進化します。

どうやら誕生条件から3kを抜くと、後方に排出される煙状の部分の挙動が変化するようです。

おまけ

記事内に出てきたパターンのファイルを配布します。