收藏 分享(赏)

分支限界算法.doc

上传人:kpmy5893 文档编号:12280173 上传时间:2021-12-09 格式:DOC 页数:3 大小:33.50KB
下载 相关 举报
分支限界算法.doc_第1页
第1页 / 共3页
分支限界算法.doc_第2页
第2页 / 共3页
分支限界算法.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、基本思想:分枝定界法是一个用途十分广泛的算法,运用这种算法的技巧性很强,不同类型的问题解法也各不相同。分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集(称为分支),并为每个子集内的解的值计算一个下界或上界(称为定界)。在每次分支后,对凡是界限超出已知可行解值那些子集不再做进一步分支。这样,解的许多子集(即搜索树上的许多结点)就可以不予考虑了,从而缩小了搜索范围。这一过程一直进行到找出可行解为止,该可行解的值不大于任何子集的界限。因此这种算法一般可以求得最优解。将问题分枝为子问题并对这些子问题定界的

2、步骤称为分枝定界法。分枝节点的选择:对搜索树上的某些点必须作出分枝决策,即凡是界限小于迄今为止所有可行解最小下界的任何子集(节点),都有可能作为分枝的选择对象(对求最小值问题而言)。怎样选择搜索树上的节点作为下次分枝的节点呢?有两个原则:1)从最小下界分枝(优先队列式分枝限界法):每次算完界限后,把搜索树上当前所有叶节点的界限进行比较。找出限界最小的节点,此结点即为下次分枝的结点。·优点:检查子问题较少,能较快地求得最佳解;·缺点:要存储很多叶节点的界限及对应的耗费矩阵,花费很多内存空间。2)从最新产生的最小下界分枝(队列式(FIFO)分枝限界法):从最新产生的各子集中按顺

3、序选择各结点进行分枝,对于下届比上届还大的节点不进行分枝。优点:节省了空间;缺点:需要较多的分枝运算,耗费的时间较多。这两个原则更进一步说明了,在算法设计中的时空转换概念。分枝定界法已经成功地应用于求解整数规划问题、生产进度表问题、货郎担问题、选址问题、背包问题以及可行解的数目为有限的许多其它问题。对于不同的问题,分枝与界限的步骤和内容可能不同,但基本原理是一样的。分枝界限法是组合优化问题的有效求解方法,其步骤如下所述:步骤一:如果问题的目标为最小化,则设定目前最优解的值 Z=步骤二:根据分枝法则(Branching rule),从尚未被洞悉(Fathomed)节点(局部解)中选择一个节点,并

4、在此节点的下一阶层中分为几个新的节点。步骤三:计算每一个新分枝出来的节点的下限值(Lower bound,LB)步骤四:对每一节点进行洞悉条件测试,若节点满足以下任意一个条件,则此节点可洞悉而不再被考虑:此节点的下限值大于等于 Z 值。已找到在此节点中,具最小下限值的可行解;若此条件成立,则需比较此可行解与 Z 值,若前者较小,则需更新 Z 值,燕以此为可行解的值。此节点不可能包含可行解。步骤五:判断是否仍有尚未被洞悉的节点,如果有,则进行步骤二,如果已无尚未被洞悉的节点,则演算停止,并得到最优解。Kolen 等曾利用此方法求解含时间窗约束的车辆巡回问题,其实验的节点数范围为 6-15。当节点

5、数为 6 时,计算机演算所花费的时间大约 1 分钟(计算机型为 VAZ11/785),当节点数扩大至 12 时,计算机有内存不足的现象产生,所以分枝定界法比较适用于求解小型问题。Held 和 Karp 指出分枝定界法的求解效率,与其界限设定的宽紧有极大的关系。分枝界限法的算法分析:1、算法优点:可以求得最优解、平均速度快。因为从最小下界分支,每次算完限界后,把搜索树上当前所有的叶子结点的限界进行比较,找出限界最小的结点,此结点即为下次分支的结点。这种决策的优点是检查子问题较少,能较快的求得最佳解。2、缺点:要存储很多叶子结点的限界和对应的耗费矩阵。花费很多内存空间。存在的问题:分支定界法可应用

6、于大量组合优化问题。其关键技术在于各结点权值如何估计,可以说一个分支定界求解方法的效率基本上由值界方法决定,若界估计不好,在极端情况下将与穷举搜索没多大区别。例如:分支限界问题:01 背包问题#include#include#define N 200using namespace std;class HeapNodepublic:double uprofit,profit,weight;int level,xN;stack H;double wN,pN;double cw,cp,c;int n;double Bound(int i)double cleft=c-cw,b=cp;while(ibestp) bestp=cp+pi;AddLiveNode(up,cp+pi,cw+wi,true,i+1);up=Bound(i+1);if(up=bestp)AddLiveNode(up,cp,cw,false,i+1);if(H.empty() return bestp;HeapNode node=H.top();H.pop();cw=node.weight;cp=node.profit;up=node.uprofit;i=node.level;int main()coutnc;coutwi;coutpi;cout“最优值是:“Knap()endl;return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报