时间: 2025-11-15 主题: 架构重构、模块化设计和完整训练流程实现
environment/compatibility.py - 在 __init__ 末尾添加:
from environment.action_space import ActionSpace
self.action = ActionSpace(compatibility_layer=self)
__init__: 定义动作空间 {'move': 4, 'attack': 10, 'skill': 10}get_action_keys(): 返回激活的action名称get_action_dims(): 返回每个action的维度get_total_dim(): 返回总维度(供模型使用)output_to_cmd(): 模型输出转为cmd字典get_cmd(): 从兼容层获取当前状态的action数据execute_action(): 执行动作(委托给兼容层)data/data_manager.py - 数据管理器(HDF5 ↔ 项目接口)
collect(): 收集数据(通过兼容层截图,支持interval参数,默认1秒)save(): 保存到HDF5load(): 读取数据update(): 更新数据集(添加action字段)info(): 查询数据集信息data/training_buffer.py - 训练缓冲区(数据集 ↔ 模型接口)
load_from_data_manager(): 使用DataManager加载数据add(): 添加样本sample(): 随机采样batch(返回动态字典)preprocess(): 预处理(占位)HDF5文件 ↔ DataManager ↔ 项目
DataManager ↔ TrainingBuffer ↔ 模型/训练
scripts/collect_from_video.py - 离线视频收集
python scripts/collect_from_video.py --video moive/1.mp4 --max-frames 100 --skip-frames 2
scripts/collect_from_device.py - 在线设备收集
python scripts/collect_from_device.py --config config/my_device.yaml --duration 60 --interval 1.0
config/agent.config.yaml.inenvironment/reward.pylabel() 方法:标记action和reward到HDF5update() 方法,统一使用 label()int(fps * interval) - 1detect_movement_direction() 在离线模式下的问题core/trainer.pyscripts/label_data.py - 标记数据(离线模式,无需设备)scripts/train.py - 训练模型scripts/battle.py - 在线对战(使用训练好的模型)scripts/collect_from_video.py - 支持interval参数scripts/collect_from_device.py - 在线收集1. 收集:Video → CompatibilityLayer → DataManager → HDF5 (image, timestamp)
2. 标记:HDF5 → DataManager.label() → HDF5 (+ move, attack, reward)
3. 训练:HDF5 → TrainingBuffer → Trainer → Model
4. 对战:Model → CompatibilityLayer → Device
config/config.py - 简化配置结构environment/reward.py - 奖励计算data/data_manager.py - 添加label()方法data/training_buffer.py - 简化,只读取已标记数据environment/compatibility.py - 离线模式初始化autowzryutils/video_reader.py - 支持interval参数core/trainer.py - 极简DQN训练器core/lightweight_dqn.py - view()改为reshape()scripts/label_data.py - 标记脚本scripts/train.py - 训练脚本scripts/battle.py - 对战脚本scripts/collect_from_video.py - 支持intervalquickstart.md - 完整流程文档