




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二:回溯法VS分支定界法一、问题分析回溯法可以处理货郎担问题,分支定界法也可以处理货郎担问题,回溯法和分支定界法哪个算法处理货郎担问题效率更高呢?实现回溯法、分支定界法,以及不同的界值函数(课上讲过的或者自己新设计的),通过随机产生10个不同规模的算例(城市数量分别为10,20,40,80,100,120,160,180,200,500,或者其它规模),比较回溯法和分支定界法在相同界值函数下的执行效率。另外,分别比较回溯法和分支定界法在不同界值函数下的执行效率。二、算法基本思想1、回溯法从初始状态出发,搜索其所能到达的所有“状态”,当一条路走到尽头 ,再后退一步或若干步,从另外一种状态出发
2、,继续搜索,直到所有的路径都搜索过。这种不断前进 、不断回溯寻找解的方法叫回溯法。回溯法通常将问题解空间组织成“树”结构,采用系统的方法搜索解空间树,从而得到问题解。搜索策略:深度优先为主,也可以采用广度优先、函数优先、广度深度结合等。避免无效搜索策略:约束函数:在扩展结点处剪去不满足约束条件的子树界限函数:在扩展结点处剪去得不到最优解的子树2、分支限界法分支界限法类似与回溯法,也是在问题解空间中搜索问题解的一种算法。分支界限法与回溯法思想对比:求解目标:回溯法的可以用于求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标通常是找出满足约束条件的一个解或最优解。搜索方式的不同:
3、回溯法主要以深度优先的方式搜索解空间树,而分支限界法则主要以广度优先或以最小耗费优先的方式搜索解空间树。在分支限界法中,每个活结点只有一次机会成为扩展结点。一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。三、算法设计1、回溯法TSP问题的目的是得到一条路径,即一个解向量(X1,X2.Xn),为排列树问题。对所有城市进行编号后,按大小顺序存储于数组path中,构造一个交换函数swap()
4、;对数组path进行遍历,判断当前城市与目标城市是否连通,若连通,通过swap函数对当前节点和目标城市进行交换,即树的节点拓展。若不连通则恢复,并进入下一次的循环,循环到叶子节点时,判断叶是否与初始节点相连,并计算代价cost是否小于当前最小代价bestc,若小于,则更新bestc,再返回上一节点,知道遍历完树中的所有节点。2、分支限界法因为问题是经典的TSP问题,所以确定问题的解空间树为排列树。问题解的表示:可以将问题的解表示成一个n元式 x1,x2,xn。使用优先级队列实现最小耗费优先求解。界函数的确定:首先利用贪心的方法获得一个较优的上界。对于当前路径下的扩展的过程中,每一步需要存储的当
5、前的结点的下界。其中的第二部分需要计算的是当前路径的起始结点以及终止结点各自与仍未访问过的结点中的结点只存存在的最小代价。结点的扩展过程如下:根据优先级从队列中选取优先级最高的元素,当结点不是叶子结点的父节点时,扩展该结点的所有子节点,在扩展的过程中需要根据计算所得的下界与当前求解得到的最优解进行对比,如果下界大于当前的最优解则对相应的子节点时进行剪枝处理,否则扩展该子节点,将其加入到队列中。当当前所访问的结点为叶子结点的父节点时,判断当前费用+当前结点到叶子结点的费用+叶子结点到起始结点的费用之和是否优于最优解,如果是则更新最优解,并将当前的解加入到队列中。如果不是则继续取队列中的元素进行扩
6、展。但取出的元素为叶子节点或者队列中的元素为空的时候,则搜索结束,输出当前的最优解。四、算法实现1、回溯法核心代码:public void backtrack(int depth)/depth深度if(depth=size)if(mappathdepth-1pathdepth != -1 & mappathdepthpath1!= -1& cost +mappathdepthpath1bestc)bestp=path.clone();bestc = cost + mappathdepthpath1;/bestc = cost +apathi-1pathi+apathipath1;/重复计算了上
7、一边elsefor(int j =depth;j=size;j+)if(mappathdepthpathj!=-1)swap(path,depth+1,j);cost +=mappathdepthpathdepth+1;/System.out.println(Arrays.toString(x)+:+cost);backtrack(depth+1);cost -=mappathdepthpathdepth+1;swap(path,depth+1,j);2、分支限界法核心代码:public float fzxj(int m)int n=m.length-1;/节点数LinkedList heap
8、=new LinkedList();/minOuti=i的最小出边费用float minOut=new floatn+1;float minSum=0;/最小出边费用和for(int i=1;i=n;i+)/针对每个节点,找到最小出边/计算minOuti和minSumfloat min=Float.MAX_VALUE;for(int j=1;j=n;j+)if(mapijFloat.MAX_VALUE&mapijmin)min=mapij;if(min=Float.MAX_VALUE)return Float.MAX_VALUE;minOuti=min;minSum+=min;/初始化int
9、x=new intn;for(int i=0;in;i+)xi=i+1;TSPnode enode=new TSPnode(0,0,minSum,0,x);float bestc=Float.MAX_VALUE;/搜索排列空间树while(enode!=null&enode.pn-1)/非叶节点x=enode.path;if(enode.p=n-2)/当前扩展结点是叶节点的父节点/再加两条边构成回路/所构成回路是否优于当前最优解if(mapxn-2xn-1!=-1&mapxn-11!=-1&enode.cost+mapxn-2xn-1+mapxn-11bestc)/找到费用更小的回路bestc
10、=enode.cost+mapxn-2xn-1+mapxn-11;enode.cost=bestc;enode.lcost=bestc;enode.p+;heap.add(enode);Collections.sort(heap);else/内部结点/产生当前扩展结点的儿子结点for(int i=enode.p+1;in;i+)if(mapxenode.pxi!=-1)/可行儿子结点float cc=enode.cost+mapxenode.pxi;float rcost=enode.rcost=minOutxenode.p;float b=cc+rcost;/下界if(bbestc)/子树可
11、能含有最优解,结点插入最小堆int xx=new intn;for(int j=0;jn;j+)xxj=xj;xxenode.p+1=xi;xxi=xenode.p+1;TSPnode node=new TSPnode(b,cc,rcost,enode.p+1,xx);heap.add(node);Collections.sort(heap);/取下一个扩展结点enode=heap.poll();/将最优解复制到v1.nfor(int i=0;in;i+)mi+1=xi;return bestc;五、算法复杂性理论分析1、回溯法TSP问题是排列树问题,因而该算法的时间复杂度为O(n!)。2、分支限界法TSP问题是排列树问题,在分支限界法界函数无法剪枝时有最坏情况时间复杂性为O(n!),但通过界函数剪枝可以使复杂度下降。六、算法代码(单独文件提交)见项目文件七、算法测试(报告只写测试方法与用例设计方法与结果,测试程序单独提交)问题规模回溯法分支限界法53ms852ms1010ms1323ms20272510ms7541ms25-20723ms-八、实验中的问题总结回溯法:优点:可以快速的找到一组解,并在此基础之上进行调整。当搜索
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 11《变废为宝有妙招》第二课时(教学设计)-部编版道德与法治四年级上册
- 七年级生物上册 第三单元 第二章 第三节 开花和结果教学设计 (新版)新人教版
- 18威尼斯的小艇教学设计-2023-2024学年五年级下册语文统编版
- 2024-2025学年高中政治下学期第2周教学设计
- 血管活性药物输注护理
- 2024秋四年级英语上册 Unit 4 My home课时6 Read and write-Story time教学设计 人教PEP
- 《 选唱 春天来了》(教案)-2023-2024学年人教版音乐二年级下册
- Unit 6 Section B project教学设计 2024-2025学年人教版(2024)七年级英语上册
- 一年级下美术教学设计-动物的花衣裳-岭南版
- 七年级英语下册 Unit 1 Can you play the guitar教学设计 (新版)人教新目标版
- 防台防汛管理制度
- 消防器材(灭火器)检查及记录表
- 2012小小科学家高年级试题生物
- 广电运通研究报告:数字人民币促产业升级-AI+城市助业务转型
- 妇女儿童健康状况分析报告
- 移动式脚手架安全操作规程
- 永辉超市企业文化ppt课件
- 多肉生石花图谱_版
- 送达地址确认书(法院最新版)
- 详细波士顿诊断性失语症检查
- 高温熔融金属安全知识(薛生莲)
评论
0/150
提交评论