Originally posted by: SystemAdmin
Hi,
I've attached a parallel machine scheduling model that I got working today with some help from the forum concerning transition times.
It's rather complicated, but the gist is this:
1. each machine (really a vehicle) has multiple route legs.
2. Every task can be done on certain specified machine/leg pairs.
3. Each such machine/leg/task tuple can have multiple time windows associated with it.
4. For each machine/leg/task tuple, no matter how many time windows associated with it, the task duration and the value received is the same.
5. Transition times are different for every machine/leg pair.
6. All tasks are optional.
I have modeled all of the above and I maximize the value of the scheduled tasks. Everything works fine. What I noticed, though, is that if I change a time window for one particular task, j, such that it won't be in the solution, the whole problem returns 'no solution'.
Below is my .dat file. In the set 'tWindows, I have "<<<2 1> 4> 44 52>" which means that vehicle 2, leg 1, task 4 is feasible in
44-52. In 'opps', you can see that it has a duration of 8. If the window is instead
44-53, you will see that the model solves and vehicle 2, leg 1 does task 1 from 41-43, takes 5 seconds to transition to task 4 and then does task 4 from 45-53.
Using
44-52, however, the entire model has no solution which seems invalid since vehicle 2, leg 1 can still do task 1, for instance.
Can someone tell me what I've done wrong in a model that otherwise seems to do exactly what I want it to?
Thank you!
/********************************************* * OPL 6.3 Data * Creation Date: Jan 28, 2010 at 3:42:59 PM *********************************************/ platforms =
{ 1 2
}; tasks =
{1 2 3 4
}; legsPerPlatform = [2 1]; oppIDs =
{ <<1 1> 1> <<1 1> 2> <<1 2> 1> <<1 2> 2> <<2 1> 1> <<2 1> 2> <<2 1> 3> <<2 1> 4>
}; platLegs =
{ <1 1> <1 2> <2 1>
}; opps =
{ <<<1 1> 2> 8 1345> <<<1 2> 2> 10 150> <<<1 2> 1> 7 88888> <<<2 1> 1> 2 4560> <<<2 1> 3> 14 100000> <<<2 1> 4> 8 15098>
}; tWindows =
{ <<<1 1> 2> 10 21> <<<1 2> 2> 34 56> <<<1 2> 2> 60 80> <<<1 2> 1> 33 36> <<<2 1> 1> 41 49> <<<2 1> 3> 0 101> <<<2 1> 4> 44 52>
};
//transition times are symmetric!! transTimes = [
{
},
//platform 1, leg 1
{ <1 2 10> <2 1 10>
},
//platform 1, leg 2
{ <1 3 5> <1 4 2> <3 1 5> <3 4 7> <4 1 2> <4 3 7>
}
//platform 2, leg 2 ];
#DecisionOptimization#OPLusingCPOptimizer