Unity / ml-agents,使用正确的参数调用多个大脑

时间:2017-09-27 15:00:17

标签: python dictionary unity3d github

This。我可以成功训练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

Here我发现这部分与我的问题相关:

  

步骤:env.step(动作,记忆=无,值=无)

     

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

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

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

  •   
  • value是一个可选输入,用于发送每个代理的单个浮点数,如果和AgentMonitor.cs组件是   附在代理人身上。返回将脑名称映射到的字典   BrainInfo对象。

  •   

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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