"""Run all 6 fixed dispatch rules on every available benchmark instance. Output: results/baselines.csv with one row per (family, instance, rule). """ from __future__ import annotations import argparse from pathlib import Path from dash_jsp.benchmarks import taillard, lawrence, dmu from dash_jsp.eval.benchmark import MethodSpec, run_benchmark from dash_jsp.heuristics.rules import ALL_RULES def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--data-dir", default="data") parser.add_argument("--out", default="results/baselines.csv") parser.add_argument( "--families", nargs="+", default=["taillard", "lawrence", "dmu"], choices=["taillard", "lawrence", "dmu"], ) args = parser.parse_args() data_dir = Path(args.data_dir) instances = [] if "taillard" in args.families: instances.extend(taillard.load_all(data_dir / "taillard")) if "lawrence" in args.families: instances.extend(lawrence.load_all(data_dir / "lawrence")) if "dmu" in args.families: instances.extend(dmu.load_all(data_dir / "dmu")) methods = [ MethodSpec.from_fixed_rule(name, rule) for name, rule in ALL_RULES.items() ] print(f"Running {len(methods)} methods on {len(instances)} instances") df = run_benchmark(methods, instances, seeds=[0]) out = Path(args.out) out.parent.mkdir(parents=True, exist_ok=True) df.to_csv(out, index=False) print(f"Wrote {out} ({len(df)} rows)") if __name__ == "__main__": main()