干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇(上)

简介: 干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇

之前一直做启发式算法,最近突然对精确算法感兴趣了。但是这玩意儿说实话是真的难,刚好boss又叫我学学column generation求解VRP相关的内容。


一看里面有好多知识需要重新把握,所以这段 时间就打算好好学学精确算法。届时会把学习过程记录下来,也方便大家学习!


微信图片_20220421163349.gif

01 什么是branch and bound?


微信图片_20220421163354.jpg


1.1

官方一点[1]



Branch and bound (BB, B&B, or BnB) is an algorithm design paradigm for discrete and combinatorial optimization problems, as well as mathematical optimization. A branch-and-bound algorithm consists of a systematic enumeration of candidate solutions by means of state space search: the set of candidate solutions is thought of as forming a rooted tree with the full set at the root.


The algorithm explores branches of this tree, which represent subsets of the solution set. Before enumerating the candidate solutions of a branch, the branch is checked against upper and lower estimated bounds on the optimal solution, and is discarded if it cannot produce a better solution than the best one found so far by the algorithm.


The algorithm depends on efficient estimation of the lower and upper bounds of regions/branches of the search space. If no bounds are available, the algorithm degenerates to an exhaustive search.


1.2

通俗一点



分支定界算法始终围绕着一颗搜索树进行的,我们将原问题看作搜索树的根节点,从这里出发,分支的含义就是将大的问题分割成小的问题。


大问题可以看成是搜索树的父节点,那么从大问题分割出来的小问题就是父节点的子节点了。


分支的过程就是不断给树增加子节点的过程。而定界就是在分支的过程中检查子问题的上下界,如果子问题不能产生一比当前最优解还要优的解,那么砍掉这一支。直到所有子问题都不能产生一个更优的解时,算法结束。


微信图片_20220421163356.png


02 原理解析


为了让大家更好理解分支定界的原理,这里小编举一个求解整数规划的例子来给大家演示分支定界算法的具体过程。


首先,对于一个整数规划模型:


微信图片_20220421163409.png


因为求解的是最大化问题,我们不妨设当前的最优解BestV为-INF,表示负无穷。


1) 首先从主问题分出两支子问题:


微信图片_20220421163412.jpg


通过线性松弛求得两个子问题的upper bound为Z_LP1 = 12.75,Z_LP2 = 12.2。由于Z_LP1 和Z_LP2都大于BestV=-INF,说明这两支有搞头继续往下。


2) 从节点1和节点2两个子问题再次分支,得到如下结果:


微信图片_20220421163416.jpg


子问题3已经不可行,无需再理。子问题4通过线性松弛得到最优解为10,刚好也符合原问题0的所有约束,在该支找到一个可行解,更新BestV = 10。


子问题5通过线性松弛得到upper bound为11.87>当前的BestV = 10,因此子问题5还有戏,待下一次分支。而子问题6得到upper bound为9<当前的BestV = 10,那么从该支下去找到的解也不会变得更好,所以剪掉!



3) 对节点5进行分支,得到:

微信图片_20220421163419.jpg


子问题7不可行,无需再理。子问题8得到一个满足原问题0所有约束的解,但是目标值为4<当前的BestV=10,所以不更新BestV,同时该支下去也不能得到更好的解了。


4) 此时,所有的分支遍历都完成,我们最终找到了最优解。


微信图片_20220421163421.png

相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 算法
深度学习算法概念介绍
深度学习算法概念介绍
|
1月前
|
机器学习/深度学习 人工智能 算法
详解机器学习概念、算法
详解机器学习概念、算法
详解机器学习概念、算法
|
2月前
|
算法 调度
【算法设计与分析】— —基础概念题(one)可作为日常联系或期末复习
【算法设计与分析】— —基础概念题(one)可作为日常联系或期末复习
49 1
|
1月前
|
机器学习/深度学习 自然语言处理 算法
|
9天前
|
机器学习/深度学习 人工智能 算法
【AI 初识】描述遗传算法概念
【5月更文挑战第2天】【AI 初识】描述遗传算法概念
|
13天前
|
存储 算法
【数据结构与算法】8.二叉树的基本概念|前序遍历|中序遍历|后序遍历
【数据结构与算法】8.二叉树的基本概念|前序遍历|中序遍历|后序遍历
|
3月前
|
算法 安全 物联网
【国密算法】理解国密算法的基础概念
【国密算法】理解国密算法的基础概念
|
3月前
|
存储 分布式计算 负载均衡
浅谈分布式共识算法概念与演进
浅谈分布式共识算法概念与演进
43 0
|
4月前
|
存储 JavaScript 算法
TypeScript算法专题 - [双链表1] - 双链的概念及其实现
TypeScript算法专题 - [双链表1] - 双链的概念及其实现
26 0
|
4月前
|
人工智能 自然语言处理 算法
算法01-算法概念与描述
算法01-算法概念与描述