Planning and Scheduling Problem Instances
The instances are in http://public.tepper.cmu.edu/jnh/planningandscheduling.zip.
The instance files are named XNjMmK.dat, where
X = problem class (c, e, de, or df)
N = number of tasks
M = number of facilities
K = instance number (1-5)
For example, file c10j3m1.dat contains the first random problem in class c with 10 tasks and 3 facilities.
Problem classes:
c: All tasks in a given instance have the same release date (0) and
due date. M = 2,3,4, N = 10, ..., 38. Machine speeds vary by as
much as a factor of M. See "problem generation" below for
details. Used in [1], [2], [3].
e: All tasks in a given instance have the same release date (0) and due
date. M = 2,3,...,10, N = 5M. Machine
speeds vary by as much as a factor of 1.5. Used in [1], [3].
de: Tasks have the same release date (0) but different due dates.
M = 3, N = 14, ..., 28. Used in [2],[3].
df: Tasks have different release dates
and due dates. M = 3, N = 14, ..., 28. Used in [3].
References:
[1] J. N. Hooker, A hybrid method for planning and scheduling, CP 2004.
[2] J. N. Hooker, Planning and scheduling to minimize tardiness, CP 2005.
[3] J. N. Hooker, Planning and scheduling by logic-based Benders decomposition,
working paper.
Input format:
The input files XNjMmK.dat are designed to be read by OPL studio with the following code:
struct MachineJobData {
int+ duration;
int+ resource;
int+ cost;
};
struct JobData {
int+ release;
int+ deadline;
};
range Jobs 1..JobCount;
range Machines 1..MachineCount;
int JobCount = ...;
int MachineCount = ...;
MachineJobData machjob[Machines,Jobs] = ...;
JobData job[Jobs] = ...;
int+ Limit[Machines] = ...;
The file format is:
JobCount = 10 ;
MachineCount = 3 ;
machjob = [
[<p11 c11 f11> ... <p1N c1N
f1N>]
...
[<pM1 cM1 fM1> ... <pMN cMN fMN>]
];
Limit = [C1, ..., CM];
job = [<r1 d1> ... <rN
dN>];
where
pij = processing time of task j
on facility i
cij = resource consumption of task j
on facility i
fij = fixed cost of
running task j on facility i
Ci = resource limit on facility i
rj = release time of job j
dj = due date of job j
Problem generation:
where:
Problem class |
[R1,R2] |
[D1,D2] |
[P1,P2] |
[F1,F2] |
c |
[0,0] |
[D(1/3),D(1/3)]* |
[i,10i] |
[2(M-i+1),20(M-i+1)] |
e |
[0,0] |
[33,33] |
[2,25-(i-1)(10/(M-1))] |
[400/(25-(i-1)(10/(M-1))), |
de |
[0,0] |
[(1/4)D(1/3),D(1/3)]* |
[P1,30]
for i = 1 |
[10,40]
for i = 1 |
df |
[0,D(1/2)]* |
[r+(1/4)D(1/2),r+D(1/2)] |
same
as de |
same
as de |
*D(a) = 5aN(M+1)/M