前言:
由于项目需要,需要了解U3D的ML-Agents插件。预期目的有几点:
- ML-Agents的大致框架
- 各个部分的具体实现细节
在开始研究前,首先我要搭建实验环境,之后运行官方案例。
大致框架:
ML-Agents是一个Unity3D的插件,其包含3个高级组件:学习环境,External Communicator,Python API。
- 学习环境:就是代理存在,并生活的地方。它可以小到是几个简单对象组成的模拟场景,大到可以是一个复杂场景的模拟。
- Python API - 其中包含用于训练(学习某个行为或 policy)的 所有机器学习算法。请注意, 与学习环境不同,Python API 不是 Unity 的一部分,而是位于外部,并通过 External Communicator 与 Unity 进行通信。(ml-agents-master 中 ml-agents 就包含所有的策略算法)
- External Communicator:它将 Unity 环境与 Python API 连接起来。它位于 Unity 环境中。
每个学习环境包含有三个帮助组织场景的附加组件:Academy,Brain,Agent。
- Agent - 它可以被附加到一个 Unity 游戏对象上(场景中的 任何角色),负责生成它的观测结果、执行它接收的动作 并适时分配奖励(正/负)。 每个 Agent 只与一个 Brain 相关联。
- Brain - 它封装了 Agent 的决策逻辑。 实质上,Brain 中保存着每个 Agent 的 policy, 决定了 Agent 在每种情况下应采取的动作。更具体地说, 它是从 Agent 接收观测结果和奖励并返回动作的 组件。
- Academy - 它指挥 agent 的观测和决策过程。 在 Academy 内,可以指定若干环境参数, 例如渲染质量和环境运行速度参数。 External Communicator 位于 Academy 内。
我们有四种不同类型的 Brain,它们可以实现广泛的训练和预测情形:
- External - 使用 Python API 进行决策。这种情况下, Brain 收集的观测结果和奖励通过 External Communicator 转发给 Python API。Python API 随后返回 Agent 需要采取的相应动作。
- Internal - 使用嵌入式 TensorFlow 模型进行决策。 嵌入式 TensorFlow 模型包含了学到的 policy,Brain 直接使用 此模型来确定每个 Agent 的动作。
- Player - 使用键盘或控制器的实际输入进行 决策。这种情况下,人类玩家负责控制 Agent,由 Brain 收集的 观测结果和奖励不用于控制 Agent。
- Heuristic - 使用写死的逻辑行为进行决策,目前市面上大多数游戏角色行为都是这么定义的。这种类型有助于调试 具有写死逻辑行为的 Agent。也有助于把这种由写死逻辑指挥的 Agent 与 训练好的 Agent 进行比较。在我们的示例中,一旦我们 为军医训练了 Brain,我们便可以为一个军队的军医分配 经过训练的 Brain,而为另一个军队的军医分配具有写死逻辑行为的 Heuristic Brain。然后,我们可以评估哪个军医的效率更高。
根据目前所述,External Communicator 和 Python API 似乎 只能由 External Brain 所用。实际并非如此。 我们可以配置 Internal、Player 和 Heuristic 类型的 Brain, 使它们也能通过 External Communicator(一种称为 broadcasting 的功能) 将观测结果、奖励和动作发送给 Python API。我们很快就会 看到,这样可以实现其他的训练模式
以下为详细讲解:
https://blog.****.net/u010019717/article/details/80382933
环境搭建和Demo:
- If you are a Windows user who is new to Python and TensorFlow, follow this guide to set up your Python environment.
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation-Windows.md - NOTES
We do not currently support Python 3.7 or Python 3.5.We do not currently support Python 3.7 or Python 3.5.
If you are using Anaconda and are having trouble with TensorFlow, please see the following note on how to install TensorFlow in an Anaconda environment. - 结合两个看
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Basic-Guide.md#play-an-example-environment-using-pretrained-model
https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Executable.md
总结:
- Anaconda提供Python和包管理器conda,在Anaconda中我们下载TensorFlow构建Python API的开发环境和包支持。ml-agents-master提供了Python API的策略算法,和用于和unity3d训练环境交互的通道。
- 所以在训练得模型的时候,要打开Anaconda prompt进入配置好的TensorFlow开发环境,并进入ml-agents-master文件目录,调用配置文件和unity3d,其build好的exe文件,进行训练。
mlagents-learn …/config/trainer_config.yaml --env=…/3DBall --run-id=firstRun --train - 当然unity3d编辑器中也要导入TensorFlow插件(因为在Internal 中是 使用嵌入式 TensorFlow 模型进行决策。)
tips
我使用的是TensorFlow_CPU进行计算。
而TensorFlow_GPU需要用到Anaconda+cuda+cudnn来配置环境,而且3个部分还需要版本对应才可以成功,此外可能还有显卡驱动,vs版本之类的问题,坑太多,太深,配了一天没有成功,果断留坑日后请教大神吧。