1. 核心思想
分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索
2. 什么是分支定界?
分支定界算法始终围绕着一颗搜索树进行的,我们将原始问题看出搜索树的根节点,从这里出发,分支的含义就是将大的问题分割成小的问题,大问题可以看成是搜索树的父节点,那么从大问题分割出来的小问题就是父节点的子节点了。分支的过程就是不断给树增加子节点的过程。
而定界就是在分支的过程去检查子问题的上下界,如果子问题不能产生一个比当前最优解还要优的解,那么砍掉这一支,直到所有子问题都不能产生一个最优的解的时候,算法结束。
分支定界很像枚举的感觉,只不过加上了定界的过程,变成了一种非常有规律的枚举
原理解析
举个例子:
首先,对于一个整数规划模型:
因为求解的是最大化问题,不妨设当前的最优解(函数值)为负无穷
- 首先从主问题分出两支子问题:
通过线性松弛(规划)求得两个子问题的upper bound为Z_LP1 = 12.75,Z_LP2 = 12.2。由于Z_LP1 和Z_LP2都大于BestV=-INF,说明这两支有搞头。继续往下。
2.从节点1和节点2两个子问题再次分支,得到如下结果:
子问题3已经不可行,无需再理。子问题4通过线性松弛得到最优解为10,刚好也符合原问题0的所有约束,在该支找到一个可行解,更新BestV = 10。
子问题5通过线性松弛得到upper bound为11.87>当前的BestV = 10,因此子问题5还有戏,待下一次分支。而子问题6得到upper bound为9<当前的BestV = 10,那么从该支下去找到的解也不会变得更好,所以剪掉!
- 对节点5进行分支,得到:
子问题7不可行,无需再理。子问题8得到一个满足原问题0所有约束的解,但是目标值为4<当前的BestV=10,所以不更新BestV,同时该支下去也不能得到更好的解了。
- 此时,所有的分支遍历都完成,我们最终找到了最优解。
将线上的值带进去,留下来的值就是最优解