本文主要是介绍CPLEX获取模型的解池中的解方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1、前序
- 2、解池中的解方案获取
- 3、CPLEX求解模型的时间
- THE END
1、前序
\qquad CPLEX求解模型C++API继续解读。最近在进行Bender decompostion的实验时,需要获取到CPLEX求解的所有的解方案信息,所以又头大翻了一通“gou pi不通”的CPLEX API官方文档,最终加上自己的一些联想,终于实现了自己的想法。获取到CPLEX求解过程中解方案池中的所有解方案信息,包括可行解方案的数量,每一个解方案信息,CPLEX模型的求解时间。
2、解池中的解方案获取
\qquad 在CPLEX求解完模型之后(这里默认的MIP模型),若模型有可行解方案存在,首先可以采用IloCplex::getSolnPoolNsolns
来获取求解过程中找到的可行解方案的数量,此处不保证找到所有可行的解方案;之后针对于每一个解方案,
\qquad 可以采用IloCplex::getValue
或者IloCplex::getValues
来获取解方案中变量的值,其中,最后一个参数是当前解方案的索引。注意到,若最后一个解方案的索引参数取值为0,则返回的就是最优解的变量值。
\qquad 可以采用IloCplex::getObjValue
来获取某个解方案的目标函数值,缺省值为0,表示最优解的目标函数值。
3、CPLEX求解模型的时间
\qquad 先放一个官方介绍大家看一下,
\qquad 其中,测试发现,里面的getStartTime
测试没有这个函数,可能我使用的类不太对(IloCplex)。最终测试发现,IloCplex::getDetTime
基本上是以毫秒为单位计量的模型求解时间,所以可以直接使用这个作为模型的求解时间。
THE END
这篇关于CPLEX获取模型的解池中的解方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!