第6章 限界剪枝法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

各行的约数分别为r(1)=10,r(2)=2,r(3)=2, r(4)=3,r(5)=4。 各列的约数分别为r‘(1)=l,r’(2)=0, r‘(3)=3 ,r’(4)= 0,r'(5)=0。该矩阵的约数为 r=25。 第 从归约矩阵的定义可以推知,对于G中的任意 07 章 一条周游路线有:
ij 限 ( i . j ) p ( i , j ) p 界 由此可以得出结论:求带耗费矩阵C的有向图G 剪 枝 的最小耗费周游路线,等价于求带有耗费矩阵C' 法 的有向图G的最小耗费周游路线,而且,前者的周
4 8 12
2
7 8 6 9
5
11 10
12
14 13
最小耗费搜索法

最小耗费搜索法

第 07 章 限 界 剪 枝 法
15迷问题

布局结构描述

布局结点不仅包括数字位的分布情况,还包括已经推演的步 数和与目标布局的差异,以及指向父结点的指针。 初始化集合S={},记录曾经出现过的布局; 初始化优先队列Q,以布局的~C(x)作为权值; 起始布局入队,并记入S; 循环,直至队列空 布局T出队; 若T为目标布局,则从T倒推出移动步骤,求解结束; 将T的所有未处理的可推演布局入队,并记入S;
二 最小耗费搜索法
第 07 章 限 界 剪 枝 法
C(x) = ∞
x
y2
x
C(x) = min{D(y)|y∈Tx∩A}
D(y2)
y1
D(y1)
最小耗费搜索法
第 07 章 限 界 剪 枝 法
10 5
17
7
14
9
12
最小耗费搜索法
5
第 07 章 限 界 剪 枝 法

5

14
9
10

5
14
9
17
10
在找到 一个回答结点或当整个状态 空间树被搜索完,算法LC(T,C)才终止
第 07 章 限 界 剪 枝 法

对算法LC作适当修改,可以使算法
在找到一个最小C(x)回答结点时结束。
下面的算法LCl(T,C)是经过修改后的算
法,它的终止 条件改为当前扩展结点是
一个回答结点。
procedure LC1 (T ,C’) begin MAKENULL (Q); 计算C(T)’; INSERT(T,Q); while not EMPTY(Q) do begin e:=DELETEMIN (Q); 第 if e 是回答结点 then 07 begin 输出从T到e的逆路径;return ; end ; 章 for e 的每一个儿子结点 do if x 满足约束条件then 限 begin 界 计算C(x) ‘ ; INSERT (x ,Q); x ↑ . parent : =e ; 剪 end; 枝 end; 法 print “没有回答结点” ; end;
限界剪枝法
第 07 章 限 界 剪 枝 法

限界与剪枝

为了进一步避免无效搜索,若能找到最优解的耗费上界U,即 对于最优解结点x*,有C(x*)≤U,则: 在进行最小耗费搜索时,对于待展开的状态结点y,若 ~C(y)>U,则由C(x)的单调性和~C(x)是C(x)的下界可知: U<~C(y)≤C(y)≤C(x) x为解结点 即,在y的子树中不会包含所要求的最优解结点x*,因而可以 放弃对该子树的搜索。
三 限界剪枝法
第 07 章 限 界 剪 枝 法

限界与剪枝



在解结点集合上定义目标函数F(x),求解解结点 集上的离散最优化问题; 类似最小耗费搜索法,定义耗费函数C(x): C(x) = min{D(y)|y∈Tx∩A} Tx∩A≠{} C(x) = ∞ Tx∩A={} C(x)为单调非减函数; 同样地,由于C(x)无法做即时计算,引入估值函 数~C(x),满足条件: ~C(x)≤C(x); 对解结点x,~C(x) = C(x);


由归约矩阵的定义可知,在有向连通网上的一条极大简单回 路的路径权值之和等于权值矩阵的归约矩阵的约数r+归约矩 阵上的对应权值之和;因此r是路径权值的一个下界,可作 为C(x)的下界函数; 定义~C(T)=r;
∞ 15 3 19
20 ∞ 5 6 4
30 16 ∞ 18 7
10 4 2 ∞ 16
11 2 4 3 ∞
限界剪枝法
第 07 章 限 界 剪 枝 法

