分支定界说明


9

我对分支和绑定算法进行了测试。我从理论上理解了该算法的工作原理,但是找不到能说明该算法如何实际实施的示例。

我发现了一些例子,如这一个 ,但我仍然感到困惑了。我也寻找旅行商的问题,我听不懂。

我需要的是一些问题,以及如何通过使用分支定界法来解决这些问题。


1
什么很难理解?您之前尝试过回溯吗?

是的,我尝试过。B&B的问题是,如果我遇到了可以用B&B解决的问题,我不知道如何获得每个节点的下限以及如何获得目标函数。另外,与每个下限相比,最好的第一值是什么?
MR.NASS'4

2
@ MR.NASS我不确定您在最近的评论中到底在说什么。让我尝试解释一下。B&B是一种修剪搜索树的方法。它可以应用于必须优化目标函数的问题。它通常应用于离散或组合优化问题。在每一步中,您都尝试为所有剩余可能的解决方案找到目标函数的下限。如果下限高于当前最佳解决方案,则可以停止搜索并回溯(修剪搜索树),因为不可能有分数较低的解决方案。
乔治

2
通常情况下,解决问题的一种宽松的方法以获得一个下界。对于混合整数程序,通常是线性编程松弛。
选项

2
@ MR.NASS这取决于目标函数。正如Sid所说,您通常可以轻松解决给定问题。通常,人们希望使用一种宽松的版本,该版本可以很好地近似初始问题并且可以有效地解决。请注意,宽松版本必须提供一个下限,该上限最多与真实下限一样高,以便正常工作。另一个例子:假设您要使用B&B方法求解MAXSAT。对于给定的部分真值分配,您可以轻松计算出满意子句的数量。上限(因为这是一个最大化问题)...
乔治

Answers:


10

让我们将Branch and Bound应用于Knapsack,希望这会使您明白这个概念。

我们有项目,标记为1nv 是的值个项,和瓦特其重量。我们尝试将它们装在一个背包中,该背包总共可容纳最多T的重量,并且尝试将放入背包中的物品的价值之和最大化。ñ1个ñv一世一世w一世Ť

普通的回溯方法是我们的​​基础。我们首先将放入包中,然后通过递归解决其余n 1项的问题。然后,从包装中删除v 1并再次解决其余n 1项的问题,然后返回找到的最佳配置。v1个ñ-1个v1个ñ-1个

回溯是Branch and Bound的“分支”部分。您有两种情况(就背包问题而言):“项目是解决方案的一部分”和“项目i不属于解决方案的一部分”。您可以将其可视化为二叉树,其中左子级是一种情况,右子级是另一种情况。该树是搜索树(或搜索空间):其深度为n,因此具有O 2 n)个节点。因此,该算法的运行时间与项目数成指数关系。一世一世ñØ2ñ

现在我们进入“绑定”部分:我们试图找到标准,以便我们可以说“此配置永远无法实现,因此我们也不必理会它”。这样的标准的一个例子是“我们已经放入背包的物品的重量超过 ”:如果我们向背包中添加了前n / 2个物品,因此它已经满了,没有点试图把项目ñ / 2 + 1通过对ñ在背包为好,但也有在努力适应的任何子集没有一点ñ / 2 + 1通过对ñŤñ/2ñ/2+1个ññ/2+1个ñ在背包里,因为已经装满了,所以我们节省了大约箱。另一个例子是“ 即使我把所有剩余的物品都放进去,我放进去的物品的价值也不会超过我到目前为止找到的最佳配置 ”。2ñ/2

这些条件实质上是切断了搜索树的一部分:例如,在某个节点上,“左子树不会为我提供更好的配置,因为X”,因此您会忘记该子树,而不会进行探索。这样切出的深度为的子树可以节省O 2 d)个节点,如果幸运的话,这可以大大提高速度。dØ2d

请注意,这被称为“ 边界 ”,因为它通常涉及某种下限或上限:对于准则“,即使我输入了所有其余项目,我输入的项目的价值也不会超过最佳配置到目前为止我已经发现 ',到目前为止,最佳配置的值是最佳配置的下限,因此,永远不会超过该下限的任何事物注定会失败。

您可以根据需要使“边界”部分复杂。例如,整数编程问题通常是使用松弛来解决的:将程序松弛为线性程序,可以在多项式时间内求解,然后就可以丢弃很多情况,因为二进制变量永远都不会起作用。然后,您将转到其余选项。

请注意,Branch and Bound通常只会在实践中加快速度,而在理论上却不会:很难确切地说出使用启发式方法可以减少多少搜索树。实践中针对此类问题使用的不同启发式方法的数量证明了这一点。如果您不走运,即使有很多边界,其余的搜索树仍然很大。


4

考虑调度,这是将具有一定持续时间和期限的作业分配给计算机的任务。我们假设时间是离散的。许多此类问题都是NP(O)难题。

1个[R一世大号最高

  • 一台机器上
  • 发布日期有问题,我们
  • 大号最高

该问题的决策版本是NP-hard;这可以从3PARTITION中减少看到。

有趣的是,如果我们允许抢占,即交换现役工作,则可以通过最早到期日优先启发式(在修改的到期日)以二次时间解决问题。不难看出,此变体的最优解不会比原始问题的最优解差。

现在,为了将Branch&Bound应用于此问题,我们需要修复一些参数:

  • 我们通过允许抢占和使用EDD来计算下限。
  • 我们通过将所有未计划的工作固定为下一个分支来进行分支。
  • 我们首先去寻找下限较小的孩子。

您必须针对B&B的每个应用程序执行此操作。


1个[R一世大号最高

一世1个234p一世4265[R一世01个35d一世8121110

p一世[R一世d一世

执行上面指定的B&B,会发生以下情况:

算法
此GIF不会循环播放。将其重新加载到新标签中,从头开始查看。
[ 来源 ] [ 静态版本 ]

请注意,在41个节点中,只有四个被正确访问,并且仅十个节点计算了下限。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.