Config

class magent2.gridworld.Config

Configuration class for a Gridworld game.

Methods

magent2.gridworld.Config.set(self, args: dict)

Set parameters of global configuration.

Parameters:

args (dict)

Contains the following configuration attributes:
  • map_width (int): Number of horizontal grid squares in the Gridworld.

  • map_height (int): Number of vertical grid squares in the Gridworld.

  • embedding_size (int): Embedding size for the observation features.

  • render_dir (str): Directory to save render file.

  • seed (int): Random seed.

  • food_mode (bool): Dead agents drop food on the map.

  • turn_mode (bool): Include 2 more actions – turn left and turn right.

  • minimap_mode (bool): Include minimap in observations.

magent2.gridworld.Config.register_agent_type(self, name: str, attr: dict)

Register an agent type.

Parameters:
  • name (str) – Name of the type (should be unique).

  • attr (dict)

Contains the following configuration attributes:
  • height (int): Height of agent body.

  • width (int): Width of agent body.

  • speed (float): Maximum speed, i.e. the radius of move circle of the agent.

  • hp (float): Maximum health point of the agent.

  • view_range (gw.CircleRange or gw.SectorRange): Field of view of the agent.

  • damage (float): Attack damage.

  • step_recover (float): Step recover (healing) of health points (can be negative).

  • kill_supply (float): Hp gain for killing this type of agent.

  • step_reward (float): Reward gained in every step.

  • kill_reward (float): Reward gained for killing this type of agent.

  • dead_penalty (float): Reward gained for dying.

  • attack_penalty (float): Reward gained when performing an attack (to discourage attacking empty grid cells).

Returns:

name (str): Name of the type.

magent2.gridworld.Config.add_group(self, agent_type: str)

Add a group to the configuration.

Parameters:

agent_type (str) – Name of agent type contained in this group.

Returns:

group_handle (int) – Handle for the new group.

magent2.gridworld.Config.add_reward_rule(self, on: EventNode, receiver: List[AgentSymbol], value: List[float], terminal: bool = False)

Add a reward rule.

Parameters:
  • on (Event) – An objecting representing a bool expression of the trigger event.

  • receiver (List[AgentSymbol]) – Receiver of this reward rule. If the receiver is not a deterministic agent, it must be one of the agents involved in the triggering event.

  • List[float] (value) – Value to assign.

  • terminal (bool) – Whether this event will terminate the game.

Helper classes

AgentSymbol and Event

AgentSymbol and Event are helper classes used to design rewards that go into the Config.

AgentSymbols are used to represent some set of agents. They are instantiated with a group handle and the relevant agents within that group. The index can be a single number or “any” or “all”.

Here is an example of creating two symbols, one for each of two groups:

import magent2.gridworld.AgentSymbol

as1 = AgentSymbol(group_1, index="any")
as2 = AgentSymbol(group_2, index="any")

Events establish what must occur to trigger a reward disbursement. They are called with a subject (AgentSymbol), predicate, and relevant args.

Here are the available predicates and corresponding args:

Predicate

Args

kill

AgentSymbol

at

(x, y)

in

((x1, y1), (x2, y2))

attack

AgentSymbol

collide

AgentSymbol

die

(empty)

in_a_line

(empty)

align

(empty)

Here is an example creating reward rules for the two groups to attack each other:

from magent2.gridworld import Config, Event

config = Config()

e1 = Event(as1, "attack", as2)
config.add_reward_rule(e1, receiver=as1, value=attack_opponent_reward)

e2 = Event(as2, "attack", as1)
config.add_reward_rule(e2, receiver=as2, value=attack_opponent_reward)

More examples can be found in the reference environments.

View Range

When using register_agent_type(), the attribute view_range is defined using one of the following classes:

class magent2.gridworld.CircleRange(radius)
class magent2.gridworld.SectorRange(radius, angle)