ML-Agents环境配置(2020.7.28)

ML-Agents环境配置

最近在学强化学习,从周博磊老师的强化学习纲要课程中看到了ML-Agents,挺有意思的,试试效果。环境配置花了一天,写个博客记录一下。

版本:
系统:win10
Unity Version:2018.3.14
ML-Agents Version:Release 4 ,July 15, 2020
tensorflow:1.7.1
python:3.6

Unity 安装

Unity个人版免费,放心下载。
中国增强版Unity官网:地址
下载需要注册,建议安装2017及其以上的版本,我下载了2018.3.14版本。
在这里插入图片描述
要下载两个文件:
点击 Unity Installer 进行下载,该文件是Unity的安装程序。
点击 Unity Hub 进行下载,该文件可以让多个Unity版本共存(即使你不想安装它,在第一次打开Unity软件后也会要求你安装它)

安装流程

Unity安装:
(从参考连接中粘的,详细见参考链接)
双击 UnityDownloadAssistant-版本号.exe 进行软件安装
点击按钮 Next>
在这里插入图片描述

进入协议许可界面,勾选同意,点击按钮 Next>
在这里插入图片描述

进入选择组件界面。
在这里插入图片描述

Unity 版本号 ,首次下载必须勾选,它是一个编译器。
Microsoft Visual Studio Community 版本号 ,一个开发工具集,建议使用,用来编写C#代码。
如果电脑上已安装了VS或者想用其他IDE编写代码则无需勾选,在Unity软件的设置中可以改变默认编译工具。
Android Build Support ,允许导出安卓应用程序包(APK)
iOS Build Support ,允许导出Apple程序应用文件(IPA)
以上建议勾选,其他的都和字面意思一样,不过就是导出的适用平台不同而已,按需勾选即可。
如果以后想补充安装组件,仍和初始安装的流程一致,只不过只要勾选你想要的组件就好了,其他的不要勾选。
Unity install folder ,选择安装路径,哪里都可以
Specify location of files downloaded during installation ,放哪里都可以,记得位置就好,一般存放的是安卓支持工具、iOS支持工具等小文件。

我在安装过程中,安装VS2017出错,我选择了跳过,目前没影响使用。

安装完成后不用着急打开Unity,还要下载Unity Hub。

Unity Hub安装+激活
普通安装就好了,打开后先登录或注册。

初始安装是没有许可证的,接下来选择右上方的激活许可证,选择个人版本
在这里插入图片描述

在这里插入图片描述

两个选项都可以选择,但是个人推荐的是我不以专业身份使用Unity,
然后确认激活即可,之后许可证过期之后,可以根据这个步骤重新激活,就目前情况来看试用版目前可以一直使用的

在Hub中可以直接下载Unity,更加方便,但只能下载比较新的几个版本。

ML-Agents下载与环境配置

文件下载

下载地址

我下的是当前的最新版,Release 4
注意自己的下载路径,后续训练要用到
注意:下载后的文件不要放在中文路径下,我因为这个,最终端口通信没反应,找了大半天的原因TAT

环境配置

1.安装Anaconda

我已经有了,此步略。

2.在Anaconda中创建ML-agent环境
conda create -n ml-agents python=3.6

结果:
在这里插入图片描述

3.激活项目环境
activate ml-agents
4.安装Tensorflow
pip install tensorflow==1.7.1
5.安装ML-Agent扩展工具
pip install mlagents
6.安装环境依赖

首先在cmd中找到之前的下载安装路径并激活ml-agents环境

在这里插入图片描述
(1)配置相关环境一

cd ml-agents
pip install -e ./

(2)配置相关环境二(别忘了返回路径)

cd ..
cd ml-agents-envs
pip install -e ./

全部成功就没有问题了。

7.启动项目

(1)打开Unity

(2)打开新工程
Release 4下的工程文件是:ml-agents-release_4\Project
(3)在Unity下打开project面板的Assets/ML-Agents/Examples/3DBall/Scenes/,双击3DBall,可以看到场景。
在这里插入图片描述
在这里插入图片描述
(4)配置环境
1.Edit > Project Settings > Player
勾选Run in Background
Display Resolution Dialog设置为Disabled.
在这里插入图片描述
2.File > Build Settings
勾选Development Build
点击Add Open Scenes,加入当前环境
点击Build,新建一个文件夹保存
在这里插入图片描述

8.开始训练

(1)检测1-6步是否安装成功

命令行激活环境,并输入

mlagents-learn

如果任意路径此命令都不会出现错误提示,代表安装成功。

你应该会看到如下画面
在这里插入图片描述
(2)键入安装路径,开始训练

