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

Unity ML-Agents旧版DQN代码适配新版本及环境状态逻辑疑问

ML-Agents新旧版本API适配与状态获取逻辑说明

旧版API适配当前版本(2.0及以上)的代码

1. 每轮episode重置与初始状态获取

# 重置Unity环境,训练时设置train_mode=True可关闭渲染提升运行速度
env.reset(train_mode=True)
# 获取指定行为的步骤数据,behavior_name与Unity侧Behavior Parameters组件的配置值一致
decision_steps, terminal_steps = env.get_steps(behavior_name)
# 单智能体场景下取第一个智能体的初始状态
state = decision_steps.obs[0][0]

2. 传入动作与环境反馈获取

# 为指定智能体设置动作,单智能体场景直接取decision_steps的第一个agent_id即可
env.set_action_for_agent(behavior_name, decision_steps.agent_id[0], action)
# 执行一步环境模拟
env.step()
# 重新获取步骤数据
decision_steps, terminal_steps = env.get_steps(behavior_name)

# 解析返回结果
if len(terminal_steps) > 0:
    # 智能体本轮episode结束,从终止步取数据
    next_state = terminal_steps.obs[0][0]
    reward = terminal_steps.reward[0]
    done = True
else:
    # 智能体需要继续决策,从决策步取数据
    next_state = decision_steps.obs[0][0]
    reward = decision_steps.reward[0]
    done = False

旧版代码返回内容对应state的原因

旧版API中的vector_observations对应的是Unity侧为智能体配置的向量观测值,本质是将智能体感知到的自身属性(比如位置、速度)、环境相关属性(比如目标位置、障碍物距离)拼接成的一维向量,完全符合强化学习定义中环境状态(state)的作用:作为智能体决策的输入依据,所以旧代码取vector_observations[0]就是单智能体场景下的state。

你编写的新版状态获取代码说明

你写的代码逻辑是正确的,各部分含义如下:

  • decision_steps, terminal_steps = env.get_steps(behavior_name):当前版本ML-Agents将智能体的步骤数据拆为两类:
    • decision_steps存储所有当前需要输出动作进行决策的智能体的观测、奖励、ID等数据
    • terminal_steps存储所有当前episode已经结束的智能体的相关数据
  • state = decision_steps.obs[index][0,:]:
    • obs是观测数组的列表,每个元素对应一个你在Unity侧配置的观测源,仅配置向量观测时index填0即可,同时配置视觉、向量观测时按配置顺序选择对应索引
    • [0,:]表示取列表中第一个智能体的全部观测维度值,单智能体场景固定使用该写法,多智能体场景将0替换为对应智能体的索引即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:05