vmc-pet 実験記録4 — 多チャンネル Lenia の生き物を電子ペットの体にできるか
概要
今回は、多チャンネル Lenia の生き物を実際に動かし、ペットの体として使えるかを確かめました。 使った生き物は、Bert Chan 氏が探索で見つけて、GitHub の公開リポジトリにデータとして置いているものです。私たちが新しく見つけた生き物ではありません。 私たちが行ったのは、Rust への移植と、ペットの小さな場に合わせた縮小、ペットの試験への適用です。
結論を先に書くと、次のとおりです。
-
移植は、Chan 氏の式をそのまま写した参照実装と5〜6桁まで一致した
-
場を 64×64 に広げれば、72 体中 32 体が形を保ち、そのうち 9 体はペットが体に与える変化に耐えた
-
耐えた体の中には、弱ったときの見た目の変化が、いまのペットの体より大きいものがある
-
ただし、チャンネルの配分(色の割合)は変化をかけてもほとんど動かず、表情の軸にはならなかった
-
実際のペットと同じ流れで長く放置しても、合格した 9 体中 7 体は崩壊せず、世話されると元の姿に戻った
多チャンネル Lenia とは
多チャンネル Lenia(Chan 2020, "Lenia and Expanded Universe")は、場をチャンネルの数だけ持ちます。 カーネルごとに「どのチャンネルを読んで、どのチャンネルを育てるか」が決まっていて、たとえば「チャンネル0の様子を見て、チャンネル1を育てる」カーネルがあります。 チャンネルを赤・緑・青に割り当てて描くと、色の違う層が重なった生き物に見えます。
1ステップの更新は、カーネルごとに読むチャンネルを畳み込み、成長関数を通した量を育てるチャンネルへ足し、足したカーネルの重みの合計で割ってから 0〜1 に切り詰めます。
生き物のデータを探す
Chan 氏のリポジトリの Python/animals.json には 614 体の生き物がありますが、すべて1チャンネルでした。
README の「LeniaNDKC.py -c3 -k3 を実行して B を押すと、最も進んだパターンが見られる」という案内から辿ると、多チャンネルの生き物は探索結果の置き場 Python/found/ にありました。
ファイル名は「次元・チャンネル数・自己カーネル数・相互カーネル数」を並べたものです。
ペットの計算量を考え、小さい構成の3つを使いました。
| ファイル | チャンネル | カーネル | 生き物 |
|---|---|---|---|
221.json |
2 |
4 |
40 |
222.json |
2 |
6 |
9 |
231.json |
3 |
9 |
23 |
「stable moving」「stable rotating」「with nucleus, individual, mitosis, death」のように名前の付いた生き物もいれば、名前の無い生き物もいます。
移植が合っているか
Chan 氏のプログラムは Python と FFT で畳み込みます。vmc-pet の体は、Rust で生きているセルからだけ畳み込む疎な方式です。 書き方が違うので、Chan 氏の式を numpy でそのまま写した参照実装も作り、同じ生き物のチャンネルごとの総量を突き合わせました。
| 生き物 | ステップ | 参照実装(倍精度) | Rust(単精度) |
|---|---|---|---|
corona |
100 |
588.355054 / 766.308113 |
588.356079 / 766.307495 |
corona |
1000 |
596.014109 / 769.983520 |
596.009033 / 769.982056 |
wandering |
300 |
232.742 / 268.653 / 307.978 |
232.746 / 268.658 / 307.977 |
5〜6桁まで一致し、片方のチャンネルが消える生き物や、全部消える生き物(wandering)まで同じ動きをしました。 保存された生き物の中には、見つけた時点では生きていても、長くはもたないものが含まれているようです。
小さな場で生きられるか
Chan 氏の生き物はカーネルの半径 R が 14〜38 と大きく、ペットの 32×32 の場には収まりません。 Chan 氏のプログラムの変換に倣ってパターンを縮め、R を 13(いまのペットの体と同じ)にして試しました。
(各行は左から、元の大きさ・R 13 で 64×64・R 13 で 32×32)
| 条件 | 形を保つ | 動く | 崩壊・膨張・置けない |
|---|---|---|---|
元の R・128×128 |
38 / 72 |
9 |
20 |
R 13・64×64 |
32 / 72 |
4 |
27 |
R 13・32×32(ペットの場) |
21 / 72 |
3 |
44 |
R を縮めても、64×64 の場なら多くが元の形のまま小さくなりました。 一方、ペットの 32×32 では、体が場に対して大きすぎて端をまたいで自分に影響し、膨張したり、そもそも場に収まらなかったりしました。 多チャンネルの生き物を体にするなら、場を 64×64 程度に広げるのが前提になります。
ペットの試験にかける
64×64 で形を保った 32 体を、ペットが実際に体に与える変化にかけました。
-
弱る(成長の強さを 0.85 へ)
-
テンポを ×0.6 と ×1.6 にする
-
実際のクリックと同じ強さで5回突く
さらに、1つのチャンネルだけ成長を弱めて戻す試験も行いました。チャンネルの配分(色の割合)が変わって戻るなら、色が体の力学から生まれる表情の軸になるからです。
(行は上から O2u(いまの体)・221-09・221-10・221-22・222-01・231-04。列は左から、基準・弱る・テンポ ×0.6・チャンネルごとに弱る)
-
9 体が合格しました(4つの試験のすべてで、2回とも崩壊せず元に戻った)
-
合格しなかった 23 体のうち 18 体は、弱ると崩壊しました。いまのペットでいちばん長く続く「放置されて弱る」変化に、多チャンネルの生き物は弱いようです
-
合格組には、いまの体より見た目が大きく変わるものがいました。231-04 は弱ったときの見た目の差が 0.59、221-22 は 0.54 で、いまの体(O2u、最大 0.26)を上回ります。輪が小さくなる、三日月の形が変わる、といった大きさと輪郭の変化です
-
チャンネルの配分は、ほとんど動きませんでした。1つのチャンネルだけ弱らせても、戻った体の色の割合の差は 0.03 以下で、目で見ても変わりません。片方を弱らせると両方が一緒に縮み、チャンネルどうしが強く結びついていました
PC 版で見る
合格した 9 体を vmc-pet に同梱し、ペットの仕組みにはつながずに表示するモードを作りました。
cargo run --release -- --list-multichannel
cargo run --release -- --preview-multichannel 231-04
実際に眺めてみて面白かったのは、次の2体でした。
-
222-01: 2チャンネル・カーネル6本。合格組では速く動く方で、場を移動していく
-
231-04: 3チャンネル・カーネル9本。ほとんどその場にいるが、赤・緑・青の層が重なった体で、弱ったときの形の変わり方が一番大きい
ペットと同じ流れで放置する
上の試験は、750 ステップで一気に弱める1通りでした。実際のペットは、放っておかれるとエネルギーが約150秒かけて尽き、そのあとがっかりして動きが遅くなります。 合格した 9 体を、この流れのまま 20000 ステップ(約22分)放置し、そのあと世話されて元に戻る流れにかけました。各8回です。
(左の列は上から O2u・221-00・221-09・221-10・221-12、右の列は上から 221-22・222-01・231-00・231-04。各行は左が弱りきったとき、右が戻した後)
| 体 | 崩壊 | 弱りきったときの見た目の差 | 元に戻った |
|---|---|---|---|
O2u(いまの体) |
0/8 |
0.28 |
8/8 |
231-04 |
0/8 |
0.56 |
8/8 |
221-22 fast smear |
0/8 |
0.68 |
8/8 |
222-01 |
1/8 |
0.47 |
7/8 |
221-05 |
8/8 |
− |
0/8 |
-
9 体中 7 体は、8回とも崩壊せず、世話されると元の姿に戻りました
-
231-04 は、弱りきると同心の輪が小さくなり、戻すと元の大きさに戻りました。見た目の差はいまの体の約2倍です
-
PC 版で面白かった 222-01 は、8回中1回、エネルギーが尽きていく間に崩壊しました
-
221-05 は、上の試験には合格したのに、長い放置では8回とも崩壊しました。短い試験だけでは分からない弱さがあります
分かったこと
-
公開されている多チャンネル Lenia の生き物は、Rust の疎な畳み込みでも Chan 氏の式どおりに動かせる
-
ペットの体にするなら、場を 64×64 に広げ、放置されて弱る変化に強い体を選ぶ必要がある。計算は、いまの体の4倍以上になる
-
多チャンネルで得られるのは、色の配分という表情ではなく、層の重なった見た目と、弱ったときの形の変化の大きさ
-
色の表情は、いまの vmc-pet のように体とは別の色素として持つ方が扱いやすい
-
選べば、ゆっくり放置されても崩壊せず戻れて、弱ったときの変化がいまの体の2倍以上になる体がいる(231-04、221-22)。体に選ぶ前には、長い放置の試験が要る
限界
-
試験の回数は各2回で、場は 64×64・R 13 だけ
-
放置の試験は各 8 回だけで、8回とも崩壊しなかったことからは「崩壊の起きやすさは約3割未満」としか言えない。世話されて戻る流れも1通り
-
見た目の特徴は、速さ・脈動・見える点の数・色の割合だけで、輪郭の形は画像でしか見ていない
-
3チャンネル・15本の構成(954 体)と、M5Stack の場は試していない
記録とコード
-
実験の記録: docs/experiments/rule-candidates.md(「多チャンネル Lenia の生物を動かす」以降)
-
多チャンネルの式:
crates/vmc-pet-body/src/multichannel.rs -
実験の道具:
crates/vmc-pet-body/examples/multichannel_trial.rs
出典
-
生き物のデータ(
Python/found/221.json・222.json・231.json)と多チャンネル Lenia の式: Bert Chan 氏の Lenia(MIT License) -
Bert Chan, "Lenia and Expanded Universe"(ALIFE 2020, arXiv 2005.03742)