限界与剪枝




基于以上思想,引入耗费函数的上界函数u(x), 满足:~C(x)≤C(x)≤u(x);和当前最小上界值U; 初始时令U=u(T),T为起始结点; 在符合约束条件的结点x入队前,检查,若 ~C(x)>U,则该结点不入队(不激活); 在结点x入队时,检查,若u(x)<U,则用u(x)更新 U(使U动态单调下降); 在活动结点x出队后,检查,若~C(x)>U,则不须 对x进行扩展,避免无效搜索;
第 07 章 限 界 剪 枝 法
பைடு நூலகம்
旅行售货员问题
从状态空间树的根出发,定义非根 结点x的估值函数如下:
若x不是解结点,则:

设x的父结点y的归约矩阵Ay,

第 07 章 限 界 剪 枝 法
设x是由加入边(i,j)得到的,则将Ay的 第i行和第j列均置为∞,以避免选入 其他以i为起点和以j为终点的边; 将Aj1置为∞,以避免选入(j,1); 如此得到的矩阵就是x的归约矩阵Ax, 归约于Ax的归约数为rx,则定义: ~C(x) = ~C(y)+rx
限界剪枝法

旅行售货员问题

问题:某售货员要到若干城市去推销,已知各城市之间的路程 (或旅费),求一条从驻地出发,经过每个城市仅一次,最后回 到驻地的路线,使总的路程(或总旅费)最小。 问题可以描述成一个有向网G上的最小权值极大简单回路问题;不 失一般性,设起点为顶点1,则解的形式为{1,p1,p2…pn-1,1},取中 间部分p1,p2…pn-1作为解结点的形式, p1,p2…pn-1可以看作2到n的 一个排列,若G是一个完全图,则显然状态空间中的结点数为(n1)!; 定义耗费函数C(x): 当x为解结点时,C(x)取x的路线耗费; 当x不是解结点时,C(x)取x的子树中最小耗费解结点的耗费; 定义上界函数u(x): 当x为解结点时,u(x) = C(x); 当x不是解结点时,u(x) = ∞;
2. 限界剪枝法基本思想
分支限界法常以广度优先或以最小耗费(最大效益)优先的方 式搜索问题的解空间树。
在分支限界法中,每一个活结点只有一次机会成为扩展结点。 活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这 些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃, 其余儿子结点被加入活结点表中。 此后,从活结点表中取下一结点成为当前扩展结点,并重复上 述结点扩展过程。这个过程一直持续到找到所需的解或活结点表 为空时为止。
限界剪枝法

限界与剪枝

第 07 章 限 界 剪 枝 法
限界剪枝法的算法描述



设T为状态空间树的根结点;~C(x)为耗费估计函数; 初始化优先队列Q ,初始化U=u(T); 计算~C(T),并将T入队; 循环,直到队列Q空(无解): 结点e出队; 若e是回答结点,则 输出解或求解路径,求解结束; 否则,若~C(e)≤U,则 检查e的所有子结点x,若x满足约束条件,则 计算~C(x),若~C(x)≤U,则 将x入队,并计算u(x); 若u(x)<U,则令U=u(x); 记录搜索路径;
第 07 章 限 界 剪 枝 法



限界剪枝法

旅行售货员问题

第 07 章 限 界 剪 枝 法
为了定义C(x)的下界~C(x),引入权值矩阵的归约矩阵:

从权值矩阵的每一行(列)中减去该行(列)的最小值,称为 对行(列)的归约,被减去的最小值称为该行(列)的约数; 对一个矩阵的行和列都做归约,称为原矩阵的归约矩阵,行列 约数之和称为原矩阵的约数,记为r ;
2
一 限界剪枝法的基本思想
1. 限界剪枝法与回溯法的不同
(1)求解目标:回溯法的求解目标是找出解空 间树中满足约束条件的所有解,而分支限界法 的求解目标则是找出满足约束条件的一个解, 或是在满足约束条件的解中找出在某种意义下 的最优解。
(2)搜索方式的不同:回溯法以深度优先的方 式搜索解空间树,而分支限界法则以广度优先 或以最小耗费优先的方式搜索解空间树。

