IBM ILOG Scheduler User's Manual > Advanced Concepts > Scheduling with Unary Resources: the Job-Shop Problem > Describing the Problem |
Describing the Problem |
INDEX
![]() |
The job-shop scheduling problem consists of n jobs to be performed using m machines. Each job is described as a list of m activities of given processing times, to be executed in a given order. Each activity requires a specified machine and each machine is required by a unique activity of each job. The goal is to find a schedule with a minimal makespan, that is, a schedule for which the latest completion time for all the activities is minimal.
Three problem instances are considered:
The following arrays provide the data defining the problems. At the intersection of the ith row and jth column, each ResourceNumbers**
array provides the number of the machine used to perform the jth step of the ith job. At the intersection of the ith row and jth column, each Durations**
array indicates the processing time of the jth step of the ith job.
IloInt ResourceNumbers06 [] = {2, 0, 1, 3, 5, 4, 1, 2, 4, 5, 0, 3, 2, 3, 5, 0, 1, 4, 1, 0, 2, 3, 4, 5, 2, 1, 4, 5, 0, 3, 1, 3, 5, 0, 4, 2}; IloInt Durations06 [] = { 1, 3, 6, 7, 3, 6, 8, 5, 10, 10, 10, 4, 5, 4, 8, 9, 1, 7, 5, 5, 5, 3, 8, 9, 9, 3, 5, 4, 3, 1, 3, 3, 9, 10, 4, 1}; IloInt ResourceNumbers10 [] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 4, 9, 3, 1, 6, 5, 7, 8, 1, 0, 3, 2, 8, 5, 7, 6, 9, 4, 1, 2, 0, 4, 6, 8, 7, 3, 9, 5, 2, 0, 1, 5, 3, 4, 8, 7, 9, 6, 2, 1, 5, 3, 8, 9, 0, 6, 4, 7, 1, 0, 3, 2, 6, 5, 9, 8, 7, 4, 2, 0, 1, 5, 4, 6, 8, 9, 7, 3, 0, 1, 3, 5, 2, 9, 6, 7, 4, 8, 1, 0, 2, 6, 8, 9, 5, 3, 4, 7}; IloInt Durations10 [] = {29, 78, 9, 36, 49, 11, 62, 56, 44, 21, 43, 90, 75, 11, 69, 28, 46, 46, 72, 30, 91, 85, 39, 74, 90, 10, 12, 89, 45, 33, 81, 95, 71, 99, 9, 52, 85, 98, 22, 43, 14, 6, 22, 61, 26, 69, 21, 49, 72, 53, 84, 2, 52, 95, 48, 72, 47, 65, 6, 25, 46, 37, 61, 13, 32, 21, 32, 89, 30, 55, 31, 86, 46, 74, 32, 88, 19, 48, 36, 79, 76, 69, 76, 51, 85, 11, 40, 89, 26, 74, 85, 13, 61, 7, 64, 76, 47, 52, 90, 45}; IloInt ResourceNumbers20 [] = {0, 1, 2, 3, 4, 0, 1, 3, 2, 4, 1, 0, 2, 4, 3, 1, 0, 4, 2, 3, 2, 1, 0, 3, 4, 2, 1, 4, 0, 3, 1, 0, 2, 3, 4, 2, 1, 0, 3, 4, 0, 3, 2, 1, 4, 1, 2, 0, 3, 4, 1, 3, 0, 4, 2, 2, 0, 1, 3, 4, 0, 2, 1, 3, 4, 2, 0, 1, 3, 4, 0, 1, 4, 2, 3, 1, 0, 3, 4, 2, 0, 2, 1, 3, 4, 0, 1, 4, 2, 3, 1, 2, 0, 3, 4, 0, 1, 2, 3, 4}; IloInt Durations20 [] = {29, 9, 49, 62, 44, 43, 75, 69, 46, 72, 91, 39, 90, 12, 45, 81, 71, 9, 85, 22, 14, 22, 26, 21, 72, 84, 52, 48, 47, 6, 46, 61, 32, 32, 30, 31, 46, 32, 19, 36, 76, 76, 85, 40, 26, 85, 61, 64, 47, 90, 78, 36, 11, 56, 21, 90, 11, 28, 46, 30, 85, 74, 10, 89, 33, 95, 99, 52, 98, 43, 6, 61, 69, 49, 53, 2, 95, 72, 65, 25, 37, 13, 21, 89, 55, 86, 74, 88, 48, 79, 69, 51, 11, 89, 74, 13, 7, 76, 52, 45};
The main
function accepts the number of the problem to be solved (6, 10, or 20) as its argument. Four parameters, numberOfJobs
, numberOfResources
, resourceNumbers
, and durations
, are set accordingly. Of course, in a typical industrial application, these data would have to be obtained from a database.
void InitParameters(int argc, char** argv, IloInt& numberOfJobs, IloInt& numberOfResources, IloInt*& resourceNumbers, IloInt*& durations) { if (argc > 1) { IloInt number = atol(argv[1]); if (number == 10) { numberOfJobs = 10; numberOfResources = 10; resourceNumbers = ResourceNumbers10; durations = Durations10; } else if (number == 20) { numberOfJobs = 20; numberOfResources = 5; resourceNumbers = ResourceNumbers20; durations = Durations20; } } } int main(int argc, char** argv) { try { IloEnv env; IloInt numberOfJobs = 6; IloInt numberOfResources = 6; IloInt* resourceNumbers = ResourceNumbers06; IloInt* durations = Durations06; InitParameters(argc, argv, numberOfJobs, numberOfResources, resourceNumbers, durations); /* ... */ }
These parameters are then passed to the function DefineModel
; it returns an instance of the class IloModel
that corresponds to the problem and sets the constrained makespan
variable to be minimized.
IloNumVar makespan; IloAnyArray jobs; IloModel model = DefineModel(env, numberOfJobs, numberOfResources, resourceNumbers, durations, makespan, jobs); model.add(IloMinimize(env, makespan)); /* ... */
The function DefineModel
is developed in the next section.
© Copyright IBM Corp. 1987, 2009. Legal terms. | PREVIOUS NEXT |