You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中MLAgents智能体陷入左右循环问题排查求助

解决智能体在移动障碍物关卡陷入往复循环的问题

核心问题分析

智能体陷入左右往复循环,本质是策略收敛到了局部最优解:它发现左右移动的惩罚极低甚至没有,而尝试射击红点的风险(比如击中障碍物受罚、没命中浪费时间)更高,最终选择了无风险但无效的循环行为。计时器终止卡顿episode只是被动止损,无法从根源上打破局部最优。

针对性解决方法

1. 重构奖励机制,打破循环动机

  • 增加每步时间惩罚:给每个时间步施加微小的负奖励(如-0.01),让循环行为的累积惩罚远高于尝试射击的成本,逼智能体主动寻找完成任务的路径。
  • 强化目标奖励权重:提高击中红点的正奖励(如从5提升到10),让完成任务的收益远大于循环的“躺平”收益。
  • 添加循环行为主动惩罚:记录智能体最近N步的位置,若连续多步位置方差低于阈值(判定为往复循环),直接施加较大负奖励(如-1.0)。
  • 优化障碍物击中惩罚:给击中障碍物施加适度负奖励(如-0.5),既避免智能体乱射,又不会因惩罚过度导致不敢行动。

示例奖励函数修改:

def compute_reward(self, action, is_terminal):
    reward = -0.01  # 每步时间惩罚
    if self.hit_red_dot:
        reward += 10.0  # 高权重目标奖励
    if self.hit_obstacle:
        reward -= 0.5  # 障碍物击中惩罚
    # 检测循环行为
    if len(self.position_history) >= 6:
        recent_pos = np.array([p.x for p in self.position_history[-6:]])
        if np.var(recent_pos) < 0.02:  # 位置波动极小判定为循环
            reward -= 1.2
    self.position_history.append(self.transform.position)
    return reward

2. 优化观测空间,让智能体“看全”环境

当前的RayPerception可能没有提供足够的信息让智能体预判障碍物移动或定位红点:

  • 增加射线数量与覆盖范围:将射线数量从默认的8-10提升到12-16,确保覆盖障碍物移动方向和红点可能出现的区域。
  • 加入障碍物速度观测:在RayPerception设置中开启include_velocity,让智能体获取障碍物的移动方向和速度,学会预判而非被动躲避。
  • 确认红点标签检测:检查RayPerception的detection_tags是否包含红点的标签,确保智能体能感知到目标位置。

示例RayPerception配置:

ray_perception:
  ray_length: 12.0
  ray_count: 14
  detection_tags: ["RedDot", "MovingObstacle"]
  include_velocity: true
  cast_shadows: false

3. 调整PPO超参数,避免过早收敛到局部最优

  • 降低学习率并启用衰减:将初始学习率从5e-4降至3e-4,并设置线性衰减,让智能体在训练后期有机会跳出局部最优。
  • 减小折扣因子gamma:将gamma从0.99调至0.95,降低智能体对长期“无惩罚”的权重,更关注当前步骤的奖励收益。
  • 提高熵系数:将entropy_coef从0.01提升到0.02,延长探索期,让智能体在多轮训练后仍保持对新策略的尝试。

示例PPO配置修改:

ppo:
  learning_rate: 3e-4
  learning_rate_schedule: linear
  gamma: 0.95
  entropy_coef: 0.02
  entropy_coef_schedule: linear
  clip_param: 0.2
  value_function_coef: 0.5
  max_grad_norm: 0.5

4. 增强环境随机性,打破固定循环模式

如果障碍物的移动周期、速度、初始位置固定,智能体很容易学会跟着循环:

  • 随机化障碍物的移动速度(如在1-2m/s范围内随机)。
  • 随机化障碍物的初始位置和移动方向(比如一半概率从左往右,一半从右往左)。
  • 随机化红点的刷新位置,避免智能体依赖固定射击路径。

5. 优化智能体动作逻辑

  • 允许智能体在移动的同时射击,提升操作灵活性,避免因“躲障碍物就无法射击”被迫循环。
  • 调整射击冷却时间,避免智能体因射击间隔过长而选择循环等待。

验证步骤

  1. 先调整奖励机制和观测空间,快速验证是否能打破循环。
  2. 若无效,再调整PPO超参数,逐步降低学习率并提高熵系数。
  3. 最后加入环境随机性,确保智能体的策略具备泛化性。

内容的提问来源于stack exchange,提问作者UniSlay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:15:42