当前位置: 首页>前端>正文

unity3D MQTT插件 unity ml-agent

unity的ML-agent训练流程

1.配环境

1)创建虚拟环境

下载好anaconda后打开anaconda prompt,新建虚拟环境,命名为Unity,通过以下指令:

conda create -n Unity python=3.10

接下来提过指令

conda activate Unity

激活虚拟环境Unity

2)在虚拟环境内配置需要用的库

在GitHub上下载unity官方的ml-agent包仓库,下载到位置

D:\Programming\unity\projects 
#只是本人的存储位置,具体存储位置由你自行决定

在anaconda prompt通过依次输入指令导入库文件

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

一般会因为网速问题导致报错超时,可将指令改为如下形式

pip install -e ./ml-agents-envs -i https://pypi.tuna.tsinghua.edu.cn/simple

pip --default-timeout=100 install -e ./ml-agents-envs

等待提示导入完成后输入指令

mlagents-learn --help

若出现提示文本,则环境配置成功

2.训练

0)编写配置文件

带有各类训练参数配置的文件,格式为.yaml

1)启动训练程序

打开anaconda prompt,在anaconda prompt内cd到ml-agent包所在的路径后,例如使用3DBall的config文件训练模型,输入以下指令

#config文件路径          #id可任意取名
mlagents-learn config/ppo/3DBall.yaml --run-id=test --train

接着会出现unity标识和和[INFO]开头的提示信息,此时可打开unity,启动游戏,如果会开始刷新[INFO]开头的提示信息,说明已经开始正常训练模型。(图用的是Basic.yaml)

unity3D MQTT插件 unity ml-agent,unity3D MQTT插件 unity ml-agent_机器学习,第1张

训练过程会根据config文件设置的步数显示奖励数据(此处设置的是每1000步输出一次奖励数据)

unity3D MQTT插件 unity ml-agent,unity3D MQTT插件 unity ml-agent_unity3D MQTT插件_02,第2张

如想手动中断训练,可在anaconda prompt按下快捷键Ctrl+C中断

2)通过tensorboard查看训练统计参数

输入以下指令

#训练的模型保存路径
tensorboard --logdir result/xxx

会输出一个tensorboard网址,打开则为训练统计图

unity3D MQTT插件 unity ml-agent,unity3D MQTT插件 unity ml-agent_机器学习_03,第3张

3)获取模型并启用

模型训练完后,窗口会提示训练好的模型文件(格式为.onnx)存放的位置,可将模型文件拖入unity项目中,将训练的智能体中找到Behavior Parameters组件,将其中的Model属性修改为训练后生成的模型文件,即可启动游戏看训练的效果。

*.补充知识

学习过程:通过配置智能体上的各类组件和脚本,然后通过anaconda prompt运行训练脚本进行学习。

必要的组件:

1)Behavior Parameters:用于调节驱动智能体输入的各类参数

unity3D MQTT插件 unity ml-agent,unity3D MQTT插件 unity ml-agent_游戏引擎_04,第4张

几个重要的参数

Space Size:输入的维度

Continuous Action:输出的连续动作数

Discrete Branch:输出的离散动作数

Model:使用的模型

2)Decision Requester:设定智能体如何采取决策

unity3D MQTT插件 unity ml-agent,unity3D MQTT插件 unity ml-agent_机器学习_05,第5张

Decision Period:采取决策的时间间隔

Decision Step:采取决策的步数

Take Actions Between:不采取决策是否执行动作

3)继承自Agent类的C#脚本:我们自己编写的用于设置训练细节的脚本

通过继承Agent类,可重写以下方法:

Initialize方法:初始化环境,获取组件信息,设置参数在这里完成。

CollectObservations方法:这个方法会收集当前游戏的各种环境,包括智能体的位置,速度等信息,ML-Agents会把这些信息自动生成Tensor,进行计算。这里相当于设置神经网络的输入,如果是摄像机输入而不是向量输入的情况下此函数什么都不用做。输入的变量要进行标准化!

OnActionReceived方法:实现的是整个游戏中一个Step中的操作,接收神经网络的输出,使其转换为智能体的动作,设置奖励函数,并且判断游戏是否结束。建议将EndEpisode方法在该方法中调用而不是在Update中调用。

OnEpisodeBegin方法:每次游戏结束后,重开一轮需要做的处理,比如重置位置信息等。

Heuristic方法:如果想自己操作智能体,定义该方法,游戏就会采集玩家的输出信息,可以学习玩家的思维,大大促进训练教程。

CollectDiscreteActionMasks方法:在特殊情况下屏蔽某些不需要的AI操作(如地图边界阻止)

4)Demonstration Recorder:记录玩家操作的组件,记录完存储为.demo文件

unity3D MQTT插件 unity ml-agent,unity3D MQTT插件 unity ml-agent_unity3D MQTT插件_06,第6张

Record:是否记录操作,勾选则在运行时记录

Num Steps To Record:记录的步数,值为0时表示无穷大

Demonstration Name:录制后得到的文件名

Demonstration Directory:录制文件存放的路径,图中为{项目路径}/Demo

若要使用.demo文件进行训练,需要在.yaml文件中加入以下配置

behaviors:
  trainDemo: #与.demo文件名一致
    trainer_type: ppo
    reward_signals:
      gail:
        strength: 0.5
        demo_path: Demo/trainDemo.demo
    behavioral_cloning:
      strength: 0.5
      demo_path: Demo/trainDemo.demo
    max_steps: 500000
strength: 0.5
    demo_path: Demo/trainDemo.demo
behavioral_cloning:
  strength: 0.5
  demo_path: Demo/trainDemo.demo
max_steps: 500000



https://www.xamrdz.com/web/2qb1964461.html

相关文章: