第6章分支限界法解说.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 分支限界法 本章主要知识点 6.1 分支限界法的基本思想 6.2 单源最短路径问题 6.3 0-1背包问题 6.4 装载问题 6.5 批处理作业调度 6.1 分支限界法的基本思想 1. 分支限界法与回溯法的不同 6.1 分支限界法的基本思想 2. 分支限界法基本思想 在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。 在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。 6.1 分支限界法的基本思想 3. 常见的两种分支限界法 (1)队列式(FIFO)分支限界法 按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。 数据结构:队列 (2)优先队列式分支限界法 按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。 数据结构:堆 0-1背包问题:队列式分支限界法 n=3, c=30, w=[16,15,15], p=[45,25,25] 扩展结点E的儿子结点J不可行而舍弃;K为可行的叶结点,是问题的一个可行解,价值为45 当前活结点队列的队首为F, 儿子结点L、M为可行叶结点,价值为50、25 G为最后一个扩展结点,儿子结点N、O均为可行叶结点,其价值为25和0 活结点队列为空,算法结束,其最优值为50 0-1背包问题:优先队列式分支限界法 用一个极大堆表示活结点表的优先队列,其优先级定义为活结点所获得的价值。初始为空。 由A开始搜索解空间树,其儿子结点B、C为可行结点,加入堆中,舍弃A。 B获得价值45,C为0. B为堆中价值最大元素,并成为下一扩展结点。 B的儿子结点D是不可行结点,舍弃。E是可行结点,加入到堆中。舍弃B。 E的价值为45,是堆中最大元素,为当前扩展结点。 E的儿子J是不可行叶结点,舍弃。K是可行叶结点,为问题的一个可行解价值为45. 继续扩展堆中唯一活结点C,直至存储活结点的堆为空,算法结束。 算法搜索得到最优值为50,最优解为从根结点A到叶结点L的路径(0,1,1)。 6.2 单源最短路径问题 1. 问题描述 例如,例中从s出发经边a、e、q(路长5)和经c、h(路长6)的两条路径到达G的同一顶点。 但在解空间树中,这两条路径相应于解空间树的2个不同的结点A和B。 由于A的路长较小,故可将以结点B为根的子树剪去。此时称结点A控制了结点B。 6.3 0-1背包问题 6.3 0-1背包问题 上界函数 while (i = n w[i] = cleft) // n:物品总数,cleft:剩余空间 { cleft -= w[i]; //w[i]表示i所占空间 b += p[i]; //p[i]表示i的价值 i++; } if (i = n) b += p[i] / w[i] * cleft; // 装满背包 return b; //b为上界函数 6.4 装载问题 1. 问题描述 6.4 装载问题 在算法的while循环中,首先检测当前扩展结点的左儿子结点是否为可行结点。如果是则将其加入到活结点队列中。然后将其右儿子结点加入到活结点队列中(右儿子结点一定是可行结点)。2个儿子结点都产生后,当前扩展结点被舍弃。 活结点队列中的队首元素被取出作为当前扩展结点,由于队列中每一层结点之后都有一个尾部标记-1,故在取队首元素时,活结点队列一定不空。当取出的元素是-1时,再判断当前队列是否为空。如果队列非空,则将尾部标记-1加入活结点队列,算法开始处理下一层的活结点。 6.4 装载问题 6.4 装载问题 3. 算法的改进 节点的左子树表示将此集装箱装上船,右子树表示不将此集装箱装上船。设bestw是当前最优解;ew是当前扩展结点所相应的重量;r是剩余集装箱的重量。则当ew+r?bestw时,可将其右子树剪去,因为此时若要船装最多集装箱,就应该把此箱装上船。 另外,为了确保右子树成功剪枝,应该在算法每一次进入左子树的时候更新bestw的值。 6.4 装载问题 6.4 装载问题 4. 构造最优解 为了在算法结束后能方便地构造出与最优值相应的最优解,算法必须存储相应子集树中从活结点到根结点

文档评论(0)

bbnnmm885599 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档