回溯和分支限界

回溯和分支限界

回溯法:

回溯法的解的形式是什么?

一 求的解向量是可行解还是最优解

回溯法的搜索空间是什么?

二 是什么类型的树

三 是否满足多米诺性质

回溯法的搜索策略有哪些?

回溯法是如何进行减枝的?

回溯法的适用条件是什么?

回溯法存储搜索路径的数据结构有哪些?

回溯法实现的方式主要有哪两个?其伪代码如何实现?

搜索树节点数的估计如何实现?

回溯法的适用范围是什么?
优化和搜索问题

6.1 概述
回溯和分支限界
从下至上,进行了逐一讲解

6.2 几个回溯算法的例子

  1. n后放置

回溯和分支限界

由题意可知,其解为四维向量

其搜索空间为:

4叉树

回溯和分支限界

回溯和分支限界
2. 0-1背包

回溯和分支限界

回溯和分支限界

一定要注意对搜索空间的了解:

回溯和分支限界
为什么只有两个方块呢,因为回溯发现,其他分支内的解没有这两个解好。

回溯和分支限界

  1. 货郎问题

回溯和分支限界

这里的min函数表示走一圈的距离,d(ck1,ck2)+d(ck2,ck3)+d(ck3,ck4),d(ckn-1,ckn)+d(ckn,ck1)

在此特别强调,解的形式和约束条件是建模中最重要的东西。

回溯和分支限界
回溯和分支限界
对于货郎问题的实例,首先要给出所有的城市两辆之间的距离。
同时易知解向量形式为四维向量(怎么走)
回溯和分支限界
都是可行解,选其中的最优解。在这里假设是从一号城市开始的。所以一开始是一分叉的

总结

1. 解都是向量
2. 搜索空间都是树结构,货郎问题为排列树,0-1背包问题是子集树、n皇后问题是n叉树,其差别在于分叉的规则不一样。n叉树,每次分n个叉,子集树: 当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间称为子集树,分叉规则视具体情况确定,0-1背包问题就是分2叉。
例如,那个物品的0-1背包问题所相应的解空间树就是一颗子集树。这类子集问题通常有2n个叶节点,其节点总个数为2(n+1)-1。遍历子集树的任何算法均需要O(2^n)的计算时间。
排列树:当所给问题是确定n个元素满足某种性质的排列时,相应的解空间树称为排列树。排列树通常有n!个叶子节点。
4. 树的节点是向量的前部分,可行解在叶节点,最优解在可行解中找
5. 搜索算法有:深度优先、宽度优先、…跳跃式遍历搜索算法从而找到解

6.3 回溯算法的设计思想和适用条件
回溯和分支限界
这张图很重要,一般思考问题就是按从左到右的顺序。
先是描述问题,在考虑解的性质。
在了解解向量的形式以后,要画出搜索空间。
然后选择搜索方式,然后开始进行搜索。
在搜索的时候,在结合约束条件进行减枝

如何进行剪枝,要根据约束条件

回溯和分支限界
对回溯法每个部分的特点的了解很重要。

  1. 回溯法的目的就是搜索解
  2. 在求解解向量的过程中,是不断扩张部分解向量,最终达到解向量的大小
  3. 搜索空间都是树
  4. 搜索方式都是跳跃式遍历,即进行剪枝
  5. 每一次进行下一个解向量元素的求解,都需要进行约束条件的回溯判定

深度搜索和宽度搜索的区别

回溯和分支限界

回溯和分支限界
上面最重要的就是回溯法的适用范围是:搜索和优化问题 ,还有就是对搜索空间的了解,记住可行解在输叶上。
注:搜索过程:隐含遍历搜索树的意思,没有实际上的完全遍历整颗树

回溯和分支限界
回溯和分支限界

有一个小知识点,就是:树的每一层其实就是解向量中的一个值,所以解向量的位数决定了树的层数,每一个解的种类决定了分的叉数

回溯和分支限界
上面最核心的就是多米诺性质,它是回溯算法不丢弃解的原因,也就是它的适用条件。

下面举个反例:也是极其的重要的:
反例就在于它有减号,在前两项大于10的情况下,在之前的理论上就不需要进行下面的选择,也就下面就不存在解了,然而减号,是下面仍可能有解。
回溯和分支限界
要符合多米诺性质
需要改减为加(改变x3的取值范围,这是一个实用技巧
回溯和分支限界

小结

回溯和分支限界
下面的总结十分的重要:

回溯和分支限界

像什么搜索策略、和数据结构往往是次要的,都很固定。搜索策略要么是深度优先,要么就是宽度优先,数据结构一般就是链表、栈等

上诉难于理解就是(2)和(3),其就是对反例的思考,需要在求解出k-1维向量的前提下,需要对下一个k维的取值进行计算,Xk,就是k维值可取值的范围。

然后(3)中确定k维取值的排列规则,是从小到打排列还是别的啥

最后进行多米诺性质的判断

6.4 回溯法实现及实例
回溯和分支限界

回溯和分支限界

回溯和分支限界
注意注意:每个xk为每个分量的初始取值范围,把有约束条件的范围的初值也赋成初始范围的值,不懂,再说!

回溯和分支限界
回溯和分支限界

实例

回溯和分支限界
回溯和分支限界

什么是使得c1-W1达到最小的装载方案,其实就是c1尽可能的装,如何装到最多

回溯和分支限界

回溯和分支限界

回溯的过程是最重要的:
回溯和分支限界

回溯就是从左子树转达右子树
直到有装集装箱的节点的右分支,然后进行不装的这样的处理
回溯和分支限界

注:有个事情要讲一讲,其实边才是解向量中的值

实例

回溯和分支限界
图中只是搜索树 的一部分
回溯和分支限界
回溯和分支限界
6.5 图的着色问题
回溯和分支限界

回溯和分支限界

7个顶点3种颜色

这里有一个重点,可以通过对称的办法,节省5/6的 时间
以后再看看,对称性是裁剪搜索树的有效方法

回溯和分支限界
6.6 搜索树节点数的估计
到这里,我心里有点看不下去了,下次再说
回溯和分支限界