1、第八章 分支与限界,信息工程学院计算机系,8.1 作业分配问题,问题提法:编号为0n-1的n个操作员以n种不同时间完成编号为0n-1的n个不同作业。要求分配每位操作员完成一项工作,使完成n项工作的总时间最少。,假设矩阵c=cij,0in,0jn,其中cij表示第i位操作员完成第j号工作所需的时间。,回溯法解作业分配问题,设xi表示为第i个操作员分配的作业号。 作业分配问题的解空间(x0,x1,x2,xn-1),xixj,xi=0、1、n-1,共n!个可能解。解空间树 排列树 剪枝函数 依据已得到的最优解对结点进行剪枝 搜索按深度优先依次序进行,盲目搜索,分支限界法解作业分配问题,下面首先给出分
2、支限界法解作业分配问题的一个实 例,通过该实例学习分支限界法的理论。,作业分配问题实例,4个操作员完成4个作业的时间表如下所示:,作业,操作员,分支限界解作业分配问题解空间树,第i层各分支表示第i个作业分配给指定操作员(i0),分支限界解作业分配问题搜索,初始从根结点开始搜索,当搜索到一个e-结点时,按公式计算它所有儿子结点的下界t,并将结点按下界升序排列插入结点表中。 (2)从结点表中选出第一个结点,若该结点是叶子结点,则转(3);否则,该结点作为当前e-结点, 转(1)。 (3) 当前结点就是问题的最优解。 分支限界对解空间树的搜索沿下界最小的方向进行。,分支限界解作业分配结点下界的计算,
3、假定k表示搜索深度。 (1)k=0时,表示从根开始搜索。该结点有n个分支,对应将0号作业分配给第i位操作员,i=0,n-1。其余作业分配给其他操作员。沿第i分支向下搜索所需时间至少为:,分支限界解作业分配结点下界的计算,(2) k0假设前面第0,1,k-1号作业已分配给编号为i0,i1,ik-1的操作员。 令S=0,1,n-1表示所有操作员集合;mk-1=i0,i1,ik-1表示作业已分配的操作员编号集合。当把第k号作业分配给编号为ik的操作员,ikS-mk-1,则该儿子结点的下界为:,(6.1),实例的解题过程,解:令tik表示在某个搜索深度k下,将作业k分配给操作员i时的时间下界。1)k=
4、0根结点1下有四个儿子结点2、3、4、5。 t00 = 3+(7+6+3) = 19t10 = 9+(7+4+3) = 23t20 = 8+(7+4+5) = 24t30 = 12+(7+4+3) = 26,结点表:2(19)、3(23)、4(24)、5(26)。2)沿结点2搜索,k=1结点2有3个儿子结点6、7、8t11 = 3+12+(6+3) = 24t21 = 3+7+(6+5) = 21t31 = 3+7+(9+3) = 22结点表:7(21)、8(22)、6(24)、4(24)、5(26),实例的解题过程,3)沿结点7搜索,k=2结点7有2个儿子结点9、10t12 = 3+7+13
5、+8 = 31t32 = 3+7+6+5 = 21结点表:10(21)、8(22)、6(24)、4(24)、5(26)、9(31) 4) 沿结点10搜索,k=3结点10有1个儿子结点11,实例的解题过程,t13 = 3+7+6+5 = 21结点表: 11(21)、8(22)、6(24)、4(24)、5(26)、9(31) 5)因结点11是叶子结点,因此找到解:最优值opt = 21最优解X = (0,3,1,2),实例的解题过程,分支限界解作业分配问题对应的搜索树为:,实例的搜索树,分支限界解作业分配问题算法描述,1)建立根结点X,令根结点的X.k=0,X.S=0,1,n-1,X.m=。 2)
6、对所有编号为i的操作员,iX.S,建立儿子结点Yi ,把结点X的数据复制到结点Yi。 3)令Yi.m=Yi.mi,Yi.S=Yi.S-i,Yi.xi=Yi.k,Yi.k=Yi.k+1,按式(6.1)计算Yi.t。 4)把结点Yi插入最小堆H中。,5)取下堆顶元素作为子树的根结点X,若X.k=n,算法结束,向量X.m便是作业最优分配方案;否则,转步骤(2)。,分支限界解法作业分配问题算法描述,分支限界解作业分配问题算法分析,时间复杂性分析:排列树,共n!个结点对每个结点:计算下界:O(n2)排序:O(nlogn)故最坏情况的时间复杂性为:O(n2n!),从上述分支限界解作业分配问题实例可以看出:
7、 1)分支限界同回溯法,都是对解空间树进行搜索; 2)回溯法对树的搜索按深度优先,盲目搜索;分支限界进行有方向的搜索,从下界最小的结点向下搜索,即沿总时间增长最慢的方向开始。,分支限界法解作业分配问题总结,8.2 分支与限界法的基本思想,基本思想:在分支结点即e_结点上,预先分别估算 沿着它的各个儿子结点向下搜索的路径中,目标函 数可能取到的“界”,然后,把它的这些儿子结点 和他们可能取得的“界”保存在一张结点表中,再 从表中选取“界”最大或最小的e_结点向下搜索。 如果选取的结点是叶结点,则从根到叶子结点路径 所确定的解即为问题的最优解,该叶子结点所确定 的目标函数值就是最优值。,分支与限界
8、法与回溯法的差异,回溯法盲目搜索,遇到死结点才回溯。 分支与限界依据结点表中的信息,不断调整自己的搜索方向,有选择、有目标地往前搜索。回溯依据结点表中的信息进行。,分支限界法的两种工作方式,假设问题的解向量为X=(x1,x2,xn),其中, xi的取值范围为某个有穷集Si,|Si|=ni,1i n。从根结点开始搜索,它有n1个儿子结点(对 应x1的不同取值),分别估算它们可能取得的目 标函数值,记为bound(x1)。bound(x1,x2,xk)同理,表示第k层儿子结点的 界。,第一种工作方式即算法基本思想中所述的工作方式。从根结点开始向下搜索,对当前扩展结点估算其儿子结点可能取得的界,并将
9、其保存在一个按界的升序或降序排列的结点表中。下次选取结点表的第一个结点作为当前e-结点继续向下搜索。若选取的是叶子结点,则找到最优解最优值。作业分配问题采用此种方式求解。,分支限界法的第一种工作方式,求最小值问题 bound(x1)称为该结点的下界,意思是沿着该结点 向下搜索可能取得的值最小不应小于bound(x1)。 假设X=(x1,x2,xk)是沿着儿子结点一层一层往下 搜索所得到的部分解,则有:bound(x1)bound(x1,x2)bound(x1,x2,xk) 最小值问题的结点表按结点下界的非降序保存结 点及其下界。,分支限界法的第一种工作方式,求最大值问题 bound(x1)称为
10、该结点的上界,意思是沿着该结点 向下搜索可能取得的值不大于bound(x1)。 假设X=(x1,x2,xk)是沿着儿子结点一层一层往下 搜索所得到的部分解,则有:bound(x1)bound(x1,x2)bound(x1,x2,xk) 最大值问题的结点表按结点上界的非升序保存结 点及其上界。,分支限界法的第一种工作方式,分支限界法的第二种工作方式,从根结点开始向下搜索,预先通过某种方式的处 理,从众多的儿子结点中挑选一个儿子结点作为搜 索树的一个分支结点,而把去掉这个儿子结点之后 的其他儿子结点集合,作为搜索树的另一个分支结 点。分别估算沿这两个分支结点向下搜索时可能取 得的目标函数的界。然后
11、,选取界最大或最小的分 支结点,继续上述处理。直到得到界最大或最小的 叶子结点为止。(下节的货郎担问题采用此种),分支限界法的解题步骤,(1)确定采用第一种或第二种工作方式,分别转(2)或(3); (2)确定各分支结点界的计算方法;转(4); (3)确定分支的选择方法;确定两个分支结点界的计算方法;转(4) (4)按分支限界法的搜索方式(结点表)进行搜索。构建搜索树,找到最优值及最优解。,8.3 货郎担问题,问题提法:略假设城市编号为0,1,n-1。费用矩阵为c=cij, 0i,jn,其中cij存储城市i到城市j的费用。,费用矩阵的特性及归约,引理8.1 令G=(V,E)是一个有向赋权图,l是
12、图G 的一条哈密尔顿回路,C是图G的费用矩阵,则 回路上的边对应于费用矩阵C中每行每列各一个 元素。,费用矩阵的特性及归约,例:4城市货郎担问题的费用矩阵如下。给出任一条哈密尔顿回路,验证其与费用矩阵的关系。,费用矩阵的行(列)归约,费用矩阵行归约举例,例:4城市货郎担问题的费用矩阵如下。对其进行行归约。,费用矩阵行归约举例,解:lh0 = 2 lh1 = 1 lh3 = 1 行归约后的费用矩阵为:,费用矩阵列归约举例,例:对上例得到的行归约后的费用矩阵(如下所示)进行列归约。,费用矩阵列归约举例,解:ch0 = 2 ch2 = 2 列归约后的费用矩阵为:,费用矩阵的归约,费用矩阵的归约,例:
13、4城市货郎担问题的费用矩阵如下。求其归约矩阵。,费用矩阵列归约举例,解:h = 2+1+1+2+2 = 8归约矩阵为:,费用矩阵的回路与归约矩阵的关系,费用矩阵的回路与归约矩阵的关系,货郎担问题的一些约定,分支限界解货郎担问题,本节采用第二种解题方式解货郎担问题 也可采用第一种,自己思考。,由于货郎担问题可转换为求费用矩阵每行、每列各一个元素,且要求n个元素和最小,因此分支限界解货郎担的搜索树每个结点都是一个费用矩阵。,根结点及其下界确定,搜索树中,结点X及其下界tX的含义是从该结点向下搜索,有w(c)= w(X)+tX。,w(c)也是需要求得的最优解。 以下假设费用矩阵X的下界为tX。,扩展
14、结点的分支结点选择及结点下界计算,采用第二种分支限界法,因此从根向下搜索,对 每次取到的下界最小的当前扩展结点,需确定: (1)如何选择分支结点。 (2)如何对分支结点计算下界。,分支节点的选择,从一个扩展结点,即归约矩阵向下搜索,它的两 个分支结点确定如下: (1)一个分支结点表示回路经过某条选定边 (2)一个分支结点表示回路不经过选定边经过、不经过对应于选取或不选取归约矩阵中的 对应元素。,经过的边的选择,分支结点中经过某条边,该边的选择按照下面两个 思路: 沿cij=0的方向,使所选择的路线尽可能短 沿,最大的方向选择。,经过的边的选择,因此,分支结点经过的边vkvl如下方式进行:,例:
15、4城市货郎担问题的费用矩阵如下。画出其根结点,确定下次搜索选取的边。,根节点及其分支边选择举例,第一个分支结点下界的计算,假设扩展结点,即父结点的矩阵为X。假设X的 第一个分支结点经过边cij(cij=0),记该分支结点 为Y。 下面分析Y的矩阵取值及其下界。因为要选取不同行、不同列的n个元素。且可删除 今后不可能经过的有向边。因此,Y结点按下列原则 进行。,Y结点的矩阵取值及下界确定,(1)删除X的第i行、第j行的所有元素,记为X。 (2)在费用矩阵X中,把今后不可能经过的有向边的元素置为,有以下几种情况: vivj不和其他已选择的边相连接,令cji=。,vi,vj, 和以前选择的边连接成v
16、ivjvkvl,令cli=,Y结点的矩阵取值及下界确定,vi,vj,vl,vk, 和以前选择的边连接成vkvivjvl,令clk=,Y结点的矩阵取值及下界确定,vi,vj,vk,vl, 和以前选择的边连接成vkvlvivj,令cjk=,Y结点的矩阵取值及下界确定,vi,vj,vk,vl,(3) 此时,有w(c) = w(X) + tX = cij + w(X) +tX = w(X) +tX+ hx,因此,Y结点是X按(1)、(2)处理后得到的费用矩阵X的归约,Y结点下界tY = tx+hx。,Y结点的矩阵取值及下界确定,第二个分支结点的计算,同第一个分支结点的计算,假设扩展结点,即父结 点的矩
17、阵为X。假设X的第二个分支结点不经过边 cij(cij=0),记该分支结点为 。,第二个分支结点的计算,终止条件,分支限界解货郎担问题将不断重复对当前最小下 界结点分支选择、计算分支结点及其下界、按 下界将结点写入最小堆这一过程。 每选择一条边,费用矩阵维数-1。 2维费用矩阵可直接求出不同行、不同列的2个元 素和(因其为归约阵,一定等于0)。因此,计 算过程的终止条件是得到2维矩阵。,货郎担问题的求解过程,(1)分配堆缓冲区,初始化最小堆为空堆。 (2)建立根结点X,X的矩阵为初始费用矩阵c的归约,X的下界tX = hc,将X及其下界插入最小堆中。(3)按式,由X计算dkl,即选边vkvl作
18、为分支方向。,货郎担问题的求解过程,(4)(5),(6)从最小堆中取出下界最小的结点,令为X结点。(7)若X为2维阵,即叶结点,从根到叶结点的路经选择,加叶结点的路经选择为最优解,最优值为该结点下界。结束。(8)若X不为叶结点,则转(3)。,货郎担问题的求解过程,例:4城市货郎担问题的费用矩阵如下。用分支限界解法该问题。,分支限界解货郎担问题举例,解:(1)对初始费用矩阵归约,得到搜索树的根结点及其下界如下:,A,下界=8,(2)选择分支方向:c03 = 0 d03 = 2 + 0 = 2,分支限界解货郎担问题解题过程,c12 = 0 d12 = 0+2 = 2c13 = 0 d13 = 0+
19、0 = 0c21 = 0 d21 = 1+0 =1c23 = 0 d23 = 0+0 = 0c31 = 0 d31 = 1+6 = 7,选择c31,即一个分支结点经过边,另一个分支结点不经过。,分支限界解货郎担问题解题过程,分支限界解货郎担问题解题过程,(3) 对A经过边,得到分支结点B,即,A,下界=8,B,下界=8,分支限界解货郎担问题解题过程,(3) 对A不经过边,得到分支结点C,即,A,下界=8,B,下界=8,非,C,下界=8+7=15,B,下界=8,分支限界解货郎担问题解题过程,(4) 将B、C按其下界写入最小堆,得: B(8)、C(15)(5) 取B结点,因为B的维数32,因此继续
20、。(6) 计算B结点的分支方向:c03 = 0 d03 = 2+0 = 2c12 = 0 d12 = 2+2 = 4c20 = 0 d20 = 2+0 = 2c23 = 0 d23 = 0+0 = 0,分支限界解货郎担问题解题过程,选c12作为分支方向,即经过边。(7)对B经过边,得到分支结点D。,分支限界解货郎担问题解题过程,A,下界=8,D,下界=8,非,C,下界=8+7=15,B,下界=8,分支限界解货郎担问题解题过程,(8)对B不经过边,得到分支结点E。,分支限界解货郎担问题解题过程,A,下界=8,D,下界=8,非,C,下界=8+7=15,B,下界=8,非,E,下界=8+4=12,分支限界解货郎担问题解题过程,(9)将D、E按其下界写入最小堆,得D(8)、E(12)、C(15)(10) 取D,因D的维数为2,终止。选择D中的两个元素c20、c03。得到:最优值=8最优解:3-1-2-0-3,8.4 0/1背包问题,例:有载重量M=50的背包,物体重量分别为15、 25、27、5、30,物体价值分别为30、44、46、12、50,求最优装入背包的物体及价值。,回溯法得到的搜索树,