如何指定mlagents-learn测试参数?Unity中ActionBuffers填充位置问询
Unity ML-Agents 填充ActionBuffers数组实现AI控制跳跃的操作位置
要让mlagents-learn测试跳跃动作,核心是在Agent子类的对应方法里处理动作映射与观测收集,具体操作位置如下:
1. 配置动作空间
在Agent的初始化方法里定义动作类型,因为跳跃是「跳/不跳」的二选一离散动作,设置离散动作分支:
public override void Initialize() { // 定义1个离散动作分支,分支包含2个可选值(0=不执行跳跃,1=执行跳跃) ActionSpec = ActionSpec.MakeDiscrete(2); }
2. 处理AI动作(映射ActionBuffers到跳跃逻辑)
在OnActionReceived(ActionBuffers actions)方法中,读取ActionBuffers里的离散动作值,触发你已有的跳跃逻辑:
public override void OnActionReceived(ActionBuffers actions) { // 从离散动作缓冲区中取出第一个分支的动作值 int jumpTrigger = actions.DiscreteActions[0]; // 映射到你已实现的跳跃逻辑,和空格键触发的逻辑完全一致 if (jumpTrigger == 1) { Jump(); // 调用你原本检测空格键时执行的跳跃方法 } // 补充奖励逻辑(关键:让AI明确行为的对错) // 例如:跳跃后成功避开障碍给+1奖励,掉出场景给-1奖励 }
3. 保留手动测试(可选)
如果需要用空格键手动测试AI的行为逻辑,可以在Heuristic方法里把键盘输入映射到ActionBuffers:
public override void Heuristic(in ActionBuffers actionsOut) { var discreteActions = actionsOut.DiscreteActions; // 检测空格键,按下时设置动作值为1,否则为0 discreteActions[0] = Input.GetKey(KeyCode.Space) ? 1 : 0; }
4. 收集关键观测数据
在CollectObservations(VectorSensor sensor)方法里添加AI决策需要的观测信息,比如:
public override void CollectObservations(VectorSensor sensor) { // 添加立方体的垂直速度(判断是否处于跳跃状态) sensor.AddObservation(GetComponent<Rigidbody2D>().velocity.y); // 添加立方体是否接触地面(判断是否具备跳跃条件) sensor.AddObservation(isGrounded); // 可补充其他观测,比如距离障碍物的水平距离等 }
额外注意
- 确保Agent组件挂载在2D立方体对象上,且Behavior Parameters组件已关联对应的行为配置文件;
- 奖励函数的设计直接影响AI学习效果,需明确正向/负向行为的奖励规则。
内容的提问来源于stack exchange,提问作者Laurent Crivello
相关产品推荐
相关产品推荐

