二进制整数规划中的构造启发式

时间:2017-01-07 13:35:26

标签: algorithm optimization computer-science mathematical-optimization integer-programming

我一直在努力寻找这个问题的答案,但我找不到任何全面的东西。我希望找到一种算法或启发式方法来构建二进制整数规划问题的初始可行解决方案,更具体地说是集合打包,集合分区和设置覆盖问题。

如果有一个二进制整数编程问题

Minimize      ax_1 + bx_2 + cx_3
Subject to    x_1 + x_2 <= 2
              3x_1 + 3x_2 >= 6
              x_2 + 2x_3 = 2

使用解决方案表示

[x_1, x_2, x_3]

其中x_i = 0或1。

然后,如何构建针对此问题的初始可行解决方案。当问题由数千个变量和约束组成时,仔细研究每个可能的解决方案。

这里的目标是构建一个初始可行性,以便可以执行局部搜索以获得局部最小值,然后对此应用元启发式。

1 个答案:

答案 0 :(得分:2)

找到一些二进制整数规划问题的可行解决方案的问题已经 NP-complete 。它是Karp流行的21个NP完全问题之一 - &gt; wiki 0-1整数编程

在一般情况下,不会超过以下完整方法(完成:如果有限时间存在或证明没有,他们会找到可行的解决方案):

  • 整数编程求解器(Simplex +分支和界限+切割平面)
  • 约束 - 编程解算器
  • SAT求解器

这些也在内部使用启发式(实际上它们必须:因为问题是NP完全的)。

如果您不想使用通用算法/软件,则必须针对某些问题调整您的启发式方法。但是你提到的这些问题有点不同,可能需要不同的启发式方法。分析实例中的特殊结构也很重要(随机实例与大多数现实世界的问题非常不同)!在设计这些特殊用途的启发式方法时,您可能会实施一些非完整方法,这可能会更好地适用于您的情况。

您遇到的问题,找到一个初步的可行解决方案在许多Meta-Heuristics中也很常见!

这是一个复杂的话题!