Originally posted by: SystemAdmin
In the case Abs(A-B)<CONSTANT, you could use some alternative constraint to model the two possibilities: "use states A and B" OR "use state C during an interval that spans task 1 and task2". For instance (in pseudo OPL) assuming the total processing time is just the sum of the length of all tasks on the resource:
dvar interval task1 ...; dvar interval task2 ...; dvar interval task1A optional ...;
// requires stateA dvar interval task2B optional ...;
// requires stateB dvar interval task1C optional ...; dvar interval task2C optional ...; dvar interval taskC optional ...;
// spans [task1C, task2C] and requires state C dexpr
int totalPT = lengthOf(task1A,0)+lengthOf(task2B,0)+lengthOf(taskC,0); constraints
{ alternative(task1, [task1A, task1C]); alternative(task2, [task2B, task2C]); span(taskC, [task1C, task2C]); presenceOf(taskC)==presenceOf(task1C); presenceOf(taskC)==presenceOf(task2C); alwaysIn(resource, task1A, A,A); alwaysIn(resource, task2B, B,B); alwaysIn(resource, taskC, C,C);
}
Hope it helps,
Philippe
#ConstraintProgramming-General#DecisionOptimization