Random Note

vmc-pet 実験記録3 — Lenia の体に表情を増やせるか

概要

vmc-pet は、見た目のための絵を持たず、Lenia の場の状態をそのまま体として見せる電子ペットです。 そのため、気持ちを伝える手段は体の変化に限られ、いまは 色(色素)・動きの速さ(テンポ)・身じろぎ の3つしかありません。 しかも速さの違いは「活発さの強弱」でしかなく、「待っている」を「元気」と別物に見せることはできませんでした(いまは色が担っています)。

この記事は、体に表情の軸を増やせないかを試した実験の記録です。 結論を先に書くと、今回の範囲では増やせませんでした。 見た目がはっきり変わる変化はどれも一方通行で、元に戻れる変化は活発さの強弱にとどまりました。

生き残る関数で表情を足す

実験記録2 で取り込んだ Glaberish では、成長関数が「生まれる関数」と「生き残る関数」に分かれます。 生き残る関数は体の内側(値の大きいセル)にだけ効くので、活発さとは質の違う見た目を作れるかもしれない、と考えました。

4種の生き物で、生き残る関数の中心と幅を少しずつ動かし、崩壊しないか、見た目が変わるか、戻せば元の姿に戻るかを測りました。

生き残る関数を動かしたときの姿

(行は上から O2u・OG2g・S1s・2S1v。列は左から、そのまま・戻れた条件・見た目が変わった条件・それを元に戻した後)

  • 戻れる範囲の変化は、脈動の強弱だけだった。形はほとんど変わらず、テンポと同じ「活発さ」の種類の違いしか足せない

  • 質の違う見た目は作れたが、一方通行だった。S1s は止まったドーナツ形に、2S1v は歯車形に、OG2g は小さな輪の群れになり、関数を元に戻しても戻らなかった

  • 中心を大きくずらすと、全ての生き物で崩壊した

別の形から戻る帰り道はあるか

「戻す」だけでは戻らなくても、逆向きのきっかけを与えれば戻るかもしれません。 止まったドーナツ形の S1s と歯車形の 2S1v に、次のきっかけを与えました。

  • 生き残る関数を一時的に反対側へ振る

  • クリックに相当する注入(体の中心・横、足す・削る、3倍の強さ)

  • ほかの状態を経由する(元気を一時的に下げる、ほかの生き物のパラメータを経由する)

最後の案は、「直接帰らず、ほかの生き物を経由したら戻れないか」という発想で試したものです。 O2u・OG2g・S1s は、成長関数の中心と幅だけが違う生き物なので、パラメータを動かせばほかの生き物を経由する道になります。

経由したときの姿

(上3行が S1s、下3行が 2S1v。列は元の姿・移った姿・経由中・戻した後)

どのきっかけでも、元の姿には1回も戻りませんでした。 面白かったのは、S1s が OG2g のパラメータを経由すると、ドーナツ形が細い輪になって動き出したことです。 それでも S1s のパラメータに戻すと、またドーナツ形に落ち着いて止まりました。

止まった形は、実際のクリックの3倍の強さで押しても崩れず、動き出しもしませんでした。 「死ににくいが、変形しない」硬い体です。

滑る S1s は谷の狭い形か

S1s のパラメータのもとでは、どこを通ってきてもドーナツ形に落ち着きます。 そこで、「滑る S1s は決まった初期パターンからだけ現れる谷の狭い形で、ドーナツ形はどこからでも流れ込む谷の深い形なのでは」と考え、いろいろな初期状態から育ててみました。

初期状態ごとの最後の姿
初期状態 滑る 止まる 崩壊

S1s のパターン(回転・反転・ぼかし・ゆらぎ 20%)

56/56

0

0

S1s のパターン(ゆらぎ 50%)

3/8

0

5/8

ほかの生き物のパターン・乱数の円盤・楕円・輪

0

1/368

367/368

仮説は外れました。 S1s の規則は、S1s に近い形以外をすぐに消してしまいます(総量をそろえても 7〜82 ステップで崩壊)。 ドーナツ形は、どこからでも流れ込む形ではなく、滑る体をパラメータで変形させたときに行き着く形でした。

柔軟な生き物を探す

ここまでで、ほしい体は「刺激に強い」体ではないと整理できました。 ほしいのは 刺激で変形しても死なず、元に戻り、その変形が見て分かる大きさ の体です。 硬いだけの体が選ばれないように、評価を足切りと最大化に分けました。

  1. 足切り: ペットが実際に与える範囲の変化(弱る・遅くなる・速くなる・クリック)で崩壊しない

  2. 足切り: 変化が終わったら、元の姿へ戻る

  3. 最大化: 変化をかけている間の、見た目の差の大きさ

O2u・OG2g・S1s と同じカーネルのまま、成長関数の中心と幅の格子 143 点を、3種から出発してそれぞれ探しました。

途中で、評価の側の誤りを2つ見つけて直しています。

  • 「塊が1つ」という条件が、尾の薄い部分を別の塊と数えて、出荷している O2u と 2S1v を落としていた

  • 実際のクリックでは届かない3倍の強さの押しを合格の条件に入れていて、動く体をほぼすべて落としていた

候補のうち動いている体
体 見た目の差(最大) 判定

O2u(出荷している体)

0.28

合格

2S1v(出荷している体)

0.38

合格

O2u の近くの2点・OG2g の近くの1点

0.36〜0.38

合格

S1s から連れていった止まった体(26点)

0.35 以下

合格

見た目の差が大きい候補

最大 1.25

戻らない試験があり不合格

既存の生き物より大きく柔軟な体は、この範囲にはいませんでした。 合格した動く体は出荷している生き物とほぼ同じ見た目で、差の中身も主に速さの変化でした。 そして、見た目の差が大きい候補ほど元に戻れない、というぶつかり合いが探索の中にもそのまま出ました。 合格の多くは止まった硬い体で、3つの性質だけで評価すると硬い体が合格してしまうことも分かりました。

分かったこと

  • 生き残る関数で作れる「戻れる変化」は活発さの強弱だけで、質の違う形への変化は一方通行

  • 止まった形から元の姿へ戻る道は、直接のきっかけでも、ほかの状態やほかの生き物を経由しても見つからなかった

  • 形が変わっても死なない体は、変形もしない硬い体になりやすい。変形の大きさと戻れることは両立しにくい

  • vmc-pet の表情は、いまのところ色・テンポ・身じろぎのまま

次に考えること

  • 評価に「動いていること」や、輪郭の形の変化を測る特徴を足す

  • 成長関数だけでなく、カーネル(半径やリングの数・重み)も探す範囲に入れる

  • 形の移り変わりを表情ではなく、長く放置されると姿が変わる「変態」として使えないか考える

限界

  • 場は 32×32(PC 版の大きさ)だけで、M5Stack の場は見ていない

  • 試行の回数は条件ごとに2〜8回

  • 見た目の特徴は速さ・脈動・点の数だけで、輪郭の形の変化は測っていない

記録とコード

  • 実験の記録: docs/experiments/expression-axes.md

  • 実験の道具: crates/vmc-pet-body/examples/ の persistence_expression.rs・form_return.rs・glide_or_stop.rs・flexible_search.rs

Lenia は Bert Chan 氏の Lenia(MIT License)、Glaberish は Q. Tyrell Davis 氏と Josh Bongard 氏の研究と、その実装 yuca(MIT License)に基づいています。