Compare · library

WareMax vs. a custom SimPy stack

SimPy is a process-based DES library in Python; rolling your own RMFS simulator on top is a fine first step. WareMax becomes the right choice when you need speed, reproducibility-as-a-property, and an RL interface that does not break under a worker thread.

License: SimPy: MIT. WareMax: MIT.Language: SimPy: Python (generator coroutines). WareMax: Rust core + Python bindings.Domain scope: SimPy: general DES library. WareMax: RMFS dispatching benchmark.You write: SimPy: the whole RMFS model. WareMax: a scenario YAML and (optionally) a custom policy.

Fair-rows comparison

Each row below is a question we have actually been asked about WareMax in the same breath as A custom SimPy stack. We try to answer both columns accurately; corrections are welcome via the GitHub issue tracker.

dimension WareMax A custom SimPy stack
What it gives you A complete RMFS DES with policies, attribution, RL env, and baselines. A general DES kernel; you write the warehouse model.
Implementation language Rust core (waremax-core) + Python bindings via PyO3. Pure Python with generator-based coroutines.
Performance Trains thousands of episodes on a laptop CPU; Rust + mimalloc. Interpreted Python; orders of magnitude slower per simulated second.
Determinism Tested property end-to-end. ChaCha8 RNG, id-based tie-breaking everywhere, crossbeam ping-pong handshake between agent and sim. Depends entirely on your implementation. Python dict-iteration is insertion-ordered (3.7+) but tie-breaking and external RNG usage are your responsibility.
RL interface Gymnasium env WaremaxAllocEnv, MaskablePPO-ready, candidate-scoring policy supplied. SMDP framing. You write it. Wrapping SimPy in a Gymnasium env with action masking and worker-thread safety is non-trivial.
Heuristic baselines Five shipped, selectable by name in the YAML. You implement them.
Delay attribution Five-bucket per-task decomposition that sums to cycle time. Used as reward signal in attribution / routed modes. You design the schema and implement the bookkeeping.
Time to a useful experiment One YAML file and one CLI invocation. Days to weeks for a first credible RMFS model.
When SimPy is the right call Small or unusual systems where the question is well-served by a one-off model; teaching DES; quick prototypes.
When WareMax is the right call RMFS dispatching studies, RL experiments, multi-seed reproducible benchmarks, fleet sizing.
Extensibility Implement TaskAllocationPolicy (one-method Rust trait) + a one-arm change in policy_factory.rs. Same pattern for station assignment, batching, priority, traffic. Edit your Python code; no contract to honor.
Verdict

Start with SimPy for one-off RMFS prototypes or when you want a teaching exercise. Move to WareMax when you need speed, an RL benchmark, or a reproducibility guarantee that survives your own carelessness.

Spot a mistake about A custom SimPy stack on this page? Open an issue at github.com/Skelf-Research/waremax/issues and we will fix it.

← All comparisons