目录
分支限界算法简介
分支限界算法是按照广度优先的方式对解空间树(状态空间树)进行搜索,从而求得最优解的算法。在搜索的过程中,采用限界函数(bound function)估算所有子节点的目标函数的可能取值,从而选择使目标函数取极值(极大值或者极小值)的节点作为扩展结点(如果限界值没有超过目前的最优解,则剪枝)进行下一步搜索(重复 BFS -> 计算所有子节点限界 -> 选择最优子节点作为扩展结点的过程),从而不断调整搜索的方向,尽快找到问题的最优解。
(回溯算法求出满足约束的所有可行解,分支限界求出满足约束的解中使得目标函数达到极值的最优解)
分支限界的思想类似于:图的广度优先搜索,树的层序遍历。
分支限界法思想
分支限界法首先要确定一个合理的限界函数(bound funciton),并根据限界函数确定目标函数的界[down ,up],按照广度优先策略搜索问题的解空间树,在分直结点上依次扩展该结点的孩子结点,分别估算孩子结点的目标函数可能值,如果某孩子结点的目标函数可能超出目标函数的界,则将其丢弃;否则将其加入待处理结点表(简称PT表),依次从表PT中选取使目标函数取得极值的结点成为当前扩展结点,重复上述过程,直到得到最优解。
从根开始,常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
首先将根结点加入活结点表(用于存放活结点的数据结构)
接着从活结点表中取出根结点,使其成