什么是Gurobi的.set()方法的CPLEX等价物?

时间:2017-01-05 06:20:34

标签: mathematical-optimization cplex gurobi

我正在尝试将一些Gurobi代码转换为CPLEX,并且无法确定如何设置变量的起始值。

原始代码如下所示:

for (int b=0; b<nB ; ++b){
    for (int t=0; t<t_max; ++t){
        Yvars[b][t].set(GRB_DoubleAttr_Start, startVals[b][t+shift]);
    }
}

等效的CPLEX代码是什么?我无法在任何地方找到有关如何执行此操作的信息。我能找到的最接近的是:

http://www.ibm.com/support/knowledgecenter/en/SS9UKU_12.4.0/com.ibm.cplex.zos.help/UsrMan/topics/discr_optim/mip/para/49_mipStarts.html

但是,这表明我必须将起始值添加到模型本身,如下所示:

 IloNumVarArray startVar(env);
 IloNumArray startVal(env);
 for (int b = 0; b < nB; ++b)
     for (int t = 0; t < t_max; ++t) {
         startVar.add(Yvars[b][t]);
         startVal.add(startVals[b][t+shift]);
     }
 cplex.addMIPStart(startVar, startVal);

并不仅仅像原始代码那样影响单个变量。有没有办法像Gurobi一样对变量这么做?或者我必须一次做所有事情吗?

1 个答案:

答案 0 :(得分:1)

您在CPLEX中添加MIP启动的方式是正确的(并且没有替代语法)。我不确定你究竟是什么意思&#34;我是否必须一次做所有事情&#34;,但也许你在问你是否可以为一部分变量提供MIP起始值而不是全部他们。如果是这种情况,请参阅MIP starts and effort level(例如,使用CPX_MIPSTART_SOLVEMIP CPLEX解决了一个subMIP,您必须在其中指定至少一个离散变量的值)。使用C ++ API,addMIPStart方法有一个可选的effort参数来控制它。