分支限界法类似于回溯算法,是在问题的解空间树上搜索问题解的算法,主要体现在两点不同:
1.求解目标不同。回溯算法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标是找出满足约束条件的一个解,或者是在满足约束条件的解中找出某种意义下的最优解。
⒉.搜索解空间树的方式不同。回溯算法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或者以最小耗费优先的方式搜索解空间树。
分支限界算法基本思想:
分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会称为扩展节点,活结点一旦成为扩展节点,就一次性产生其所有儿子节点(分支),在这些儿子节点中,导致不可行解或是导致非最优解的儿子节点会被舍弃掉,其余儿子节点会被加入活结点表中。为了有效的选择下一个扩展节点加迭搜索K宿每Ht个活结点骨A薪兵个函数值(限界),并根据计算的函数值结果从当前活结点表中取下一个最有利的节点成为当前的扩展节点,使搜索朝着解空间树上最优解的分支推进。重复上述节点扩展过程,直到找到所需的最优解或者活结点表为空。
从活结点表中选择下一个扩展节点时,不同的方式会导致不同的分支限界法,常见有:
1.队列式(FIFO)分支限界法
a.—开始,根结点是唯一的活结点,根结点加入活结点队列。b.从活结点队列中取出队头结点后,作为当前扩展结点。
c.对当前扩展结点,先从左到右产生它的所有孩子节点,用约束条件检查,把所有满足约束函数的孩子节点加入活结点队列中。
d.再从活结点表中取出队首结点为当前扩展结点,重复上述过程,直到找到一个解或活结点队列为空为止。
⒉.优先级队列式分支限界法
a.对每一活结点计算一个优先级(某些信息的函数值