多代理健身房环境中的随机代理

我无法为多智能体健身房环境选择随机动作。


def make_env(scenario_name, benchmark=False):


    from multiagent.environment import MultiAgentEnv

    import multiagent.scenarios as scenarios


    # load scenario from script

    scenario = scenarios.load(scenario_name + ".py").Scenario()

    # create world

    world = scenario.make_world()

    # create multiagent environment

    if benchmark:        

        env = MultiAgentEnv(world, scenario.reset_world, scenario.reward, scenario.observation, scenario.benchmark_data)

    else:

        env = MultiAgentEnv(world, scenario.reset_world, scenario.reward, scenario.observation)

    return env


env = make_env('simple_tag')

env.reset()

for i in range(100):

    env.render()

    actions = [action_space.sample() for action_space in env.action_space]

    env.step(actions)

上面的代码抛出这个错误:


Traceback (most recent call last):

  File "hello.py", line 22, in <module>

    env.step(actions)

  File "c:\multiagent-particle-envs\multiagent\environment.py", line 88, in step

    self._set_action(action_n[i], agent, self.action_space[i])

  File "c:\multiagent-particle-envs\multiagent\environment.py", line 174, in _set_action

    agent.action.u[0] += action[0][1] - action[0][2]

TypeError: 'int' object is not subscriptable

我找不到解决办法,因为关于这些多代理环境的讨论还不够多。


慕婉清6462132
浏览 172回答 1
1回答

MM们

回答我自己的问题,让我们考虑 simple_tag 环境。env.action_space&nbsp;对于这种环境给出:[Discrete(5), Discrete(5), Discrete(5), Discrete(5)]&nbsp;(4 个代理)这是我发现的误导。我认为这些动作必须是一个包含 4 个元素的列表,例如:[0, 3, 4, 1]但它期望的是所有 4 个代理的单热向量(5 个元素)。因此,对动作进行编码的正确方法是:[array([1., 0., 0., 0., 0.]), array([0., 0., 1., 0., 0.]), array([0., 0., 0., 0., 1.]), &nbsp;array([0., 0., 0., 1., 0.])](视环境而定)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python