Skip to content

Commit 2b0b3ca

Browse files
committed
Update jobscript
1 parent 134eff8 commit 2b0b3ca

1 file changed

Lines changed: 44 additions & 19 deletions

File tree

jobscript.py

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#SBATCH --out=slurm/{job_name}-%A_%a.out
2424
2525
uv run benchmark.py \
26-
data/instances/{problem}/*.txt \
26+
{data_dir}/{problem}/*.txt \
2727
--problem_variant {problem} \
2828
--sol_dir {out_dir} \
2929
--time_limit {time_limit} \
@@ -33,41 +33,48 @@
3333
--permutation_max_jobs {permutation_max_jobs} >> {out_dir}/results.txt
3434
"""
3535

36-
NUM_CORES = 192
37-
NUM_WORKERS_PER_INSTANCE = 8
38-
NUM_PARALLEL_INSTANCES = 24
39-
DATA_DIR = Path("data/instances")
40-
PERMUTATION_MAX_JOBS = 100
41-
4236

4337
def seconds2string(seconds: int) -> str:
4438
mins, seconds = divmod(seconds, 60)
4539
hours, mins = divmod(mins, 60)
4640
return f"{hours:02d}:{mins:02d}:{seconds:02d}"
4741

4842

49-
def main(solver: str, time_limit: int, mock: bool):
50-
for problem_variant_enum in ProblemVariant:
51-
problem_variant = problem_variant_enum.value
52-
instance_dir = DATA_DIR / problem_variant
43+
def main(
44+
solver: str,
45+
time_limit: int,
46+
problem_variants: list[str],
47+
mock: bool,
48+
num_cores: int,
49+
num_workers_per_instance: int,
50+
num_parallel_instances: int,
51+
results_dir: Path,
52+
data_dir: Path,
53+
permutation_max_jobs: int,
54+
):
55+
for problem_variant in problem_variants:
56+
instance_dir = data_dir / problem_variant
5357
num_instances = len(list(instance_dir.glob("*.txt")))
5458
job_name = f"{problem_variant}-{solver}-{time_limit}"
55-
_total_time = (num_instances / NUM_PARALLEL_INSTANCES) * time_limit
56-
job_time_limit = seconds2string(int(_total_time + 3600)) # 3600s buffer
57-
out_dir = f"data/results/{problem_variant}/{solver}/{time_limit}"
59+
_total_time = (num_instances / num_parallel_instances) * time_limit
60+
job_time_limit = seconds2string(
61+
int(_total_time + 3600)
62+
) # 3600s buffer
63+
out_dir = results_dir / f"{problem_variant}/{solver}/{time_limit}"
5864
maybe_mkdir(out_dir)
5965

6066
jobscript = JOBSCRIPT.format(
6167
job_name=job_name,
62-
job_cpus_per_task=NUM_CORES,
68+
job_cpus_per_task=num_cores,
6369
job_time_limit=job_time_limit,
6470
problem=problem_variant,
6571
solver=solver,
6672
time_limit=time_limit,
67-
num_workers_per_instance=NUM_WORKERS_PER_INSTANCE,
68-
num_parallel_instances=NUM_PARALLEL_INSTANCES,
69-
permutation_max_jobs=PERMUTATION_MAX_JOBS,
73+
num_workers_per_instance=num_workers_per_instance,
74+
num_parallel_instances=num_parallel_instances,
75+
permutation_max_jobs=permutation_max_jobs,
7076
out_dir=out_dir,
77+
data_dir=data_dir,
7178
)
7279

7380
if mock:
@@ -83,12 +90,30 @@ def parse_args():
8390
"--solver", type=str, choices=["ortools", "cpoptimizer"], required=True
8491
)
8592
parser.add_argument("--time_limit", type=int, required=True)
93+
parser.add_argument(
94+
"--problem_variants",
95+
type=str,
96+
nargs="+",
97+
choices=[variant.value for variant in ProblemVariant],
98+
default=[variant.value for variant in ProblemVariant],
99+
)
86100
parser.add_argument("--mock", action="store_true")
87101

102+
parser.add_argument("--num_cores", type=int, default=192)
103+
parser.add_argument("--num_workers_per_instance", type=int, default=8)
104+
parser.add_argument("--num_parallel_instances", type=int, default=24)
105+
parser.add_argument(
106+
"--results_dir", type=Path, default=Path("data/results")
107+
)
108+
parser.add_argument(
109+
"--data_dir", type=Path, default=Path("data/instances")
110+
)
111+
parser.add_argument("--permutation_max_jobs", type=int, default=100)
112+
88113
return parser.parse_args()
89114

90115

91-
def maybe_mkdir(where: str):
116+
def maybe_mkdir(where: str | Path):
92117
if where:
93118
dir_loc = Path(where)
94119
dir_loc.mkdir(parents=True, exist_ok=True)

0 commit comments

Comments
 (0)