ML-Agents(三)3DBall例子

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

ML-Agents(三)3DBall例子

煦阳   2020-03-29 我要评论
# ML-Agents(三)3DBall例子 前一周忙着公司的考试,都没有怎么学新的,今天补上~ 之后的记录,我准备先只研究官方的示例,主要是把研究过程中的疑惑和想法记下来。首先我先补充一下如何利用GPU进行训练,结合(一)中的安装方法,需要CUDA v10.0,cuDNN v7.6.5 for CUDA v10.0,对应Tensorflow的版本是2.0.1。 ## 一、利用GPU进行训练 前置工作在文章(一)中都有,原先的环境可以保留。现在可以拉一个新的ml-agents源码,然后修改`ml-agents`文件下的`setup.py`中如下图: ![image-20200319233335183](https://img2020.cnblogs.com/blog/1659542/202003/1659542-20200329004305918-2041525782.png) 原来是`"tensorflow>=1.7,<2.1"`,现在修改为`"tensorflow-gpu>=1.7,<2.1"`,然后再在Anaconda中新建一个环境,如下: ![image-20200319234037666](https://img2020.cnblogs.com/blog/1659542/202003/1659542-20200329004305192-2003581869.png) 建好后在命令行中重新安装环境(别忘记cd到新的ml-agents源码),分别输入: `pip install -e ml-agents-envs -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com` `pip install -e ml-agents -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com` 就是分别安装两个环境,可以发现他会自动下载`tensorflow_gpu-2.0.1`,如下图: ![GPU](https://img2020.cnblogs.com/blog/1659542/202003/1659542-20200329004304425-1500806339.jpg) 配置好后,在Unity对应的Agent脚本上,也需要将`Inference Device`勾选为`GPU`,然后按以前的方法开始训练,就可以了。 ![image-20200319233940196](https://img2020.cnblogs.com/blog/1659542/202003/1659542-20200329004303332-428982462.png) ## 二、3DBall 官方示例中,3Dball是一个比较简单的例子,主要运用了reinforcement learning(强化学习)。就是小球在平台上,萌版平台要控制自己绕x、z轴旋转,从而保持小球在自己头上不掉下来。 ![3dBall](https://img2020.cnblogs.com/blog/1659542/202003/1659542-20200329004302776-1038401911.gif) 现根据官方文档翻译一下: - 设置:一个平衡球任务,agent需要保持小球在其脑袋上的平衡 - 目标:Agent必须尽可能长时间地保持球在头顶的平衡 - Agent设置:环境中包含12个想同类型的agent,全部使用同样的行为参数 - Agent奖励设置: - 小球每一步保持在方块头顶上就奖励+0.1 - 如果小球掉落,惩罚-0.1 - 行为参数 - 矢量观察空间:8个变量,包括agent方块的旋转角度(两个值,x、z轴方向),球和方块之间的相对位置关系(Vector3),球上刚体的速度(Vector3) - 矢量动作空间:类型为`Continuous`,`Size`为2,分别控制绕x轴旋转、绕z轴旋转 - Float属性:三个 - scale(比例):小球的比例,默认为1,推荐最小值为0.2,最大值为5 - gravity(重力):重力加速度,默认为9.81,推荐最小值4,最大值为105 - mass(质量):小球的质量,默认为1,推荐最小值为0.1,最大值为20 - 基准平均奖励:100 OK,上面是借鉴官方文档,随意翻译了一下,大概可以了解3DBall主要用途和一些主要参数,里面的Float属性我这里不是很明白,在代码中是用在`Agent.InitializeAgent()`中的`SetResetParameters()`,这个方法顾名思义应该是对Agent进行初始化的操作。也许在这里,我们可以任意修改小球的比例、质量、重力加速度来改变小球在不同的情况下,训练的效果如何吧。 ## 3DBall代码分析 看到目前为止,ml-agents其中的精华就在agent的脚本如何设置了,我们下面来分析一下`Ball3DAgent`代码。 ### 初始化 ```c# public class Ball3DAgent : Agent { [Header("Specific to Ball3D")] public GameObject ball; Rigidbody m_BallRb; IFloatProperties m_ResetParams; public override void InitializeAgent() { m_BallRb = ball.GetComponent

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们