主块中的 CPLEX OPL IP 间隙和模型中的执行
CPLEX OPL IP-gap in main block and execute in the model
在我的模型中,我想设置一个 IP 间隙。我在一个主块中做了这个:
main {
thisOplModel.generate();
cplex.epgap = 0.005;
if (cplex.solve()) {
var obj = cplex.getObjValue();
writeln("Objective function value: " + obj);
}
}
在模型本身中,我有几个用于控制台输出和 excel 写入的执行块。
例如:
execute{
writeln("MECHANICAL HARVESTING");
for(var j in J){
write("j= "+j + " ");
for(var t in T){
var x_out = 0;
for(var k in K){
for(var b in B){
if(k == 1){x_out = x_out + x[j][t][k][b];}
}
}
write(x_out + " ");
}
writeln("");
}
writeln("");
}
当我 运行 模型时,我得到了一个解决方案,但是没有执行执行块。
谁能帮我解决这个问题?
你需要调用postProcess。
例如在你的代码中你应该改变
main {
thisOplModel.generate();
cplex.epgap = 0.005;
if (cplex.solve()) {
var obj = cplex.getObjValue();
writeln("Objective function value: " + obj);
}
}
进入
main {
thisOplModel.generate();
cplex.epgap = 0.005;
if (cplex.solve()) {
var obj = cplex.getObjValue();
writeln("Objective function value: " + obj);
thisOplModel.postProcess(); // call postProcess
}
}
在我的模型中,我想设置一个 IP 间隙。我在一个主块中做了这个:
main {
thisOplModel.generate();
cplex.epgap = 0.005;
if (cplex.solve()) {
var obj = cplex.getObjValue();
writeln("Objective function value: " + obj);
}
}
在模型本身中,我有几个用于控制台输出和 excel 写入的执行块。 例如:
execute{
writeln("MECHANICAL HARVESTING");
for(var j in J){
write("j= "+j + " ");
for(var t in T){
var x_out = 0;
for(var k in K){
for(var b in B){
if(k == 1){x_out = x_out + x[j][t][k][b];}
}
}
write(x_out + " ");
}
writeln("");
}
writeln("");
}
当我 运行 模型时,我得到了一个解决方案,但是没有执行执行块。
谁能帮我解决这个问题?
你需要调用postProcess。
例如在你的代码中你应该改变
main {
thisOplModel.generate();
cplex.epgap = 0.005;
if (cplex.solve()) {
var obj = cplex.getObjValue();
writeln("Objective function value: " + obj);
}
}
进入
main {
thisOplModel.generate();
cplex.epgap = 0.005;
if (cplex.solve()) {
var obj = cplex.getObjValue();
writeln("Objective function value: " + obj);
thisOplModel.postProcess(); // call postProcess
}
}