autowzry-agent 开发计划¶
版本: v1.0 日期: 2025-01-12 状态: 规划阶段
开发路线图¶
总体时间规划¶
阶段1: 基础框架搭建 [预计 3-5 天]
阶段2: 数据收集系统 [预计 5-7 天]
阶段3: 训练流程实现 [预计 7-10 天]
阶段4: 在线学习功能 [预计 5-7 天]
阶段5: 优化与扩展 [预计 持续迭代]
阶段1: 基础框架搭建¶
目标: 建立项目骨架,完成基础工具和配置系统
任务列表¶
1.1 项目结构初始化¶
- [ ] 创建目录结构
- [ ] 编写 requirements.txt
- [ ] 配置 .gitignore
- [ ] 初始化 README.md
1.2 配置管理模块¶
- [ ] 实现 Config 类
- [ ] YAML 文件加载功能
- [ ] 命令行参数解析
- [ ] 默认配置生成
- [ ] 创建 default_config.yaml 模板
- [ ] 定义 HyperParameters 数据类
- [ ] 定义 PathConfig 数据类
- [ ] 定义 EnvironmentConfig 数据类
- [ ] 实现 --help 参数输出
1.3 工具模块¶
- [ ] image_processing.py
- [ ] resize 函数
- [ ] 灰度化函数
- [ ] 帧堆叠函数
- [ ] 归一化函数
- [ ] logger.py
- [ ] 文件日志输出
- [ ] 控制台日志格式化
- [ ] (可选) TensorBoard 集成
1.4 兼容模块基础¶
- [ ] compatibility.py 接口定义
- [ ] 设备初始化接口
- [ ] 截图接口
- [ ] 动作执行接口
- [ ] 状态判断接口
- [ ] autowzry-lite 后端实现
- [ ] 简单的测试脚本验证连接
1.5 动作空间定义¶
- [ ] action_space.py
- [ ] 定义动作字典结构
- [ ] 实现 encode_action
- [ ] 实现 decode_action
- [ ] 定义初期动作集(移动 + 攻击)
验收标准¶
- [ ] 能够生成默认配置文件
- [ ] 配置可通过命令行参数覆盖
- [ ] 能够截取游戏画面并预处理
- [ ] 动作空间定义清晰可扩展
阶段2: 数据收集系统¶
目标: 实现观战模式数据收集,能够保存 episode 到磁盘
任务列表¶
2.1 状态感知与奖励¶
- [ ] reward_evaluator.py
- [ ] 实现死亡检测(OpenCV)
- [ ] 实现击杀数识别(模板匹配/OCR)
- [ ] 实现助攻数识别
- [ ] 定义奖励字典
- [ ] 实现 compute_reward 函数
- [ ] 实现可配置的启用/禁用检测项
2.2 动作推断¶
- [ ] action_inference.py
- [ ] 实现位置变化检测(推断移动方向)
- [ ] 实现攻击动作推断
- [ ] 实现技能释放推断(可选,初期可简化)
2.3 经验收集器¶
- [ ] experience_collector.py
- [ ] 实现 collect_one_step (观战模式)
- [ ] 实现 collect_episode
- [ ] 实现 save_episode (HDF5格式)
- [ ] 实现 collect_and_save_multiple_episodes
- [ ] 添加进度显示
- [ ] 添加异常处理(游戏崩溃、连接断开等)
2.4 数据收集脚本¶
- [ ] scripts/collect.py
- [ ] 命令行参数解析
- [ ] 观战模式流程
- [ ] 离线模式流程(读取视频)
- [ ] 收集统计信息输出
2.5 数据验证¶
- [ ] 编写数据加载测试脚本
- [ ] 检查 HDF5 文件完整性
- [ ] 可视化部分经验(截图 + 动作 + 奖励)
验收标准¶
- [ ] 能够观战一局游戏并保存完整 episode
- [ ] episode 文件包含 (state, action, reward, next_state, done)
- [ ] 奖励计算逻辑正确(击杀加分、死亡扣分)
- [ ] 能够从视频文件离线提取数据
阶段3: 训练流程实现¶
目标: 实现离线训练,能够从保存的 episode 训练模型
任务列表¶
3.1 经验回放缓冲区¶
- [ ] replay_buffer.py
- [ ] 实现 push 单条经验
- [ ] 实现 load_episode_file
- [ ] 实现 load_from_directory(批量加载)
- [ ] 实现 sample 随机采样
- [ ] 实现 save_consolidated
- [ ] 实现 get_statistics
3.2 Dataset 封装¶
- [ ] dataset.py
- [ ] 继承 torch.utils.data.Dataset
- [ ] 实现 len
- [ ] 实现 getitem(返回tensor)
- [ ] 测试 DataLoader 兼容性
3.3 模型定义¶
- [ ] model.py
- [ ] 定义 BaseModel 抽象类
- [ ] 实现 SimpleConvNet(2-3层卷积)
- [ ] 实现 forward 推理
- [ ] 实现 save/load 方法
- [ ] 实现 predict 方法(用于推理)
3.4 DQN 训练器¶
- [ ] trainer.py
- [ ] 初始化 model 和 target_model
- [ ] 实现 train_step(单步训练)
- [ ] 实现 compute_loss(DQN loss)
- [ ] 实现 update_target_network
- [ ] 实现梯度裁剪(防止爆炸)
- [ ] 添加训练指标记录
3.5 训练脚本¶
- [ ] scripts/train.py
- [ ] 加载配置
- [ ] 加载 replay buffer
- [ ] 初始化模型和训练器
- [ ] 训练循环
- [ ] 定期保存 checkpoint
- [ ] 输出训练日志
3.6 测试与验证¶
- [ ] 使用小数据集测试过拟合(验证模型能学习)
- [ ] 检查 loss 是否下降
- [ ] 验证模型保存和加载
- [ ] 测试不同超参数组合
验收标准¶
- [ ] 能够从 episodes 目录加载数据
- [ ] 训练 loss 稳定下降
- [ ] 模型能够保存和恢复
- [ ] 训练过程有清晰的日志输出
阶段4: 在线学习功能¶
目标: 实现对战模式,模型能够实时控制英雄并边玩边学
任务列表¶
4.1 策略选择器¶
- [ ] policy.py
- [ ] 实现 Policy 基类
- [ ] 实现 GreedyPolicy
- [ ] 实现 EpsilonGreedyPolicy(含衰减)
- [ ] 实现 SoftmaxPolicy
- [ ] 实现 ModelWithPolicy 封装
4.2 对战模式收集器¶
- [ ] 修改 experience_collector.py
- [ ] 添加对战模式支持
- [ ] 模型推理 → 执行动作 → 获取奖励
- [ ] 实时添加经验到 buffer
- [ ] 定期采样训练(可选)
4.3 Agent 主控制器¶
- [ ] agent.py
- [ ] 初始化所有模块
- [ ] 实现 run_collect_mode
- [ ] 实现 run_train_mode
- [ ] 实现 run_battle_mode(在线学习)
- [ ] 实现 checkpoint 管理
4.4 在线学习脚本¶
- [ ] 修改 scripts/collect.py 支持对战模式
- [ ] 实现边玩边学逻辑
- [ ] 每 N 步采样训练
- [ ] 定期更新 target 网络
- [ ] 定期保存模型
4.5 评估脚本¶
- [ ] scripts/evaluate.py
- [ ] 加载训练好的模型
- [ ] 运行多局游戏
- [ ] 统计胜率、平均奖励等指标
- [ ] 输出评估报告
验收标准¶
- [ ] 模型能够控制英雄进行对战
- [ ] 探索率随训练步数衰减
- [ ] 对战过程中能够持续学习
- [ ] 评估脚本能够给出清晰的性能指标
阶段5: 优化与扩展¶
目标: 提升模型性能,增加高级功能
任务列表¶
5.1 模型优化¶
- [ ] 尝试更深的网络结构
- [ ] 添加 Dueling DQN 架构
- [ ] 添加 Double DQN
- [ ] 添加 Prioritized Experience Replay
- [ ] 实验不同的激活函数和归一化
5.2 状态识别增强¶
- [ ] 添加血量识别
- [ ] 添加位置识别(小地图)
- [ ] 添加金币识别
- [ ] 添加技能 CD 识别
- [ ] 添加敌我单位识别
5.3 奖励函数优化¶
- [ ] 实验不同的奖励数值
- [ ] 添加时间衰减
- [ ] 添加 Reward Shaping
- [ ] 添加对线经验奖励
- [ ] 添加推塔奖励
5.4 训练稳定性¶
- [ ] 添加梯度监控
- [ ] 实现学习率调度
- [ ] 实现早停机制
- [ ] 添加模型检查点恢复
5.5 工具与可视化¶
- [ ] TensorBoard 集成
- [ ] 训练曲线可视化
- [ ] episode 回放可视化
- [ ] Q 值热力图可视化
5.6 文档完善¶
- [ ] 编写完整的 README
- [ ] 编写使用教程
- [ ] 编写 API 文档
- [ ] 编写常见问题解答
验收标准¶
- [ ] 模型在测试对局中表现优于随机策略
- [ ] 训练过程稳定可复现
- [ ] 文档完整,新用户能够快速上手
里程碑定义¶
Milestone 1: 基础框架完成¶
- 能够截图、预处理图像、执行动作
- 配置系统完善
Milestone 2: 数据收集可用¶
- 能够观战并保存 10+ 局完整数据
- 数据格式验证通过
Milestone 3: 离线训练可用¶
- 能够从数据训练模型
- Loss 稳定下降
Milestone 4: 在线学习可用¶
- 模型能够控制英雄对战
- 支持边玩边学
Milestone 5: 性能达标¶
- 模型表现超过随机策略
- 项目文档完整
风险与应对¶
风险1: 状态识别不准确¶
应对: 先使用简单的模板匹配,后期考虑 OCR 或轻量级识别模型
风险2: 训练不稳定¶
应对: 使用 target network,调整学习率,添加梯度裁剪
风险3: 奖励稀疏¶
应对: 添加密集奖励(如存活时间奖励),使用 Reward Shaping
风险4: 样本效率低¶
应对: 使用 Prioritized Experience Replay,增加训练轮数
风险5: 设备连接不稳定¶
应对: 添加重连机制,异常处理,定期保存数据
开发规范¶
代码风格¶
- 遵循 PEP 8
- 使用类型注解
- 函数添加 docstring
测试要求¶
- 每个模块编写单元测试
- 集成测试验证数据流
版本管理¶
- 使用 Git 进行版本控制
- 功能开发使用分支
- 重要节点打 tag
文档要求¶
- 每个模块添加 README
- 复杂函数添加示例
- 定期更新开发日志
文档结束