在浏览器环境中用 HTML5 Canvas 构建多代理自演化文明模拟,是探索涌现复杂性的高效方式。这种模拟不依赖预设行为或奖励函数,而是通过代理间的创建(繁殖)、交互(通信与运动)和生存(能量采集)规则,让 NEAT 风格的神经网络与基因组自然演化。核心观点是:最小化人类干预的设计,能在有限计算下产生多样策略,如合作种群或掠夺者物种,最终形成 “文明” 雏形。
这种方法的证据源于 nocodemf/werld 项目,该 Python 模拟在小世界图上启动 30 个代理,种群峰值超 7000,通过纯选择压力演化出通信模式和高效脑拓扑。“代理从空白神经网络起步,演化 64 个感官通道和 29 个基因 trait,如攻击性与记忆衰减。” Werld 的实证显示,人口危机后幸存者优化能量消耗,涌现广播饥饿信号等行为,证明简单规则足以驱动开放演化。
要落地浏览器 Canvas 模拟,首先构建世界基底:用 Watts-Strogatz 算法生成 800 节点图(节点间随机连接,平均度 6),Canvas 以节点为圆点、边为线渲染。代理作为动态实体,位置绑定节点,通过 7 个连续电机输出(速度、方向、费洛蒙释放等)迁移。感官输入固定 64 维:前 45 维覆盖能量梯度、邻近代理密度、季节周期(sin 时间波)、内部状态(能量、年龄);后 19 维为潜伏通道,初始增益 0.01,经突变激活。
代理脑采用简化 NEAT:初始 10-20 节点全连接网,每 tick 前向传播(7 种激活函数可选,如 sigmoid/tanh)。基因组 29 trait 包括 cortex_reliance(0-1,决定反射系统权重)、comm_bandwidth(广播通道数 0-16)、motor_pattern_len(复合动作长度)。繁殖为性交叉:父母基因对齐,NEAT 基因匹配后 offspring 继承突变拷贝,初始能量为父母平均 30%。
生存循环核心:每 tick(目标 60fps,实际用 requestAnimationFrame),代理感知 BFS 3-hop 邻域 → 脑决策 → 执行(移动 / 广播 / 采集) → 代谢扣费。能量模型:基底 tick 成本 1.0,脑复杂度(神经元数 × 连接密度)×0.05,广播 ×0.1,感官增益偏差 ×0.02。采集:节点随机刷新能量斑点(泊松分布,均值 5),代理电机导向采集获 2-10 单位。年龄上限 1000 tick,能量 < 0 死亡。
演化参数清单,确保收敛:
- 初始种群:30,突变率 0.05(基因 / 连接),交叉概率 0.8。
- 繁殖阈值:能量 > 50 且年龄 > 200,offspring 数 Poisson (λ=1.2)。
- 脑演化:存活者基因池大小 100,新生随机配对;NEAT 创新率 0.1(新增节点 / 连接)。
- 环境动态:季节周期 10000 tick(能量丰度 sin 波 ±20%),随机灾难(每 50000 tick,50% 节点能量清零)。
- 性能阈值:代理上限 10000,超限 cull 最弱 10%(能量 / 年龄比最低);Canvas LOD,远距代理简化为点。
监控涌现行为,提供清单验证文明形成:
- 种群稳定:波动 < 20%,无崩溃循环。
- 多样性:Shannon 指数 > 1.5(基于基因 trait 聚类)。
- 通信:广播活跃率 > 0.3,聚类分析(KMeans 通道模式)检测 “语言” 簇。
- 脑复杂度:平均神经元从 15→50+,潜伏通道激活 > 5。
- 物种分化:主成分分析基因组,簇数 > 3(合作 / 攻击 / 孤立)。 异常回滚:若种群灭绝,checkpoint 重启变异初始脑;计算过载降 tick_rate 至 30fps。
优化 Canvas 渲染:WebGL fallback(Three.js 节点图),代理用粒子系统(trail 费洛蒙)。存储用 IndexedDB 保存基因库与 milestone(每 10000 tick)。扩展:集成 Web Workers 并行脑计算,Tauri 打包桌面版避存储限。
此模拟参数经 Werld 验证,能在 Chrome 复现 12 小时跑的观察:高效脑胜出,饥饿广播涌现。通过调整 genome traits(如 aggression 初始均值 0.5),测试合作 vs 零和动态。开源潜力大,可 fork 添 LLM 叙事生成。
资料来源: [1] https://github.com/nocodemf/werld [2] https://news.ycombinator.com/item?id=47195530
(正文字数:1028)