第5章-3-分支限界算法设计基本方法.ppt

第5章-3-分支限界算法设计基本方法.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

南京信息工程大学计算机与软件学院第5章-3分支限界法1.分组名单2.作业1)简述回溯法的基本思想和主要步骤。2)比较回溯法与穷举法的异同。3)简述分支限界法的基本思想和主要步骤。学习要点:理解分支限界法的剪枝搜索策略。掌握分支限界法的算法框架(1)队列式(FIFO)分支限界法(2)优先队列式分支限界法通过应用范例学习分支限界法的设计策略。(1)0-1背包问题;(2)装载问题;5.3.1 分支限界法的基本思想5.3.1 分支限界法的基本思想深度优先搜索ABDHIEJKCFLMGNO广度优先搜索ABCDEFGHIJKLMNO5.3.1 分支限界法的基本思想5.3.1 分支限界法的基本思想每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃其余儿子结点被加入活结点表中。5.3.1 分支限界法的基本思想此后,从活结点表中取下一结点成为当前扩展结点,重复上述结点扩展过程,直到找到所需的解或活结点表为空时为止。5.3.1 分支限界法的基本思想对解空间树的动态搜索过程1.确定一个合理的限界函数,目标函数的界[down,up]2.广度优先遍历解空间树3.依次从活结点表中选取使目标函数的值取得极值的结点成为当前扩展结点4.重复上述过程,直到找到最优解。广度优先遍历过程在分支结点上,依次搜索该结点的所有孩子结点,分别估算这些孩子结点的目标函数的可能取值;如果某孩子结点的目标函数可能取得的值超出目标函数的界,则将其丢弃,因为从这个结点生成的解不会比目前已经得到的解更好;否则,将其加入待处理结点表(简称活结点表)中。叶子的作用——广度优先遍历过程随遍历的深入,活结点表中所估算的目标函数的界越来越接近问题的最优解。1.得解:当搜到一个叶子结点时,如果该结点的目标函数值是活结点表中的极值,则该叶子对应最优解;2.调界:否则,根据该叶子结点调整目标函数的界(对最小化,调上界;对最大化,调下界);3.调队列(活结点表):并且,依次考察活结点表中的结点,将超出目标函数界的结点丢弃;然后从活结点表中选取使目标函数取得极值的结点继续进行扩展。0/1背包的分支限界法过程0/1背包的分支限界法过程0/1背包的分支限界法过程所以,如果选择了结点的合理扩展顺序以及设计了一个好的限界函数,分支界限法可以快速得到问题的解。分支限界法的较高效率是以付出一定代价为基础的,其工作方式也造成了算法设计的复杂性。算法设计复杂的表现1)限界函数:一个更好的限界函数通常需要花费更多的时间计算相应的目标函数值,而且对于具体的问题实例,通常需要进行大量实验,才能确定一个好的限界函数;2)算法设计较为复杂:为了从叶子结点求出对应最优解的各分量,需保存该结点到根结点的路径,或者在搜索过程中构建经过的树结构;3)需要较大的存储空间:算法要维护一个待处理结点(活结点)表,并且需要在活结点表中快速查找取得极值的结点,等等。在最坏情况下,需要的空间复杂性是指数阶。5.3.3装载问题5.3.3装载问题5.3.3装载问题节点的左子树表示将此集装箱装上船,右子树表示不将此集装箱装上船。设bestw是当前最优解;ew是当前扩展结点所相应的重量5.3.3装载问题5.3.3装载问题5.3.3装载问题5.3.3装载问题5.3.3装载问题2.队列式分支限界法在算法的while循环中,首先检测当前扩展结点的左儿子结点是否为可行结点。如果是则将其加入到活结点队列中。然后将其右儿子结点加入到活结点队列中(右儿子结点一定是可行结点)。2个儿子结点都产生后,当前扩展结点被舍弃。活结点队列中的队首元素被取出作为当前扩展结点,由于队列中每一层结点之后都有一个尾部标记-1,故在取队首元素时,活结点队列一定不空。当取出的元素是-1时,再判断当前队列是否为空。如果队列非空,则将尾部标记-1加入活结点队列,算法开始处理下一层的活结点。2.队列式分支限界法while(true){//检查左儿子结点if(Ew+w[i]=c)//x[i]=1EnQueue(Q,Ew+w[i],bestw,i,n);//右儿子结点总是可行的EnQueue(Q,Ew,bestw,i,n);//x[i]=0Q.Delete(Ew);//取下一扩展结点if(Ew==-1){//同层结点尾部

文档评论(0)

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

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

1亿VIP精品文档

相关文档