1

到目前为止,我们的应用程序使用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. 如何设置求解器以便获得与以前相同的结果?

谢谢

4

1 回答 1

1

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

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

您不能仅使用 glpsol 和命令行选项来执行此操作。您必须在代码中自行实现该功能。在 GLPK 源代码中存在该glp_mpl_postsolve功能,该功能还处理问题的解决方案以对解决方案进行后处理。您可能可以以类似的方式实现计算。

于 2015-04-27T08:05:23.480 回答