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
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
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
Forward Movement Options
Forward Movement Options
The decoder learns to select from 3 forward movement states:
- None (0): No forward/backward movement
- Forward (1): Move forward
- Backward (2): Move backward
forward_options list:Strafing Movement
Strafe Movement Options
Strafe Movement Options
The decoder learns to select from 3 strafe states:
- None (0): No strafing
- Left (1): Strafe left
- Right (2): Strafe right
Camera Control
Maximum absolute degrees for continuous camera turning (not used in current discrete implementation).
Discrete turn step size in degrees when using turn buttons.Each turn action rotates the camera by this amount.
Camera Turn Options
Camera Turn Options
The decoder learns to select from 3 camera states:
- None (0): No camera rotation
- Turn Left (1): Rotate left by
turn_step_degrees - Turn Right (2): Rotate right by
turn_step_degrees
Attack Action
Attack Options
Attack Options
The decoder learns to select from 2 attack states:In
- Idle (0): Don’t shoot
- Attack (1): Fire weapon
training_server.py:ppo_doom.py, attack is a Bernoulli distribution (binary choice).Speed Control (Training Server Only)
Speed Options
Speed Options
In This was part of the action space but is currently disabled.
training_server.py, speed action is included but always set to ‘off’:Action Space Implementations
Hybrid Action Space (ppo_doom.py)
Whenuse_discrete_action_set=False, uses 4 independent categorical distributions:
Discrete Action Set (ppo_doom.py)
Whenuse_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:Channel Assignments
Each action component has dedicated neural channels for stimulation:Channels assigned to forward movement encoding.
Channels assigned to backward movement encoding.
Channels assigned to left strafe encoding.
Channels assigned to right strafe encoding.
Channels assigned to left camera turn encoding.
Channels assigned to right camera turn encoding.
Channels assigned to attack action encoding.
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
Enable debug logging of joint action selections. Only available in training_server.py.
Maximum number of debug prints for joint actions. Only available in training_server.py.
Related Configuration
Encoder/Decoder
Network architecture for action decoding
Feedback Tuning
Stimulation feedback parameters