GLPK/GLPSOL - MIP 解决方案中缺少数据列
GLPK/GLPSOL - Missing Data Columns in MIP Solution
到目前为止,我们的应用程序使用 GLPSOL 版本 3.1,当遇到 MIP 问题时,它会输出一个包含 Status 的解决方案(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 参数的求解器,它给了我上述数据列,但产量不同的结果。
问题是解决方案随后被提供给解析器,不得不修改所述解析器应该是最后的选择(而且,在任何情况下,缺少数据列意味着我们没有我们解析所需的所有信息)。
所以我的问题是双重的:
- 为什么会这样?
- 如何设置求解器才能得到与以前相同的结果?
谢谢
1。
这基本上是因为混合整数问题中没有边际值。在 4.9 版中,开发人员更改了 MIP 求解器,我认为新的不会自动计算 "marginals".
2。
一种常见的方法是用MIP算法计算整数变量的最优值,然后使用固定为MIP-Solution的整数变量的相同问题的边缘。
仅使用 glpsol 和命令行选项无法做到这一点。您必须在代码中自行实现该功能。在 GLPK 源代码中存在 glp_mpl_postsolve
函数,它也在处理 post 处理解决方案的问题的解决方案。您可能可以用类似的方式实现计算。
到目前为止,我们的应用程序使用 GLPSOL 版本 3.1,当遇到 MIP 问题时,它会输出一个包含 Status 的解决方案(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 参数的求解器,它给了我上述数据列,但产量不同的结果。
问题是解决方案随后被提供给解析器,不得不修改所述解析器应该是最后的选择(而且,在任何情况下,缺少数据列意味着我们没有我们解析所需的所有信息)。
所以我的问题是双重的:
- 为什么会这样?
- 如何设置求解器才能得到与以前相同的结果?
谢谢
1。 这基本上是因为混合整数问题中没有边际值。在 4.9 版中,开发人员更改了 MIP 求解器,我认为新的不会自动计算 "marginals".
2。 一种常见的方法是用MIP算法计算整数变量的最优值,然后使用固定为MIP-Solution的整数变量的相同问题的边缘。
仅使用 glpsol 和命令行选项无法做到这一点。您必须在代码中自行实现该功能。在 GLPK 源代码中存在 glp_mpl_postsolve
函数,它也在处理 post 处理解决方案的问题的解决方案。您可能可以用类似的方式实现计算。