All experiments cited in the manuscript follow the same FHOPS CLI pipeline so readers can replay each stage without bespoke tooling:
Validate or snapshot scenarios. Run
fhops validate <scenario.yaml>for each bundle (e.g.,examples/tiny7andexamples/med42) and, when needed, snapshot synthetic tiers viafhops synth generate out/synthetic_<tier> --tier <tier> --seed <seed>(one call per tier, fixed RNG seeds).Benchmark solvers. Invoke
fhops bench suitewith explicit--scenarioand--out-dirarguments (for the manuscript:docs/softwarex/assets/data/benchmarks/<slug>/) plus the desired heuristics (--include-ils,--include-tabu) and iteration budgets.Run the tuning harness. Launch
python docs/softwarex/manuscript/scripts/run_tuner.py(which callsscripts/run_tuning_benchmarks.py; wrapped bydocs/softwarex/manuscript/scripts/generate_assets.sh) to produce leaderboard/comparison tables indocs/softwarex/assets/data/tuning/.Replay schedules. Call
fhops eval-playbackon the best SA/ILS assignments (deterministic and stochastic modes) so utilisation and downtime metrics land underdocs/softwarex/assets/data/playback/<scenario>/<solver>/<mode>/.Estimate costs. Execute
fhops dataset estimate-costfor each machine bundle to capture owning/operating/repair totals indocs/softwarex/assets/data/costing/.Synthetic scaling sweep. Use
python docs/softwarex/manuscript/scripts/run_synthetic_sweep.pyto regenerate runtime-vs-size CSV/JSON + plots underdocs/softwarex/assets/data/scaling/.
docs/softwarex/manuscript/scripts/generate_assets.sh runs all six steps with the published budgets and writes repository-relative paths into the assets. Run
through make manuscript-benchmarks (run_manuscript_benchmarks.sh), it appends the commit, asset mode, runtime, and an SHA-256 hash of the committed
asset files to docs/softwarex/assets/benchmark_runs.log, a single provenance log for all artefacts; make verify-assets-hash recomputes the hash.