Skip to content

Command-line Options

xlron.parameter_flags:
  --ACTION_DIM: Dimension of action space
    (default: '2')
    (an integer)
  --[no]ACTION_MASKING: Use invalid action masking
    (default: 'true')
  --[no]ACTION_OPTIMIZATION: Directly optimise rollout actions using first-order
    gradients from differentiable environment
    (default: 'false')
  --ACTIVATION: Activation function
    (default: 'tanh')
  --ADAM_BETA1: Adam beta1
    (default: '0.9')
    (a number)
  --ADAM_BETA2: Adam beta2
    (default: '0.999')
    (a number)
  --ADAM_EPS: Adam epsilon
    (default: '1e-05')
    (a number)
  --ADV_CLIP: Advantage clip to range +/- this value
    (default: '10.0')
    (a number)
  --CLIP_EPS: PPO clipping parameter
    (default: '0.2')
    (a number)
  --[no]COMPILE_RR_BOUNDS: AOT-compile run_defrag in reconfigurable routing
    bounds (default: interpreted)
    (default: 'false')
  --CUTSET_BATCH_SIZE: Batch size for cut-set generation (only relevant when
    finding cutsets exhaustively for larger networks (40+ nodes) on GPU)
    (default: '512')
    (an integer)
  --[no]CUTSET_EXHAUSTIVE: Use exhaustive search method to find cut-sets (else
    shortest paths method). The exhaustive method is recommended unless the
    graph is large (40+ nodes), which requires either parallelization of the
    search on GPU or use the approximate shortest paths method.
    (default: 'false')
  --CUTSET_ITERATIONS: Number of iterations per parallel process (only relevant
    when finding cutsets exhaustively for larger networks (40+ nodes) on GPU)
    (default: '32')
    (an integer)
  --CUTSET_PARALLEL_PROCESSES: How many parallel processes to launch in
    exhaustive cut-sets search.
    (default: '1')
    (an integer)
  --CUTSET_TOP_K: Number of top congested cutsets to return
    (default: '256')
    (an integer)
  --CUTSET_TOP_PCT: If > 0, keep top this percentage of congested cutsets
    (overrides CUTSET_TOP_K). The actual count is max(1,
    round(total_unique_cutsets * CUTSET_TOP_PCT / 100)).
    (default: '0.0')
    (a number)
  --C_CLIP: Clip importance ratio for GAE accumulation in VTrace-style advantage
    calculation (set <= 0 for standard GAE without clipping)
    (default: '-1.0')
    (a number)
  --DATA_OUTPUT_FILE: Path to save JSONL run summary (one JSON object per line)
  --[no]DEBUG: Debug mode
    (default: 'false')
  --[no]DEBUG_LOSS: Debug loss calculation
    (default: 'false')
  --[no]DEBUG_NANS: Debug NaNs
    (default: 'false')
  --[no]DETERMINISTIC_OPS: Use deterministic GPU operations
    (default: 'false')
  --[no]DISABLE_JIT: Disable JIT compilation
    (default: 'false')
  --[no]DISABLE_NODE_FEATURES: Use node features in the GNN (spectral and
    source-dest)
    (default: 'false')
  --DOWNSAMPLE_FACTOR: Downsample factor to reduce data uploaded to wandb
    (default: '1')
    (an integer)
  --EMULATED_DEVICES: Number of devices to emulate
    (an integer)
  --[no]ENABLE_X64: Enable x64 floating point precision
    (default: 'false')
  --[no]ENHANCED_LOGGING: Enable enhanced diagnostic logging for PPO loss
    function (valid_frac, clip_frac, ratio stats, valid_mass stats, n_valid
    stats, adv stats, gate_frac)
    (default: 'false')
  --ENT_COEF: Entropy coefficient
    (default: '0.0')
    (a number)
  --ENT_END_FRACTION: Fraction of initial entropy coefficient that is final
    entropy coefficient
    (default: '0.1')
    (a number)
  --ENT_SCHEDULE: Enable entropy coefficient scheduling
    (default: 'constant')
  --ENT_SCHEDULE_MULTIPLIER: Multiply the entropy schedule horizon by this
    factor
    (default: '1.0')
    (a number)
  --ENV_WARMUP_STEPS: Number of warmup steps before training or eval
    (default: '0')
    (an integer)
  --EPISODE_DATA_OUTPUT_FILE: Path to save per-episode CSV data output
  --EPSILON: Small number to prevent div zero
    (default: '1e-08')
    (a number)
  --[no]EVAL_DURING_TRAINING: Run periodic evaluation during training to track
    best model
    (default: 'false')
  --EVAL_FREQUENCY: Run eval every N increments
    (default: '1')
    (an integer)
  --[no]EVAL_HEURISTIC: Evaluate heuristic
    (default: 'false')
  --[no]EVAL_MODEL: Load model for evaluation
    (default: 'false')
  --EVAL_STEPS: Number of steps to run in each evaluation
    (default: '100')
    (an integer)
  --EVAL_TIMESTEPS: Number of timesteps per eval run (0 = use
    STEPS_PER_INCREMENT)
    (default: '10000')
    (an integer)
  --EXPERIMENT_NAME: Name of experiment (equivalent to run name in wandb) (auto-
    generated based on other flags if unspecified)
    (default: '')
  --FINAL_LAMBDA: Final lambda parameter for GAE
    (default: '0.98')
    (a number)
  --GAE_LAMBDA: GAE lambda parameter
    (a number)
  --GAMMA: Discount factor
    (default: '0.999')
    (a number)
  --GAUSSIAN_SIGMA: Sigma for Gaussian smoothing kernel (larger = smoother
    landscape)
    (default: '0.8')
    (a number)
  --[no]GAUSSIAN_SMOOTHING: Use Gaussian-smoothed reward for action optimization
    (evaluates nearby integer actions weighted by Gaussian kernel)
    (default: 'false')
  --[no]GNN_OUTPUT_LP: Use GNN for launch power optimization in RSA GN Model
    environment
    (default: 'false')
  --[no]GNN_OUTPUT_RSA: Use GNN for RSA in RSA GN Model environment
    (default: 'false')
  --[no]IAM_DAMPING: Enable soft damping of actor/entropy losses based on valid
    mass (weight w *= clip(valid_mass / VALID_MASS_TARGET, 0, 1))
    (default: 'true')
  --[no]IAM_GATING: Enable hard gating of actor/entropy losses: zero weight for
    steps with fewer than IAM_GATING_MIN_ACTIONS valid actions
    (default: 'true')
  --IAM_GATING_MIN_ACTIONS: Minimum number of valid actions for a step to pass
    the hard gate (2 = need choice, 1 = need any valid action)
    (default: '2')
    (an integer)
  --[no]IAM_RECENTER_CLIP: ABLATION FLAG - recenter the PPO clip on the off-
    policy IAM ratio's no-update value (the valid mass). Only used when
    OFF_POLICY_IAM is True. The off-policy ratio equals the valid mass (~0.5),
    not 1, at no update, so the unit-centred clip floors out negative-advantage
    gradients; subtracting log(valid_mass) from the log ratio recenters it to ~1
    so both advantage signs get gradient symmetrically. Validated outcome: does
    NOT outperform the non-recentered clip (see docs/training.md, off-policy IAM
    recommended configuration)
    (default: 'false')
  --[no]INITIALIZE_ACTIONS_ASCENDING: Initialize actions in ascending order
    (default: 'false')
  --[no]INITIALIZE_ACTIONS_DESCENDING: Initialize actions in descending order
    (default: 'false')
  --[no]INITIALIZE_ACTIONS_HEURISTIC: Initialize actions with heuristic
    (default: 'false')
  --[no]INITIALIZE_ACTIONS_MAX: Initialize actions at max. value
    (default: 'false')
  --[no]INITIALIZE_ACTIONS_RANDOM: Initialize actions randomly
    (default: 'false')
  --INITIAL_AVERAGE_REWARD: Initial average reward estimate for reward centering
    (default: '0.0')
    (a number)
  --INITIAL_LAMBDA: Initial lambda parameter for GAE
    (default: '0.9')
    (a number)
  --INPUT_DIM: Dimension of input space
    (default: '2')
    (an integer)
  --[no]KEEP_VF: Load the pre-trained value function
    (default: 'false')
  --LAMBDA_SCHEDULE_MULTIPLIER: Multiply the GAE-lambda schedule horizon by this
    factor
    (default: '1.0')
    (a number)
  --LOGR_CLIP: Log ratio clip to range +/- this value
    (default: '10.0')
    (a number)
  --[no]LOG_ALL_INFO: Log every metric
    (default: 'true')
  --[no]LOG_LOSS_INFO: Log loss metrics
    (default: 'true')
  --LR: Learning rate
    (default: '0.0005')
    (a number)
  --LR_END_FRACTION: Fraction of init LR that is final LR
    (default: '0.1')
    (a number)
  --LR_SCHEDULE: Learning rate schedule
    (default: 'cosine')
  --LR_SCHEDULE_MULTIPLIER: Multiply the LR schedule horizon by this factor
    (default: '1.0')
    (a number)
  --MAX_GRAD_NORM: Maximum gradient norm
    (default: '0.5')
    (a number)
  --MINIBATCH_SIZE: Minibatch size
    (default: '1')
    (an integer)
  --MODEL_PATH: Path to save/load model
  --[no]MU_WEIGHT_ACTOR: ABLATION FLAG - weight the per-step actor loss by the
    valid mass mu (unmasked policy mass on valid actions). Explicit equivalent
    of the per-state, congestion-aware scaling the non-recentered off-policy IAM
    ratio (rho ~ mu) applies implicitly but IAM_RECENTER_CLIP removes; combine
    with IAM_RECENTER_CLIP + POSITIVE_ADV_ONLY (a ~3x lever there)
    (default: 'false')
  --[no]NO_TRUNCATE: Do not truncate printed arrays
    (default: 'false')
  --NUM_DEVICES: Number of devices
    (default: '1')
    (an integer)
  --NUM_ENVS: Number of environments per device
    (default: '1')
    (an integer)
  --NUM_INCREMENTS: Number of increments to log
    (default: '1')
    (an integer)
  --NUM_LAYERS: Number of layers in actor and critic networks
    (default: '2')
    (an integer)
  --NUM_LEARNERS: Number of independent learners i.e. how many independent
    experiments to run with a unique set of learned parameters each
    (default: '1')
    (an integer)
  --NUM_MINIBATCHES: Number of minibatches per update
    (default: '1')
    (an integer)
  --NUM_UNITS: Number of hidden units in actor and critic networks
    (default: '64')
    (an integer)
  --NUM_UPDATES: Number of parameter updates (not including multiple epochs)
    (calculated in train.py but included here so that it can be passed to the
    model)
    (default: '1')
    (an integer)
  --[no]OFF_POLICY_IAM: Use off-policy invalid action masking i.e. log prob
    ratio is unmasked policy / masked
    (default: 'false')
  --OPTIMIZATION_ITERATIONS: Number of optimization iterations
    (default: '1000')
    (an integer)
  --OPTIMIZATION_LEARNING_RATE: Learning rate for gradient-based action
    optimization
    (default: '0.05')
    (a number)
  --[no]ORDERED: Order print statements when debugging (must be false if using
    pmap)
    (default: 'true')
  --[no]OVERWRITE_MODEL: Overwrite model saved at MODEL_PATH
    (default: 'true')
  --[no]PATH_SLOT_ACTIONS: Use 2-part path-slot actions for optimization
    (default: 'false')
  --[no]PLOTTING: Plotting
    (default: 'false')
  --[no]POSITIVE_ADV_ONLY: ABLATION FLAG - learn the actor from positive-
    advantage steps only (self-imitation style): zero the policy-gradient
    contribution of negative-advantage steps. Explicit equivalent of the filter
    the non-recentered off-policy IAM clip applies emergently; pairs with
    IAM_RECENTER_CLIP. Unlike the emergent filter (which binds only in congested
    states with valid mass < 1-eps), this filters every state including the
    uncongested mu~1 majority (no measured performance cost; see PO_MU_GATE for
    the exact per-state rule)
    (default: 'false')
  --[no]PO_MU_GATE: ABLATION FLAG - apply POSITIVE_ADV_ONLY only in states with
    valid mass < 1 - CLIP_EPS (requires POSITIVE_ADV_ONLY). This is exactly the
    per-state rule the non-recentered off-policy IAM clip applies emergently:
    negative advantages train two-sided in the uncongested mu ~ 1 lobe and are
    filtered only in congested states. Combined with IAM_RECENTER_CLIP +
    MU_WEIGHT_ACTOR this makes the explicit stack's actor gradient identical to
    the emergent configuration at no-update (see ppo_test.py)
    (default: 'false')
  --[no]PREALLOCATE_MEM: Preallocate GPU memory
    (default: 'true')
  --PREALLOCATE_MEM_FRACTION: Fraction of GPU memory to preallocate
    (default: '0.95')
  --[no]PRINT_FLAGS: Print flags
    (default: 'false')
  --[no]PRINT_MEMORY_USE: Print memory usage
    (default: 'false')
  --PRIO_ALPHA: Priority exponent for prioritized experience replay (0.0 =
    uniform sampling, 1.0 = fully prioritized)
    (default: '0.0')
    (a number)
  --PRIO_BETA0: Initial importance sampling correction exponent (annealed to 1.0
    over training, set to 1.0 to disable)
    (default: '1.0')
    (a number)
  --[no]PROFILE: Enable wall-clock profiling of environment and training
    components. On CPU, records fine-grained per-call section timings via host
    callbacks. On GPU, records first-call (compilation + first execution)
    latency per section. Prints a summary table of call counts, total/mean time,
    and percentage breakdown.
    (default: 'false')
  --PROJECT: Name of project (same as experiment name if unspecified)
    (default: '')
  --[no]RENDER_CLICK_THROUGH: If true and using human render mode, wait for key
    press between rendered requests.
    (default: 'false')
  --RENDER_EVAL_MODE: Eval-only rendering mode: off, save, or human. Only used
    for EVAL_HEURISTIC/EVAL_MODEL runs.
    (default: 'off')
  --RENDER_FPS: Playback/recording frame rate for eval rendering
    (default: '2.0')
    (a number)
  --RENDER_MAX_STEPS: Max requests/steps to render during eval.
    (default: '100')
    (an integer)
  --RENDER_OUTPUT_FILE: Path to save eval render recording (.gif/.mp4). If unset
    and mode includes save, defaults inside the run directory when available.
  --RENDER_SCALE: Scale factor for render figure resolution. Lower values render
    faster.
    (default: '0.6')
    (a number)
  --[no]RETRAIN_MODEL: Load model for retraining
    (default: 'false')
  --[no]REWARD_CENTERING: Use reward centering
    (default: 'false')
  --REWARD_SCALE: Reward scaling factor (multiply all rewards by this value)
    (default: '1.0')
    (a number)
  --REWARD_STEPSIZE: Initial step size for reward centering average reward
    update
    (default: '0.001')
    (a number)
  --RHO_CLIP: Clip importance ratio for TD error in VTrace-style advantage
    calculation (set <= 0 for standard GAE without clipping)
    (default: '-1.0')
    (a number)
  --ROLLOUT_LENGTH: Number of steps per rollout per environment
    (default: '150')
    (an integer)
  --[no]SAVE_MODEL: Save model (will be saved to --MODEL_PATH locally and
    uploaded to wandb if --WANDB is True)
    (default: 'false')
  --SEED: Random seed
    (default: '42')
    (an integer)
  --[no]SEPARATE_VF_OPTIMIZER: Use a separate optimizer for the value function
    (critic) with its own hyperparameters
    (default: 'false')
  --STEPS_PER_INCREMENT: Number of steps per logging increment
    (default: '100000')
    (an integer)
  --[no]STEP_ON_GRADIENT: Whether to step schedule on gradient update or per
    update loop
    (default: 'false')
  --TEMPERATURE: Temperature for softmax action selection (high temperature,
    more exploration) or (low temperature, more exploitation)
    (default: '1.0')
    (a number)
  --TOTAL_TIMESTEPS: Total number of timesteps. For reconfigurable routing
    bounds: total requests per trial.
    (default: '1000000.0')
    (a number)
  --TRAJ_DATA_OUTPUT_FILE: Path to save trajectory (actions, etc.) data output
  --UPDATE_EPOCHS: Number of epochs per update
    (default: '1')
    (an integer)
  --[no]USE_GNN: Use GNN
    (default: 'false')
  --[no]USE_RNN: Use RNN-based policy (affects prioritization: trajectory-level
    vs sample-level)
    (default: 'false')
  --[no]USE_TRANSFORMER: Use Transformer architecture
    (default: 'false')
  --VALID_MASS_LOSS_COEF: Coefficient for valid mass loss term that encourages
    the unmasked policy to place probability on valid actions (0.0 = disabled)
    (default: '0.0')
    (a number)
  --VALID_MASS_TARGET: Target valid mass threshold for soft damping of actor and
    entropy losses (valid mass below this value linearly damps the loss
    contribution). Only used when IAM_DAMPING is True.
    (default: '0.05')
    (a number)
  --VF_ADAM_BETA1: Adam beta1 for VF optimizer (default: same as ADAM_BETA1)
    (a number)
  --VF_ADAM_BETA2: Adam beta2 for VF optimizer (default: same as ADAM_BETA2)
    (a number)
  --VF_ADAM_EPS: Adam epsilon for VF optimizer (default: same as ADAM_EPS)
    (a number)
  --VF_COEF: Value function coefficient
    (default: '0.5')
    (a number)
  --VF_LR: Learning rate for value function optimizer (default: LR / 3)
    (a number)
  --VF_LR_END_FRACTION: Fraction of init VF LR that is final VF LR (default:
    same as LR_END_FRACTION)
    (a number)
  --VF_LR_SCHEDULE: Learning rate schedule for VF optimizer (default: same as
    LR_SCHEDULE)
  --VF_MAX_GRAD_NORM: Max gradient norm for VF optimizer (default: same as
    MAX_GRAD_NORM)
    (a number)
  --VF_SCHEDULE_MULTIPLIER: Multiply the value function LR schedule horizon by
    this factor
    (default: '1.0')
    (a number)
  --VF_WARMUP_MULTIPLIER: VF LR warmup peak multiplier (default: same as
    WARMUP_MULTIPLIER)
    (a number)
  --VF_WARMUP_STEPS_FRACTION: Fraction of total timesteps for VF LR warmup
    (default: same as WARMUP_STEPS_FRACTION)
    (a number)
  --VF_WEIGHT_DECAY: Weight decay for VF optimizer (default: same as
    WEIGHT_DECAY)
    (a number)
  --VISIBLE_DEVICES: Comma-separated indices of (desired) visible GPUs e.g.
    1,2,3
  --VML_END_FRACTION: Fraction of initial VALID_MASS_LOSS_COEF that is final
    coefficient (>1.0 anneals upward, e.g. 10.0 means final = 10x initial)
    (default: '10.0')
    (a number)
  --VML_SCHEDULE: Valid mass loss coefficient schedule (constant, linear,
    cosine)
    (default: 'constant')
  --VML_SCHEDULE_MULTIPLIER: Multiply the valid mass loss schedule horizon by
    this factor
    (default: '1.0')
    (a number)
  --[no]WANDB: Use wandb
    (default: 'false')
  --WARMUP_MULTIPLIER: Increase the learning rate warmup peak compared to init
    (default: '1.0')
    (a number)
  --WARMUP_STEPS_FRACTION: Fraction of total timesteps to use for warmup
    (default: '0.2')
    (a number)
  --WEIGHT_DECAY: Weight decay for optimizer
    (default: '0.0')
    (a number)
  --action_dtype: Action dtype (int32, must be int for indexing)
  --aggregate_slots: Number of slots to aggregate into a single action
    (default: '1')
    (an integer)
  --alpha: Legacy fibre attenuation alpha [dB/km] used by the path-capacity
    approximation (e.g., rwa_lightpath_reuse). GN-model environments use
    attenuation/attenuation_bar in [1/m].
    (default: '0.2')
    (a number)
  --attenuation: GN-model attenuation coefficient a [1/m] used in ISRS/GN NLI
    and ASE calculations.
    (default: '4.605111673e-05')
    (a number)
  --attenuation_bar: GN-model attenuation coefficient a_bar [1/m] used alongside
    attenuation in ISRS/GN calculations.
    (default: '4.605111673e-05')
    (a number)
  --attn_mlp_latent: Size of attention MLP latent dimension
    (default: '64')
    (an integer)
  --attn_mlp_layers: Number of attention MLP layers
    (default: '1')
    (an integer)
  --band_data_filepath: Path to band definition CSV file for computing band gaps
    in GN model
  --band_preference: Comma-separated band preference order for first-fit/last-
    fit heuristics in GN model environments (e.g. 'C,L,S,U,E,O'). First-fit
    exhausts slots in preferred band order.
  --beta_2: Second-order dispersion parameter [ps^2/km] for the legacy path-
    capacity calculation (e.g., rwa_lightpath_reuse). GN-model environments use
    dispersion_coeff/dispersion_slope instead.
    (default: '-21.7')
    (a number)
  --beta_fec: Pre-FEC BER target for GSNR threshold calculation (used with
    --calc_minimum_osnr)
    (default: '0.015')
    (a number)
  --binary_dtype: Binary array dtype, e.g. path-link incidence (int8 in mixed
    mode)
  --[no]calc_minimum_osnr: Calculate minimum OSNR column from spectral
    efficiency using GSNR threshold formula instead of reading pre-specified
    values from the modulations CSV
    (default: 'true')
  --[no]coherent: Add NLI contribution coherently per span
    (default: 'true')
  --compute_dtype: NN compute dtype (float32, bfloat16). Keep float32 for
    stability.
  --[no]continuous_operation: If True, do not reset the environment at the end
    of an episode
    (default: 'false')
  --custom_traffic_matrix_csv_filepath: Path to a CSV file specifying a custom
    traffic matrix. The CSV should be an NxN matrix (N = number of nodes) where
    entry (i, j) gives the relative traffic demand from node i to node j. Leave
    blank to use uniform traffic (equal probability for all source-destination
    pairs). Ignored when --random_traffic is enabled.
  --[no]deterministic: Deterministic evaluation (use mode of action
    distribution)
    (default: 'false')
  --[no]deterministic_requests: Use deterministic requests
    (default: 'false')
  --[no]differentiable: Enable differentiable mode for gradient-based
    optimization (uses straight-through estimators and temperature
    approximations)
    (default: 'false')
  --[no]discrete_launch_power: Discrete launch power values
    (default: 'false')
  --[no]disjoint_paths: Use disjoint paths (k paths still considered)
    (default: 'false')
  --dispersion_coeff: Dispersion coefficient D [s/m^2] for GN-model/ISRS
    calculations; used to derive beta2 as a function of wavelength.
    (default: '1.7e-05')
    (a number)
  --dispersion_slope: Dispersion slope dD/dlambda [s/m^3] for GN-model/ISRS
    calculations; used with dispersion_coeff for frequency-dependent beta2/beta3
    terms.
    (default: '60.7')
    (a number)
  --edge_embedding_size: Size of edge embeddings
    (default: '128')
    (an integer)
  --edge_mlp_latent: Size of edge MLP latent dimension
    (default: '128')
    (an integer)
  --edge_mlp_layers: Number of edge MLP layers
    (default: '2')
    (an integer)
  --edge_output_size_actor: Size of edge output for actor (not used)
    (default: '0')
    (an integer)
  --edge_output_size_critic: Size of edge output for critic
    (default: '1')
    (an integer)
  --[no]end_first_blocking: End episode on first blocking event
    (default: 'false')
  --[no]enforce_band_gaps: Compute and enforce band boundary gaps from CSV data
    (non-GN-model multiband envs). GN model envs always enforce band gaps when
    band_preference is set.
    (default: 'true')
  --env_type: Environment type
    (default: 'rmsa')
  --fec_rate: FEC code rate (e.g. 0.8 = 20%% overhead). In rsa_gn_model it sets
    fec_threshold = 1 - fec_rate for the Shannon capacity formula; in
    rmsa_gn_model it scales accepted bitrate (effective_bitrate =
    requested_bitrate * fec_rate).
    (default: '0.8')
    (a number)
  --float_dtype: Uniform override for BOTH large+small float tiers (float32,
    float16, bfloat16)
  --gamma: Legacy nonlinear coefficient used by the path-capacity approximation
    (e.g., rwa_lightpath_reuse). GN-model environments use nonlinear_coefficient
    instead.
    (default: '1.2')
    (a number)
  --global_embedding_size: Size of global embeddings
    (default: '8')
    (an integer)
  --global_mlp_latent: Size of global MLP latent dimension
    (default: '16')
    (an integer)
  --global_mlp_layers: Number of global MLP layers
    (default: '1')
    (an integer)
  --global_output_size_actor: Size of global output for actor
    (default: '0')
    (an integer)
  --global_output_size_critic: Size of global output for critic
    (default: '1')
    (an integer)
  --[no]gnn_layer_norm: Use layer normalization in GNN
    (default: 'true')
  --guardband: Guard band in slots
    (default: '1')
    (an integer)
  --[no]include_no_op: Whether to include a NO OP action.
    (default: 'false')
  --[no]incremental_loading: Incremental increase in traffic load (non-expiring
    requests)
    (default: 'false')
  --int_dtype: Uniform override for BOTH large+small int tiers (int32, int16)
  --inter_band_gap_ghz: Spectral width of inter-band gap in GHz (~0.2nm at
    1550nm). Used in GN model envs to set the physical gap width between bands.
    (default: '25.0')
    (a number)
  --interband_gap_start: Start index of gap between bands [GHz];
    repeat this option to specify a list of values
    (an integer)
  --interband_gap_width: Gap between bands [GHz];
    repeat this option to specify a list of values
    (an integer)
  --k: Number of paths
    (default: '5')
    (an integer)
  --lambda0: Wavelength [nm]
    (default: '1550.0')
    (a number)
  --large_float_dtype: Precision float tier: accumulators, physical SNR/power
    (float32 recommended)
  --large_int_dtype: Counter int tier: total_requests/timesteps, large indices
    (int32 recommended)
  --[no]last_fit: Use KSP-FF for path_action, else KSP-LF
    (default: 'false')
  --launch_power_csv: Path to a CSV file specifying per-slot launch power.
    Expected columns: slot_index (int), freq_ghz (float), power_dbm (float).
    Slots not present in the file keep the default launch power. Overrides
    --power_per_channel and --power_per_channel_per_band.
  --launch_power_type: Can be fixed (same power per transceiver), tabular (power
    depends on path), or rl (power selected by agent).
    (default: 'fixed')
  --link_resources: Number of link resources
    (default: '5')
    (an integer)
  --list_of_requests: Traffic request list
    (a comma separated list)
  --load: Traffic load in Erlangs (arrival_rate = load /
    mean_service_holding_time). Also used as the single traffic load point for
    capacity bound estimation.
    (default: '250.0')
    (a number)
  --[no]log_actions: Log actions taken and other details
    (default: 'false')
  --[no]log_path_lengths: Log path length statistics
    (default: 'false')
  --[no]log_wrapper: Wrap Env in LogEnvWrapper
    (default: 'true')
  --max_bw: Maximum requested bandwidth
    (default: '100')
    (an integer)
  --max_concentration: For continuous launch power dist.
    (default: '20.0')
    (a number)
  --max_load: Maximum load for load sweep (inclusive).
    (a number)
  --max_node_resources: Maximum number of node resources
    (default: '1')
    (an integer)
  --max_power: Maximum launch power [dBm]
    (default: '0.5')
    (a number)
  --max_power_per_fibre: Max launch power per fibre [dBm]
    (default: '23.0')
    (a number)
  --max_requests: Maximum number of requests in an episode. For cut-set capacity
    bounds: number of requests per trial.
    (default: '4.0')
    (a number)
  --max_snr: Maximum SNR that a link can take (just used for normalization
    purposes)
    (default: '30.0')
    (a number)
  --max_traffic: Maximum traffic
    (default: '1.0')
  --[no]maximise_throughput: Maximise throughput instead of minimising blocking
    probability
    (default: 'false')
  --maximum_path_length_km: Maximum allowed path length in km. Paths exceeding
    this distance are replaced with duplicates of the last valid path (or zero-
    filled if none exist). None disables filtering.
    (a number)
  --mean_service_holding_time: Mean service holding time
    (default: '25.0')
    (a number)
  --message_passing_steps: Number of message passing steps
    (default: '3')
    (an integer)
  --min_bw: Minimum requested bandwidth
    (default: '25')
    (an integer)
  --min_concentration: For continuous launch power dist.
    (default: '0.1')
    (a number)
  --min_load: Minimum load for load sweep. When set (along with max_load and
    step_load), runs the experiment across a range of loads using a single
    compilation. Each swept load re-runs the ENV_WARMUP_STEPS warmup at its own
    arrival rate and zeroes the metric counters, so per-load metrics reflect
    that load's steady state.
    (a number)
  --min_node_resources: Minimum number of node resources
    (default: '1')
    (an integer)
  --min_power: Minimum launch power [dBm]
    (default: '-5.0')
    (a number)
  --min_snr: Minimum SNR for any data transmission
    (default: '7.0')
    (a number)
  --min_traffic: Minimum traffic
    (default: '0.0')
  --[no]mixed_precision: Enable mixed precision: shrink bulk env-state arrays
    (occupancy/masks -> float16, bounded indices -> int16, binary -> int8, times
    -> float16 when relative_arrival_times) while keeping NN compute/params,
    accumulators and physical-layer floats at float32. Cuts env-state memory
    ~2x. Individual *_dtype flags below override the mixed defaults.
    (default: 'false')
  --mlp_latent: Size of MLP latent dimension
    (an integer)
  --[no]mlp_layer_norm: Use layer normalization in MLPs of GNN
    (default: 'false')
  --mlp_layers: Number of MLP layers
    (an integer)
  --[no]mod_format_correction: Apply non-Gaussian modulation format correction
    (default: 'false')
  --modulations_csv_filepath: Modulation format definitions for RSA environment
    (default: './xlron/data/modulations/modulations_deeprmsa.csv')
  --mscl_interfering_k: Stored routes per node pair in the interfering route set
    of the MSCL heuristics (ksp_mscl, mscl_ksp). 1 (default) = the single-route-
    per-pair set of the original 2013 formulation; 0 = all k paths, giving the
    multi-route MSCL Sequencial/Combinado of dos Santos (2021). Compute and
    memory scale linearly with this value.
    (default: '1')
    (an integer)
  --multiple_topologies_directory: Directory containing JSON definitions of
    network topologies that will be alternated per episode
  --node_embedding_size: Size of node embeddings
    (default: '16')
    (an integer)
  --node_heuristic: Node heuristic to be evaluated
    (default: 'random')
  --node_mlp_latent: Size of node MLP latent dimension
    (default: '128')
    (an integer)
  --node_mlp_layers: Number of node MLP layers
    (default: '2')
    (an integer)
  --node_output_size_actor: Size of node output for actor
    (default: '0')
    (an integer)
  --node_output_size_critic: Size of node output for critic
    (default: '0')
    (an integer)
  --node_probs: List of node probabilities for selection
  --node_resources: Number of node resources
    (default: '4')
    (an integer)
  --noise_data_filepath: Path to GN-model noise CSV. This file provides
    transceiver back-to-back SNR and EDFA noise figure values, and can specify
    them per band or per sub-band. During GN-model calculations these values set
    the transceiver B2B SNR and amplifier noise figure used for each selected
    band/sub-band; if omitted, built-in defaults are used.
  --nonlinear_coefficient: GN-model nonlinear coefficient [1/W^2] used in
    ISRS/GN NLI calculations (rsa_gn_model, rmsa_gn_model).
    (default: '0.0012')
    (a number)
  --[no]normalize_by_link_length: Normalize by link length
    (default: 'false')
  --num_spectral_features: No. of spectral features
    (default: '8')
    (an integer)
  --num_subchannels: Number of Nyquist subchannels per frequency slot for GN
    model NLI calculation. Divides each slot's bandwidth into N subchannels with
    effective baud rate B_eff = slot_size / num_subchannels, reducing SPM. XPM
    and ASE are unchanged. Best used with slot_size equal to the desired channel
    bandwidth (e.g. slot_size=100, num_subchannels=8 models 8x12.5 GHz
    subcarriers).
    (default: '1')
    (an integer)
  --num_trials: Number of independent random-seed trials for capacity bound
    estimation (used by both cut-set and reconfigurable routing bounds)
    (default: '10')
    (an integer)
  --num_wire_features: Number of spectral features for WiRE positional encodings
    (computed from line graph Laplacian)
    (default: '8')
    (an integer)
  --[no]optimise_launch_power: Use deteministic requests from list_of_requests
    to optimise launch power
    (default: 'false')
  --[no]pack_path_bits: Pack path bits to save memory, then unpack when path row
    is selected
    (default: 'false')
  --params_dtype: NN parameter/optimizer dtype (float32, bfloat16). Keep float32
    for stability.
  --path_heuristic: Path heuristic to be evaluated
    (default: 'ksp_ff')
  --path_sort_criteria: How paths should be sorted. Must be one of
    'spectral_resources' (default), 'hops', 'distance', 'hops_distance',
    'capacity' (for RWA-LR only)
    (default: 'spectral_resources')
  --power_per_channel: Per-channel launch power [dBm]. If None, defaults to
    max_power_per_fibre divided equally among slots.
    (a number)
  --power_per_channel_per_band: Comma-separated per-channel launch power values
    [dBm], one per band in band_preference order (e.g. '2.3,2.5' for C,L).
    Overrides --power_per_channel.
  --raman_gain_slope: Raman gain slope [1/(W*m*Hz)]. Typical value ~0.028
    1/(W*km*THz) = 2.8e-17 in SI.
    (default: '2.8e-17')
    (a number)
  --raman_max_bandwidth_thz: Maximum modulated bandwidth in THz for DRA
    triangular Raman approximation validity. When DRA is enabled, bands are
    trimmed to fit within this limit.
    (default: '15.0')
    (a number)
  --raman_pump_freq_bw: Backward Raman pump frequencies in Hz (comma-separated,
    one per pump)
  --raman_pump_freq_fw: Forward Raman pump frequencies in Hz (comma-separated,
    one per pump)
  --raman_pump_power_bw: Backward Raman pump powers in Watts (comma-separated,
    one per pump)
  --raman_pump_power_fw: Forward Raman pump powers in Watts (comma-separated,
    one per pump)
  --[no]random_traffic: Generate a new random traffic matrix on each episode
    reset, so source-destination pair probabilities vary between episodes. When
    False, the traffic matrix is fixed for the entire run (uniform by default,
    or loaded from a CSV via --custom_traffic_matrix_csv_filepath).
    (default: 'false')
  --ref_lambda: Reference wavelength [m]
    (default: '1.564e-06')
    (a number)
  --[no]relative_arrival_times: Don't track the absolute current time, just the
    relative time since the last request
    (default: 'true')
  --reward_dtype: Reward dtype (float32)
  --reward_type: Reward type
    (default: 'service')
  --scale_factor: Scale factor for link capacity (only used in RWA with
    lightpath reuse)
    (default: '1.0')
    (a number)
  --slot_size: Spectral width of frequency slot in GHz
    (default: '12.5')
    (a number)
  --slots_per_band: Comma-separated number of slots per band (e.g. '45,45').
    Must match number of bands in band_preference. Overrides the default
    behaviour of filling entire band width with slots. Gap slots between bands
    are still added as normal.
  --small_float_dtype: Bulk float tier: occupancy, masks, features (float16 in
    mixed mode)
  --small_int_dtype: Bounded index int tier: required_slots, node/datarate
    (int16 in mixed mode)
  --snr_margin: Margin required for estimated SNR for mod. format selection [dB]
    (default: '0.5')
    (a number)
  --[no]sort_requests: Sort requests in descending order of required resources
    (default: 'true')
  --span_length: Span length [km]
    (default: '100.0')
    (a number)
  --span_lumped_loss_db: Optional per-span lumped loss [dB] compensated by
    inline EDFAs in GN model ASE calculations. If unset, no additional lumped
    span loss is applied.
    (a number)
  --step_bw: Step size for requested bandwidth values between min and max
    (default: '1')
    (an integer)
  --step_load: Load step size for load sweep.
    (a number)
  --step_power: Step size for launch power values between min and max
    (default: '0.1')
    (a number)
  --step_traffic: Step size for traffic values between min and max
    (default: '0.1')
  --symbol_rate: Symbol rate in Gbaud (only used in RWA with lightpath reuse
    (default: '100')
    (an integer)
  --temperature: Temperature for differentiable function approximations (higher
    temp. = closer to original function)
    (default: '5.0')
    (a number)
  --[no]terminate_on_episode_end: If True, treat max_requests reached as
    terminated (not truncated). When False (default), reaching max_requests is
    treated as truncation.
    (default: 'false')
  --time_dtype: Time/departure array dtype. float16 is safe with
    relative_arrival_times; use float32 for absolute-time continuous_operation
    (mixed mode auto-selects float32 in that case).
  --topology_directory: Directory containing JSON definitions of network
    topologies
  --topology_name: Topology name
    (default: '4node')
  --[no]traffic_array: Use traffic array
    (default: 'false')
  --traffic_intensity: Traffic intensity (arrival rate * mean holding time)
    (default: '0.0')
    (a number)
  --traffic_requests_csv_filepath: Path to traffic request CSV file
  --transformer_actor_mlp_depth: Depth of actor MLP head in transformer
    (default: '1')
    (an integer)
  --transformer_actor_mlp_width: Width of actor MLP head in transformer
    (default: '128')
    (an integer)
  --transformer_actor_pooling: Pooling strategy for actor: 'sum' (default) or
    'min_mean_max' (concatenate min/mean/max then project)
    (default: 'mean')
  --transformer_attention_dropout_rate: Dropout rate for transformer attention
    layers
    (default: '0.1')
    (a number)
  --transformer_critic_mlp_depth: Depth of critic MLP head in transformer
    (default: '2')
    (an integer)
  --transformer_critic_mlp_width: Width of critic MLP head in transformer
    (default: '128')
    (an integer)
  --transformer_critic_pooling: Pooling strategy for critic: 'mean' (default) or
    'attention' (learned single-query attention)
    (default: 'mean')
  --transformer_dropout_rate: Dropout rate for transformer layers
    (default: '0.1')
    (a number)
  --transformer_embedding_size: Size of transformer token embeddings
    (default: '128')
    (an integer)
  --[no]transformer_enable_dropout: Enable dropout during training in
    transformer
    (default: 'false')
  --transformer_intermediate_size: Size of intermediate layer in transformer
    feed-forward blocks
    (default: '256')
    (an integer)
  --transformer_num_heads: Number of attention heads in transformer
    (default: '4')
    (an integer)
  --transformer_num_layers: Number of transformer encoder layers
    (default: '1')
    (an integer)
  --transformer_obs_type: Type of observation to feed to transformer.     1.
    'departure': use departure times.     2. 'occupancy': use link occupancy
    (binary).     3. 'capacity': use remaining capacity array (for use with RWA-
    LR environment).
    (default: 'departure')
  --[no]transformer_share_layers: Share encoder layers between actor and critic
    in transformer
    (default: 'false')
  --[no]truncate_holding_time: Truncate holding time to less than
    2*mean_service_holding_time
    (default: 'false')
  --[no]uniform_spans: Use uniform spans (on by default: simplifies
    calculations)
    (default: 'true')
  --[no]use_raman_amp: Enable Distributed Raman Amplification model for NLI
    calculation
    (default: 'false')
  --values_bw: List of requested bandwidth values
  --values_bw_probs: Comma-separated sampling probabilities for each value in
    values_bw (must match values_bw length; normalised to sum to 1). If unset,
    bandwidth values are sampled uniformly.
  --virtual_topologies: Virtual topologies
    (default: '3_ring')
  --warmup_action_type: Action selection method during warmup. None uses the
    default for the run mode (RL policy or heuristic). 'heuristic' uses the
    heuristic specified by --path_heuristic. 'random' selects random valid
    actions.