Bot 生态概览
Bot 是 LocalGen 最迷人的部分之一。它既能让普通离线对局更耐玩,也能把整个项目变成一个真正适合 AI / 策略研究的试验场。更重要的是,项目文档明确欢迎新的 Bot 贡献。
上游文档将 Bot 分为两大类:
内置 Bot
- 源码位于
src/bots/ - 与 LocalGen 主程序一起编译
- 使用 C++ 编写,集成度和性能都更高
- 源码位于
外部 Bot
- 作为独立可执行程序存在
- 可以使用任意语言编写
- 通过网络协议与游戏通信,降低贡献门槛
当前内置 Bot 阵容
| Bot | 启用状态 | 复杂度 | 近似单回合复杂度 | 简介 |
|---|---|---|---|---|
| DummyBot | 否 | Low | $O(n)$ | 示例型启发式贪心 |
| SmartRandomBot | 是 | Low | $O(n)$ | 最大兵力栈贪心基线 |
| XrzBot | 否 | Low | $O(n)$ | 聚焦型随机贪心 |
| ZlyBot | 是 | Medium | $O(n)$ | 单目标 BFS 启发式 |
| ZlyBot v2 | 是 | Medium | $O(n \log n)$ | 带记忆的加权搜索 |
| ZlyBot v2.1 | 是 | Medium | $O(n \log n)$ | 双焦点防守搜索 |
| SzlyBot | 是 | Medium | $O(n)$ | 地形加权 BFS 启发式 |
| GcBot | 是 | Medium | $O(n)$ | 自适应启发式 BFS |
| XiaruizeBot | 是 | High | $O(kn^2)$ | 多源战略搜索 |
| KutuBot | 是 | High | $O(n \log n)$ | 统一战略目标规划 |
| LyBot | 否 | High | $O(n^2)$ | 多人局目标规划 |
| oimBot | 是 | High | $O(n^3)$ | 基于 stance 的战略规划 |
如何读复杂度这一列?
可以把 $n$ 理解为 Bot 在某一回合里实际考察的相关格子数,把 $k$ 理解为它同时保留的前线候选或战略分支数。
$$ T_{\text{match}} \approx \sum_{t=1}^{s} T_{\text{bot}}(n_t) $$
这也是为什么从 $O(n)$ 提升到 $O(n \log n)$ 看起来只是“小变化”,但在长时间、大批量模拟时会被不断累计出来。
src/bots/MyBot.cpp
├─ 包含 src/core/bot.h
├─ 继承 BasicBot
├─ 实现 init(...)
├─ 实现 requestMove(...)
├─ 按文档要求注册 Bot
└─ 把源文件加入 PROJECT_SOURCES
内置 Bot 投稿检查清单
上游内置 Bot README 对 src/bots/ 中的实现有一组非常明确的要求:
- 代码必须兼容 C++17。
- 整个 Bot 实现需要放在 单个
*.cpp文件 中。 - 该文件需要包含
src/core/bot.h。 - Bot 类需要继承
BasicBot并重写compute。 - 必须通过
REGISTER_BOT宏完成注册。 - 源文件还需要被加入顶层
CMakeLists.txt的PROJECT_SOURCES。
一个更完整、更有说服力的 Bot 投稿通常还会包含
- 测试、回放或基准结果
- 对性能与内存行为的简要说明
- 足够清晰的策略深度,而不是占位型随机 Bot
- 如果是外部 Bot,还需要提供依赖、启动方式以及支持的平台信息