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]
where i = facility number

[2(M-i+1),20(M-i+1)]
where i = facility number

e

[0,0]

[33,33]

[2,25-(i-1)(10/(M-1))]
where i = facility number

[400/(25-(i-1)(10/(M-1))),
800/(25-(i-1)(10/(M-1)))]
where i = facility number

de

[0,0]

[(1/4)D(1/3),D(1/3)]*

[P1,30] for i = 1
[P1,25] for i = 2
[P1,20] for i = 3
where P1 = 2 for
N
<= 20 and P1 = 5 for N > 20, and where i = facility number

[10,40] for i = 1
[20,50] for i = 2
[30,60] for i = 3
where i = facility number

df

[0,D(1/2)]*

[r+(1/4)D(1/2),r+D(1/2)]
where r = randomly chosen release time*

same as de

same as de

*D(a) = 5aN(M+1)/M