1

这个。我可以成功训练 1 个大脑,但是当我想训练 2 个大脑时出现以下错误

---------------------------------------------------------------------------
UnityActionException                      Traceback (most recent call last)
<ipython-input-4-520c26ebec47> in <module>()
     48 
     49 
---> 50         new_info = trainer.take_action(info, env, brain_name)
     51 
     52 

C:\UNITY\ml-agents-master\python\ppo\trainer.py in take_action(self, info, env, brain_name)
     51         self.stats['value_estimate'].append(value)
     52         self.stats['entropy'].append(ent)
---> 53         new_info = env.step(actions, value={brain_name: value})[brain_name]
     54         self.add_experiences(info, new_info, epsi, actions, a_dist, value)
     55         return new_info

C:\UNITY\ml-agents-master\python\unityagents\environment.py in step(self, action, memory, value)
    288                     raise UnityActionException(
    289                         "You have {0} brains, you need to feed a dictionary of brain names a keys, "
--> 290                         "and actions as values".format(self._num_brains))
    291                 else:
    292                     action = {self._brain_names[0]: action}

UnityActionException: You have 2 brains, you need to feed a dictionary of brain names a keys, and actions as values

在这里我找到了这部分,与我的问题有关:

步骤:env.step(动作,内存=无,值=无)

使用操作向环境发送步进信号。请注意,如果环境中有多个大脑,则必须提供从大脑名称到动作的字典。

  • 如果每个大脑有多个代理,动作可以是一维数组或二维数组。

  • memory 是一个可选输入,可用于发送每个代理的浮点列表,以便在下一步检索。

  • value 是一个可选输入,用于在 AgentMonitor.cs 组件附加到代理时为每个代理发送一个要显示的浮点数。返回将大脑名称映射到 BrainInfo 对象的字典。

但我不确定如何解释它。有人可以建议我应该如何构建它,以便我可以在我的环境中使用 2 个大脑吗?

谢谢!

4

1 回答 1

0

如果您只有一个大脑,则可以输入一个列表或一个 numpy 浮点数组。

如果您有多个大脑,则必须发送字典。

示例:如果您有 2 个大脑( 'brain1' and 'brain2'),每个大脑都有一个执行 2 个连续动作的代理,您必须调用:env.step({'brain1':[0.1,0.2], 'brain2':[0.3,0.4]})

于 2017-09-27T20:45:52.477 回答