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

Unity ML-Agents无法连接求助:环境无响应、AI无输出

问题描述
  • 基于Unity搭建ML-Agents训练场景:3面碰撞后重置Episode并给予负奖励的墙,1面碰撞后给予正奖励的终点线
  • 编写车辆移动脚本(接收Vector2输入控制转向与进退)及Agent脚本,核心代码如下:
    public override void CollectObservations(VectorSensor sensor)
    {
        sensor.AddObservation(transform.position);
        sensor.AddObservation(targetTransform.position);
    }
    
    public override void OnActionReceived(ActionBuffers actions)
    {
        stepCounter++;
        Debug.Log("Step: " + stepCounter);
    
        float moveX = actions.ContinuousActions[0];
        float moveY = actions.ContinuousActions[1];
    
        float distanceToGoal = Vector2.Distance(transform.position, targetTransform.position);
        Debug.Log("Distance to Goal: " + distanceToGoal);
    
        SetReward(-0.01f);
    
        if (distanceToGoal < goalThreshold)
        {
            SetReward(1.0f);
            EndEpisode();
            Debug.Log("Goal Reached!");
        }
    
        Debug.Log("Action Received: MoveX: " + moveX + ", MoveY: " + moveY);
        carController.SetInputVector(new Vector2(moveX, moveY));
    }
    
  • 运行mlagents-learn命令后,Unity游戏无响应,控制台仅显示1次Episode启动日志,无AI输入/输出日志;1-2分钟后CMD提示[WARNING] Restarting worker[0] after 'The Unity environment took too long to respond.
  • 行为配置:2个连续动作(控制转向、进退),观测空间大小设为6(对应车辆与目标的Vec3位置)
  • 版本信息:Unity ML-Agents插件2.0.1,Python mlagents 0.30.0,Python 3.9.0,PyTorch 1.7.1;已解决numpy等依赖兼容性问题;设置maxstep后Unity每20ms重启Episode,问题未解决;在虚拟环境中运行训练命令
排查与解决方案

1. 版本兼容性修复

Unity ML-Agents插件2.0.1对应的Python mlagents版本应为0.29.0,版本不匹配会导致环境通信异常:

  • 执行命令降级Python端mlagents:pip install mlagents==0.29.0

2. 观测空间配置匹配

当前Agent脚本传递了2个Vec3(共6个值),但2D场景下冗余的Z轴信息可能引发配置不匹配:

  • 修改CollectObservations代码,仅传递Vector2位置:
    public override void CollectObservations(VectorSensor sensor)
    {
        sensor.AddObservation(new Vector2(transform.position.x, transform.position.y));
        sensor.AddObservation(new Vector2(targetTransform.position.x, targetTransform.position.y));
    }
    
  • 同步修改Behaviour组件的Vector Observation -> Space Size为4;确认Stacked Vectors设为0(未启用观测堆叠)

3. 修正Episode重置逻辑

设置maxstep后频繁重启Episode,说明碰撞触发逻辑存在误触发:

  • 检查墙的碰撞脚本,确保仅在车辆碰撞时触发重置:
    private void OnCollisionEnter2D(Collision2D other)
    {
        Agent agent = other.GetComponent<Agent>();
        if (agent != null)
        {
            agent.SetReward(-1.0f);
            agent.EndEpisode();
        }
    }
    
  • 验证goalThreshold值合理性,避免初始距离小于阈值导致Episode直接结束

4. 规范训练启动流程

  • 先运行mlagents-learn命令(可指定配置文件:mlagents-learn config/ppo.yaml --run-id=car_train),等待命令行提示"Start training by pressing the Play button in the Unity Editor."后,再点击Unity播放按钮

5. 解决通信端口阻塞

ML-Agents默认使用5004端口,若被占用会导致超时:

  • 运行训练命令时指定自定义端口:mlagents-learn --port=5005,同时在Unity的Academy组件中设置相同端口号

6. 检查Agent组件配置

  • 确认车辆对象的Agent组件中,Behaviour Parameters的Action Space设为Continuous,Continuous Action Size设为2
  • 确保场景中存在Academy组件(缺失则手动添加)
  • 关闭Unity的Auto Sync Transforms选项(路径:Edit -> Project Settings -> Physics 2D),减少性能开销避免超时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:13:16