Originally posted by: AndyHam
Thanks for your note on my paper!
With your help, I have figured out how to setup the warmstart between CP1 and CP2 for interval variables.
Now, I still could not figure out how to setup the hard constraint between CP1 and CP2 for interval variable.
I have two questions about the following code.
1. The code generates an error, Scripting runtime error: cannot add properties to this value, "[a IloMap]".
thisOplModel.ctPost1.UB =thisOplModel.itvJ2T[j][t].start;
thisOplModel.ctPost2.UB= thisOplModel.itvJ2T[j][t].start;
2. How to make this constraint is to be active only for the jobs selected?
There is a if-condition in flowControl so it will list up UB only for j and t which meet the condition.
But, I am not sure how to transfer this information from flowControl to model file.
(model)
ctPost1: startOf(itvJ2T[j][t]) >=0;
ctPost2: startOf(itvJ2T[j][t]) <=99999;
(flowControl)
if((thisOplModel.itvJ2T[j][t].start)>=2)
thisOplModel.ctPost1.UB =thisOplModel.itvJ2T[j][t].start;
using CP;
range Trucks = 1..2;
range Jobs = 1..10;
dvar interval itvJob[j in Jobs] size 1 ;
dvar interval itvJ2T[j in Jobs][Trucks] optional;
dvar sequence seqTrk[t in Trucks]
in all(j in Jobs) itvJ2T[j][t];
minimize max(j in Jobs) endOf(itvJob[j]);
constraints {
forall(j in Jobs)
alternative(itvJob[j], all(t in Trucks) itvJ2T[j][t]);
forall(t in Trucks)
noOverlap(seqTrk[t]);
forall(j in Jobs,t in Trucks){
ctPost1: startOf(itvJ2T[j][t]) >=0;
ctPost2: startOf(itvJ2T[j][t]) <=99999;
}
}
main {
thisOplModel.generate();
cp.solve();
var sol=new IloOplCPSolution();
for (var j in thisOplModel.Jobs)
for (var t in thisOplModel.Trucks)
if((thisOplModel.itvJ2T[j][t].start)>=2) {
thisOplModel.ctPost1.UB =thisOplModel.itvJ2T[j][t].start;
thisOplModel.ctPost2.UB= thisOplModel.itvJ2T[j][t].start;
}
thisOplModel.generate();
cp.solve();
}
#DecisionOptimization#OPLusingCPOptimizer