Module moog.env_wrappers.multi_agent
Environment wrapper class for running demo on multi-agent tasks.
The entry point is MultiAgentEnvironment, a class that behaves like a moog environment but has agents living in it that take actions for all the agents that the user is not controlling in the gui. So this effectively turns the multi-agent environment into a single-agent demo-able environment.
Expand source code
"""Environment wrapper class for running demo on multi-agent tasks.
The entry point is MultiAgentEnvironment, a class that behaves like a moog
environment but has agents living in it that take actions for all the agents
that the user is not controlling in the gui. So this effectively turns the
multi-agent environment into a single-agent demo-able environment.
"""
from moog import env_wrappers
class MultiAgentEnvironment(env_wrappers.AbstractEnvironmentWrapper):
"""Environment class for converting multi-agent into single-agent task."""
def __init__(self, environment, agent_name, **other_agents):
"""Constructor.
Args:
environment: Instance of ../moog/environment.Environment. Should
have a Composite action space.
agent_name: Name of the agent being controlled by the player's
joystick in the demo. Specifically, this is the key used for the
joystick action value when passed into the Composite action
space in the underlying environment.
other_agents: Dictionary of agents. Keys must contain all the keys
expected by the Composite action space except the agent_name
key. Values are agent instances with a step(observation) method
that returns an action.
"""
super(MultiAgentEnvironment, self).__init__(environment)
self._agent_name = agent_name
self._other_agents = other_agents
def step(self, action):
"""Step the environment with an action.
This action should come from the demo. The actions for all other agents
are filled in by stepping self._other_agents.
"""
obs = self.observation()
action_dict = {
k: agent.step(obs) for k, agent in self._other_agents.items()
}
action_dict[self._agent_name] = action
return self._environment.step(action_dict)
Classes
class MultiAgentEnvironment (environment, agent_name, **other_agents)
-
Environment class for converting multi-agent into single-agent task.
Constructor.
Args
environment
- Instance of ../moog/environment.Environment. Should have a Composite action space.
agent_name
- Name of the agent being controlled by the player's joystick in the demo. Specifically, this is the key used for the joystick action value when passed into the Composite action space in the underlying environment.
other_agents
- Dictionary of agents. Keys must contain all the keys expected by the Composite action space except the agent_name key. Values are agent instances with a step(observation) method that returns an action.
Expand source code
class MultiAgentEnvironment(env_wrappers.AbstractEnvironmentWrapper): """Environment class for converting multi-agent into single-agent task.""" def __init__(self, environment, agent_name, **other_agents): """Constructor. Args: environment: Instance of ../moog/environment.Environment. Should have a Composite action space. agent_name: Name of the agent being controlled by the player's joystick in the demo. Specifically, this is the key used for the joystick action value when passed into the Composite action space in the underlying environment. other_agents: Dictionary of agents. Keys must contain all the keys expected by the Composite action space except the agent_name key. Values are agent instances with a step(observation) method that returns an action. """ super(MultiAgentEnvironment, self).__init__(environment) self._agent_name = agent_name self._other_agents = other_agents def step(self, action): """Step the environment with an action. This action should come from the demo. The actions for all other agents are filled in by stepping self._other_agents. """ obs = self.observation() action_dict = { k: agent.step(obs) for k, agent in self._other_agents.items() } action_dict[self._agent_name] = action return self._environment.step(action_dict)
Ancestors
- moog.env_wrappers.abstract_wrapper.AbstractEnvironmentWrapper
- abc.ABC
Methods
def step(self, action)
-
Step the environment with an action.
This action should come from the demo. The actions for all other agents are filled in by stepping self._other_agents.
Expand source code
def step(self, action): """Step the environment with an action. This action should come from the demo. The actions for all other agents are filled in by stepping self._other_agents. """ obs = self.observation() action_dict = { k: agent.step(obs) for k, agent in self._other_agents.items() } action_dict[self._agent_name] = action return self._environment.step(action_dict)