mlagents-learn config/ppo/3DBall.yaml --run-id=3DBall --train

官方最新的release doc给的训练指令为

mlagents-learn --env=<env_name> --run-id=
此命令并非训练指令,如需训练请在结尾加上–train

mlagents-learn --env=<env_name> --run-id= --train
同样

是训练的路径,一般默认config/ppo/xxx.yaml

<env_name>(可选填)关于Unity中环境搭配(类似Anaconda中环境搭配)

是训练结果的名称,不同的训练要修改run-id,否则直接–train会提示你命名重复,可以用–force强制覆盖上一次训练结果。
结果:

在这里插入图片描述
Unity中在3DBall页面点击Play运行,应该会看到:
在这里插入图片描述
我之前这步一直没有反应,是因为我的文件路径有中文。

Unity中训练画面,训练的时候动得特别快:
在这里插入图片描述
可以通过在命令行里Ctrl+C来终止训练

9. 查看训练结果

终止训练后,训练结果会保存到:ml-agents-release_4/results/<behavior_name>/<behavior_name>.nn

运行结果会提示你训练的.nn文件保存至哪里
在这里插入图片描述
在这里插入图片描述
然后,我们把此文件命名为3DBall_New.cnn,把此文件拖入Unity此路径下 :Project/Assets/ML-Agents/Examples/3DBall/TFModels/
在这里插入图片描述
按下图所示替换,然后再次运行游戏场景即可(注意要替换预制体中的而不是游戏场景中的)。
在这里插入图片描述
把模型拖过去
在这里插入图片描述
替换完成训练结果
在这里插入图片描述
这时候点击play,就是你自己训练模型的结果了。

之后学习怎么用它创建自己的环境,大家有没有什么好的教学资料推荐呢~

参考链接

Unity安装参考
官方配置文档
ML-Agents安装参考链接
ML-Agents配置视频

### 解决 Unity ML-Agents 中 NullReferenceException 的方法 `NullReferenceException: Object reference not set to an instance of an object` 是一种常见的运行时错误,通常发生在尝试访问未初始化的对象或变量时[^1]。这种错误可能由多种原因引起,特别是在复杂的项目结构中,例如使用 Unity ML-Agents 进行无人机寻路模拟 (drone_seek.cs)。 以下是可能导致此错误的原因以及解决方案: #### 1. **对象未正确初始化** 如果脚本中的某个组件或游戏对象在 `AgentReset()` 方法或其他逻辑中被引用,但该对象尚未实例化,则会触发此类异常。 建议检查以下内容: - 确认所有通过 `GetComponent<T>()` 或其他方式获取的游戏对象都已正确定义并附加到场景中的物体上。 - 如果某些对象仅在玩家控制下创建(而非预设),则需验证它们是否存在后再调用其属性或方法。 ```csharp if (someGameObject != null && someComponent != null) { // 安全操作 } else { Debug.LogError("Some GameObject or Component is missing!"); } ``` #### 2. **Academy 和 Brain 配置问题** ML-Agents 使用 Academy 来管理环境的行为模式。当强制重置 (`ForcedFullReset`) 被触发或者环境步数更新(`EnvironmentStep`)期间出现问题时,可能会引发类似的错误。这可能是由于配置文件缺失、Brain 类型设置不匹配等原因造成的。 确保以下几点无误: - 场景中有且只有一个 Academy 对象存在; - Agents 所关联的 External/Player Brains 已经适当地绑定到了对应的训练模型之上;如果没有加载任何外部神经网络权重数据,请切换回默认随机策略以测试基础功能是否正常工作[^2]。 #### 3. **代码逻辑缺陷** 对于特定情况下的自定义行为实现不当也可能造成崩溃现象发生。比如,在 Drone 寻找目标过程中涉及到位置计算部分可能出现除零运算或者是数组越界读取等问题都会间接导致上述提到的那种类型的 runtime exception 出现。 因此需要仔细审查相关业务流程里的每一处细节处理措施,并加入必要的边界条件判断语句来规避潜在风险点。 --- ### 示例修复代码片段 下面提供了一个简单的例子展示如何改进原有程序防止出现 NullPointerException: ```csharp public override void AgentReset() { targetPosition = GetRandomTargetPosition(); if(transform != null){ transform.position = startPosition; } else { throw new System.Exception("Transform component cannot be found."); } } private Vector3 GetRandomTargetPosition(){ float x = Random.Range(-range, range); float z = Random.Range(-range, range); return new Vector3(x,0,z); } ``` 以上示例展示了在重新设定 agent 初始状态之前先确认当前实体节点确实拥有有效的 Transform 属性再执行后续动作的重要性。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值