2025-11-12 架构设计讨论
时间: 2025-11-12
主题: 项目架构规划和模块设计
项目目标
基于强化学习 (RL) 技术,构建一个用于 MOBA 游戏(王者荣耀)策略的自主决策 Agent。
核心技术栈
- 基础库: PyTorch、OpenCV、NumPy、HDF5
- 游戏接口: autowzry / autowzry-lite (ADB连接、截图、操作)
- 算法: DQN (Deep Q-Network)
- 数据格式: HDF5 (episode存储)
开发路线图
总体时间规划
阶段1: 基础框架搭建 [预计 3-5 天]
阶段2: 数据收集系统 [预计 5-7 天]
阶段3: 训练流程实现 [预计 7-10 天]
阶段4: 在线学习功能 [预计 5-7 天]
阶段5: 优化与扩展 [预计 持续迭代]
阶段1: 基础框架搭建
目标: 建立项目骨架,完成基础工具和配置系统
任务列表
- 项目结构初始化
- 配置管理模块
- 工具模块 (image_processing, logger)
- 兼容模块基础
- 动作空间定义
验收标准
- 能够生成默认配置文件
- 配置可通过命令行参数覆盖
- 能够截取游戏画面并预处理
- 动作空间定义清晰可扩展
阶段2: 数据收集系统
目标: 实现观战模式数据收集,能够保存 episode 到磁盘
任务列表
- 状态感知与奖励模块
- 动作推断模块
- 经验收集器
- 数据收集脚本
- 数据验证
验收标准
- 能够观战一局游戏并保存完整 episode
- episode 文件包含 (state, action, reward, next_state, done)
- 奖励计算逻辑正确
- 能够从视频文件离线提取数据
阶段3: 训练流程实现
目标: 实现离线训练,能够从保存的 episode 训练模型
任务列表
- 经验回放缓冲区
- Dataset封装
- 模型定义
- DQN训练器
- 训练脚本
验收标准
- 能够从 episodes 目录加载数据
- 训练 loss 稳定下降
- 模型能够保存和恢复
- 训练过程有清晰的日志输出
阶段4: 在线学习功能
目标: 实现对战模式,模型能够实时控制英雄并边玩边学
任务列表
- 策略选择器
- 对战模式收集器
- Agent主控制器
- 在线学习脚本
- 评估脚本
验收标准
- 模型能够控制英雄进行对战
- 探索率随训练步数衰减
- 对战过程中能够持续学习
- 评估脚本能够给出清晰的性能指标
阶段5: 优化与扩展
目标: 提升模型性能,增加高级功能
任务列表
- 模型优化(Dueling DQN、Double DQN等)
- 状态识别增强(血量、位置、金币等)
- 奖励函数优化
- 训练稳定性提升
- 工具与可视化
验收标准
- 模型在测试对局中表现优于随机策略
- 训练过程稳定可复现
- 文档完整,新用户能够快速上手
里程碑定义
Milestone 1: 基础框架完成
Milestone 2: 数据收集可用
- 能够观战并保存 10+ 局完整数据
- 数据格式验证通过
Milestone 3: 离线训练可用
Milestone 4: 在线学习可用
Milestone 5: 性能达标
模块功能规格
Config 模块
- 统一管理项目配置,支持 YAML 文件、命令行参数、默认配置生成
- 核心类:HyperParameters、PathConfig、EnvironmentConfig、Config
Core 模块
- Agent 主控制器,协调各模块完成不同模式的任务
- BaseModel 基类和 SimpleConvNet 实现
- DQNTrainer 训练逻辑
- Policy 策略选择器(Greedy、EpsilonGreedy、Softmax)
Environment 模块
- CompatibilityModule:封装游戏设备接口
- ActionSpace:定义动作空间,提供动作编码/解码
- RewardEvaluator:状态识别 + 奖励计算的统一模块
Data 模块
- ExperienceCollector:收集游戏经验并保存为 episode 文件
- ReplayBuffer:经验回放缓冲区
- Dataset:PyTorch Dataset 封装
Utils 模块
- image_processing.py:图像预处理工具函数
- action_inference.py:从图像差分推断执行的动作
- logger.py:日志记录和输出
Scripts 模块
- collect.py:数据收集脚本
- train.py:训练脚本
- evaluate.py:评估脚本
- generate_config.py:生成默认配置文件
风险与应对
风险1: 状态识别不准确
应对: 先使用简单的模板匹配,后期考虑 OCR 或轻量级识别模型
风险2: 训练不稳定
应对: 使用 target network,调整学习率,添加梯度裁剪
风险3: 奖励稀疏
应对: 添加密集奖励(如存活时间奖励),使用 Reward Shaping
风险4: 样本效率低
应对: 使用 Prioritized Experience Replay,增加训练轮数
风险5: 设备连接不稳定
应对: 添加重连机制,异常处理,定期保存数据
开发规范
代码风格
- 遵循 PEP 8
- 使用类型注解
- 函数添加 docstring
测试要求
版本管理
- 使用 Git 进行版本控制
- 功能开发使用分支
- 重要节点打 tag
文档要求
- 每个模块添加 README
- 复杂函数添加示例
- 定期更新开发日志