人工生命 / 生成的絵画 / 自律探索

書くページを育てる

人工生命シミュレータの上で数千の体を育て、その群れが紙の上に残す痕跡を「書かれたページ」として測る。何が良い絵かは人が決め、何が別の絵かは計測器が決める — その二つを分けることが、この仕事の中心にある。

土台
chrxh/alien の Metal 移植フォーク
探索
4 プログラム / 50 セル / 105 候補
作品
15 件、うち 10 件を公開レビュー中
期間
2026-07 〜 継続中
01

これは何か

オープンソースの人工生命エンジン chrxh/alien を Apple Silicon の Metal に移植したフォークを土台に、細胞が連結して体を作り、体が動いて互いに触れ、その集積が一枚の絵になる世界を育てている。目的はシミュレーションそのものではなく、そこから絵を取り出すことにある。

3000 体の細長い体を撒くと、紙の上には筆記体のような線が広がる。同じ密度のレシピを別の体の形で走らせると、別の書体になる。どの体がどんな書体を書くのかは、走らせて測るまで分からない — だからこの仕事の大半は、育てることではなく測ることと、測り方を疑うことに費やされている。

中心にある区別

ゲートは成立可否を決め、記述子は価値を決める。混同すると作品が落ちる。構図のゲートを設けていたら最も均一なページは落ちていたし、マーク数の下限を設けていたら融合して 11 個の痕跡しか残さない織物は落ちていた。価値はこれらの軸の上にあり、軸上の一点にはない。

02

パターンは 5 つの層にある

「作ったパターン」と呼べるものは互いに別のレイヤーにあり、混ぜると判断を誤る。一つの庭が、ある美学では合格し別の美学では不合格になることは設計どおり起きる。

層何のパターンか個数
A 形態体の形。長軸を持つ体だけが線を描き、閉じた体はタイルを押す7
B 庭実際に育てて撮った世界。パラメータと計測値と seed だけを保存する7
C 探索自律探索が見つけた「種類」。1 セル 1 エリート50
D 作品人の判断を通り、映像になったもの15
E ルック同じ保存データの描き方。マーク・天候・カラーマップ29
04

「この 2 枚は同じ絵か」を測る

アーカイブは自分のエリートを別々の種類だと言う。それを 5 つ見せられた所有者は「どれもほとんど同じ印象だ」と答えた。両方が真でありうる — そして真なら、探索は見る人に見えない距離を最適化していることになる。

そこで、アーカイブが分類に使う 5 つの密度スカラーとは種類の違う 5 つのヒストグラム(明度・輪郭・スケール・方向・痕跡の大きさ分布)で距離を測る計測器を作った。これは距離であって順位ではない — どちらが良い絵かは言えない。

較正距離意味
同一入力の 2 回走らせ0.022何もないときに読む値 = 床
所有者が「一つの作品」と呼んだ 2 カット0.019床と同じ = 同じ絵
ゲート族をまたぐ差≈ 6×床目が確認した最大の跳び

この物差しが探索の向き先を変えた。ゲートの内側は全部ひとつの家族であり、ゲートこそが目の読む境界だった。

05

2026-08-24 の測定 — 体の中に勾配を入れる

エンジンに新しい機構を入れて「ルックが変わった」と言うには、先に変わったの定義が要る。この仕事ではこう定めてある — 既存の全作品から眼距離で床の 6 倍以上、名前のついた署名の 1 つが壊れること、そしてキーを切った再生育で旧作が床以下に戻ること。

今日測ったのは connectionDistanceSlope — 体の軸に沿って結合の長さに勾配をつける機構。中央は元の値を保つので、体の真ん中は変わらず頭と尾だけがずれる。出荷済みの一枚と同じレシピで、勾配だけを変えた 7 本を育てた。

勾配inkstroke眼距離×床セル判定
cd 0(複製)18.432.7800.0231.0×i2q0m3v0l0これが床 — 同じ命令を2回
cd −0.814.542.8540.0542.3×i1q0m3v0l0バー未満
cd −0.416.302.9020.0452.0×i1q0m3v0l0バー未満
cd 0(制御)18.582.807——i2q0m3v0l0条件 (3) 通過
cd +0.413.822.9120.0622.7×i0q0m3v0l0バー未満
cd +0.812.952.8340.0773.3×i0q0m3v0l0バー未満(最大)
st +0.818.762.9660.0210.9×i2q0m3v0l0床以下 — 見えない
cd +0.9513.112.7660.0713.1×i0q0m3v0l0+0.8 より下 — 反転
cd −0.8 st +0.813.913.0270.0622.7×i0q0m3v0l0合成しない

