玩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个大脑?
谢谢!
答案 0 :(得分:0)
如果你只有一个大脑,你可以输入一个列表或一个numpy浮动数组。
如果您有多个大脑,则必须发送字典。
示例:如果您有2个大脑( 'brain1' and 'brain2')
,每个大脑都有一个需要连续执行2个操作的代理,您必须致电:env.step({'brain1':[0.1,0.2], 'brain2':[0.3,0.4]})