分支限界法
来源:互联网 发布:大数据都采用什么技术 编辑:程序博客网 时间:2024/06/15 05:40
分支限界法(branch and bound method)按广度优先策略搜索问题的解空间树,在搜索过程中,对待处理的节点根据限界函数估算目标函数的可能取值,从中选取使目标函数取得极值(极大或极小)的结点优先进行广度优先搜索,从而不断调整搜索方向,尽快找到问题的解。分支限界法适合求解最优化问题。
1、分支限界法思想
上节中回溯法是从根节点出发,按照深度优先的策略搜索问题的解空间树,在搜索过程中,如果某点所代表的部分解不满足约束条件,则对该节点为根的子树进行剪枝;否则继续按照深度优先的策略搜索以该结点为根,当搜索到一个满足的约束条件的叶子结点时,就找到了一个可行解。
分支限界法首先要确定一个合理的限界函数(bound funciton),并根据限界函数确定目标函数的界[down ,up],按照广度优先策略搜索问题的解空间树,在分直结点上依次扩展该结点的孩子结点,分别估算孩子结点的目标函数可能值,如果某孩子结点的目标函数可能超出目标函数的界,则将其丢弃;否则将其加入待处理结点表(简称PT表),依次从表PT中选取使目标函数取得极值的结点成为当前扩展结点,重复上述过程,直到得到最优解。
2、TSP问题中使用分支限界法
【TSP问题】:
TSP问题是指旅行家要旅行n个城市,要求各个城市经理且仅经理依次然后回到出发城市,并要求所走的路程最短。我们以下图的无限图为例,采用分支限界法解决这个问题。
该无向图对应的代价矩阵如下所示:
代价矩阵是1到1,1到2,1到3,1到4,1到5距离写在第一行,第二行为2到1,2到2,2到3,2到4,、、、依次
(1)找到目标函数的界。上界为,采用贪心算法求得上界,从节点1开始到节点3--->5--->4--->2--->1,路径,即为图中红色圈的路径,其路径长度为C=1+2+3+7+3=16。
下界为矩阵中每行中两个最小的相加,所有的行加起来的和的一半。( (3+1)+(3+6)+(1+2)+(3+4)+(2 +3) )/2=14
所以求得界为[14,16]。
(2)计算每个节点的限界值。
计算目标函数(限界函数),lb分为三部分,第一部分是经过路径的长度相加的2倍,加上第二部分离着路径首尾节点最近的距离相加(不在已知路径上的),加上第三部分除了路径上节点,矩阵中两个最短的距离相加,最后这三部分和相加,得到的结果除以2便是每个节点的限界值。(对于1条正在生成的路径/部分解,设已经确定的顶点(已经经过/遍历的城市)集合为U=(r1, r2, …, rk),则该部分解的目标函数的下界为(已经经过的路径的总长的2倍+从起点到最近未遍历城市的距离+从终点到最近未遍历城市的距离+进入/离开未遍历城市时各未遍历城市带来的最小路径成本)除以2并向上取整。假设正在生成的路径/部分解为1→4,U={1,4},未遍历城市={2,3,5},该部分解下界为{2*5+1+3+(3+6)+(1+2)+(2+3)}/2向上取整等于16。)
(3)画出PT图。如下所示。
根据上述所述得到最优解1-->3-->5-->4-->2-->1
【C代码】:
3、分支限界法解决0/1背包问题。
在这里只写个思路,相对来说也是比较简单的。
(1)首先将背包按照价值由大到小进行排列。
(2)找到上界和下界,背包问题的下界把第一个价值最大的装入背包。上界,采用背包问题的贪心算法(三种策略)最终求得上界。
(3)限界函数ub=v+(W-w)*(v i+1 / w i+1)
(4)画PT表格,每个节点进行判断是否剪枝。最终得到最优解。
算法设计与分析大概总结到这。
学习是一点一点深入的,这一点体会是多么的深刻,就像我的牙齿一样,黑的部分不是一天两天能黑的,牙疼的引起也不是一天两天的事情,要有牙齿病菌的这种精神!~~~
点击打开链接- 分支限界法
- 分支限界法
- 分支限界法
- 分支限界法
- 分支限界法(转)
- 分支限界法
- 分支限界法
- 分支限界法
- 分支限界法
- 分支限界法
- 分支限界法
- 分支限界法
- 算法-分支限界法
- 分支限界法
- 分支限界法
- 分支限界法
- 分支限界法
- 分支限界法
- (POJ2253)Frog
- 文章标题
- Ubuntu16.04 64bits安装docker
- 无偿加班竟然被开除,程序员坐不住了
- 文档管理控件Xshell 发布v6 Beta版本,引入会话管理器面板丨附下载
- 分支限界法
- 窗口管理
- Redis 学习笔记(三)之散列类型命令
- React Native 常见错误汇总
- MyEclipse开发中Ctrl+T不显示集成机构处理方法
- wampserver启动丢失msvcr110.dll、vcruntime140.dll等此类文件
- 深度学习中的各种tricks_1.0_label_smoothing
- 融创向新乐视提供17.9亿 孙宏斌解局对乐视动作频频
- HTTP,SOAP和REST的比较