バーには届かない。+0.4 から +0.8 で稼げるのは 0.015。0.077 から 0.132 まではあと 0.055 必要で、この率なら勾配 2.3 相当 — 勾配 1.0 で頭側の結合長が 0 になり体が壊れるので、そこには行けない。しかも +0.95 は +0.8 より小さい — 効きは範囲の内側で反転する。外挿するまでもなく、そこに到達する勾配は存在しない。この機構は「既知の種のより良い個体」であって、新しい絵ではない。

絵を見て、そのあと測って、見立てが否定された

近接ズームの切り抜きを見たとき、勾配アームの線は太さが一本の中で変わっているように見え、制御は端から端まで等幅に見えた。そこで一本の線の稜線に沿って局所幅を測ったところ、幅の中央値は 3 本とも 2.4–2.5 で同じ、ばらつきの比は 0.93–1.14 倍 — 制御自身のフレーム間ばらつき 13% の中だった。署名「一定のストローク幅」は壊れていない。私が見たのは線ごとの重さの違いと、どの線にもある端の細りだった。

動いたのは痕跡の大きさの分布と向きで、勾配 +0.4 と +0.8 は 6 世代の自動探索が一度も届かなかった空きバンドに着地した。そして stiffnessSlope だけを入れたアームは 0.021 — 床を下回る。同じ命令を 2 回走らせたほうが差が大きい。体の軸に沿って硬さを変えても、紙の上では何も起きない。

寄りで測った数字は、床ごと大きかった

最初、近接ズーム(z7)で制御からの距離が 0.079–0.129 と出たので「作業ズームの倍以上、床の 5–6 倍」と書いた。それは間違いだった。床 0.022 は作業ズームで較正された値で、寄りの絵には使えない。複製ペアを z7 で測ると 0.122 — 全アームがその 0.6–1.1 倍の中にいる。寄りのフレームには体が数本しか入らず、どの体が入るかが確率的だから、同じ命令の 2 回でも大きく離れる。床は較正された幾何の中でしか有効ではない — この仕事が 7 月から書いている法則を、私が破った。

勾配 −0.8 / 0 / +0.8 の同じ世界
勾配だけを変えた 3 枚。左から −0.8 / 0(制御)/ +0.8。紙が増えていくのが勾配の全効果で、ink はここで 18.58 → 12.95 まで落ちる。スコアラの固定カメラ、映画の瞬間(step 7200)、sumi γ0.85。
勾配 −0.8 / 0 / +0.8 の同じ世界を近接ズームで並べた比較
同じ世界・同じカメラ・同じグレード、勾配だけが違う(左 −0.8 / 中 制御 / 右 +0.8)。近接ズーム z7、1:1。この寄りの絵の差は、同じ命令を2回走らせた差より小さい — 見えるものが測れるものとは限らない。
06

間違いを追いかけて、床が二つあることが分かった

上の失敗が起きたのは、この仕事が床を一つの数(0.022)としてしか書き残しておらず、それがズームでどう変わるかを誰も見えるようにしていなかったからだ。複製ペアを 5 つのズームで測り、さらに同じ保存データを同じスタイルで 2 回描くという別の問いも測った。世界が変わっていないなら、それは違う床になる。

zoom見えている世界RENDER 床GROW 床
1.114550.00470.023
3533—0.046
72290.01710.122
14114—0.214
45360.02620.264

GROW 床(同じ命令で二つの世界を育てる)は、このズーム範囲で 11.4 倍動く。理由は素直で、広いフレームは数千の体を平均するので 2 回の実行が一致し、寄りのフレームには数本しか入らないのでどの体が入るかが確率的になる。RENDER 床(世界は同一、描き直すだけ)も上がる — レンダラは自分自身とも一致しないから — が、5〜10 倍小さい。

どちらの床が要るかは、たった一つの問いで決まる — 世界は変わったか。勾配のアームはそれぞれ別の世界なので GROW 床。スタイルの比較は同じ保存データを描き直すだけなので RENDER 床。この区別を落としていたために、寄りの比較は倍率が過大に、スタイルの比較は過小に読まれていた。

同じ命令を2回走らせた2枚
床を、目で見る。この 2 枚は同じ命令を 2 回走らせただけで、パラメータも勾配もバイナリも同一である。それでも同じ絵ではない — シミュレーションが再現可能でないから。「違って見える」はここから始まる。作業ズームでこの 2 枚の距離が 0.023、これがすべての比較の基準線になる。
見逃され続けた理由

作業ズームの GROW 床(0.023)と、ズーム 45 の RENDER 床(0.0262)は、ほとんど同じ数字だ。だから拡大したスタイル比較は、偶然ほぼ正しい定数で割られ続けてきた。二つの床が 5 倍離れる比較(今回のもの)が来るまで、誰も気づけなかった。

07

別の書体でも同じことが起きるか

