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
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
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.
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: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.
Related Configuration
Encoder/Decoder
Network architecture for action decoding
Feedback Tuning
Stimulation feedback parameters