Двойственное ограничение - PullRequest
       20

Двойственное ограничение

0 голосов
/ 15 октября 2018

Я пытаюсь найти двойные значения ограничения для кода, прилагаемого к настоящему документу.Я только упомянул ограничение, двойственность которого я хочу найти.Как мне найти двойственное ограничение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]);
}

1 Ответ

0 голосов
/ 16 октября 2018

, поскольку ваша модель представляет собой MIP, вы не можете получить это двойное значение напрямую.

См. Technote http://www -01.ibm.com / support / docview.wss? Uid = swg21399941

На https://www.ibm.com/developerworks/community/forums/html/topic?id=978e90f6-8fc5-4be7-a306-df9bdb4a4754&ps=25 Я опубликовал пример:

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

привет

...