自律探索に新しい軸を開いて盲目の 1 世代を回したところ、5 候補中 3 つが勾配を持ち、新しい種類は 1 つも見つからなかった。ただし 1 件が引っかかった — zigzag の体に勾配 +0.75 を入れた庭が、6 世代で最高の ink 24.81 を出した。filament では勾配が ink を下げたのに、である。

ただしその庭は個体数と結合距離も同時に動いていたので、勾配の効果とは言えない。切り分けるため 2×2 を作った。filament 側は既に同じ引数・同じバイナリで育ててあるので、追加で育てたのは zigzag の 2 本だけ。

体勾配inkstrokelinelenmarks
filament018.582.807108.9904.5
filament+0.812.952.83471.1931.0
zigzag027.953.060187.1700.0
zigzag+0.820.393.204120.2752.0

同じ向きだった。ink は filament で −5.62、zigzag で −7.56。線の長さは −35% と −36% で、1 ポイント以内で一致する。勾配の効果は体に依存しない — 開くべき「勾配 × 形態」という軸は存在しない。

filament と zigzag、勾配 0 と +0.8 の 2×2
2 つの書体、勾配 0 と +0.8。上が filament、下が zigzag。どちらの行でも同じことが起きている — 線が短くなり紙が増える(−35% と −36%)。この 4 面は 1:1 の切り抜きで、ページの表示幅ちょうどに作ってある — ブラウザにも縮小させないためだ。zigzag の鋸歯は数ピクセル周期なので、一度でも縮小がかかると線が点描に化け、材料ではなく図版のほうが嘘をつく。
記録を持っていた庭から、記録を取り上げる

勾配なしの素の zigzag が ink 27.95 を出した — 探索が見つけた 24.81 より高い。つまりあの「6 世代で最高」は勾配のおかげではなく、単に zigzag だったからで、勾配はそこから ink を削っていた。アーカイブは、weather なしの素の zigzag をこの設定で一度も育てたことがなかった — 正しい対照が、そもそも存在しなかった。

08

同じ機構が、ゲートによって無価値にも新種にもなる

ここまでで、この機構がやることは一つだと分かった — ink を奪い、線を 3 分の 1 短くする。書くページを探す探索(script)にとって、それはただの劣化だ。あの探索のゲートは ink ≥ 10 を要求し、価値は「どれだけ余裕をもって書けているか」で測られる。実際、軸を開いて回した 1 世代は新しい種類をひとつも見つけなかった。

素材と模様を探す探索(field)は、ゲートが ink ≥ 8 で、被覆が低いことは欠陥ではなく価値だ。そしてそのアーカイブは、世代 4 からずっと同じ空きを報告していた — ink 8〜15 の帯。走らせる前に、勾配がそこを埋めると書いて commit した。

候補体勾配ink粒areaCV結果
fb005_0slab—27.933362.82通過(既存セル)
fb005_1filamentcd 0.51———32bit 壁で死亡
fb005_2filamentcd −0.52 / st 0.5413.801886.10新セル — 予測した穴
fb005_3tubeYcd −0.50 / st 0.40———32bit 壁で死亡
fb005_4zigzag—35.3848615.24新セル(軸とは無関係)

fb005_2 が ink 13.80 で穴を取った。4 つのアーカイブを通じて、この軸があるから存在する初めてのセルである。

field の新セルを取った庭
fb005_2 — 自律探索が勾配つきで育て、field の空きバンドを埋めた庭。ink 13.80、粒 188、areaCV 6.10。書くページを探すゲートにとっては「薄すぎる」失敗作で、素材を探すゲートにとっては新しい種類である。同じ 1 枚が、どちらでもある。
自分の見出しに但し書きをつける

11 本のアームを他の 2 つのゲートで採点し直したところ(リグレードは無料なので新しく育てていない)、制御アームでさえ空きセルを開くことが分かった。理由は軸ではなく seeding の穴 — どちらのアーカイブも「静止した歩様の dense page」を一度も採点していない。fb005_2 のセル獲得自体は成立している(勾配が ink バンドを動かしたから)が、「空きセルを取った」を全部この機構の手柄にするのは誤りだ。勾配は creature の分類を一切動かさない。届く軸は ink ひとつだけである。

今日いちばん一般的な結論

機構それ自体に良し悪しはない。良し悪しは、それを裁くゲートに対して決まる。同じ勾配が、片方の美学では「劣った標本」になり、もう片方では「新しい種類」になった。この仕事は以前、ゲートこそが目の読む境界だという結論に別の道から辿り着いている。今日それは、ゲートが「その機構を持つ価値があるか」まで決めているところまで伸びた。

09

作品

15 件のうち 10 件を、バイリンガルのレビューページで公開している(原本は SHA-256 付きで保管)。判断待ちのものは公開していない — 何を作品として出すかは計測ではなく人の判断だから。

公開レビューを見る(85 アイテム)