我需要读取之前存储在 .sol 文件中的现有解决方案,然后在调用“解决”之后使用 IloCplex 的实例。 我需要写这样的东西:
iloNumVar var(0.0,1.0,ILOBOOL,"var_name");
...
cplex.readSolution("incumbent.sol");
cplex.getObjValue();
cplex.getValue(var);
作为 cplex.get* 的任何调用都会抛出异常。 我可以做些什么来实现我的目标?
提前致谢。
最佳答案
“CPLEX 读取 SOL 文件作为高级开始。SOL 文件包含基础状态(如果可用)和解值。基础状态可用于使用单纯形优化器的高级开始;解值可用于交叉“从障碍解决方案或作为 MIP 从混合整数解决方案开始。混合整数解决方案可能来自传统的 MIP 优化或来自解决方案池的成员。”从技术上讲,您需要在调用 cplex.get* 方法之前使用 cplex.solve()
求解 LP。否则,如果读取解决方案并调用 cplex.get* 方法而不调用 cplex.solve()
,Cplex 将抛出 CPLEX 错误 1217:不存在解决方案。
所以 IloCplex::readSolution
和 IloCplex::writeSolution
方法的最佳用途是解决模型,编写解决方案,然后根据需要修改模型,读取解决方案,然后调用 cplex.solve()
然后调用 cplex.get*
此外,我建议阅读最佳值如下:
IloNumVarArray vars(env); // plus your bounds and type
...
IloNumArray vals(env);
cplex.getValues(vals, vars);
关于c++ - 如何使用 IloCplex::readSolution() 并在查询 cplex 类实例后获取 var。值(value)观和其他值(value)观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35091923/