Skip to main content

Overview

DOOM Neuron uses a combinatorial action space where the decoder outputs a single categorical distribution over all valid action combinations (movement + camera + attack). This differs from traditional multi-discrete spaces.

Action Space Mode

bool
default:"False"
Legacy flag for action space configuration. Default is False in ppo_doom.py or True in training_server.py.In ppo_doom.py (8 discrete actions):
  • False: Hybrid space with 4 independent categoricals (forward, strafe, camera, attack)
  • True: Single categorical over 8 predefined actions
In training_server.py (combinatorial space):
  • Always uses full combinatorial action space regardless of this flag
  • Total actions = 3 (forward) × 3 (strafe) × 3 (camera) × 2 (attack) × 1 (speed) = 54 actions
The training_server.py comment notes: “Legacy flag; combinatorial action space is now default”

Action Components

Forward/Backward Movement

The decoder learns to select from 3 forward movement states:
  1. None (0): No forward/backward movement
  2. Forward (1): Move forward
  3. Backward (2): Move backward
These map to DOOM’s movement buttons through the forward_options list:

Strafing Movement

The decoder learns to select from 3 strafe states:
  1. None (0): No strafing
  2. Left (1): Strafe left
  3. Right (2): Strafe right
These map to DOOM’s strafe buttons:

Camera Control

float
default:"360.0"
Maximum absolute degrees for continuous camera turning (not used in current discrete implementation).
float
default:"30.0"
Discrete turn step size in degrees when using turn buttons.Each turn action rotates the camera by this amount.
The decoder learns to select from 3 camera states:
  1. None (0): No camera rotation
  2. Turn Left (1): Rotate left by turn_step_degrees
  3. Turn Right (2): Rotate right by turn_step_degrees
Camera options:

Attack Action

The decoder learns to select from 2 attack states:
  1. Idle (0): Don’t shoot
  2. Attack (1): Fire weapon
In training_server.py:
In ppo_doom.py, attack is a Bernoulli distribution (binary choice).

Speed Control (Training Server Only)

In training_server.py, speed action is included but always set to ‘off’:
This was part of the action space but is currently disabled.

Action Space Implementations

Hybrid Action Space (ppo_doom.py)

When use_discrete_action_set=False, uses 4 independent categorical distributions:

Discrete Action Set (ppo_doom.py)

When use_discrete_action_set=True, uses single categorical over 8 predefined actions:

Combinatorial Action Space (training_server.py)

Uses full Cartesian product of all action components:
Decoder outputs single categorical over all 54 combinations:

Channel Assignments

Each action component has dedicated neural channels for stimulation:
List[int]
default:"[41, 42, 49]"
Channels assigned to forward movement encoding.
List[int]
default:"[50, 51, 58]"
Channels assigned to backward movement encoding.
List[int]
default:"[13, 14, 21]"
Channels assigned to left strafe encoding.
List[int]
default:"[45, 46, 53]"
Channels assigned to right strafe encoding.
List[int]
default:"[29, 30, 31, 37]"
Channels assigned to left camera turn encoding.
List[int]
default:"[59, 60, 61, 62]"
Channels assigned to right camera turn encoding.
List[int]
default:"[32, 33, 34]"
Channels assigned to attack action encoding.
List[int]
default:"[8, 9, 10, 17, 18, 25, 27, 28, 57]"
Channels assigned to general state encoding (not directly action-related).
Default is [8, 9, 10, 17, 18, 25, 27, 28, 57] in ppo_doom.py or [8, 9, 10, 17, 18, 25, 27, 28] in training_server.py (reduced from 9 to 8 channels after removing speed action).

Example Configurations

Hybrid Action Space (4 Independent Categoricals)

Simple Discrete Actions (8 Actions)

Full Combinatorial Space (54 Actions)

Custom Channel Layout

Debugging

bool
default:"True"
Enable debug logging of joint action selections. Only available in training_server.py.
int
default:"500"
Maximum number of debug prints for joint actions. Only available in training_server.py.

Encoder/Decoder

Network architecture for action decoding

Feedback Tuning

Stimulation feedback parameters