Overview
概要
遺伝的アルゴリズム(GA)によって、関節と筋肉を持つ2D生物が『前へ進む』という目標のために世代交代し、数十世代で這い・跳ね・歩きといった移動を自ら発明していく様子を観察する水槽です。評価はWeb Worker上のヘッドレス物理で高速に回すため待たされず、体のプリセットや個体数・突然変異率などGAのパラメータをUIから即座に変えて実験できます。外部通信はゼロで、すべてブラウザ内で完結します。
How to use
遊び方・使い方
体のプリセット(ワーム・四足獣・二足・片腕クロウラー)を選んで開始すると、生物たちが評価と世代交代を繰り返します。右のパネルで個体数・突然変異率・エリート数・評価時間を調整し、倍速(x1/x4/x16/最速)で進化を早送り。中央のビューでは選択個体の動きをリプレイで観察でき、世代パネルの適応度グラフと上位個体のサムネイルで成長を追えます。
Tech stack
技術スタック
TypeScriptNext.js 16React 19Matter.jsWeb WorkerTailwind CSS v4
物理はmatter-js 0.20を固定ステップ(1000/60)で更新し、適応度はfitness=dx-0.5*max(0,-dxMin)-2.0*fallenPenaltyで算出。ベストゲノムと世代統計(最大5000世代のリングバッファ)をlocalStorageに保存し、Worker例外時は自動再起動します。
Highlights
工夫した点
- 筋肉はモーター関節ではなく距離Constraintのlengthを時間で振動させて駆動(L=L0(1+restBias+amplitude*sin(2πt/period+phase)))し、CPG的なリズムを遺伝子で探索
- ゲノムはFloat32Arrayで筋肉1本あたり4遺伝子。エリート保存+トーナメント選択+筋肉単位のブロック一様交叉+ガウス突然変異(+低確率のマクロ突然変異)で世代を更新。乱数はmulberry32でシード再現可能
- 評価はWeb Workerのヘッドレス物理で高速化し、観察は同一seedの固定ステップで決定的に再現。描画はMatter.Renderを使わずCanvas 2Dの自前レンダラ、グラフも自前SVG
To improve
改善したい点
- 体のプリセット外の自由な身体構造(自作モルフォロジー)には未対応
- 適応度関数が前進距離中心で、目的(ジャンプ・登坂等)の多様化に伸びしろ
- 低スペック端末での最速モードの安定性に課題
What's next
今後の展望
- 障害物・坂・段差など環境を変えた進化の観察
- ニューラルネット制御(神経系の進化)への拡張
- 個体の書き出し/読み込みや、進化過程の共有
