如何使用IloCplex :: readSolution()并在查询cplex类实例之后获取var。价值观和其他价值观?

时间:2016-01-29 18:51:50

标签: c++ cplex

我需要阅读之前存储在.sol文件中的现有解决方案,然后使用IloCplex实例,因为在调用' solve'之后。 我需要写一些类似的东西:

iloNumVar var(0.0,1.0,ILOBOOL,"var_name");
...
cplex.readSolution("incumbent.sol");
cplex.getObjValue();
cplex.getValue(var);

任何调用为cplex.get *抛出除外。 我能做些什么来实现我的目标?

提前致谢。

1 个答案:

答案 0 :(得分:1)

" CPLEX将SOL文件作为高级启动读取。 SOL文件包含基本状态(如果可用)和解决方案值。基本状态可用于单一优化器的高级启动;解决方案值可用于来自屏障解决方案的交叉,或作为MIP从混合整数解决方案开始。混合整数解决方案可以来自传统的MIP优化,也可以来自解决方案池的成员。"从技术上讲,您需要在调用cplex.get *方法之前使用cplex.solve()解决LP。否则,如果一个人读取解决方案并调用cplex.get *方法而不调用cplex.solve() Cplex抛出CPLEX Error 1217: No solution exists.

因此,IloCplex::readSolutionIloCplex::writeSolution方法的最佳用途是解决模型,编写解决方案,然后根据需要修改模型,阅读解决方案,然后调用cplex.solve()以及之后调用cplex.get *

另外,我建议按如下方式阅读最佳值:

IloNumVarArray vars(env); // plus your bounds and  type
...
IloNumArray vals(env);
cplex.getValues(vals, vars);