日期: 2025-11-22 类型: 功能优化
在训练过程中,action rewards和state rewards需要保持单位统一,以确保奖励机制的一致性。原有的action_rewards设计中,只有向右移动有奖励,其他方向没有奖励,这与state rewards(如alive=0.01)的单位不统一。
文件: 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倍奖励)
设计原理:
文件: 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: 完全兼容
_compute_action_reward() 方法通过 self.action_rewards_tensors[i][action_indices] 查表获取奖励训练时的action reward计算:
预期效果:
修改位置: 第174-179行
修改内容:
sum_reward() 方法get_action_slices() 和 get_action_rewards_list() 方法action_rewards 属性说明,体现单位统一原则修改位置: 第289行
修改内容:
暂定10倍奖励(向右0.1 vs 其他0.01)。如果后续训练发现:
验证方法:
下次训练时关注:
本次修改调整了action_rewards的奖励机制,使其与state_rewards保持单位统一。修改简单清晰,兼容性良好,预期能够改善模型的训练效果。