Gurobi 的 .set() 方法的 CPLEX 等价物是什么?
What is the CPLEX equivalent of Gurobi's .set() method?
我正在尝试将一些 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 代码是什么?我无法在任何地方找到有关如何执行此操作的信息。我能找到的最接近的是:
但是,这表明我必须将起始值添加到模型本身,如下所示:
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 那样对变量进行处理?还是我必须一次做完所有事情?
您在 CPLEX 中添加 MIP 开始的方式是正确的(并且没有替代语法)。我不确定 "do I have to do everything at once" 的确切含义,但也许您在问是否可以为一部分变量而不是所有变量提供 MIP 起始值。如果是这种情况,请参阅 MIP starts and effort level (e.g., with CPX_MIPSTART_SOLVEMIP
CPLEX solves a subMIP where you must specify the value of at least one discrete variable). With the C++ API, the addMIPStart 方法有一个可选的 effort
参数来控制它。
我正在尝试将一些 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 代码是什么?我无法在任何地方找到有关如何执行此操作的信息。我能找到的最接近的是:
但是,这表明我必须将起始值添加到模型本身,如下所示:
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 那样对变量进行处理?还是我必须一次做完所有事情?
您在 CPLEX 中添加 MIP 开始的方式是正确的(并且没有替代语法)。我不确定 "do I have to do everything at once" 的确切含义,但也许您在问是否可以为一部分变量而不是所有变量提供 MIP 起始值。如果是这种情况,请参阅 MIP starts and effort level (e.g., with CPX_MIPSTART_SOLVEMIP
CPLEX solves a subMIP where you must specify the value of at least one discrete variable). With the C++ API, the addMIPStart 方法有一个可选的 effort
参数来控制它。