Writing a WareMax scenario YAML
Define an RMFS scenario in YAML: seed, robots, stations, order arrivals, traffic, and the policy stack — the file that drives a deterministic run.
A WareMax scenario is a text file you can diff and version. It is parsed and
schema-validated by waremax-config, so a malformed scenario fails fast with a clear
error rather than a silently wrong simulation.
The anatomy of a scenario
seed: 12345
simulation:
duration_minutes: 60
warmup_minutes: 5
robots:
count: 10
max_speed_mps: 1.5
stations:
- id: S1
node: "30"
type: pick
concurrency: 2
service_time_s:
distribution: lognormal
base: 12.0
per_item: 3.0
orders:
arrival_process: { type: poisson, rate_per_min: 1.0 }
lines_per_order: { type: negative_binomial, mean: 2.0 }
sku_popularity: { type: zipf, alpha: 1.1 }
policies:
task_allocation: { type: routed } # or nearest_robot, least_busy, round_robin, auction, rl_agent
station_assignment: { type: least_queue }
traffic:
policy: wait_at_node
node_capacity_default: 4
edge_capacity_default: 4
congestion_weight: 0.0
The seed is load-bearing
The seed field is what makes a run reproducible. WareMax seeds a ChaCha8 RNG from
this u64 and applies canonical id-based tie-breaking everywhere, so two runs of the
same scenario produce byte-identical trajectories.
The policy stack
policies.task_allocation selects the dispatching heuristic. Swap routed for any of
the five baselines — or rl_agent to drive it from a
trained Gymnasium policy.
WareMax is built by Skelf Research. See the full scenario schema in the docs.
Frequently Asked Questions
Can I import a warehouse CAD or DWG file?
No. WareMax scenarios are YAML (or JSON) topology and policy definitions parsed by waremax-config. CAD/DWG import is deliberately out of scope.
How do I switch dispatching policies?
Change the policies.task_allocation.type field to one of nearest_robot, least_busy, round_robin, auction, workload-balanced, or rl_agent. No code change is needed for the built-in heuristics.