文章目录
- 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
基本上是以毫秒为单位计量的模型求解时间,所以可以直接使用这个作为模型的求解时间。