Upgrade to Pro — share decks privately, control downloads, hide ads and more …

savanna_sim.py

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for oggata oggata
November 01, 2025
4

 savanna_sim.py

Avatar for oggata

oggata

November 01, 2025

More Decks by oggata

Transcript

  1. ライフゲームのコンセプト Conway's Game of Life 誕生 死んだセルの隣に生きたセルが ちょうど3 つあれば生きる 生存

    生きたセルの隣が2 〜3 つなら 次世代も生き残る 過疎死 隣が1 つ以下なら孤独死 過密死 隣が4 つ以上なら窒息死 単純なルールから複雑な振る舞いが創発する サバンナ版への置き換え セルの生死ルール → 渇き・空腹・捕食で死亡 隣接セル数 → 繁殖 → 同種が近くにいると子が生まれる 世代更新 → ステップごとに個体数がリアルタイム増減 グライダーの創発 → 群れ・縄張り・個体数振動が創発 ルールは固定 → DNA で個体差あり = ルールに揺らぎ
  2. サバンナの世界構造 平地 🌾 全動物が通行可 草食獣が採食できる デフォルトの地形 山岳 ⛰️ ライオンのみ通行可 草食獣には壁になる

    戦略的な地形 森林 🌳 草食獣の隠れ場所 ライオン接近時に 防御ボーナス 水飲み場 💧 全動物の渇きを回復 water_sense が高いほど 回復量が増える 🗺 ワールドサイズ 20 × 20 グリッド ⏱ 1 エピソード 600 ステップ = 約2 日 ☀️ 昼夜サイクル 太陽が東から西へ 🌡 リアルタイム 個体数が動的増減
  3. 動物と生死のルール ライオン 🦁 初期 3 頭 | 捕食者 山を越えられる 捕食で空腹-50%

    報酬+10 シマウマ 🦓 初期 8 頭 | 草食獣 中速・バランス型 群れ志向が強い 平地・森で採食 ガゼル 🦌 初期 10 頭 | 草食獣 最速・視野最大 森に逃げ込む 最も機敏に逃走 象 🐘 初期 4 頭 | 草食獣 低速・大型 水をよく飲む 上限12 頭まで増殖 💀 死亡条件 渇き ≥ 1.0 → 脱水死 空腹 ≥ 1.0 → 飢餓死 ライオンとの距離 < 0.85 → 捕食死(即死) 🐣 繁殖条件 渇き < 0.45 かつ 空腹 < 0.45 (健康状態良好) 同種が距離 2.0 以内 + クールダウン終了 → 6% 確率で誕⽣
  4. DNA 進化システム 7 つの遺伝子 speed 0.5 〜2.5 速いほど逃げやすい / 追いやすい

    thirst_rate 0.002 〜0.012 低いほど水なしで長生き hunger_rate 0.002 〜0.010 低いほど食事なしで長生き size_scale 0.6 〜1.5 ライオンは捕食半径も変化 boldness 0.0 〜1.0 高いほどライオンを恐れない sociality 0.0 〜1.0 高いほど仲間を好む water_sense 0.0 〜1.0 高いほど水場で多く回復 繁殖と進化のフロー ① 条件チェック 健康状態良好 + 近くに同種 + 上限未満 ② 一様交叉 各遺伝子を50% の確率で父 or 母から継承 ③ ガウス突然変異 15% の確率でランダムノイズを加算 ④ 子の誕生 親の近くにスポーン → そのまま生態系へ → 強い個体の遺伝子が集団に広がり、世代を超えて最適化される
  5. 強化学習 — REINFORCE 観測ベクトル 16 次元 [0,1] 位置 (x/20, y/20)

    [2] 地形タイプ [3,4] 渇き・空腹 [5–7] 水場方向・距離 [8–10] 脅威の方向・距離 [11] 森林近傍フラグ [12,13] 同種仲間の方向 [14] boldness (DNA 直結) [15] water_sense (DNA 直結) 学習フロー 観測 16 次元ベクトルを入力 NN Linear(16→128→128→5) 行動 Categorical 分布からサンプル 報酬 渇き/ 空腹/ 捕食/ 逃走で計算 更新 G = Σγʳ · r を逆算 → loss ポリシーは種ごとに独立 — DNA は「体質」を決め、RL は「動き方」を学ぶ
  6. 期待される創発現象 🐃 群れの形成 孤立個体は繁殖できず⽣き残りにくい。密集 すると繁殖確率が上がるため、⾃然と群れが 安定する。ライフゲームの「グライダー」に 相当。 🦁 縄張りの創発 草食獣が多い場所に留まることが最適なた

    め、ライオンが空間的に分割して縄張りを持 ち始める。 💧 水場の争奪 水場の近くは繁殖しやすく個体が集中する。 密度が上がると競争が起き、水場リソースの 争奪が⽣まれる。 📈 個体数振動 草食獣が増 → ライオンが増 → 草食獣が減 → ライオンが減。ロトカ=ヴォルテラ方程式的 な振動が出現。 🧬 遺伝子の収束 世代を重ねるほど「渇きにくい・速い」遺伝 子が広がる。同種内でも異なる戦略に分岐す ることがある。 🌅 昼夜の行動変化 太陽サイクルが視覚的な時間軸を与える。将 来的には夜行性/ 昼⾏性の分化を遺伝子で表 現できる。
  7. セットアップ & 実行方法 インストール pip install genesis-world torch onnx onnxruntime

    numpy CLI オプション一覧 オプション デフォルト 説明 --lions 3 ライオン数 --zebras 8 シマウマ数 --gazelles 10 ガゼル数 --elephants 4 象数 --episodes 30 エピソード数 --steps 600 1 エピソードのステ ップ数 実行コマンド例 動作確認 ( 最小構成) python savanna_sim.py --lions 2 --zebras 4 --gazelles 5 --elephants 2 --episodes 5 --steps 300 フルスケール python savanna_sim.py --lions 3 --zebras 8 --gazelles 10 --elephants 4 --episodes 30 --steps 600 停止方法 Ctrl+C ( シグナルハンドラで即終了) pkill -9 -f savanna_sim.py 📤 出力: savanna_policy_*.onnx (4 種分のポリシー) + population_log.json ( 個体数推移ログ)
  8. 最終ゴール 01 生態系の持続的安定 ライオンと草食獣が全滅せずに 共存し続ける状態を実現する。 個体数振動ログで可視化。 02 DNA の自然収束・多様化 世代を経るごとに遺伝子が収束し、

    または複数の生存戦略に分岐する 様子を population_log で確認。 03 創発パターンの観察 群れ・縄張り・ロトカ=ヴォルテラ 振動が設計せずに自然発生する ことをシミュレーターで実証。 次のステップ DONE 地形・動物・RL ・DNA ・繁殖の 実装 DONE NaN 対策・速度最適化・昼夜サ イクル NEXT population_log.json の可視化ダッ シュボード NEXT 種分化 (species の遺伝子化) → NEAT 的アプローチ FUTURE 環境ショック実験 ( 水場を減ら す・ライオンを増やす)