到目前为止,我们的应用程序使用 GLPSOL 3.1版,当提供MIP问题时,会输出包含状态(St)的解决方案和边缘列。
我们不得不升级到更新的版本,现在,同样的问题会导致解决方案文件缺少这些列,并且会出现这些差异:
原始解决方案文件:
Problem: _jx1
Rows: 43
Columns: 27 (27 integer, 27 binary)
Non-zeros: 96
Status: INTEGER OPTIMAL
Objective: 31 (MAXimization)
新解决方案文件:
Problem: _jx1
Rows: 42
Columns: 27
Non-zeros: 87
Status: OPTIMAL
Objective: C0 = 31 (MAXimum)
此外,解算器似乎裁剪出一些数据行。
我最接近解决问题的方法是使用 - nomips 参数运行求解器,这会为我提供上述数据列,但会产生不同的结果。
问题是该解决方案然后被提供给解析器,并且必须修改所述解析器应该是最后的选择(并且,无论如何,缺少数据列意味着我们没有我们解析所需的所有信息。)
所以我的问题有两个:
由于
答案 0 :(得分:1)
1。 这基本上是因为混合整数问题中没有边际值。在版本4.9中,开发人员更改了MIP解算器,我认为新的解决方案不会自动计算“边缘”。
2。 一种常见的方法是使用MIP算法计算整数变量的最佳值,然后使用固定到MIP-Solution的整数变量来解决相同问题的边缘。
你不能只使用glpsol和命令行选项。您必须在代码中自行实现该功能。在GLPK源代码中存在glp_mpl_postsolve
函数,该函数还处理解决方案的后处理问题的解决方案。您可以以类似的方式实现计算。