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. 为什么会这样?
  2. 如何设置求解器才能得到与以前相同的结果?

谢谢

1。 这基本上是因为混合整数问题中没有边际值。在 4.9 版中,开发人员更改了 MIP 求解器,我认为新的不会自动计算 "marginals".

2。 一种常见的方法是用MIP算法计算整数变量的最优值,然后使用固定为MIP-Solution的整数变量的相同问题的边缘。

仅使用 glpsol 和命令行选项无法做到这一点。您必须在代码中自行实现该功能。在 GLPK 源代码中存在 glp_mpl_postsolve 函数,它也在处理 post 处理解决方案的问题的解决方案。您可能可以用类似的方式实现计算。