多智能体健身房环境中的随机智能体
Random agent on multi-agent gym environments
我无法 select 多智能体健身房环境的随机动作。
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
我找不到修复程序,因为对这些多代理环境的讨论还不够多。
回答我自己的问题,让我们考虑一下 simple_tag 环境。
此环境的 env.action_space
给出:
[Discrete(5), Discrete(5), Discrete(5), Discrete(5)]
(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.]), array([0., 0., 0., 1., 0.])]
(视环境而定)
我无法 select 多智能体健身房环境的随机动作。
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
我找不到修复程序,因为对这些多代理环境的讨论还不够多。
回答我自己的问题,让我们考虑一下 simple_tag 环境。
此环境的env.action_space
给出:
[Discrete(5), Discrete(5), Discrete(5), Discrete(5)]
(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.]), array([0., 0., 0., 1., 0.])]
(视环境而定)