線上體驗(可能需要科學上網)
https://osmos.jerryshell.eu.org
開源倉庫
https://github.com/jerryshell/osmos
簡單介紹
大的細胞會吃掉小的細胞,一定時間後系統會自動進化下一代,細胞越大它的移動速度就越慢,但是它的 DNA 能遺傳到下一代的機率就越大。
這些細胞一開始幾乎都是亂跑,進化 100 代之後(🧬 Epoch: 100),大概就能出現 主動捕食 和 躲避危險 的趨勢。
這個項目的基本思路是使用 Rust 驅動資料,然後使用 JavaScript 将資料渲染到 Canvas 中。
這個項目隻用到了
rand
,
nalgebra
,
serde
,
wasm_bindgen
這幾個 crate,如果你剛看完 Rust Book,但是沒有項目練手,可以試試這個!
項目結構簡介
osmos
├── osmos-core # 核心資料結構
├── osmos-nn # 神經網絡
├── osmos-sim # 進化模拟器,使用類似 ECS 的模式驅動全局資料
│ └── src
│ ├── ga # 遺傳算法
│ │ ├── crossover.rs # 交叉
│ │ ├── evolve.rs # 進化
│ │ ├── fitness.rs # 适應度
│ │ ├── gene.rs # 基因
│ │ ├── mutation.rs # 變異
│ │ └── selection.rs # 選擇
│ └── system # ECS 子系統
│ ├── collision.rs # 碰撞系統
│ ├── movement.rs # 移動系統
│ ├── network.rs # 神經網絡系統
│ └── sensor.rs # 感覺器系統
├── osmos-wasm # 将模拟器編譯為 WASM,代理模式
└── osmos-web # Web UI,通過導入 WASM 啟動模拟器,并将模拟器的資料渲染到 Canvas 中