autowzry-agent

Action Rewards机制调整

日期: 2025-11-22 类型: 功能优化


背景

在训练过程中,action rewards和state rewards需要保持单位统一,以确保奖励机制的一致性。原有的action_rewards设计中,只有向右移动有奖励,其他方向没有奖励,这与state rewards(如alive=0.01)的单位不统一。


修改内容

1. 调整action_rewards奖励值

文件: environment/action_space.py

修改位置: 第76行

修改前:

'move': [0.0, 0.0, 0.0, 0.1]  # 上, 下, 左, 右(向右+0.1)

修改后:

'move': [0.01, 0.01, 0.01, 0.1]  # 上, 下, 左, 右(所有移动+0.01,向右+0.1,10倍奖励)

设计原理:

2. 删除过时测试代码

文件: environment/action_space.py

修改位置: 第306-311行

删除内容:

# 测试sum_reward
print("\n=== Sum Reward ===")
test_action = {'move': [0.0, 0.0, 0.0, 1.0], 'attack': [0.0] * 10}
reward = action_space.sum_reward(test_action)
print(f"Test action: {test_action}")
print(f"Action reward: {reward}")  # 应该是 1.0 * 0.1 = 0.1

原因: sum_reward() 方法已在之前的架构重构中删除,测试代码调用不存在的方法


影响范围

兼容性检查

trainer.py: 完全兼容

训练行为变化

训练时的action reward计算:

预期效果:


文档更新

ARCHITECTURE.md

修改位置: 第174-179行

修改内容:

  1. 删除已废弃的 sum_reward() 方法
  2. 添加新增的 get_action_slices()get_action_rewards_list() 方法
  3. 更新 action_rewards 属性说明,体现单位统一原则

修改位置: 第289行

修改内容:


设计决策

为什么所有移动都给基础奖励?

  1. 鼓励移动: 在游戏中,移动通常比站立不动更有利(躲避技能、追击敌人等)
  2. 单位统一: 0.01和alive状态的奖励一致,表示”做了有益的事”
  3. 保持倾向: 向右移动保持10倍奖励(0.1),引导模型学习特定策略

为什么是10倍而不是其他倍数?

暂定10倍奖励(向右0.1 vs 其他0.01)。如果后续训练发现:


测试验证

验证方法:

下次训练时关注:


总结

本次修改调整了action_rewards的奖励机制,使其与state_rewards保持单位统一。修改简单清晰,兼容性良好,预期能够改善模型的训练效果。