我需要阅读之前存储在.sol文件中的现有解决方案,然后使用IloCplex实例,因为在调用' solve'之后。 我需要写一些类似的东西:
iloNumVar var(0.0,1.0,ILOBOOL,"var_name");
...
cplex.readSolution("incumbent.sol");
cplex.getObjValue();
cplex.getValue(var);
任何调用为cplex.get *抛出除外。 我能做些什么来实现我的目标?
提前致谢。
答案 0 :(得分:1)
" CPLEX将SOL文件作为高级启动读取。 SOL文件包含基本状态(如果可用)和解决方案值。基本状态可用于单一优化器的高级启动;解决方案值可用于来自屏障解决方案的交叉,或作为MIP从混合整数解决方案开始。混合整数解决方案可以来自传统的MIP优化,也可以来自解决方案池的成员。"从技术上讲,您需要在调用cplex.get *方法之前使用cplex.solve()
解决LP。否则,如果一个人读取解决方案并调用cplex.get *方法而不调用cplex.solve()
Cplex抛出CPLEX Error 1217: No solution exists.
因此,IloCplex::readSolution
和IloCplex::writeSolution
方法的最佳用途是解决模型,编写解决方案,然后根据需要修改模型,阅读解决方案,然后调用cplex.solve()
以及之后调用cplex.get *
另外,我建议按如下方式阅读最佳值:
IloNumVarArray vars(env); // plus your bounds and type
...
IloNumArray vals(env);
cplex.getValues(vals, vars);