File size: 1,561 Bytes
52c82e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
"""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()