算法分析与设计分枝限界法.ppt
《算法分析与设计分枝限界法.ppt》由会员分享,可在线阅读,更多相关《算法分析与设计分枝限界法.ppt(96页珍藏版)》请在三一办公上搜索。
1、第七章 分枝-限界法,2,上章知识回顾,问题状态解状态状态空间答案状态,状态空间树活结点E-结点死结点,通过对n-皇后问题的分析,复习以上概念和回溯法,3,n-皇后问题描述,将n个皇后放置在一个nn的棋盘上,要求没有两个皇后可以互相攻击。攻击的定义:两个皇后出现在同一行、或同一列、或者同一条斜线上都视为出现了攻击。,4,8-皇后问题的一个解,该解的8元组表示:(4,6,8,2,7,1,3,5),5,n-皇后问题,用n-元组(x1,x2,xn)表示棋盘上皇后的位置状态下标表示皇后i(i=1,2,n)xi表示放置皇后i所在的列号显式约束条件:每个xi只从集合Si=1,2,n取值满足显式约束的所有元
2、组确定一个可能的解空间 解空间由nn个n-元组组成隐式约束条件没有两个xi可以相同,而且没有两个皇后可以在同一条斜线上 由前者得,所有解都是n-元组(1,2,n)的置换,因此,解空间缩小为 n!个元组,6,4-皇后问题解空间的树结构,结点按深度优先检索编号叶子结点有4!24个,7,解空间树结构的术语,树中每个结点确定求解问题的一个问题状态(problem state)由根结点到其它结点的所有路径确定了这个问题的状态空间(state space)解状态(solution states)是这样一些问题状态S,对于这些问题状态,由根到S的那条路径确定了这解空间中的一个元组(满足显式约束)答案状态(s
3、olution states)是这样一些解状态S,由根到S的路径确定了问题的一个解(满足隐式约束)解空间的树结构为状态空间树(state space tree),8,利用状态空间树解题,1 设想状态空间树2 生成问题状态3 确定问题状态中哪些是解状态4 哪些解状态是答案状态生成问题状态 构造状态空间树,9,状态空间树术语,活结点:自己已经生成而其所有的儿子结点还没有全部生成的结点。E-结点(正在扩展的结点):当前正在生成其儿子结点的活结点。死结点:不再进一步扩展或者其儿子结点已全部生成的生成结点。,10,构造状态空间树的两个方法,回溯法当前E-结点R,生成一个新的儿子C,则C就变成一个新的E-
4、结点,对子树C完全检测后,R结点再次成为E-结点。分枝-限界方法一个E-结点一直保持到变成死结点为止。限界函数以上两种方法都使用限界函数杀死还没有全部生成其儿子结点的那些活结点。,11,4-皇后问题的限界函数,如果(x1,x2,xi)是到当前E-结点的路径,那么具有父-子标记xi+1的所有儿子结点是一些这样的结点,它们使得(x1,x2,xi+1)表示没有两个皇后正在互相攻击的一种棋盘格局。,12,4-皇后问题回溯法vs状态空间树,结点按深度优先检索编号叶子结点有4!24个,13,4-皇后问题回溯期间的生成树,14,分枝限界法,在生成当前E-结点全部儿子之后再生成其它活结点的儿子,并且,用限界函
5、数帮助避免生成不包含答案结点子树的状态空间FIFO检索:活结点表采用队LIFO检索:活结点表采用栈,15,FIFO分枝限界法例7.1(4-皇后问题),16,4-皇后问题回溯 vs FIFO分枝-限界,回溯 Win!,17,LC-检索(Least Cost),分枝-限界失败的原因对下一个E-结点的选择规则过于死板。如何解决?排序,让答案结点排在前面!寻找一种“有智力”的排序函数C(),该函数能够让答案结点尽早生成。排序的标准下一个E-结点应当是生成答案结点花费成本最小的结点,因此C()又称作结点成本函数。LC:Least Cost,18,分枝-限界策略的种类,根据对状态空间树中结点检索次序的不同
6、,可将分枝-限界的设计策略分为:FIFO检索,活结点采用一张先进先出表LIFO检索,活结点采用一张先进后出表LC分枝-限界检索,活结点采用一张易于操作的线性表。,19,LC-检索(结点成本的两个标准),一、在生成一个答案结点之前,子树X需要生成的结点数。二、在子树X中离X最近的那个答案结点到X的路径长度。以图7.1为例节点1、18和34、29和35、30和38的代价分别是4,3,2,1其他2,3,4级上的点代价应分别大于3,2,1生成结点(12 18 34 5019 24 2930 3231),20,LC-检索(结点成本函数),C()定义如果X是答案结点,则C(X)是由状态空间树的根结点到X的
7、成本(即花费的代价,可以是级数、计算复杂度等)。如果X不是答案结点且子树X不包含任何答案结点,则C(X)。如果X不是答案结点但子树X包含答案结点,则C(X)等于子树X中具有最小成本的答案结点的成本。,21,LC-检索(成本估计函数),从前面的两个成本度量标准看,计算C()的工作量与原问题的解具有相同复杂度。这是因为计算一个结点的代价通常要检索包含一个答案结点的子树才能确定,而这正是解决此问题所要作的检索工作,因此要得到精确的成本函数一般是不现实的。因此需要成本估计函数g(X)出现的新问题仅利用g(X)会导致算法偏向纵深检查,无法有效处理下面这种情况:即g(W)g(Z),但Z比W更接近答案结点,
8、22,LC分枝-限界检索,为使算法不过分偏向于纵深检查,需改进成本估计函数,使其不只考虑结点X到一个答案结点的估计成本,还应考虑根节点到结点X的成本。c(X)f(h(X)+g(X)h(X)为根结点到结点X的成本 g(X)是由X到达一个答案结点所需做的附加工作的估计函数LC-限界检索:选择c()值最小的活结点作为下一个E-结点BFS:g(X)0;f(h(X)X的级数D-Search:f(h(X)0;每当Y是X的一个儿子时,总有g(X)=g(Y)。LC分枝-限界检索:伴之有限界函数的LC-检索,23,例:15-谜问题,a,b,c,问题描述:在一个分成16格的方形棋盘上,放有15块编了号码的牌(见下
9、图)。对这些牌给定一种初始排列如图7.2(a),要求通过一系列的合法移动将这一初始排列转换成图7.2(b)所示的那样的目标排列。,图7.2 15-谜的排列图,24,例:15-谜问题,图7.2(a)所示的初始排列有四种可能的移动,可以将编号为2,3,5或6的任何一块牌移到空格。在作了这次移动之后,可作其他的移动。每移动一次,就产生一种新的排列。这些排列称为这个谜问题的状态。初始排列和目标排列叫做初始状态和目标状态。若由初始状态到某状态存在一系列合法的移动,则称该状态可由初始状态到达。一种初始状态的状态空间由所有可从初始状态到达的状态构成。,25,例:15-谜问题,可以看出棋盘上这些牌有16!种不
10、同的排列,所以这个问题的状态空间是相当庞大的。有必要在具体求解问题之前判定目标状态是否在这个初始状态的状态空间中。对此有一个非常简单的判定方法:我们先给棋盘的方格位置编上116的号码。位置i 是在图7.2(b)所示的目标排列中放i 号牌的方格位置,位置16是空格的位置。假设POSITION(i)是编号为i的那块牌在初始状态下的位置号,1 i 16;POSITION(16)表示空格的位置。,26,对于任意一种状态,设LESS(i)是使牌j 小于牌i,且使POSITION(j)POSITION(i)的数目。例如,对于图7.2(a)所示的状态,有LESS(1)=0,LESS(4)=1和LESS(12
11、)=6。在初始状态下,如果空格在图7.2的阴影位置中的某一格处,则令X=1;否则X=0。于是有定理7.1:当且仅当LESS(i)+X(1 i16)是偶数时,图7.2(b)所示的目标状态可由此初始状态到达。可以用定理7.1来判定目标状态是否在初始状态的状态空间中。若在,就可以着手确定导致目标状态的一系列移动。,例:15-谜问题,27,为了实现这一检索,可以将此状态空间构造成一棵树。在这棵树中,每一个结点的儿子表示由状态X通过一次合法的移动可到达的状态。不难看出,移动牌与移动空格实质上是等效的,而且在作实际移动时,因此以后都将父状态到子状态的一次转换看成是空格的一次合法移动。,例:15-谜问题,2
12、8,15-谜问题(宽度优先),29,15-谜问题(宽度优先前十步),30,例:15-谜问题,按照FIFO检索方法不管开始格局如何,总是采取由根开始的那条最左路径,因而检索是呆板而盲目的。我们所期望的是:有一个具有一定“智能”的检索方法。这就需给状态空间树的每个结点X赋予一定的成本值c(X),可将由根出发到最近目标结点路径上的每个结点X赋予这条路径长度作为他们的成本值。切合实际的做法是:给出一个便于计算成本估计值的函数c(X)=f(X)+g(X),其中f(X)是由根到结点X的路径长度,31,例:15-谜问题,g(X)是以X为根的子树中由X到目标状态的一条最短路径长度的估计值。因此,g(X)至少应
13、是能把状态X转换成目标状态所需的最小移动数。一种可能的选择是:g(X)=不在其目标位置的非空白牌数目使用c(X)图7.3(a)的LC-检索将结点1作为E-结点的开始。结点1在生成它的儿子结点2,3,4和5之后死去。变成E-结点的下一个结点是具有最小c(X)的活结点。,32,15-谜问题(使用C(X)的LC-检索),33,例:15-谜问题,c(2)=1+4,c(3)=1+4,c(4)=1+2,c(5)=1+4,所以结点4成为E-结点。生成结点4的儿子结点,此时的活结点是2,3,5,10,11,12。c(10)=2+1,c(11)=2+3,c(12)=2+3,具有最小c值的活结点10成为下一个E-
14、结点。接着生成结点22和23,结点23被判定是目标结点,此次检索结束。,34,分支限界法的基本思想,分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在搜索问题的解空间树时,分支限界法与回溯法对当前扩展结点所使用的扩展方式不同。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。,35,分支限界法的基本思想,在这些儿子结点中,那些导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入到活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所求的解或活结点表为
15、空时为止。,36,LC-检索的抽象化控制,设T是一棵状态空间树,C(.)是T中结点的成本函数。如果,C(X)是其根为X的子树中任一答案结点的最小成本,则C(T)是T中最小成本答案结点的成本。由于函数C(.)不容易实现,所以使用一个对C(.)估值的启发性函数C(.)来代替。这个启发函数应易于计算并具有如下性质:如果X是一个答案结点或者是一个叶结点,则C(X)=C(X)。,37,算法7.1 LC-检索,Procedure LC(T,c)if T是答案结点 then 输出T;return end ifET/E-结点/将活结点表初始化为空loopfor E 的每个儿子X doif X是答案结点 the
16、n 输出从X到T的那条路径return;end ifcall ADD(X)/X是新的活结点/PARENT(X)E repeatif 不在有活结点 then print(no answer node)stop;end ifcall LEAST(E)repeatEnd LC,通常把这个活结点表作成一个min-堆,38,LC-检索说明,只有当有限状态空间树下才能保证LC终止。对于无限状态空间树,在其至少有一个答案结点并假定对成本估计函数C能作出“适当”的选择时,才能保证算法LC终止。实际上LC算法与状态空间树的宽度优先检索算法和D-检索算法基本相同。,39,LC-检索的抽象化控制(vs.BFS,D-
17、Search),LC算法与BFS及D-Search基本相同活结点表采用队列 vs BFS活节点表采用栈 vs D-Search不同:活结点表的构造,即下一个E-结点的选择规则不同。,40,LC-检索的特性,LC是否一定能找到具有最小成本的答案结点呢?考虑下图所示的状态空间树,方形叶子结点是答案结点。每个结点有两个数,上面的是C的值,下面的是C的值。,41,LC-检索的特性,定理7.2 在有限状态空间树T中,对于每一个结点X,令c(X)是c(X)的估计值且具有以下性质:对于每一个结点Y、Z,当且仅当c(Y)c(Z)时有c(Y)c(Z)。那么在使c()作为c()的估计值时,算法LC到达一个最小的成
18、本答案结点且终止。证明(略),42,LC-检索的特性,要得到满足定理7.2的要求又易于计算的C(.)通常是不可能的。一般情况下,却不难得到这样的C(.):C(X)C(X)。如果对于每一个结点X有c(X)c(X)且对于答案结点X有c(X)=c(X),只要对LC稍作修改就可得到一个在达到某个最小成本答案结点时终止的检索算法LC1。,43,算法7.2 找最小成本答案结点的LC-检索,procedure LC1(T,c)ET置活结点表为空loopif E是答案结点 then 输出从E到T的路径 return end iffor E的每一个儿子X docall ADD(X);PARENT(X)Erepe
19、atif 不再有活结点 then print(No answer node)stopend ifcall LEAST(E)repeatEnd LC1,44,定理7.3 令C(.)是满足如下条件的函数,在状态空间树T中,对于每一个结点X,有C(X)C(X),而对于T中的每一个答案结点X,有C(X)=C(X)。如果算法在第5行终止,则所找到的答案结点是具有最成本的答案结点。,证明:此时,E-结点E是答案结点,对于活结点表中的每一个结点L,C(E)C(L)。由假设C(E)=C(E)且对于一每个活结点L,C(L)C(L)。因此C(E)C(L),从而E是一个最小成本答案结点。,45,分枝-限界算法,检索
20、状态空间树的各种分枝-限界方法都是在生成当前E-结点的所有儿子之后再将另一个结点变成E-结点。假定每一个答案结点X有一个与其相联系的C(X),并且假定会找到最小成本的答案结点。使用一个使得 C(X)C(X)的成本估计函数 C(.)来给出可由任一结点X得出的解的下界。采用下界函数使算法具有一定的智能,减少了盲目性。另外还可以通过设置最小成本的上界使算法进一步加速。,46,分枝-限界算法,如果U是最小成本解的上界,则具有 C(X)U的所有活结点X可以被杀死,这是因为由X可以到达的所有答案结点有U C(X)C(X)。在已经到达一个具有成本U的答案结点的情况下,那些有U C(X)的所有活结点都可以被杀
21、死。U的初始值可以用某种启发性方法得到,也可以置为,每当找到一个新的答案结点就可以修改U的值。,47,实例:带限期的作业排序问题,一般化的带限期的作业排序问题假定n个作业和一台处理机作业i对应一个三元组(pi,di,ti)ti表示作业i需要的单位处理时间di表示完成期限pi表示期限内未完成招致的罚款目标:从n个作业选取子集J,要求J中所有作业都能在各自期限内完成并且使得不在J中的作业招致的罚款总额最小。,48,N=4;(p1,d1,t1)=(5,1,1);(p2,d2,t2)=(10,3,2);(p3,d3,t3)=(6,2,1);(p4,d4,t4)=(3,1,1);,图7.7 大小可变的元
22、组表示对应的状态空间树,49,图7.8 大小固定的元组表示对应的状态空间树,N=4;(p1,d1,t1)=(5,1,1);(p2,d2,t2)=(10,3,2);(p3,d3,t3)=(6,2,1);(p4,d4,t4)=(3,1,1);,50,实例:带限期的作业排序问题,图7.7中可将成本函数C(.)定义为,对于圆形结点X,C(X)是根为X的子树中结点的最小罚款;对于方形结点,C(X)=。设SX是在结点X对J所选择的作业的子集。如果m=maxi|i 属于SX,则C(X)等于作业数i 小于m的所有罚款累加和。C(1)=0;C(2)=0;C(3)=5;C(4)=15;C(5)=21;,51,实例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 分枝 限界
链接地址:https://www.31ppt.com/p-6329365.html