Unity3D ML-Agent-0.8.1 学习五(部分源码介绍)

Unity3D ML-Agent-0.8.1 学习五(源码分析)

写的目的

本篇想从部分训练和通信的类的源码开始,探究ml-agent的训练运作流程。话不多说,我们从Academy.cs开始吧。

Academy

这个是干嘛的很多资料都有,我就说说他里面干了点什么吧。代码就不贴了,大家都能看到,就讲下基本的流程。
Academy主要提供一个训练的环境,包括训练的参数,和环境参数,维护一个BroadcastHub,通过Batcher(包含Communicator,套了个壳)与外界建立通信,同时也维护很多个大脑Brain(大脑里拥有同一个Batcher,可以用于通信),初始化InitializeEnvironment()的时候会做各种初始化,检测是否有训练大脑,打开和Python通信,设置委托,写log等等。重要的还是每次是在FixedUpdate()里进行迭代的,判断一些重置和退出的命令,然后进行委托的调用,环境参数等,所有的通信数据采用谷歌的Protobuf

Batcher

这个是大脑和外界的通信,里面会维护一个大脑的通信和数据队列,每个大脑在有需要的时候,或者Academy调用了一次done的时候,通过这个跟外界通信。其实自身里面拥有一个Communicator,用于跟外界通信,通过封装UnityRLOutput,向外输出信息,得到外界的输入UnityInput,用来更新agent信息。

Brain

大脑,可以设置各种参数,拥有BrainParameters参数设置类,和Batcher,以及维护一个代理信息的字典集合。

Communicator

这个只是个接口,定义了初始化方法,和通信方法。主要实现类有RPCCommunicatorSocketCommunicator
RPCCommunicator:内部是用ProtoBufferGrpcgRPC是由Google主导开发的RPC框架,方便进程间通信。目前发现训练使用这个来通信的。
SocketCommunicator:暂时未发现用这个来通信,估计是以前的,现在新版改成谷歌的ProtoBuffergRPC了,调用需要传输的数据使用的是proto编码,可以有效的提高数据的解编码效率和数据传输率。

Agent

代理,拥有大脑,代理信息,动作信息,主要是收集环境等各种信息。每一次迭代是这样的:
在这里插入图片描述
首先Academy每帧调用AgentSendState,会调用AgentSendInfo将代理的信息给Brain
在这里插入图片描述
在这里插入图片描述
然后Brain会将代理信息加到AcademyBrainDecideAction委托里。
在这里插入图片描述
然后Academy调用BrainDecideActionBrain就开始通过Batcher送信息给外部,然后返回UnityRLInput之后提取agent的信息,进行agent一系列Action信息的更新。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

然后Academy调用AgentAct,即调用了AgentAgentStep,进行AgentAction的调用。
在这里插入图片描述

总结

通过这个简答的流程理解,写代码的时候就不会很莫名其妙的写了,至少知道在哪里去,哪里会回调,我该给什么信息,拿回什么信息。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,部分图片来自网络,侵删。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值