GLPK / GLPSOL - MIP解决方案中缺少数据列

时间:2015-04-14 10:23:25

标签: glpk

到目前为止,我们的应用程序使用 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 参数运行求解器,这会为我提供上述数据列,但会产生不同的结果。

问题是该解决方案然后被提供给解析器,并且必须修改所述解析器应该是最后的选择(并且,无论如何,缺少数据列意味着我们没有我们解析所需的所有信息。)

所以我的问题有两个:

  1. 为什么会这样?
  2. 如何设置求解器,以便得到与以前相同的结果?
  3. 由于

1 个答案:

答案 0 :(得分:1)

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

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

你不能只使用glpsol和命令行选项。您必须在代码中自行实现该功能。在GLPK源代码中存在glp_mpl_postsolve函数,该函数还处理解决方案的后处理问题的解决方案。您可以以类似的方式实现计算。