显示不可行解的目标函数值

2024-05-14 09:08:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个流量控制回路,我想打印/显示目标函数的值,即使解决方案不是最优的。连接流量控制回路:

main { 
var source = new IloOplModelSource("Proposed.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
var data = new IloOplDataSource("Proposed.dat");

for(var sheet in thisOplModel.sheets){

  var data0=new IloOplDataElements();
  data0.linksread=sheet+"!B2:E22";
  
  var data1=new IloOplDataElements();
  data1.supdemread=sheet+"!I2:I19";
    
  var opl = new IloOplModel(def,cplex);
  opl.addDataSource(data0);
  opl.addDataSource(data1);
  
  opl.addDataSource(data);
  opl.generate();

      if (cplex.solve()) {
         opl.postProcess();
      } else {
         writeln(opl.TotalPower);
      }


  opl.end();
}  

data.end(); 
def.end(); 
cplex.end(); 
source.end();

}

为了命令

writeln(opl.TotalPower);

我得到的输出是

[a IloNumExpr]

有没有办法访问“a”或“IloNumExpr”的值? 或者是否有其他方法可以打印CPLEX中不可行解的目标函数值


Tags: 函数source目标newdatavardef流量
1条回答
网友
1楼 · 发布于 2024-05-14 09:08:18

可以调用relax,然后获取表达式的值

int nbKids=300;
float costBus40=500;
float costBus30=400;
 
dvar int+ nbBus40 in 0..3;
dvar int+ nbBus30 in 0..3;

dexpr float cost=costBus40*nbBus40  +nbBus30*costBus30;
 
minimize
 cost;
 
subject to
{
 40*nbBus40+nbBus30*30>=nbKids;
} 

main
{
  
 thisOplModel.generate();
 cplex.solve();
 writeln("cost = ",thisOplModel.cost);
 writeln(thisOplModel.printRelaxation());
 writeln("cost = ",thisOplModel.cost);
}

给予

cost = [a IloNumExpr]
nbBus40 at 5:1-27 C:\poc\algomine2\RCPSP.mod
    relax [0,3] to [0,6] value is 0

cost = 4200

相关问题 更多 >

    热门问题