从ml-agents软件包中的Unity3D中奖励逻辑

时间:2018-07-14 10:36:44

标签: c# python unity3d reinforcement-learning ml-agent

Unity3D有一个用于强化学习的程序包,称为ML-agents,我正在与之一起使用以了解其组件。对于我的项目,我处于一种情况,我需要编写自己的逻辑来从Unity3D中设置奖励(不是使用C#逻辑来“ addReward”,而是编写Python代码来从Unity中设置奖励)。

我想知道我是否可以使用ML-agents软件包提供的Python API来使用env观察结果,并使用Unity之外的自定义逻辑更新奖励(并发送回Unity)?以及在哪里寻找呢?

换句话说(示例)。在3DBall示例中,在Unity3D中设置了奖励逻辑,这样,如果停留在平台上的球会获得正向奖励,如果球从平台上掉落,则会获得负向奖励。通过使用C#在Unity3D中实现此逻辑,并确定Ball与平台的位置(矢量位置)。对于每个动作,代理都调用env.step(action)并获取(reward,state ...)的元组。如果我想在Unity之外编写逻辑该怎么办?例如,如果我想编写一个Python程序(从Unity3D中读取观测值)并更新奖励而不使用Unity奖励逻辑?这可能吗?我不知道此选项在ML-agents的Python API中的位置。

目前,我正在考虑在我在Unity3D中使用C#设置奖励的行之间运行一个外部python程序,但是我想知道这是否过于复杂并且有一个更简单的解决方案。

任何帮助将不胜感激。

问候 圭多

1 个答案:

答案 0 :(得分:0)

根据我对强化学习的理解,奖励是由环境处理的,而代理人只是将其与下一次观察结合在一起。您可以说这是观察的一部分。

因此,奖励何时获得的逻辑是环境逻辑的一部分,即,在Unity-ML的情况下,环境生活在Unity中,因此您必须在Unity(C#)中实现奖励功能。

因此,为了保持环境(Unity)和代理(Python)之间的清晰分隔。我认为最好将奖励逻辑保留在Unity / C#中,而不要在Python中进行修改。

tl; dr::我认为您不能通过Python API设置奖励以保持明确的环境与主体分离。