Download
"""
PyCSP3 Model (see pycsp.org)
Data can come:
- either directly from a JSON file
- or from an intermediate parser
Example:
python Rcpsp.py -data=Rcpsp_j30-01-01.json
"""
from pycsp3 import *
horizon, capacities, jobs = data
nJobs = len(jobs)
# s[i] is the starting time of the ith job
s = VarArray(size=nJobs, dom=lambda i: {0} if i == 0 else range(horizon))
satisfy(
# precedence constraints
[s[i] + duration <= s[j] for i, (duration, successors, _) in enumerate(jobs) for j in successors],
# resource constraints
[Cumulative(tasks=[(s[i], duration, quantities[k]) for i, (duration, _, quantities) in enumerate(jobs) if quantities[k] > 0]) <= capacity
for k, capacity in enumerate(capacities)]
)
minimize(
s[-1]
)