CPLEX启发式算法给出了不同的计算结果

时间:2016-06-21 07:47:46

标签: java cplex heuristics branch-and-bound

当我们使用cplex解决最大化mip问题时,cplex启发式会影响目标值的上限吗?

据我所知,cplex启发式可以改善最优值的下限,但不能改善上限。但在我的测试中,如果我关闭cplex启发式,它会给出非常差的上限。上限(启发式开启/关闭)的差异是非常大的。帮帮我:-(

1 个答案:

答案 0 :(得分:0)

本研究的一个基本示例,假设您的MIP是一个纯二进制线性程序(BLP),只有二进制值决策变量(没有连续的混合)。此外,假设CPLEX仅使用基本的分支和边界(BAB)解决您的MIP,而忽略了高级分支和节点拾取技术。

由于你的程序是最大化程序之一,正如你所提到的,自然一个好的启发式算法会影响最优解的目标函数值的下界。

在我们的简单示例中,上限主要基于当前最佳(最佳w.r.t.最大obj。函数值)解决方案,以连续放松的BLP子问题。即,你的BAB树中的活动节点(尚未修剪分支)的LP解决方案,其中决策变量的参与约束,例如x_i ∈ {0, 1}^n,已经被其连续放松所取代,比如说x_i ∈ [0, 1]^n

此时,(meta-)启发式方法可以对例如产生很大影响。

  • 我们如何选择要在BAB树中处理的节点。即,在一个节点被修剪或分支之后,我们如何决定接下来要选择哪个节点?
  • 此外,如果启发式可以在早期为我们提供良好的下限(比如最好的现有解决方案),那么我们可以迅速地修剪(通过绑定)树中的许多节点,否则我们可能如果没有良好的下限,则明确处理。

节点的选择对求解过程中上限(最大问题)的进度有很大影响,同样如此;自然地,较小的解决方案空间(由于许多修剪过的节点)将增加可能性/速度"改善问题的上限。

良好的启发式方法可以对整个解决方案流程产生影响的过程中的另一点自然是在预处理阶段;在开始BAB树遍历之前。真正聪明的启发式方法可以大大减少解决方案空间,特别是如果我们尝试解决一个问题,允许明显的重构/分解成一个不那么复杂的问题。这样的预处理步骤本身可能不具有启发式(并且在关闭CPLEX启发式时不会停用)本身,但我会说它们生活在同一个家庭中。