分支限界法


上一章:贪心算法和回溯法 http://www.cnblogs.com/suxi-blog/articles/6239595.html 

1.回溯法是深度优先策略遍历问题的解空间树,在遍历过程中,应用约束条件、目标函数等剪枝函数实行剪枝。分支限界法按照广度优先策略便利问题的解空间树,对于已经处理过的每个节点根据限界函数估算目标函数的可能取值,从中选取使目标函数取得极值的节点先进行广度优先搜索,从而不断的调整搜索的方向,尽快的找到问题的解。分支限界法适用于求解最优问题。

  2.分支限界法首先的确定一个合理的限界函数,并根据限界函数确定函数的界【down,up】(对于求解最小的问题,根据限界函数确定目标函数的下界down,目标函数的上界可以使用某种启发方式得到,如贪心算法。而对于球最大问题这两个就对调一下就行了),然后就按照广度优先策略遍历问题的解空间树,在分支节点上,依次搜索该节点的所有孩子节点,分别估算这些孩子节点的目标函数的可能取值(对于最小问题,估算节点的下界;对于最大问题就估算节点的上界),如果某孩子节点的目标函数可能取得值超出目标函数的界,则废弃;否则将其加入待处理节点表中(下面就简称为PT表),然后从表中选取使目标函数取得极值的节点成为当前扩展点。重复上述过程,直到找到最优解。

  3.与回溯法相比,分支限界法可以根据限界函数不断调整搜索的方向,选择最优可能取得最优解的子树优先进行搜索,从而尽快的找到问题的解。

分支限界法的一般过程:

(1)根据限界函数确定目标函数的界【down,up】

(2)将待处理节点表PT初始化为空

(3)对根节点的每个孩子节点x执行下列操作

a.估算节点x的目标函数的value

b.若(value>down),则将节点x加入表PT中

(4)循环直到某个叶子节点的目标函数值在表PT中最大

a.i=表PT中最大节点

b.对节点i的每个孩子节点x执行下列操作

  估算节点x的目标函数值value;

  若(value>down),则将节点x加入表PT中

  若(节点x是叶子节点且节点x的value值在表PT中最大),则节点x为对应的解输出,算法结束

  若(节点x是叶子节点但节点x的value在表PT中不是最大),则令down=value,并且将表PT所有小于value的节点删除。

(对于求最小也相同的步骤)

4.应用分支限界法的关键的问题是:

(1)如何确定合适的限界函数

(2)如何组织待处理节点表:表PT可以采用堆的形式,也可以采用优先队列的形式存储。

(3)如何确定最优解中的各个分量

  a.对每个扩展节点保存根结点到该节点

  b.在搜索过程中构建搜索经过的树结构,在求最优解时,从叶子节点不断回溯到根节点,以确定最优解中的各个分量。

-------------------------------------------------------------------------------------------------------------------------

暂时算法我就做到这里,后面会继续进一步更新,毕竟还在学习中。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM