赞
踩
大家好,越努力,越幸运,我是程序猿小猿。本篇文章小猿将跟您分享算法设计与分析中的分支限界法,希望对您有所帮助。
分支限界法类似于回溯法,也是一种在问题的解空间树T中搜索问题解的算法。分支限界法常以广度优先的方式搜索问题的解空间树。在遍历过程中,对已经扩展出的每一个结点根据限界函数估算目标函数的可能取值,从中选取使目标函数取得极值的结点优先进行广度优先搜索,从而不断调整搜索方向,尽快找到问题的解。适用于求解最优化问题。
首先,确定一个合理的限界函数,并根据限界函数确定问题的目标函数的界[down,up] (具体问题可以只有下界down,或上界up);
然后,按照广度优先策略遍历问题的解空间树:当搜索到达一个扩展结点时,一次性扩展它的所有孩子,估算每一个孩子结点的目标函数的可能取值(又称为耗费函数值);将那些满足约束条件且耗费函数值不超过目标函数的界的孩子,插入活动结点表PT中;依次从PT表中取耗费函数值极大(小)的下一结点同样扩展,直到找到所需的解或PT表为空为止。
对于PT中的叶子结点:其耗费函数值是极值(极大或极小),则该叶子结点对应的解就是问题的最优解;否则,将问题目标函数的界([down,up])调整为该叶子结点的耗费函数值,然后丢弃PT表中超出目标函数界的结点,再次选取结点继续扩展。
基本过程
1、根据限界函数确定目标函数的界[down,up];
2、将待处理结点表PT初始化为空;
3、对根结点的每个孩子结点x执行下列操作
3.1、估算结点x的目标函数值value;
3.2、若(value>= =down),则将结点x加入表PT中;
4、循环直到某个叶子结点的目标函数值在表PT中最大或最小
4.1、i=表PT中值最大或最小的结点;
4.2、对结点i的每个孩子结点x执行下列操作
4.2.1、估算结点x的目标函数值value;
4.2.2、若(value>=down),则将结点x加入表PT中;
4.2.3、若(结点x是叶子结点且结点x的value值在表PT中最大或最小),则将结点x对应的解输出,算法结束;
4.2.4、若(结点x是叶子结点但结点x的value值在表PT中不是最大或最小),则令down=value,并且将表PT中所有小于value的结点删除;
从表PT中选择下一扩展结点的不同方式导致不同的分支限界法:
1、队列式(FIFO)分支限界法
从左往右依次插入结点到队尾,按照队列先进先出(FIFO) 原则选取下一个结点为扩展结点。
2、优先队列式分支限界法
按照优先队列中规定的优先级选取优先级最高的结点成为当前扩展结点。
最大优先队列:使用最大堆,体现最大效益优先。
最小优先队列:使用最小堆,体现最小费用优先。
1、如何确定最优解中的各个分量
(1)、对每个扩展结点保存根结点到该结点的路径;
(2)、在搜索的过程中构建搜索经过的树结构,在求得最优解时,从叶子结点不断回溯到根结点,以确定最优解中的各个分量。
2、分支限界法与回溯法的区别
(1)、求解目标不同
回溯法:找出满足约束条件的所有解;
分支限界法:找出满足条件的一个解,或某种意义下的最优解;
(2)、搜索方式不同
回溯法:深度优先
分支限界法:广度优先或最小耗费优先
(3)、在分支限界法中,每一个活结点只有一次机会成为扩展结点。
1、0/1背包问题
2、TSP问题
3、多段图最短路径问题
4、装载问题
5、批处理作业调度问题
…
知识点总结
1、分支限界法常以广度优先的方式搜索问题的解空间树。
2、在遍历过程中,对已经扩展出的每一个结点根据限界函数估算目标函数的可能取值,从中选取使目标函数取得极值的结点优先进行广度优先搜索,从而不断调整搜索方向,尽快找到问题的解。
3、从表PT中选择下一扩展结点的不同方式导致不同的分支限界法:
(1)、队列式(FIFO)分支限界法
(2)、优先队列式分支限界法
4、确定最优解中的各个分量
(1)、保存根结点到该结点的路径
(2)、构建搜索经过的树结构
结语
对分支限界法的介绍就到这里啦,希望这篇文章能给予你一些帮助,感谢各位人才的:点赞、收藏和评论,我们下次见。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。