4.2 Branching Strategies

在朴素回溯算法(BT)中,搜索树中的节点p = {x1 = a1,...,xj = aj}是一组赋值,并且通过选择变量x并将分支添加到a来扩展p。 新节点p∪{x = a},对于每个a∈dom(x)。赋值x = a据说是沿分支发布的。 随着搜索在树中更深入地进行,附加的分配被发布,并且在回溯时,分配被撤回。 然而,这只是一种可能的分支策略,并且在文献中已经提出并检查了几种替代方案。

更一般地,回溯算法的搜索树中的节点p = {b1,...,bj}是一组分支约束,其中bi,1≤i≤j,是在搜索树的第i层发布的分支约束。 对于一些分支约束bij +1,1≤i≤k,通过添加分支p∪{b1 j + 1},...,p∪{bk j + 1}来扩展节点p。 分支通常使用启发式排序,最左边的分支是最有希望的。为了确保完整性,从节点发布在所有分支上的约束必须是相互排斥和详尽的。通常,分支策略包括发布一元约束。在这种情况下,使用变量排序启发式来选择要分支的下一个变量,并且分支的排序由值排序启发式决定(参见4.6节)。作为一个运行的例子,令x为要分支的变量,令dom(x) ={1,…6},假设该启发式的值排序为字典顺序。以下是三种流行的涉及一元约束的分支策略:

1) Enumeration枚举。变量x依次实例化为其域中的每个值。为变量域中的每个值生成一个分支,约束x = 1沿着第一个分支发布,x = 2沿着第二个分支发布,依此类推。枚举分支策略在很多教科书中都有介绍,在求解csp的回溯算法中也有很多研究。文献中这种分支策略的另一种名称是d路分支,其中d是域的大小

2)Binary choice points二叉选择点。变量x被实例化为其域中的某个值。假设在我们的示例中选择了值1,那么将生成两个分支,并分别发布约束x = 1和x \neq 1。这种分支策略通常用于约束编程语言中求解csp(参见[72,123]),Sabin和Freuder[116]在回溯算法中使用了这种策略,在搜索过程中保持了arc的一致性。文献中这种分支策略的另一个名称是双向分支。

3)Domain splitting域分解。这里不一定实例化变量,而是在每个子问题中减少变量的选择。等有序域在我们的例子中,这可能包括发布一个约束形式x≤3的一个分支和发布x > 3分支。

当然,如果域是二进制的(例如,在SAT中),这三种方案是相同的。

表4.1:一些被命名的回溯算法。组合技术的混合算法用连字符名称表示。例如,MAC-CBJ是一种保持圆弧一致性并执行冲突定向回跳的算法。

还提出了由发布非一元约束组成的分支策略,以及特定于一类问题的分支策略。作为两者的示例,考虑作业车间调度,其中我们必须在一组资源上安排一组任务t1,...,tk。设xi为表示ti起始时间的有限域变量,di为ti的固定持续时间。一种流行的分支策略是对共享资源的任务进行排序或序列化。考虑共享相同资源的两个任务t1和t2。分支策略是把约束x1 + d1≤x2沿着一个分支发布,把约束x2 + d2≤x1沿着另一个分支发布(见,例如,[23]和引用其中)。这种情况一直持续到检测到死端或所有任务都已排序为止。一旦所有的任务被排序,一个人可以很容易地构造一个问题的解决方案;即赋值给每个xi。有趣的是,从概念上讲,上述分支策略等价于将辅助变量添加到CSP模型中,然后对CSP模型进行分支

一般来说,如果底层回溯算法具有固定的分支策略,可以通过添加辅助变量来模拟不同的分支策略。因此,分支策略的选择和CSP模型的设计是相互依赖的决策

对分支策略的进一步研究检验了这些策略的相对威力,并提出了新的策略。Van Hentenryck [128, pp.90-92]研究了枚举和域分割策略之间的权衡。Milano和vanHoeve[97]表明,分支策略可以看作是值排序启发式策略和域分割策略的组合。值排序用于对域值进行排序,域分割策略用于将域划分为两个或多个集合。当然,具有最高排序值的集合将被分支到第一个。该方法在优化问题上效果良好

Smith和strong[121]研究表明,在使用具有双向分支的时间回溯法查找所有解时,值的排序会影响回溯搜索的效率。这令人吃惊,因为我们知道,在使用d-way分支时,值排序在这些情况下没有效果。Hwang和Mitchell[71]的研究表明,双向分支的回溯要比d路分支的回溯强大得多。很明显,d路分支可以用2路分支来模拟,而且不会损失效率。黄和米切尔的研究表明,反过来并不成立。他们给出了一类问题,其中具有最优变量和值排序的d路分支算法比具有简单变量和值排序的2路分支算法要多出指数级的步骤。但是,请注意,只有假设CSP模型是固定的,结果才成立。如果允许我们向CSP模型中添加辅助变量,它就不成立。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值