我正在尝试为随附的代码查找约束的对偶值。我只提到了我想找到其对偶的约束。如何找到代码中提到的约束6的对偶?
int NbJobs=10;
int NbMachines=2;
range Job=1..NbJobs;
range Machine= 1..NbMachines;
int JobProcessTime[Job]=...;
int JobReadyTime[Job]=...;
int JobSize[Job]=...;
int JobDueDate[Job]=...;
int MachineCapacity[Machine]=...;
float E=99999;
float e=.000001;
float Dual1[Job]=...;
tuple Batches{
key int id;
int BatchSetup[Job];
float BatchReadyTime;
float BatchProcessTime;
}
{Batches} BatchConfig=...;
dvar boolean NbTardy[Job];
dvar boolean BatchSelected[BatchConfig][Machine];
dvar float+ BatchCompletionTime[BatchConfig][Machine];
dvar float+ JobCompletionTime[Job];
minimize sum(j in Job) NbTardy[j];
subject to {
forall (j in Job, b in BatchConfig, m in Machine) Constraint6: JobCompletionTime[j]>= BatchCompletionTime[b][m]- E*(1-b.BatchSetup[j]*BatchSelected[b][m]);
}
答案 0 :(得分:1)
由于您的模型是MIP,因此无法直接获得该对偶值。
请参阅技术说明http://www-01.ibm.com/support/docview.wss?uid=swg21399941
dvar int x in 0..10;
dvar float y in 0..10;
minimize x+y;
subject to {
ctx :
x >= 1/2;
cty:
y>=1/2;
}
main {
var status = 0;
thisOplModel.generate();
if (cplex.solve()) {
writeln("Integer Model");
writeln("OBJECTIVE: ",cplex.getObjValue());
writeln("dual CTX:",thisOplModel.ctx.dual);
writeln("dual CTY:",thisOplModel.cty.dual);
}
var xvalue=thisOplModel.x.solutionValue;
thisOplModel.convertAllIntVars();
thisOplModel.x.UB=xvalue;
thisOplModel.x.LB=xvalue;
if (cplex.solve()) {
writeln("Relaxed Model");
writeln("OBJECTIVE: ",cplex.getObjValue());
writeln("dual CTX:",thisOplModel.ctx.dual);
writeln("dual CTY:",thisOplModel.cty.dual);
}
}
给出
Integer Model
OBJECTIVE: 1.5
dual CTX:undefined
dual CTY:undefined
Relaxed Model
OBJECTIVE: 1.5
dual CTX:0
dual CTY:1
致谢