Cij r
C'
游路线的耗费以r为下界。
第 07 章 限 界 剪 枝 法

因此,约数r可用来作为状态空 间树根结点的估值函数值。即令 C'(T)=r,而C'是根结点对应 的归约矩阵。

第 07 章 限 界 剪 枝 法
对于状态空间树中的其他任 意结点x,我们也可建立与之相 应的C'(x)和相应的归约矩阵。 设y是任一非叶结点,Ay是与结 点y相对应的归约矩阵,x是y的 儿子结点,状态空间树中的边(y ,x)对应于选择图G的边(y,x)加 入周游路线。


5
7
14

9
10

5

12
最小耗费搜索法
第 07 章 限 界 剪 枝 法

下界估值函数~C(x)

~C(x)是C(x)的下界估值

~C(x)可即时计算
当x为解结点时,~C(x)=C(x)=D(x)

下界估值越小,分枝含有最优解的可能越大。 优先搜索下界估值最小的结点,则第一个待扩展的解结点为最优解。
3. 常见的两种分支限界法
(1)队列式(FIFO)分支限界法 按照队列先进先出(FIFO)原则选取下一个节点为扩 展节点。 (2)优先队列式分支限界法
按照优先队列中规定的优先级选取优先级最高的节点 成为当前扩展节点。
基本思想
第 07 章 限 界 剪 枝 法
1、以回溯为基础,求最优解 2、启发式搜索 3、提前剪去不含最优解的分枝
最小耗费搜索法

最小耗费搜索法

第 07 章 限 界 剪 枝 法
15迷问题

用布局作为问题状态,用空格的移动来表述状态的演化; 用根结点到解结点的路径长度作为耗费函数; 而用根到当前结点的路径长度加上当前结点与目标解的差异量作 为耗费估计函数;
1
3
4
15
1 5 9 13
2 6 10 14
3 7 11 15
《算法设计与分析》
第6章 限界剪枝法
第六章
本章主要知识点
• • •
分支限界法
6.1 分支限界法的基本思想 6.2 单源最短路径问题 6.3 装载问题

• • • • •
6.4 布线问题
6.5 6.6 6.7 6.8 6.9 0-1背包问题 最大团问题 旅行售货员问题 电路板排列问题 批处理作业调度
最小耗费搜索法

第 07 章 限 界 剪 枝 法
最小耗费搜索法 最小耗费搜索法的算法描述 设T为状态空间树的根结点;~C(x)为耗费估计函数;初 始化优先队列Q; 计算~C(T),并将T入队; 对活结点表中的任一结点x,有 循环,直到队列Q空(无解): ~C(e)≤~C(x), 结点e出队; 对x分枝中的任一解结点y,有 若e是回答结点,则 ~C(x)≤C(y)=D(y), 输出解或求解路径,求解结束; 又知:~C(e)=C(e)=D(e),则 否则 D(e)≤D(y)。 检查e的所有子结点x: 若x满足约束条件,则 计算~C(x),并将x入队; 记录搜索路径; 当~C(x)满足:~C(x)≤C(x),C(x)单调,解结点的 ~C(x)=C(x)时,上述算法可以正确找到C(x)的最小耗费解;

算法描述

procedure LC (T,C) ( EMPTY(Q)在Q为空时返回true,否则返回false。) begin if T 的根是一个回答结点 then 输出T的根 else begin MAKENULL (Q); 计算C(T)’; INSERT(T,Q); while not EMPTY(Q) do 第 begin e: = DELETEMIN (Q); 07 for e 的每个儿子结点 x do 章 if x满足约束条件then begin if x 是回答结点 then 限 begin 输出从T到x的逆路径; return; end ; 界 计算C(x)';INSERT(x,Q); x ↑. parent =e; 剪 end ; end; 枝 print“没有回答结点” 法 end; end;

10 ∞ 3 3 0
20 14 ∞ 15 3
0 2 0 ∞ 12
1 0 2 0 ∞
行归约
13 1 16 12
第 07 章 限 界 剪 枝 法
16
列归约
∞ 12 0 15 11 10 ∞ 3 3 0 17 11 ∞ 12 0 0 2 0 ∞ 12 1 0 2 0 ∞
归约数为:10+2+2+3+4+1+3 = 25
相关文档
最新文档