奖励逻辑在ml代理包中脱离Unity3D



Unity3D有一个名为ML代理的强化学习包,我正在使用它来理解它的组件。对于我的项目,我需要编写自己的逻辑来设置Unity3D的奖励(不是使用C#逻辑的"addReward",而是编写Python代码来设置Unity的奖励(。

我想知道我是否可以使用ML-agents包提供的Python API来使用env观察,并使用Unity中设置的自定义逻辑更新奖励(并发送回Unity(?在哪里可以这样做?

换句话说(例如(。在3DBall示例中,如果球停留在平台上获得正奖励,而如果球从平台上落下则获得负奖励,则在Unity3D中设置奖励逻辑。该逻辑通过使用C#在Unity3D中实现,并确定球的位置(矢量位置(与平台的比较。对于每一个操作,代理都会调用env.step(action(并获得(奖励,状态…(的元组。如果我想在Unity之外编写逻辑呢?例如,如果我想编写一个python程序,在不使用Unity奖励逻辑的情况下读取观察结果(来自Unity3D(并更新奖励?这可能吗?我无法理解这个选项在ML-agent的Python API中的位置。

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

如有任何帮助,我们将不胜感激。

问候Guido

根据我对强化学习的理解,奖励由环境处理,代理只需将其与下一次观察联系起来。你可以说这是观察的一部分。

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

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

tl;dr:我认为您不能通过Python API设置奖励,以保持清晰的环境分离。

最新更新