Skip to content

Commit 06a0b71

Browse files
authored
Support ASLIB (#7)
1 parent 2b0b3ca commit 06a0b71

5 files changed

Lines changed: 30 additions & 343 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ dependencies = [
88
"jupyterlab>=4.2.5",
99
"numpy>=1.26.4",
1010
"openpyxl>=3.1.5",
11-
"pyjobshop[docplex]",
11+
"pyjobshop[docplex]>=0.0.7",
1212
]
1313

1414
[tool.uv]

read/Problem.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ class ProblemVariant(str, Enum):
1919
RCPSP = "RCPSP"
2020
MMRCPSP = "MMRCPSP"
2121
RCMPSP = "RCMPSP"
22+
ASLIB = "ASLIB"

read/project.py

Lines changed: 0 additions & 317 deletions
This file was deleted.

read/read.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
from pathlib import Path
22
from .Problem import ProblemVariant
33
from .machine import MachineInstance
4-
from .project import ProjectInstance
4+
from functools import partial
55

6-
from pyjobshop import ProblemData
6+
from pyjobshop import ProblemData, read as _read
77

88

99
def read(loc: Path, problem: ProblemVariant) -> ProblemData:
1010
"""
1111
Reads a problem instance from file and returns a ProblemData instance.
1212
"""
13-
parse_methods = {
13+
machine_variants = {
1414
ProblemVariant.JSP: MachineInstance.parse_jsp,
1515
ProblemVariant.FJSP: MachineInstance.parse_fjsp,
1616
ProblemVariant.HFSP: MachineInstance.parse_hfsp,
@@ -23,15 +23,21 @@ def read(loc: Path, problem: ProblemVariant) -> ProblemData:
2323
ProblemVariant.TCT_PFSP: MachineInstance.parse_tct_pfsp,
2424
ProblemVariant.TT_PFSP: MachineInstance.parse_tt_pfsp,
2525
ProblemVariant.DPFSP: MachineInstance.parse_dpfsp,
26-
# Project scheduling problems have instance-format specific parsers.
27-
ProblemVariant.RCPSP: ProjectInstance.parse_patterson,
28-
ProblemVariant.MMRCPSP: ProjectInstance.parse_psplib,
29-
ProblemVariant.RCMPSP: ProjectInstance.parse_mplib,
3026
}
27+
project_variants = {
28+
# Project scheduling problems have instance-format specific parsers,
29+
# which are already supported directly by PyJobShop's read function.
30+
ProblemVariant.RCPSP: partial(_read, instance_format="patterson"),
31+
ProblemVariant.MMRCPSP: partial(_read, instance_format="psplib"),
32+
ProblemVariant.RCMPSP: partial(_read, instance_format="psplib"),
33+
ProblemVariant.ASLIB: partial(_read, instance_format="aslib"),
34+
}
35+
36+
if problem in machine_variants:
37+
instance = machine_variants[problem](loc)
38+
return instance.data()
3139

32-
parse_method = parse_methods.get(problem)
33-
if parse_method is None:
34-
raise ValueError(f"Unsupported problem type: {problem}")
40+
if problem in project_variants:
41+
return project_variants[problem](loc)
3542

36-
instance = parse_method(loc)
37-
return instance.data()
43+
raise ValueError(f"Unsupported problem type: {problem}")

0 commit comments

Comments
 (0)