← 作品一覧

GENESIS

観察し、保存し、続きを再開できる人工生態系。

コード公開生態系を観察する ↓
  • JavaScript
  • WebGL2
  • Web Workers
仕組みと技術
Web Workers
生態系を進める計算と、画面の描画を分ける。
WebGL2 / Canvas 2D
生物を描画。WebGL2を使えない場合はCanvasに切り替える。
Seed / snapshot
乱数の状態ごと保存し、同じ実行の続きを再開する。
この作品の目次

続きを再開できる世界

GENESISでは、生殖を通じて身体と神経回路が変化する個体を観察します。世界に食物が入り、個体は移動にエネルギーを使い、生き残った系統が子孫を残します。画面は、その過程を観察するための表示です。保存状態には、続きを計算するための個体、資源、設定、次の一歩を決める内部値が含まれています。

チェックポイントを使うと、同じ出発点を何度も調べられます。確かめられるのは、条件を変えない世界が同じ続きをたどるか、そして特定の条件を変えたときに何が変わるか、という2つの問いです。このページでは、まず前者を確かめます。観測デモには、対照と介入の個体数を比較する実験も用意しています。

同じ保存状態を2回進める

同じ保存状態から、2つの世界を進めます。続きを計算した後、保存対象の全状態が一致するか確かめます。

同じ世界を2回進める

2つの世界を24ステップずつ進めます。続きは一致するでしょうか。

初回は約2.12 MBを読み込みます。このページが非表示になると、実験を停止します。

実行できます。保存された世界はまだ読み込んでいません。

世界A

0 / 24

0 / 24 tick

世界B

0 / 24

0 / 24 tick

この保存世界・短い継続区間・今のブラウザを対象にした確認です。

比較の詳細と結果ファイル

seed 42・tick 1,200を復元し、それぞれ24tick進めます。設定、乱数状態、神経回路の活性値、資源スロットの順序を含む全保存状態を比較します。異なるブラウザエンジン間の一致を示すものではありません。

世界A・全保存状態・SHA-256

—

世界B・全保存状態・SHA-256

—
仕組みと検証条件を読む

実行ボタンを押すと、seed 42・tick 1,200のチェックポイントを読み込みます。別々のworkerが順に復元し、それぞれ正確に24tick進めた後、世界の全保存状態を返します。下の2つのSHA-256は、その終了状態から計算します。個体数は読みやすい要約であり、ハッシュの比較対象は個体数よりも広い範囲です。

期待される結果は一致です。中断した実行を完了済みの比較として扱うことはなく、再実行すると同じ保存入力からやり直します。完了後は、開始時と終了時の両方のハッシュをJSONで保存できます。ページが非表示になるとworkerを停止するため、実験はこのページを開いている間だけ進みます。

何を比較しているか

バージョン4の保存状態には、使い残した正規乱数を含む2本の乱数系列、神経結合のinnovation番号を割り当てる台帳、各個体の現在の神経活性値、空き資源スロットの順序を含めています。ハッシュ計算では配列の順序を維持し、オブジェクトのキーを整列します。同じ記録でもJSONのキーを書き出した順序だけで不一致にならないようにしています。

比較対象は、保存仕様で定義した世界の状態です。チャートの履歴や表示用のメタデータは含めません。一致から確認できるのは、このコード、このチェックポイント、このブラウザ環境、この継続区間での一致です。異なるブラウザエンジン間の同一軌跡や、その先のすべての結果まで示すものではありません。ソースと結果JSONにも、比較範囲を記載しています。

記録された枝をすべて残す

最初の種から、分かれていく枝をたどれます。この保存世界には、残っている種と絶滅した種の両方が記録されています。

tick 9000時点の71種の記録。42種が残存し、29種が絶滅。
seed 42・tick 9,000の全記録。スクロールして各種を確認できます。 図を大きく開く ↗ · JSON ↓
仕組みと検証条件を読む

seed 42・tick 9,000のチェックポイントには、初期の1種と、その後に分かれた70種、計71種の記録があります。この時点で42種が残り、29種は絶滅しています。根から最も深い種までの親子関係は3本です。図は、最大でも1個体しかいなかった種を含め、これらすべての記録から生成しています。

横方向はシミュレーションのtickです。子の種の誕生tickで親の種に接続し、残っている種はtick 9,000まで、絶滅した種は記録された最終tickまで線を引いています。終端は丸と交差線で区別し、色だけに頼らない表示にしました。データを保存すると、各線の根拠となるIDとtickを確認できます。

枝が表しているもの

新しい種を割り当てるとき、その繁殖個体が属していた種を記録します。これは種が分かれた記録であり、すべての個体の両親を列挙したものではありません。生殖には別の相手が加わる場合もあります。また、代表ゲノムは種の記録に属するもので、変化していく構成個体すべてを追跡する値ではありません。

神経結合にはinnovation番号があり、交叉時に対応する遺伝子をそろえるために使います。共有番号は、このシミュレーション内の構造的な関係を示します。数値として調べることはできますが、それだけで2個体の行動の類似性や、音に変換したときの聴覚上の類似性まで示すものではありません。系統図は、そうした主張を前提とせず、記録された関係を見える形にしています。

再計算の記録

tick 1,200・2,400・9,000の3つのチェックポイントを、別々のNode v22.11.0 workerで復元し、それぞれ100tick継続しました。3組すべてで世界の全保存状態のハッシュが一致しました。この確認は提供されたファイルからの再開であり、初期seedから9,000tickすべてを再計算したものではありません。ページ内の実験は、現在のブラウザで、より短い区間をその場で比較します。

種の数はtick 9,000のチェックポイントから別途再計算し、全5,587個体の所属が保存された種別個体数と一致することを確認しました。圧縮入力も、宣言されたSHA-256と一致しています。静的な図の表示にはシミュレーションworkerを使わず、実験はボタンを押したときに実行します。本文を読みながら、各結果のデータと計算方法にもたどれる構成です。

シミュレーションのソース ↗

根拠と確認方法

確認方法と範囲

提供されたseed 42・tick 9,000の記録には、残存42種と絶滅29種の計71種があります。全5,587個体の所属と種別の個体数は一致しています。親子関係は種の分岐を記録したもので、個体ごとの完全な系譜ではありません。

提供された3つの保存状態から、別々のNode 22.11.0ワーカーで100tick進めた結果は、いずれも一致しました。このページでは別途24tickを比較します。どちらも保存状態からの再開で、確認した実行の範囲を示しています。

実行すると、圧縮後約2.12 MBの保存状態を読み込みます。SHA-256は提供マニフェストと一致しています。

検証データを保存 ↓

生態系全体を観察する

このページ内で、ブラウザが世界を動かします。

映像 · 4:30

YouTubeで見る ↗