遗传算法求解TSP问题MATLAB实现-精品
实验六:遗传算法求解TSP问题实验2篇
实验六:遗传算法求解TSP问题实验2篇第一篇:遗传算法的原理与实现1. 引言旅行商问题(TSP问题)是一个典型的组合优化问题,它要求在给定一组城市和每对城市之间的距离后,找到一条路径,使得旅行商能够在所有城市中恰好访问一次并回到起点,并且总旅行距离最短。
遗传算法作为一种生物启发式算法,在解决TSP问题中具有一定的优势。
本实验将运用遗传算法求解TSP问题,以此来探讨和研究遗传算法在优化问题上的应用。
2. 遗传算法的基本原理遗传算法是模拟自然界生物进化过程的一种优化算法。
其基本原理可以概括为:选择、交叉和变异。
(1)选择:根据问题的目标函数,以适应度函数来评估个体的优劣程度,并按照适应度值进行选择,优秀的个体被保留下来用于下一代。
(2)交叉:从选出的个体中随机选择两个个体,进行基因的交换,以产生新的个体。
交叉算子的选择及实现方式会对算法效果产生很大的影响。
(3)变异:对新生成的个体进行基因的变异操作,以保证算法的搜索能够足够广泛、全面。
通过选择、交叉和变异操作,不断迭代生成新一代的个体,遗传算法能够逐步优化解,并最终找到问题的全局最优解。
3. 实验设计与实施(1)问题定义:给定一组城市和每对城市之间的距离数据,要求找到一条路径,访问所有城市一次并回到起点,使得旅行距离最短。
(2)数据集准备:选择适当规模的城市数据集,包括城市坐标和每对城市之间的距离,用于验证遗传算法的性能。
(3)遗传算法的实现:根据遗传算法的基本原理,设计相应的选择、交叉和变异操作,确定适应度函数的定义,以及选择和优化参数的设置。
(4)实验流程:a. 初始化种群:随机生成初始种群,每个个体表示一种解(路径)。
b. 计算适应度:根据适应度函数,计算每个个体的适应度值。
c. 选择操作:根据适应度值选择一定数量的个体,作为下一代的父代。
d. 交叉操作:对父代进行交叉操作,生成新的个体。
e. 变异操作:对新生成的个体进行变异操作,以增加搜索的多样性。
遗传算法解决TSP问题【精品毕业设计】(完整版)
GA(Fitness,Fitness_threshold,p,r,m)
Fitness:适应度评分函数,为给定假设赋予一个评估分数
Fitness_threshold:指定终止判据的阈值
p:群体中包含的假设数量
r:每一步中通过交叉取代群体成员的比例
m:变异率
初始化群体:P←随机产生的p个假设
在本程序的TSP问题中一共有20个城市,也就是在图模型中有20个顶点,因此一个染色体的长度为20。
3.3适应函数f(i)
对具有n个顶点的图,已知各顶点之间( , )的边长度d( , ),把 到 间的一条通路的路径长度定义为适应函数:
对该最优化问题,就是要寻找解 ,使f( )值最小。
3.4选择操作
选择作为交叉的双亲,是根据前代染色体的适应函数值所确定的,质量好的个体,即从起点到终点路径长度短的个体被选中的概率较大。
(2)交叉(Crossover):对于选中进行繁殖的两个染色体X,Y,以X,Y为双亲作交叉操作,从而产生两个后代X1,Y1.
(3)变异(Mutation):对于选中的群体中的个体(染色体),随机选取某一位进行取反运算,即将该染色体码翻转。
用遗传算法求解的过程是根据待解决问题的参数集进行编码,随机产生一个种群,计算适应函数和选择率,进行选择、交叉、变异操作。如果满足收敛条件,此种群为最好个体,否则,对产生的新一代群体重新进行选择、交叉、变异操作,循环往复直到满足条件。
3.变异:使用均匀的概率从Ps中选择m%的成员.对于选出的每个成员,在它表示中随机选择一个为取反
4.更新:P←Ps
5.评估:对于P中的每个h计算Fitness(h)
从P中返回适应度最高的假设
3.
3.1 TSP问题的图论描述
现代优化计算方法研究报告——遗传算法解决TSP问题
现代优化计算方法研究报告——遗传算法解决TSP问题授课老师:专业:学号:姓名:摘要旅行商问题(TSP)是典型的NP完全问题,遗传算法是解决NP完全问题的一种常用算法。
本文首先简要介绍了TSP问题和遗传算法,然后用遗传算法对TSP问题进行了求解,并在MATLAB上进行了编程实现。
最后探讨了遗传算法解决TSP问题的一些特点。
关键词:TSP问题;遗传算法;MATLAB目录摘要 (2)目录 (3)1 旅行商问题 (4)1.1 旅行商问题简介 (4)1.2 TSP的数学描述 (4)2 遗传算法 (4)2.1 遗传算法简介 (4)2.2 遗传算法的步骤 (5)3 遗传算法求解TSP问题 (5)3.1 初始群体和适应度函数 (6)3.2 城市的位置和城市间的距离 (6)3.3 交叉和变异 (6)3.4 种群的更新和迭代终止条件 (6)4 MATLAB仿真以及运行结果 (7)5 总结 (7)附件——MATLAB程序代码 (8)1 旅行商问题1.1 旅行商问题简介旅行商问题(traveling salesman problem,TSP )是一个有名的、典型的、易于描述却难以求解的组合优化问题。
TSP 已被证明具有NPC 计算复杂性,并且许多实际问题都可以转化为TSP 。
它是一个具有广泛的实用背景和重要的理论价值的组合优化难题。
1.2 TSP 的数学描述一个商人欲到n 个城市推销商品,每两个城市i 和j 之间的距离为ij d ,如何选择一条道路使得商人每个城市走一遍后回到起点且所走路径最短? TSP 可以细分为对称和非对称距离两大类问题。
当j i d d ji ij ,,∀=时,称为对称距离TSP ,否则为飞对称距离TSP 。
对于一般的TSP ,一种数学模型描述为∑≠ji ij ij x d min (1-1)∑===n j ij n i xt s 1,,2,1,1.. (1-2) ∑===ni ij n j x1,,2,1,1 (1-3) ∑∈⊂-≤≤-≤S j i ij n S n S S x ,},,2,1{,2||2,1|| (1-4)j i n j i x ij ≠=∈,,,1,},1,0{ (1-5)以上是基于图论的数学模型,其中式(1-5)中的决策变量1=ij x 表示商人行走的路线包含从城市i 到城市j 的路径,0=ij x 表示商人没有选择走这条路。
TSP问题遗传算法matlab源程序
TSP问题遗传算法matlab源程序%TSP问题(又名:旅行商问题,货郎担问题)遗传算法通用matlab程序%D是距离矩阵,n为种群个数,建议取为城市个数的1~2倍,%C为停止代数,遗传到第C代时程序停止,C的具体取值视问题的规模和耗费的时间而定%m为适应值归一化淘汰加速指数,最好取为1,2,3,4 ,不宜太大%alpha为淘汰保护指数,可取为0~1之间任意小数,取1时关闭保护功能,最好取为0.8~1.0%R为最短路径,Rlength为路径长度function [R,Rlength]=geneticTSP(D,n,C,m,alpha)[N,NN]=size(D);farm=zeros(n,N);%用于存储种群for i=1:nfarm(i,:)=randperm(N);%随机生成初始种群endR=farm(1,:);%存储最优种群len=zeros(n,1);%存储路径长度fitness=zeros(n,1);%存储归一化适应值counter=0;while counter<cfor i=1:nlen(i,1)=myLength(D,farm(i,:));%计算路径长度endmaxlen=max(len);minlen=min(len);fitness=fit(len,m,maxlen,minlen);%计算归一化适应值rr=find(len==minlen);R=farm(rr(1,1),:);%更新最短路径FARM=farm;%优胜劣汰,nn记录了复制的个数nn=0;for i=1:nif fitness(i,1)>=alpha*randnn=nn+1;FARM(nn,:)=farm(i,:);endendFARM=FARM(1:nn,:);[aa,bb]=size(FARM);%交叉和变异while aa<nif nn<=2----------------------------精品word文档值得下载值得拥有----------------------------------------------nnper=randperm(2);elsennper=randperm(nn);endA=FARM(nnper(1),:);B=FARM(nnper(2),:);[A,B]=intercross(A,B);FARM=[FARM;A;B];[aa,bb]=size(FARM);endif aa>nFARM=FARM(1:n,:);%保持种群规模为nendfarm=FARM;clear FARMcounter=counter+1endRlength=myLength(D,R);function [a,b]=intercross(a,b)L=length(a);if L<=10%确定交叉宽度W=1;elseif ((L/10)-floor(L/10))>=rand&&L>10W=ceil(L/10);elseW=floor(L/10);endp=unidrnd(L-W+1);%随机选择交叉范围,从p到p+Wfor i=1:W%交叉x=find(a==b(1,p+i-1));y=find(b==a(1,p+i-1));[a(1,p+i-1),b(1,p+i-1)]=exchange(a(1,p+i-1),b(1,p+i-1));[a(1,x),b(1,y)]=exchange(a(1,x),b(1,y));endfunction [x,y]=exchange(x,y)temp=x;x=y;y=temp;% 计算路径的子程序----------------------------精品word文档值得下载值得拥有----------------------------------------------function len=myLength(D,p)[N,NN]=size(D);len=D(p(1,N),p(1,1));for i=1:(N-1)len=len+D(p(1,i),p(1,i+1));end%计算归一化适应值子程序function fitness=fit(len,m,maxlen,minlen)fitness=len;for i=1:length(len)fitness(i,1)=(1-((len(i,1)-minlen)/(maxlen-minlen+0.000001))).^m;end她含着笑,切着冰屑悉索的萝卜,她含着笑,用手掏着猪吃的麦糟,她含着笑,扇着炖肉的炉子的火,她含着笑,背了团箕到广场上去晒好那些大豆和小麦,大堰河,为了生活,在她流尽了她的乳液之后,她就用抱过我的两臂,劳动了。
遗传算法求解TSP问题MATLAB实现-精品
遗传算法求解TSP 问题MATLAB 实现摘要:旅行商问题(TSP )是一个经典的优化组合问题,本文采用遗传算法来求解TSP 问题,深入讨论了遗传算法解决TSP 问题的求解过程,并通过MATLAB 对算法进行了实现,最后对实验结果进行分析,并与粒子群算法进行对比和分析。
关键字:TSP ;遗传算法;粒子群算法0.引言旅行商问题是一个经典的优化组合问题,它可以扩展到很多问题,如电路布线、输油管路铺设等,但是,由于TSP 问题的可行解数目与城市数目N 是成指数型增长的,是一个NP 难问题,因而一般只能近似求解,遗传算法(GA )是求解该问题的较有效的方法之一,当然还有如粒子群算法,蚁群算法,神经网络算法等优化算法也可以进行求解。
遗传算法是美国学者Holland 根据自然界“物竞天择,适者生存”现象而提出的一种随机搜索算法,本文采用MATLAB 来实现遗传算法解决TSP 问题。
1.旅行商问题旅行商问题可以具体描述为:已知n 个城市之间的相互距离,现有一个推销员从某一个城市出发,必须遍访这n 个城市,并且每个城市只能访问一次,最后又必须返回到出发城市,如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短。
用图论术语来表示,就是有一个图g=(v,e),其中v 是定点5,e 是边集,设d=(dij)是有顶点i 和顶点j 之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶点且每个顶点只通过一次的最短距离的回路。
若对与城市v={v1,v2,v3…vn}的一个访问顺序为t=(t1,t2,t3…,tn),其中ti ∈v(i=1,2,..n),且记tn+1=t1,则旅行上问题的数学模型为式1:min ((),(1))(1,....,)I d t i t i i n δ =+ = (1)2.遗传算法与粒子群算法2.1遗传算法遗传算法的基本原理是通过作用于染色体上的基因寻找好的染色体来求解问题,它需要对算法所产生的每个染色体进行评价,并基于适应度值来选择染色体,使适应性好的染色体有更多的繁殖机会,在遗传算法中,通过随机方式产生若干个所求解问题的数字编码,即染色体,形成初始种群;通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择高适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下一代新的种群,对这个新的种群进行下一轮的进化。
遗传算法解决TSP问题的matlab程序【精品毕业设计】(完整版)
1.遗传算法解决TSP 问题(附matlab源程序)2.知n个城市之间的相互距离,现有一个推销员必须遍访这n个城市,并且每个城市3.只能访问一次,最后又必须返回出发城市。
如何安排他对这些城市的访问次序,可使其4.旅行路线的总长度最短?5.用图论的术语来说,假设有一个图g=(v,e),其中v是顶点集,e是边集,设d=(dij)6.是由顶点i和顶点j之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶7.点且每个顶点只通过一次的具有最短距离的回路。
8.这个问题可分为对称旅行商问题(dij=dji,,任意i,j=1,2,3,…,n)和非对称旅行商9.问题(dij≠dji,,任意i,j=1,2,3,…,n)。
10.若对于城市v={v1,v2,v3,…,vn}的一个访问顺序为t=(t1,t2,t3,…,ti,…,tn),其中11.ti∈v(i=1,2,3,…,n),且记tn+1= t1,则旅行商问题的数学模型为:12.min l=σd(t(i),t(i+1)) (i=1,…,n)13.旅行商问题是一个典型的组合优化问题,并且是一个np难问题,其可能的路径数目14.与城市数目n是成指数型增长的,所以一般很难精确地求出其最优解,本文采用遗传算法15.求其近似解。
16.遗传算法:17.初始化过程:用v1,v2,v3,…,vn代表所选n个城市。
定义整数pop-size作为染色体的个数18.,并且随机产生pop-size个初始染色体,每个染色体为1到18的整数组成的随机序列。
19.适应度f的计算:对种群中的每个染色体vi,计算其适应度,f=σd(t(i),t(i+1)).20.评价函数eval(vi):用来对种群中的每个染色体vi设定一个概率,以使该染色体被选中21.的可能性与其种群中其它染色体的适应性成比例,既通过轮盘赌,适应性强的染色体被22.选择产生后台的机会要大,设alpha∈(0,1),本文定义基于序的评价函数为eval(vi)=al23.pha*(1-alpha).^(i-1) 。
基于遗传算法解决TSP问题
基于遗传算法解决TSP问题摘要题目要求给出环游全国全部省会的最短路径方案,是传统的TSP问题,本文将图表数据数字化后,将其转变成为线性规划问题,进而采取遗传算法用Matlab 求解出理论上的最短路径与路线图。
通过第一问求出的路线顺序结合实际情况求解出实际情况下的最短路径与最短时间。
针对第一问,首先建立基本TSP模型,求出其线性规划方程组,用Matlab 对地图做出基本处理,求出其像素坐标的矩阵。
将省会城市初始化为种群数据,用遗传算法求解出模型最优解,即最短路径大小与旅游城市顺序。
针对第二问,由于遗传算法求出的是近似最优解,以及实际道路情况不可能是直线距离,所以理论数据与实际有一定差别。
将旅行顺序求解出后,需要根据实际道路情况重新求解出最短路径大小,并根据题目所给条件求解出最短时间。
根据实际情况,求得最后的最短路径长度为20402.9公里,时间为45天。
题目中给出城市转化为图集,一共有33个顶点,数据较大,用Dijkstra算法和Floyd算法虽然答案可能更精确,但数据处理量大,时间复杂度高。
采用遗传算法可以得到近似最优解,并且精简了时间复杂度。
关键词:最短路径TSP冋题线性规划遗传算法一、问题重述如果从杭州出发,要想开车走遍全国所有的省会城市,而且在到了每个省会城市以后都必须住一晚,第二天早上才能出发,安全起见每天开车时间最多在8小时左右,车速视实际路况而定,一般高速公路可以取平均车速100公里/小时左右,不是高速公路平均车速取60公里/小时左右,从杭州出发要走遍所有省会城市以后回到杭州,开车里程最少需要多少公里?最少需要多少时间?(暂不考虑台湾省)二、问题分析题目要求求出最短路径与时间是典型的TSP问题,即要用最短的总路径走遍所有城市,此处需要设立一个二元组(V(G), E(G)),并且求出一个点的邻接矩阵。
根据经典的TSP模型,得出一般的线性规划方程组。
解TSP模型的一般算法有Dijkstra 算法和Floyd算法,由于TSP问题是典型的NP难题,其可能路径数目与城市总数目n是呈指数型增长,并不适合用以上两种算法。
基于遗传算法求解TSP问题的研究及Matlab实现
第13卷㊀第7期Vol.13No.7㊀㊀智㊀能㊀计㊀算㊀机㊀与㊀应㊀用IntelligentComputerandApplications㊀㊀2023年7月㊀Jul.2023㊀㊀㊀㊀㊀㊀文章编号:2095-2163(2023)07-0058-06中图分类号:TP391.41文献标志码:A基于遗传算法求解TSP问题的研究及Matlab实现杨锦涛,赵春香,杨成福(云南师范大学信息学院,昆明650500)摘㊀要:TSP问题属于组合优化问题,同时也是一个NPC问题,因此人们一直致力于为其寻找有效的近似求解算法㊂遗传算法是模仿生物进化而构建的一种随机搜索方法,具有较强的全局搜索能力㊁潜在的并行性以及良好的可扩展性,能有效求解TSP问题㊂然而,如何确定遗传参数和选择遗传操作一直是一个难题,本文针对TSP问题的求解构建完整的遗传算法体系,选择合适的参数,设计多组交叉算子和变异算子,分别对TSP问题进行求解㊂通过多次实验以及对实验结果的分析比较,探究不同的交叉算子和变异算子求解TSP问题的效果,为遗传操作中交叉算子和变异算子的选择提供一定的参考㊂关键词:TSP问题;组合优化;遗传算法ResearchonsolvingTSPproblembasedongeneticalgorithmandMatlabimplementationYANGJintao,ZHAOChunxiang,YANGChengfu(SchoolofInformation,YunnanNormalUniversity,Kunming650500,China)ʌAbstractɔTheTSPproblembelongstocombinatorialoptimizationproblemsandisalsoanNPCproblem,sopeoplehavebeentryingtofindthecorrespondingeffectiveapproximationsolvingalgorithms.Geneticalgorithmisarandomsearchmethodbuilttoimitatebiologicalevolution,withstrongglobalsearchability,potentialparallelismandgoodscalability,whichcaneffectivelysolveTSPproblems.However,howtodeterminegeneticparametersandselectgeneticmanipulationhasalwaysbeenadifficultproblem.Inthispaper,acompletegeneticalgorithmsystemisconstructedforthesolutionofTSPproblems,appropriateparametersareselected,andmultiplesetsofcrossoperatorsandmutationoperatorsaredesignedtosolveTSPproblemsseparately.Throughmultipleexperimentsandtheanalysisandcomparisonofexperimentalresults,theeffectofdifferentcrossoveroperatorsandmutationoperatorsinsolvingTSPproblemsisexplored,whichprovidesacertainreferencefortheselectionofcrossoveroperatorsandmutationoperatorsingeneticoperations.ʌKeywordsɔTSPproblem;combinatorialoptimization;geneticalgorithm基金项目:云南师范大学博士科研启动基金(2021ZB019)㊂作者简介:杨锦涛(2002-),女,本科生,主要研究方向:深度学习;赵春香(2000-),女,本科生,主要研究方向:深度学习;杨成福(1986-),男,博士,讲师,硕士生导师,主要研究方向:信息超材料㊁深度学习㊁人工智能㊂通讯作者:杨成福㊀㊀Email:yangchengfu@ynnu.edu.cn收稿日期:2022-12-180㊀引㊀言TSP问题㊁即巡回旅行商问题,是组合优化领域中的一个典型问题㊂现实生活中的很多实际应用问题都可以简化为TSP问题㊂TSP问题可以用图论描述为:已知带权完全图G,求一条使得路径总和最小㊁且经过所有顶点的回路㊂TSP问题虽然描述简单㊁容易理解,但是求解是很困难的㊂当问题的规模较小时,仅使用枚举法就能找到一条最优路径,但当城市数量较多时,即使用计算机也无法将解全部列举,要求出TSP问题的最优解是不可能的㊂遗传算法是一种自组织㊁自适应的全局寻优算法,因其潜在的并行性㊁较高的鲁棒性,在应用研究方面取得了很多可观的成果,被广泛应用于函数优化㊁组合优化㊁生产调度㊁自适应控制㊁图像处理㊁机器学习㊁数据挖掘㊁人工生命㊁遗传编程等领域㊂1975年,Holland[1]受生物学中生物进化和自然选择学说的启发,提出了著名的遗传算法㊂2006年,何燕[2]对遗传算法进行改进,将其应用到车间调度领域㊂2010年,蒋波[3]将遗传算法应用于车辆路径优化问题,指出遗传算法求解该问题的优越性,并对其做出了改进,实验证明改进后的遗传算法能Copyright ©博看网. All Rights Reserved.够有效解决此类问题㊂2013年,乔阳[4]将遗传算法和Ostu图像分割法进行改进后结合在一起进行图像分割实验,得到了满意的结果㊂遗传算法是模拟生物进化的过程发展而来的一种算法,从一定规模的解集(初始种群)开始,通过选择㊁交叉和变异,将适应度低的解(个体)淘汰掉,将适应度高的解(个体)保留下来,并产生新的解(个体),生成新的解集(种群),通过不断地迭代,使解集(种群)中的解(个体)越来越接近问题的最优解㊂生物学和遗传算法概念之间的对应关系见表1㊂表1㊀生物学和遗传算法概念对照Tab.1㊀Comparisonofbiologicalandgeneticalgorithmconcepts生物学遗传算法外界环境约束条件个体问题的一个可行解个体对环境的适应度可行解的质量种群一定数量可行解的集合生物的繁衍算法的迭代种群的进化过程可行解的优化过程㊀㊀本文针对TSP问题构建完整的遗传算法体系,将求解TSP问题几种常用的交叉算子和变异算子两两组合在一起,分别对具体的TSP问题实例进行求解,从所得的最优解和求解的时间两方面对实验结果进行分析和总结,探究使用不同的交叉算子和变异算子时遗传算法求解对称式TSP问题的效果[5]㊂1㊀遗传算法求解TSP问题1.1㊀编码编码是指按照一定的构造方法,将问题的可行解转变为遗传算法能直接处理的个体㊂常用的编码方式有二进制编码㊁近邻编码㊁次序编码㊁路径编码[6]㊂使用路径编码求解TSP问题,不仅编码过程简单易操作,而且编码结果非常直观,即首先对城市进行编号,然后以城市编号作为城市的编码,因此本文选择使用路径编码方式对城市进行编码㊂1.2㊀初始种群一般地,初始种群采用随机方法生成,如果种群规模为M,则随机生成M个个体㊂1.3㊀适应度函数适应度函数用于对种群中的个体进行优劣程度的评价,由于算法在搜索最优解的过程中主要以个体的适应度作为依据,所以如果适应度函数构建不当,很可能导致算法的收敛速度缓慢㊁甚至无法收敛,即适应度函数直接决定着算法的收敛能力和寻优能力㊂对于TSP问题,适应度函数一般取路径总和的倒数,具体定义公式见如下:f(x)=1ðn-1i=1d(ti,ti+1)+d(tn,t1)(1)㊀㊀其中,n表示城市的数量;T=(t1,t2, ,tn)为种群中的一个个体;d(ti,tj)表示城市i到城市j的距离㊂TSP问题为最小值问题,由适应度函数可知,路径总和与个体适应度呈倒数关系㊂1.4㊀遗传操作1.4.1㊀选择算子选择是用选择算子对个体进行筛选的过程,这一过程中,差的个体被保留下来的概率小,好的个体被保留下来的概率大,会使种群中的个体向最优解进化㊂常用的选择算子有轮盘赌选择㊁最佳个体保存选择㊁锦标赛选择和排序选择[7]㊂轮盘赌选择是TSP问题求解最常用的选择算子,即使用适应度值计算出每个个体被选择的概率,并根据该概率值对种群中的个体进行选择㊂本文也使用轮盘赌选择作为选择算子,并在轮盘赌的基础上添加最佳个体保存选择,即把种群中出现过的适应度值最高的个体保留下来,避免种群中优秀的个体在遗传操作中被淘汰或破坏㊂1.4.2㊀交叉算子个体交叉是为了实现种群的更新,而交叉算子是进行交叉的手段,定义了个体之间以怎样的方式交叉㊂对于不同问题,由于编码方式的不同,交叉算子也有所不同㊂对此拟做研究分述如下㊂(1)部分匹配交叉(PMX):首先采用随机方式在父体中确定2个位置,由2个位置确定一个交叉段,然后将2个父体的交叉段进行交换,最后根据交叉段之间的映射关系消除子代中的重复基因㊂(2)顺序交叉(OX):首先从父体中随机选择2个位置,由2个位置确定一个基因段,然后将父体A的该基因段复制到子代A 的对应位置,最后将父体B除父体A被选择的基因段之外的基因依次复制到子代A 的其余位置,同理可得到子代B ㊂(3)循环交叉(CX):首先将父体A的第一个基因复制到子代,然后在父体B中的相同位置查看基因,随后在父体A中找到该基因复制到子代的相同位置,并在父体B中查看相同位置的基因,重复此步骤,直到在父体B中找到的基因已经在子代中,停止循环,在父体B中找到剩余的基因,并按照顺序复制到子代中的剩余位置㊂95第7期杨锦涛,等:基于遗传算法求解TSP问题的研究及Matlab实现Copyright©博看网. All Rights Reserved.1.4.3㊀变异算子变异操作的主要目的是维持种群多样性,在遗传算法后期,个体交叉产生新个体的能力弱,通过个体变异可以进一步产生新个体,扩大搜索空间㊂接下来给出剖析论述如下㊂(1)对换变异㊂首先用随机方式在父体中确定2个位置,然后交换这2个位置上的基因㊂(2)倒位变异㊂用随机方式在父体中确定2个位置,以确定一个基因段,然后将其进行逆序排列㊂(3)插入变异㊂用随机方式在父体中确定一个位置,以确定一个待插入的基因,再用随机方式确定2个位置,以确定插入点,最后将待插入的基因放入插入点㊂1.5㊀遗传算法求解TSP问题具体步骤根据上文选择的实现技术构建完整的遗传算法体系后,对TSP问题实例进行求解的具体步骤如下:Step1㊀获取城市数据,对城市进行编号㊂Step2㊀初始化种群㊂Step3㊀适应度评价㊂Step4㊀执行选择操作,采用轮盘赌选择对个体进行筛选,选出足够数量的个体㊂Step5㊀执行交叉操作,将选择操作中选出的个体两两组合作为父染色体,判断是否进行交叉,如果进行交叉,则按照选定的交叉算子进行交叉㊂Step6㊀执行变异操作,将执行交叉操作后的每个个体作为父染色体,判断是否进行变异,如果进行变异,则按照选定的变异算子进行变异㊂Step7㊀完成变异后,执行最佳个体保存策略,判断当前种群中的最优解是否优于历史最优解㊂如果是,更新历史最优解,否则找出种群中最差的解,用最优解将其替换掉㊂Step8㊀判断是否继续进行迭代,若是,回到Step3;否则,结束迭代,输出最优解㊂㊀㊀将前述的3种交叉算子和3种变异算子两两组合在一起,共有9种组合方式,见表2㊂基于表2中列出的9种组合,重复对TSP问题进行求解㊂表2㊀9组交叉算子和变异算子Tab.2㊀9setsofcrossoverandmutationoperators组合编号交叉算子变异算子第一组部分匹配交叉对换变异第二组部分匹配交叉倒位变异第三组部分匹配交叉插入变异第四组循序交叉对换变异第五组循环交叉倒位变异第六组循环交叉插入变异第七组顺序交叉对换变异第八组顺序交叉倒位变异第九组顺序交叉插入变异2㊀实验及结果分析2.1㊀实验仿真本文使用Matlab实现上文构建的遗传算法,从TSPLIB中选择测试样例进行具体分析㊂TSPLIB是包含对称旅行商问题㊁哈密顿回路问题㊁以及非对称旅行商问题的多种实例数据的文件库,数据规模多样㊂本文在对每个测试样例进行求解时,改变算法的交叉算子和变异算子,进行多次重复的实验,从问题的最优解和求解时间两方面对几组交叉算子和变异算子求解TSP问题的效果进行分析比较㊂在完成算法的编程后,初步设置参数,对实例Oliver30进行求解,根据实验结果对算法的参数进行调整,最终选定迭代次数G为500,交叉概率Pc为0.9,变异概率Pm为0.2,种群规模M根据待求解问题的规模来确定㊂一般地,城市个数越多,种群规模越大,对30个城市的实例Oliver30,种群规模取100㊂用上述9组交叉算子和变异算子分别对Oliver30求解10次的结果见表3㊂表3㊀遗传算法求解Oliver30Tab.3㊀GeneticalgorithmforOliver30序号第一组第二组第三组第四组第五组第六组第七组第八组第九组1511.98425.10526.40510.03425.48496.34532.75425.72472.362565.56429.62451.69538.10423.74479.01501.09428.04495.353495.80432.66468.32496.65476.12495.19514.30428.84476.094496.84425.10433.09534.14424.12457.73501.54431.71457.745541.80460.17464.91536.89451.72445.97496.24435.31474.216500.88429.83494.45525.44438.38483.92507.57450.41478.807501.92432.66521.33514.30425.27466.65561.85428.46460.748514.90450.69497.46488.21425.31484.18515.13423.74474.739529.06447.21487.60482.61434.61500.18571.79431.76466.6910556.31425.73507.64510.61433.54471.18456.79438.38483.2706智㊀能㊀计㊀算㊀机㊀与㊀应㊀用㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第13卷㊀Copyright©博看网. All Rights Reserved.㊀㊀以文献[8]中求得的最优解423.74作为参考值,从表3可以看出第2组㊁第5组㊁第8组交叉算子和变异算子的求解结果都比较接近参考最优解,且较稳定,说明参数设置较合理㊂其中一次求解的收敛曲线如图1所示,最优路线如图2所示㊂其中,以圆圈标记的点为路线起点,其与路线终点用虚线相连,其余路线用实线连接㊂12001000800600400200400600迭代次数最优解图1㊀Oliver30收敛曲线Fig.1㊀ConvergencecurveofOliver301008060402020406080100城市横坐标城市纵坐标图2㊀Oliver30最优路线图Fig.2㊀OptimalroadmapofOliver302.2㊀实验结果从TSPLIB中选择测试样例进行求解,本文总共选择了5个实例,分别是ulysses16㊁dantzig42㊁eil51㊁eil76㊁eil101,根据问题的规模为每个实例设置合适的种群规模(M)㊂其中,ulysses16㊁dantzig42㊁eil51实例的种群规模取100,eil76实例的种群规模取150,eil101实例的种群规模取200,分别用上述9组交叉算子和变异算子求解10次,记录10次求解结果的最好值(Best)㊁平均值(AVR)和偏差率(Dr),以及求解的平均时间(Time),这里的偏差率可由式(2)来计算:Dr=Best-OptOpt(2)㊀㊀其中,Opt是TSPLIB数据集提供的最优解㊂实验结果见表4 表8㊂表4㊀遗传算法求解ulysses16Tab.4㊀Geneticalgorithmforulysses16序号AVGBestOptDrTime/s第1组第2组第3组第4组第5组第6组第7组第8组第9组75.0174.0174.2474.3674.0574.2074.6074.0974.2874.0073.9973.9973.9973.9973.9973.9973.9973.99740.000.000.000.000.000.000.000.000.001.21.11.40.70.70.70.50.50.5表5㊀遗传算法求解dantzig42Tab.5㊀Geneticalgorithmfordantzig42序号AVGBestOptDrTime/s第1组第2组第3组第4组第5组第6组第7组第8组第9组1022.34756.49915.69944.02733.00894.321061.21760.73937.22864.89713.99838.38858.26698.98794.02893.35725.37846.416990.240.020.200.230.000.140.280.040.211.41.62.81.01.01.00.70.60.7表6㊀遗传算法求解eil51Tab.6㊀Geneticalgorithmforeil51序号AVGBestOptDrTime/s第1组第2组第3组第4组第5组第6组第7组第8组第9组642.66516.35592.00646.09503.97580.39657.48511.91607.42613.87487.95532.90559.68481.67534.41604.81465.28551.704260.440.150.250.310.130.250.420.090.301.41.83.61.11.11.10.70.70.716第7期杨锦涛,等:基于遗传算法求解TSP问题的研究及Matlab实现Copyright ©博看网. All Rights Reserved.表7㊀遗传算法求解eil76Tab.7㊀Geneticalgorithmforeil76序号AVGBestOptDrTime/s第1组第2组第3组第4组第5组第6组第7组第8组第9组1037.94880.641002.011012.32835.37993.691073.78833.77992.89971.96806.53916.52949.17792.39925.741014.86781.88894.475380.810.500.700.760.470.720.890.450.662.23.29.51.81.81.80.91.01.0表8㊀遗传算法求解eil101Tab.8㊀Geneticalgorithmforeil101序号AVGBestOptDrTime/s第1组第2组第3组第4组第5组第6组第7组第8组第9组1470.941340.331452.021468.171194.491408.331479.121238.681438.391361.781286.641363.671352.241142.191297.431397.691168.251340.936291.161.051.171.150.821.061.220.861.133.25.320.42.72.72.71.21.21.2㊀㊀为了方便对比,将每个实例求解结果中的偏差率(Dr)和求解的平均时间(Time)分别统计在一起,由于实例ulysses16问题规模小,坐标数据也容易处理,不管选择哪种交叉算子和变异算子,求解结果都很接近最优解,因此在进行偏差率的比较时不将其考虑在内,具体见表9㊁表10㊂表9㊀偏差率对比Tab.9㊀Deviationratecomparison序号dantzig42eil51eil76eil101第1组第2组第3组第4组第5组第6组第7组第8组第9组0.240.020.200.230.000.140.280.040.210.440.150.250.310.130.250.420.090.300.810.500.700.760.470.720.890.450.661.161.051.171.150.821.061.220.861.13表10㊀求解平均时间对比Tab.10㊀Comparisonofaveragesolvingtime序号ulysses16dantzig42eil51eil76eil101第1组第2组第3组第4组第5组第6组第7组第8组第9组1.21.11.40.70.70.70.50.50.51.41.62.81.01.01.00.70.60.71.41.83.61.11.11.10.70.70.72.23.29.51.81.81.80.91.01.03.25.320.42.72.72.71.21.21.23㊀实验结论根据上述实验结果,可以得出如下结论:(1)表9中的偏差率描述了采用不同的交叉算子和变异算子时,所求得的最优解与TSPLIB中给出的最优解的差距,偏差率越小,说明算法求得的结果越接近最优解,算法的寻优能力越好㊂从表9中可以看出,第2组数据总是小于第1组和第3组㊁第5组数据总是小于第4组和第6组㊁第8组数据总是小于第7组和第9组,这说明每种交叉算子和逆转变异组合在一起时,问题的求解结果总是比与对换变异和插入变异组合在一起时更接近最优解㊂由此可知,遗传算法使用逆转变异作为变异算子时比选择对换变异和插入变异作为变异算子的寻优能力更强㊂(2)表10是采用每组交叉算子和变异算子求解每个实例10次所花时间的平均值,所花的时间越少,说明算法的搜索速度越快,执行效率越高,由于变异操作比较简单,所以遗传算法的执行效率主要由交叉操作决定㊂从表10中可以看出,遗传算法采用顺序交叉和循环交叉时,即使采用不同的变异算子,所花的时间也基本相同,但是采用部分匹配交叉所花的时间会因为变异算子的不同而有所不同㊂对于每一个实例,在得到的解的质量差别不大的情况下,遗传算法使用部分匹配交叉所花的时间最多,使用循环交叉所花的时间最少㊂综上所述,对于比较简单的TSP问题,由于使用遗传算法总能求得与最优解很接近的解,所以选择何种交叉算子和变异算子对算法的寻优能力影响不大,但是使用部分匹配交叉会花费比较多的时间,会导致算法的执行效率低,因此交叉算子选择循环26智㊀能㊀计㊀算㊀机㊀与㊀应㊀用㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第13卷㊀Copyright©博看网. All Rights Reserved.交叉比较合适㊂对于不是总能求得最优解的TSP问题,与对换变异和插入变异相比,使用逆转变异会使算法具有更强的寻优能力,找到的最优解更接近最优解,使用部分匹配交叉和顺序交叉会花费比循环交叉更多的时间,使算法的执行效率变低,而且找到的最优解也不会更优㊂4 结束语本文对几种常用的交叉算子和变异算子求解TSP问题的效果进行了研究㊂实验结果表明,在几种常用的交叉算子和变异算子中,选择循环交叉和逆转变异算法的执行效率最高,寻优能力最好,这能为遗传算法中交叉算子和变异算子的选择提供一定的参考,同时有利于设计出更好的交叉算子和变异算子,提高算法的性能㊂参考文献[1]HOLLANDJ.Adaptationinnaturalandartificialsystems:anintro⁃ductoryanalysiswithapplicationtobiology[J].ControlArtificialIntelligence,1975.[2]何燕.基于遗传算法的车间调度优化及其仿真[D].武汉:武汉理工大学,2006.[3]蒋波.基于遗传算法的带时间窗车辆路径优化问题研究[D].北京:北京交通大学,2010.[4]乔阳.基于改进遗传算法的图像分割方法[D].成都:电子科技大学,2013.[5]张家善,王志宏,陈应显,等.一种求解旅行商问题的改进遗传算法[J].计算机系统应用,2012,21(09):192-194,191.[6]王娜.求解TSP的改进遗传算法[D].西安:西安电子科技大学,2010.[7]于丰瑞.基于改进的遗传算法求解TSP问题[D].呼和浩特:内蒙古农业大学,2016.[8]闫茹.基于改进遗传算法的旅游路线优化研究与应用[D].银川:北方民族大学,2021.(上接第57页)[3]田浩杰,杨晓庆,翟晓雨.基于深度学习的线圈炮缺陷自动检测与分类[J].现代计算机,2022,28(10):86-91.[4]张浩,吴陈,徐影.基于深度学习在海缆表面缺陷检测中的应用[J].电脑知识与技术,2022,18(15):88-91.[5]陈宗仁,谢文达,余君,等.基于深度学习的金属机械零件表面缺陷检测方法[J].制造业自动化,2021,43(12):170-173.[6]王昊,李俊峰.基于深度学习的车载导航导光板表面缺陷检测研究[J].软件工程,2022,25(03):34-38,16.[7]刘瑞珍,孙志毅,王安红,等.基于深度学习的偏光片缺陷实时检测算法[J].太原理工大学学报,2020,51(01):125-130.[8]王鸣霄,范娟娟,周磊,等.基于深度学习的排水管道缺陷自动检测与分类[J].给水排水,2020,46(12):106-111.[9]施恺杰,王颖,王嘉璐,等.基于深度学习的电子换向器表面缺陷检测[J].网络安全技术与应用,2021(06):113-115.[10]于宏全,袁明坤,常建涛,等.基于深度学习的铸件缺陷检测方法[J].电子机械工程,2021,37(06):59-64.[11]LECUNY,BOTTOUL,BENGIOY,etal.Gradient-basedlearningappliedtodocumentrecognition[J].ProceedingsoftheIEEE,1998,86(11):2278-2324.[12]KRIZHEVSKYA,SUTSKEVERI,HINTONGE.Imagenetclassificationwithdeepconvolutionalneuralnetworks[J].CommunicationsoftheACM,2017,60(6):84-90.[13]SIMONYANK,ZISSERMANA.Verydeepconvolutionalnetworksforlarge-scaleimagerecognition[J].arXivpreprintarXiv:1409.1556,2014.[14]SZEGEDYC,LIUWei,JIAYanqing,etal.Goingdeeperwithconvolutions[C]//IEEEConferenceonComputerVisionandPatternRecognition(CVPR).Boston,MA,USA:IEEE,2015:1-9.[15]HEKaiming,ZHANGXiangyu,RENShaoqing,etal.Deepresiduallearningforimagerecognition[C]//IEEEConferenceonComputerVisionandPatternRecognition(CVPR).LasVegas,NV,USA:IEEE,2016:770-778.36第7期杨锦涛,等:基于遗传算法求解TSP问题的研究及Matlab实现Copyright©博看网. All Rights Reserved.。
遗传算法解决TSP问题的matlab程序
1.遗传算法解决TSP 问题(附matlab源程序)2.知n个城市之间的相互距离,现有一个推销员必须遍访这n个城市,并且每个城市3.只能访问一次,最后又必须返回出发城市。
如何安排他对这些城市的访问次序,可使其4.旅行路线的总长度最短?5.用图论的术语来说,假设有一个图g=(v,e),其中v是顶点集,e是边集,设d=(dij)6.是由顶点i和顶点j之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶7.点且每个顶点只通过一次的具有最短距离的回路。
8.这个问题可分为对称旅行商问题(dij=dji,,任意i,j=1,2,3,…,n)和非对称旅行商9.问题(dij≠dji,,任意i,j=1,2,3,…,n)。
10.若对于城市v={v1,v2,v3,…,vn}的一个访问顺序为t=(t1,t2,t3,…,ti,…,tn),其中11.ti∈v(i=1,2,3,…,n),且记tn+1= t1,则旅行商问题的数学模型为:12.min l=σd(t(i),t(i+1)) (i=1,…,n)13.旅行商问题是一个典型的组合优化问题,并且是一个np难问题,其可能的路径数目14.与城市数目n是成指数型增长的,所以一般很难精确地求出其最优解,本文采用遗传算法15.求其近似解。
16.遗传算法:17.初始化过程:用v1,v2,v3,…,vn代表所选n个城市。
定义整数pop-size作为染色体的个数18.,并且随机产生pop-size个初始染色体,每个染色体为1到18的整数组成的随机序列。
19.适应度f的计算:对种群中的每个染色体vi,计算其适应度,f=σd(t(i),t(i+1)).20.评价函数eval(vi):用来对种群中的每个染色体vi设定一个概率,以使该染色体被选中21.的可能性与其种群中其它染色体的适应性成比例,既通过轮盘赌,适应性强的染色体被22.选择产生后台的机会要大,设alpha∈(0,1),本文定义基于序的评价函数为eval(vi)=al23.pha*(1-alpha).^(i-1) 。
遗传算法解决TSP问题的Matlab程序
TSP问题遗传算法通用Matlab程序程序一:主程序%TSP问题(又名:旅行商问题,货郎担问题)遗传算法通用matlab程序%D是距离矩阵,n为种群个数%参数a是中国31个城市的坐标%C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模和耗费的时间而定%m为适应值归一化淘汰加速指数,最好取为1,2,3,4,不宜太大%alpha为淘汰保护指数,可取为0~1之间任意小数,取1时关闭保护功能,建议取0.8~1.0之间的值%R为最短路径,Rlength为路径长度function [R,Rlength]=geneticTSP(D,a,n,C,m,alpha)[N,NN]=size(D);farm=zeros(n,N);%用于存储种群for i=1:nfarm(i,:)=randperm(N);%随机生成初始种群endR=farm(1,:);subplot(1,3,1)scatter(a(:,1),a(:,2),'x')pause(1)subplot(1,3,2)plotaiwa(a,R)pause(1)farm(1,:)=R;len=zeros(n,1);%存储路径长度fitness=zeros(n,1);%存储归一化适应值counter=0;while counter for i=1:nlen(i,1)=myLength(D,farm(i,:));%计算路径长度endmaxlen=max(len);minlen=min(len);fitness=fit(len,m,maxlen,minlen);%计算归一化适应值rr=find(len==minlen);R=farm(rr(1,1),:);%更新最短路径FARM=farm;%优胜劣汰,nn记录了复制的个数nn=0;for i=1:nif fitness(i,1)>=alpha*randnn=nn+1;FARM(nn,:)=farm(i,:);endendFARM=FARM(1:nn,:);[aa,bb]=size(FARM);%交叉和变异while aa if nn<=2nnper=randperm(2);elsennper=randperm(nn);endA=FARM(nnper(1),:);B=FARM(nnper(2),:);[A,B]=intercross(A,B);FARM=[FARM;A;B];[aa,bb]=size(FARM);endif aa>nFARM=FARM(1:n,:);%保持种群规模为nendfarm=FARM;clear FARMcounter=counter+1endRlength=myLength(D,R);subplot(1,3,3)plotaiwa(a,R)程序二:计算邻接矩阵%输入参数a是中国31个城市的坐标%输出参数D是无向图的赋权邻接矩阵function D=ff01(a)[c,d]=size(a);D=zeros(c,c);for i=1:cfor j=i:cbb=(a(i,1)-a(j,1)).^2+(a(i,2)-a(j,2)).^2;D(i,j)=bb^(0.5);D(j,i)=D(i,j);endend程序三:计算归一化适应值%计算归一化适应值的子程序function fitness=fit(len,m,maxlen,minlen)fitness=len;for i=1:length(len)fitness(i,1)=(1-((len(i,1)-minlen)/(maxlen-minlen+0.0001))).^m;end程序四:交叉和变异的子程序%交叉算法采用的是由Goldberg和Lingle于1985年提出的PMX(部分匹配交叉) function [a,b]=intercross(a,b)L=length(a);if L<=10%确定交叉宽度W=9;elseif ((L/10)-floor(L/10))>=rand&&L>10W=ceil(L/10)+8;elseW=floor(L/10)+8;endp=unidrnd(L-W+1);%随机选择交叉范围,从p到p+Wfor i=1:W%交叉x=find(a==b(1,p+i-1));y=find(b==a(1,p+i-1));[a(1,p+i-1),b(1,p+i-1)]=exchange(a(1,p+i-1),b(1,p+i-1)); [a(1,x),b(1,y)]=exchange(a(1,x),b(1,y));endfunction [x,y]=exchange(x,y)temp=x;x=y;y=temp;程序五: 计算路径的子程序%该路径长度是一个闭合的路径的长度function len=myLength(D,p)[N,NN]=size(D);len=D(p(1,N),p(1,1));for i=1:(N-1)len=len+D(p(1,i),p(1,i+1));end程序六:用于绘制路径示意图的程序function plotaiwa(a,R)scatter(a(:,1),a(:,2),'x')hold onplot([a(R(1),1),a(R(31),1)],[a(R(1),2),a(R(31),2)])hold onfor i=2:length(R)x0=a(R(i-1),1);y0=a(R(i-1),2);x1=a(R(i),1);y1=a(R(i),2);xx=[x0,x1];yy=[y0,y1]; plot(xx,yy) hold onend。
用MATLAB求解TSP问题的一种改进遗传算法
第13卷 第4期厦门理工学院学报Vol .13 No .4 2005年12月Journal of Xiamen University of Technol ogyDec .2005 [收稿日期]2004-04-15 [修回日期]2005-06-10[基金项目]福建省自然科学基金资助项目(A0410005)[作者简介]肖磊(1979-),男,湖北十堰人,在读硕士研究生,从事模糊控制和人工智能方向的研究.用MAT LAB 求解TSP 问题的一种改进遗传算法肖 磊,张阿卜,徐文进(厦门大学自动化系,福建厦门361005)[摘 要]TSP 问题是遗传算法得以成功应用的典型问题.提出一种改进的义叉和变异算子来解决TSP问题,并给出其算子的MAT LAB 程序.通过实验,发现改进的算法比传统算法收敛速度更快,适应值更优,说明改进算法是有效的.[关键词]TSP;遗传算法;贪婪算法;MAT LAB[中图分类号]TP 301.6 [文献标识码]A [文章编号]1008-3804(2005)04-0038-05 1 引言遗传算法(G A )是一种全局寻优搜索算法,它首先对问题的可行解进行编码,组成染色体,然后通过模拟自然界的进化过程,对初始种群中的染色体进行选择、交叉和变异,通过一代代进化来找出最优适应值的染色体来解决问题.遗传算法具有很强的全局搜索能力和较强的自适应性,适合解决连续变量函数优化问题和离散变量的优化组合问题[1].旅行商问题(TSP )是一个典型的优化组合问题,它需要求出旅行商从某一城市出发经过所有城市所走路程的最短路径,其可能的路径数与城市个数成指数关系增长.目前应用遗传算法解决TSP 问题,主要要解决编码问题和算子的设计问题.编码方式约束了运算空间的大小,好的编码方式可以压缩求解空间,提高运算效率.常见的编码方式有二进制编码,实值编码,自然编码等[2]本文主要讨论自然编码方式下算子的改进及其MAT LAB 的程序实现.针对TSP 问题,提出贪婪交叉算子和倒位变异算子来加快算法的收敛速度,同时又不易陷入局部最优,从而较好地解决了群体的多样性和收敛速度的予盾. 2 算法设计及其程序实现用0到n 这n +1个自然数来编码n +1个城市,通过这n +1个编码的不同排列来表示所走的路径.用MAT LAB 的不同程序模块来实现算法的各个重要步骤.主要有:求城市间距离(qiujuli .m )、产生初始种群(start .m )、选择算子(select .m )、交叉算子(cr oss .m )、变异算子(mutate .m ).2.1 初始种群的产生对于n 个城市的问题,每个个体即每个解的长度为n ,用s 行,t 列的pop 矩阵表示初始群体,s 表示初始群体的个数,t 为n +1,矩阵的每一行的前n 个元素表示城市编码,最后一个元素表示这一路径的长度.start .m 程序如下: Functi on [pop ]=start (s ,t )Pop =zer os (s ,t );For i =1∶s%逐行产生初始路径 Pop (i ,1∶t -1)bianma (t -1); 第4期肖磊等:用MAT LAB求解TSP问题的一种改进遗传算法EndFuncti on[a]=bianma(k) %随机产生解空间的一个无重复城市序列a=zer os(1,k); u=30;aa=0∶u-1;For i=1∶k Point=r ound(rand3(u-i))+1; a(i)=aa(Point); aa(point)=[];End 考虑到初始群体的多样性,根据城市的数目大小来设定初始群体的数目.2.2 适应度函数设计和选择算子在TSP的求解中,可以直接用距离总和作为适应度函数.个体的路径长度越小,所得个体越优越,以pop矩阵的每一行最后一个元素作为个体适应值.求适应值的qiujuli.m程序略.计算出初始群体的适应值后,就要进行选择操作,选择就是在适应度评估的基础上,用群体中适应值最小的k个个体直接替换k个适应值最大的个体,进行初步优化.Select.m的程序实现略.2.3 交叉算子设计交叉算子的设计直接影响到种群收敛速度和最优解的得到,在TSP问题中几种有代表性的交叉算子有部分匹配交叉,顺序交叉,边重组交叉、插入交叉和循环交叉等,这些交叉算子都可以产生新个体,又不出现非法回路.但是,有些算子在产生新个体的过程中没有目的性,不能很好的继承父代的优良特性,大大的影响了种群的收敛速度.受贪婪算法的启发,本文设计一种有目的使适应值上升的交叉算子.已知两个父代p1(m11, m12,m13,…,m1n),p2(m21,m22,m23,…,m2n),算法产生后代p1′和p2′的过程如下:(1)随机产生一个城市d作为交叉起点,把d作为p1′和p2′的起始点.(2)分别从p1和p2中找出d的右城市dr1和dr2,并计算(d,d r1)和(d,d r2)的距离j1和j2.(3)如果j1<j2,则把dr1作为p1′的第二个点,从p1和p2中删除d,并且把当前点改为dr1.转步骤(5).(4)如果j1>j2,则把d r2作为p1′的第二个点,从p1和p2中删除d,并且把当前点改为dr2.(5)若此时p1和p2的个数为1,结束,否则回到第二步继续执行.同理,把第二步中的右城市改成左城市d11和d12,通过计算(d,d11)和(d,d12)的距离并比较大小来确定子代p2′.表1 6城市距离表城市12345610817201810280101720153171001012204201710010165182012100961015201690若随机选择从城市6开始,则根据表1应用上述算子产生的子代为p1′(621543),p2′(612345),val(p1)=72,val(p2)=67,val(p1′)=61,val(p2′)=48,可见交叉之后的适应值得到比较大的优化.由上例可见这种用距离表来选择子代基因的交叉算子可以使代在很大程度上继承父代优良基因,迅速优化适应值,达到交叉的目的.MAT LAB的交叉模块cr oss.m程序如下: Functi on[pop]cr oss(pop)[s,t]size(pop);data;%取城市位置数据dist m a=dists(mm,mm);%生成距离表pop1=pop;%保存原群体矩阵m=zer os(1,31);%初始化交叉后第一个个体n=zer os(1,31);%初始化交叉后第二个个・93・厦门理工学院学报2005年体f or i =1∶2:S %每两行进行交叉操作x 1=pop (i ,∶);%取出要交叉的两行进行右交叉y 1=pop (i +1,∶);x 2=pop (i ,∶);%取出要交叉的两行进行左交叉y 2=pop (i +1,∶);c 1=r ound (rand 329);%随机产生交叉起点c 2=c1;m (1)=c 1;n (1)=c 2;j =2;while size (x1,2)>2%交叉结束的条件1=find (x 1==c 1);h =find (x 2==c 2);I f l ==32-j %若为最后一个城市,则右城市为第一个城市 lr =1;Else lr =l +1;%其他情况直接加一EndI f h ==1%若为第一个城市,则左城市为最后一个城市hl =32-j ;Elseh 1=h -1;Endq =find (y 1==c 1);z =find (y 2==c 2);I f q ==32-j %找出第二个父代的右城市qr =1;Else qr =q +1;EndI f z ==1%找出第二个父代的左城市z 1=32-j ;Elsez 1=z -1;End I fdist m a (c 1+1,x 1(lr )+1)<dist m a (c 1+1,y 1(qr )+1)%比较两父代交叉点与右城市的距离,取距离小的城市为子代的下一个点m (j )=x 1(lr );c 1=x 1(lr );Elsem (j )=y1(qr );c 1=y 1(qr );m (j )=y 1(qr );c 1=y 1(qr );Endx 1(1)=[];%删除父代中已经选中的点y 1(q )=[];I fdist m a (c 2+1,x 2(h l )+1)<dist m a (c 2+1,y 2(z l )+1)%比较两父代交叉点与左城市的距离,取距离小的城市作为第二子代的下一点n (j )=x 2(h l );c 2=x 2(h l );Elsen (j )=y 2(z l );c 2=y 2(z l );Endx 2(h )=[];%删除父代中已经选中的点y 2(z )=[];j =j +1;Endpop1(i ,:)=m ;%得到交叉后的群体矩阵pop1(i +1,:)=n ;Endpop1=qiujuli (pop1);%求出交叉种群中个体的适应值For i =1∶s %逐行比较,保留适应值较小的个体I f pop1(i,t )<pop (i,t )pop (i ,:)=pop1(i ,:);End End 2.4 变异算子设计对于TSP 问题,已知的变异算子有交换变异,插入变异和倒位变异等.这些变异算子除了倒位变异外,都没有考虑边的邻接关系,不能保留原有的边的邻接关系,这样就不能把巡回路线上的优良性能较好的遗传到下一代,也就不能提高寻优速度.采用一种贪婪倒位变异,首先确定一个变异起始点c 1,然后在除去起始点右侧的点的那些后来的点中找到与起始点距离最短的点c 2,最后逆序存放c 1到c 2的那些城市编码顺序,完成变异.同时根据适应值来评估变异结果,如果倒位后该个体适应值没有优化,则对该个体不进行变异操作.・04・ 第4期肖磊等:用MAT LAB 求解TSP 问题的一种改进遗传算法倒位原理是:先随机选择父辈个体的两个变异点,然后对一个点之间的城市编码逆序存放,产生变异后的个体.例如,父代个体为p (2651374),随机选择的变异点为6,通过距离表得到1、3、7、4中距离6最近的是7,则把7作为第二变异点,交换它们之间的城市顺序,变异后的个体为p 1(2673154).Mutate .m 具体程序略. 3 仿真实验与结果分析以文献中几个典形的TSP 问题为例,给出城市的位置坐标,并用MAT LAB 编程实现仿真,分析实验结果.3.1 30个城市TSP 问题所给中国30个城市坐标如下:china =(877;9138;8346;7144;6460;6858;8369;8776;7478;7171;5869;5462;5167;3784;4194;299;764;2260;2562;1854;450;1340;1840;2442;2538;4126;4521;4435;58;35;6232)这里设定交叉概率Pc =0.9,变异后概率Pm =0.2,初始种群个数s =250,选择个数k =20.主程序(main .m )略.图1是文献[3]的遗传算法遗传50代后的路径图,图中还有很多交叉路径,所得最短距离为473.4999,.图2是改进遗传算法在遗传50代后得路径图,图形中已经没有交叉,所得最短距离为425.0778,已经非常接近最优结果.图3中,蓝色的线代表文献[3]遗传算法的最优个体距离总和随遗传代数的变化,红线代表改进的遗传算法的最优个体距离总和随代数的变化.可见,改进的遗传算法具有很高的收敛速度,不到30代就已经非常接近最优值.而老的遗传算法需要3000代以上才比较接近最优值.通过文献[3]知道这个TSP 问题的最优结果是423.7601.实验发现,用改进的遗传算法进行10次实验,每次都是50代的遗传代数,有8次得到与本问题的最优值非常接近的424.8693.3.2 50个城市TSP 问题所给50个城市的坐标见文献[4]Cites =[1075;369;9178;……7390;]・14・厦门理工学院学报2005年图4是改进算法在进化50代后的路径图,所得最优路径长551.8073,这个结果比文献[4]所得结果561.8513要好的多.3.3 中国旅行商问题(CTSP )所给中国31城市相对坐标见文献[5],Chinacites =[13042312;36391315;41772244;……23702975;]图5是改进算法运行50代后的最优路径,所得最短路径长15387,该路径与文献[5]中的最优路径非常接近,路径长也非常接近最优值15309. 4 结论提出一种基于TSP 问题的改进的遗传算法.考虑到TSP 问题的特点,采用一种受贪婪算法启发的新的交叉算子和变异算子,即极大地提高了算法的收敛速度又保证了最优解的得到,而且具有较好的鲁棒性.这种算法思想不仅可以用在TSP 问题,还可以很好地应用于其他类似优化问题.[参考文献][1]王小平,曹立明.遗传算法-理论、应用及软件实现[M ].西安:西安交通大学出版社,2002.[2]李敏强,寇纪淞,林丹,等.遗传算法的基本理论与应用[M ].北京:科学出版社,2002.[3]高经纬,张煦,李峰,等.求解TSP 问题的遗传算法实现[J ].计算机时代,2004,(2):19221.[4]熊伟清,郭举良,魏平.一种快速求解TSP 问题的遗传算法[J ].微电子学与计算机,2004,(1):19222.[5]李明海,邢桂华.用MAT LAB 实现中国旅行商问题的求解[J ].微计算机应用,2004,(2):2182222.An I m proved Geneti c A lgor ith m for TSP Proble m Ba sed on M ATLABX I A O Lei,ZHANG A 2bu,XU W en 2jin(Aut omati on Depart m ent,Xia men University,Xia men 361005,China )Abstract:TSP p r oble m is a typ ical p r oble m t o which Genetic A lg orithm can be successfully used .T o s olve the questi on of many G A s on searching TSP p r oble m ,an i m p r oved G A is suggested which gives the MAT LAB p r ogra m its cr oss over operat or and mutati on operat or .Test shows that the i m p r oved G A has better perf or mance than the traditi onal G A on the convergence s peed and the fitness value .The i m p r oved G A obtains a better re 2sult .Key words:TSP;Genetic A lgorith m;Greed A lgorith m;MAT LAB・24・。
遗传算法求解TSP问题的MATLAB实现
2007年6月韶关学院学报#自然科学Jun.2007第28卷第6期Journal of Shaoguan University#Natural Science Vol.28No.6遗传算法求解TS P问题的M ATLAB实现温清芳(德化陶瓷职业技术学院,福建德化362500)摘要:以遗传算法求解旅行商问题(TSP)为例,提出一种改进的交叉和变异算子,深入讨论了各个遗传算子的程序实现,并给出其算子的M A TL AB程序编码,最后用5个城市的非对称TSP进行仿真分析.结果表明,改进的算法比传统算法收敛速度更快,适应值更优,说明改进算法是有效的,证实T SP问题是遗传算法得以成功应用的典型例子.关键词:旅行商问题;遗传算法;G refenstettet编码;M A TLA B程序中图分类号:O242文献标识码:A文章编号:1007-5348(2007)06-0018-05尽管对遗传算法的研究方兴未艾[1],但因其基础理论难有突破性进展,要想知道其效果如何就只有利用计算机进行模拟.目前大多采用C语言编写这类程序[2].C语言作为一种高效的编程语言有它的许多优点,但对于编写遗传算法(G A)程序来说,M A TL AB语言则更为合适.遗传算法是一种全局寻优搜索算法,它首先对问题的可行解进行编码,组成染色体,然后通过模拟自然界的进化过程,对初始种群中的染色体进行选择、交叉和变异,通过一代代进化来找出最优适应值的染色体来解决问题.它具有很强的全局搜索能力和较强的自适应性,适合解决连续变量函数优化问题和离散变量的优化组合问题[2].它比用C等其它高级语言要简单、灵活、快捷,程序篇幅也将缩小许多.旅行商问题(TSP)是一个典型的优化组合问题,可具体描述如下:已知n个城市之间的相互距离,现有一个推销员从某一城市出发,必须遍访这n个城市,并且每个城市只能访问一次,最后又必须返回到出发城市.如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短[2,3].事实上,很多实际问题,如电路布线、输油管路铺设、连锁店的货物配送路线等,经过简化处理后都可建模为TSP问题[4].因而,对求解TSP问题方法的研究便具有重要的应用价值.由于TS P问题的可行解数目与城市数目n是成指数型增长的,是一个NP难问题,因而一般只能近似求解,遗传算法(G A)是求解该问题较为有效的方法之一,目前应用遗传算法解决TS P问题,主要解决编码问题和算子的设计问题.采用所遍历城市的顺序排列来表示各个个体的编码串是最自然的编码方法,但它对应的交叉和变异运算实现起来较困难,因为常规的交叉和变异运算会使群体中产生一些不满足问题的约束条件或无意义的巡回路线.为克服这一缺点,可以采用Gref enstettet编码法[5].本文主要针对TSP问题,讨论自然编码方式下算子的改进及其M A TL AB的程序实现,较好地解决了群体的多样性和收敛速度的予盾.1Grefenstettet编码法的描述对于一个TSP问题的城市列表W,假定每个城市的一个访问顺序为T=(t1,t2,t3,,,t n),规定每访问完一个城市,就从城市列表中将该城市去掉,则用第i(i=1,2,3,,,n)个访问的城市t i在所有未访问城市列表W\{t1,,,t i-1}中的对应位置序号g i(1F g i F n-i+1)就可表示具体访问哪个城市,如此这样直到处理完W中所有的城市.将全部g i顺序摆列在一起得到一个列表:G=(g1,,,g n)就可表示一条巡回路线,它即为遗传算法中的一个个体的基因.例如:收稿日期:2006-11-13作者简介:温清芳(1959-),女,福建德化人,德化陶瓷职业技术学院高级讲师,主要从事高校数学教学与研究.W =(123456789101112131415), 则Path =(815210743111461295131),对应Chrom =(8142863257343221).这种编码法的优点在于任意的基因型个体都对应着一条有实际意义的巡回路线,因此可使用常规的交叉算子对其进行操作.2TSP 问题的数学模型假设有一个图G =(V ,E ),其中V 是顶点集,E 是边集,设D =(d ij )nxn 是顶点i 和顶点j 之间的距离所组成的距离矩阵,TSP 问题就是求出一条通过所有顶点且每个顶点只通过一次的具有最短距离的回路.若d ij =d ji (i X j )),称为对称TSP 问题,否则称为非对称TSP 问题.若对于城市W =(v 1,v 2,,,v n )的一个访问顺序为T =E {t 1,t 2,t 3,,,t n },其中t i I V ={1,,,n },且t n -1=t 1,则TSP 问题的数学模型为:min L =E ni =1d(t i t i +1),其中,d (t i t i +1)表示顶点t i 和顶点t i +1之间的距离.3M A TLAB 6.5的实现G A 中的控制参数如下:染色体数Popsiz e,最大代数M axgen,城市数目N cities ,交叉率P c ,距离矩阵D ,城市列表W .3.1 种群的初始化编码:Func tion Chrom=TSPinitialize (Popsiz e,N cities )for i =1:PopsizeChrom (i ,1)=1;%推销员从城市1出发for j =2:N citiesChrom (i ,j )=round (rand *(N cities -j ))+1;endend解码:Func tion pop=TSPdec ode (Popsize,N cities ,Chrom,W )For i =1:Popsizetemp W =W ;for j =1:N citiespop (i ,j )=temp W (chrom(i ,j ));for k =(C hrom(i ,j )):(N cities -j )temp W (k )=temp W (k +1)endend end; 第6期温清芳:遗传算法求解TSP 问题的M A TL AB 实现#19 #计算目标函数:Function rpop=rotatepop(pop)for i=1:Popsizerpop=[pop(i,2:N cities),pop(i,1)]endFunction cost=TS Pcost(Popsize,pop,rpop)For i=1:PopsizeCost(i)=Sum(diag(D(pop(i,:).)(pop(i,:).)));end;3.2遗传操作设计选择:采用具有排名的转盘式选择算子.按照个体目标函数值从大到小排列cost(1)\cost(2)\...\ cost(Popsize),然后根据线性函数计算选择概率:P i=1Popsize(a-b#iPopsize+1)i=1,2,,,Posize,式中:i为排名序数,a,b是常数,1F a F2,b=2(a-1),通常a= 1.1.然后按照转盘方式选择父体进行遗传操作:先产生一个[0,1]内的随机数r,如果P0+...+P i-1<r [P1+......P i(P0=0),则选择i,否则随机选一染色体.Function Chrom=select(Popsize,cost,chrom)B=2*(a-1);[fit,I]=sort(-cost);for i=1:PopsizeP fit(i)=(a-b*i P(Popsinx+1))P Popsize;endpfit=cum Sum(pfit);rs=rand(1,Popsize);for i=1:Popsizeif rs(i)<=pfit(i),Chrom(i,:)=Chrom(I(i),:);else Chrom(I,:)=C hrom((round*Popsize)+,:);endend;交配:采用常规单点交叉.将选择中产生的种群做为父代,两两组队,以交叉率发生交叉操作:若发生交叉操作,在[1,N cities-1]区间随机确定一个交叉位置,进行该位后的所有基因对换,否则不做任何处理.Function Chrom=crossover(Chrom)For i=1:Popsize P2If rand<P cjcross=fix(rand*(N cities-1))+1;%jcross为交叉位P1=Chrom(2*i-1;:),P2=Chrom(2*I;:)Chrom(2*i-1,;:)=[P1(1:jcross),P1((jcross+1):N cities)];Else Chrom(2*i-1,:)=chrom(2*i-1,:);#20#韶关学院学报#自然科学2007年Chrom (2*i :),=Chrom (2*i ,:)endend;变异:传统的遗传算法的基因变异概率很小,在遗传进化过程中,优势个体会越来越多,并在种群中占据大多数位置,到了后期,种群的个体极为相似,就会导致早熟收敛.为解决该弊端,当两个个体太相似时就进行变异操作:随机产生一个染色体替换当作比较的两个个体中的较差者.Function Chrom=popmut (Chrom,cost)for i =1:Popsize P 2sameidx=[Chrom (i *i -1==Chrom(2*i ,:)];dif fidx=find (sa meidx==0);if length (diffidx)<=2if c ost (2*i -1)<cost(2*i )for j =2:N citiesChrom (2*i ,j )=round (rand*(N cities -j ))+1;else f or j =2:N cities Chrom (2*i -1,j )=round (rand *(N cities -j ))+1;endend;4仿真试验以下以5个城市的非对称TSP 问题来说明上述算法的可行性.图1 G A 流程图G A 的流程图如下:M A TL AB 主程序:Popsize=10;Maxgen=20;N cities =5;P c =0.8;D=[061848;701737;44045;201924022;881660];W =[1:N cities ];Gen=0;Chrom=TSPinitialize (Popsize,N cities );Pop=T SPdecode (Popsiz e,N cities ,Chrom,W );Rpop=rotatepop (pop);Cost=TS Pcost (Popsize,pop,rpop);While gen<mazgenGen=gen+1;Chrom=select (Popsize,pfit,Chrom);Chrom=crossve (Chrom);pop=TSPdecode (Popsize,N cities ,Chrom,W )rpop=rotatepop (pop);cost=TSPc ost (Popsize,pop,rpop);Chrom=popmut (Chrom,cost,Popsize,N cities ,P c ,D ) 第6期温清芳:遗传算法求解TSP 问题的M A TL AB 实现 #21 ##22#韶关学院学报#自然科学2007年pop=TSPdecode(Popsize,N cities,Chrom,W);rpop=rotatepop(pop);cost=TSPc ost(Popsize,pop,rpop);[c ostmin,idx]=min(cost);tourmin=pop(idx,:);tourcost(gen)=costmin;disp([num2str(gen).minimum trip lengths=.num2str(costmin)];end;x=[1:M axgen];y=tourmin;plot(x,y)得到最优值为46,最优解为14325,在第2代就达到最优解.5结论本文提出一种基于TSP问题的改进的遗传算法,结合TSP问题的特点,采用一种受贪婪算法启发的新的交叉算子和变异算子,极大地提高了算法的收敛速度,同时又保证了最优解的得到,这种算法思想不仅可以用在TSP问题,还可以很好地应用于其他类似优化问题.参考文献:[1]肖磊,张阿卜,徐文进.用MA TL AB求解TSP问题的一种改进遗传算法[J].厦门理工学院学报,2005,13(4):38-42.[2]陈国梁,王煦法,庄镇泉,等.遗传算法及其应用[M].北京:人民邮电出版社,1996:137-139.[3]Fo gel D B.Applying evolutionary pro gramming to selected traveling salesman problems[J].Cy bernetics and systems,1993,24:27-36.[4]邢桂华.用MA TL AB实现中国旅行商问题的求解[J].微计算机应用,2004(2):218-222.[5]Grefenstette J.Genetic algori thms for the trav eling salesman problem in:proc.of1int.couf.o n genetic algori thms and their applicatio ns[J].L aw rence erlbaun associatio n,1985,23:166-168.Realization of MATLAB on resolving the traveling salesmanproblem by virtue of genetic algorithmsWEN Qing2fang(College of Porcelain Vocation Technology,D ehua362500,Fujian,China)Abstract:This paper has resolved the traveling salesman problem(TSP)by virtue of genetic algorithms(G A),all im2 proved G A is suggested which gives the M A TL AB program its crossover operator and mutation operator.It also solved the question of many G As on searching TSP proble m and gives the relative codes in M A TL AB6.5.Finally,numerical simu2 lations of non-symmetric five-city TSP establish the ef ficiency of the procedure in this paper.Test sho ws that the im2 proved G A has better performance than the traditional G A on the convergence speed and the fitness value.The improved G A obtains a better result.TSP proble m is a typical problem to which Genetic Algorithm can be successfully used. Key words:traveling salesman problem;genetic algorithms;G refenstettet codes;M A TL AB progra m(责任编辑:王桂珍)。
用遗传算法求解中国34个省会TSP的问题
用遗传算法求解中国34个省会TSP的问题题目:用遗传算法求解中国34 个省会TSP 问题源代码分享在本人博客:2012-1-17智能控制技术及其应用大作业专业: 控制工程学号:XXXXXX姓名:XXX用遗传算法求解中国34 个省会TSP 问题一、TSP 问题的描述旅行商问题(TSP)可以具体描述为:已知n 个城市之间的相互距离,现有一个推销员从某一个城市出发,必须遍访这n 个城市,并且每个城市只能访问一次,最后又必须返回到出发城市,如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短。
现给出中国34 个省会数据,要求基于此数据使用遗传算法解决该TSP 问题。
图1 中国34 省会位置city =1.西藏2.云南3.四川4.青海5.宁夏6.甘肃7.内蒙古8.黑龙江9.吉林10.辽宁11.北京12 天津13.河北14.山东15.河南16.山西17. 陕西18.安徽19.江苏20.上海21.浙江22.江西23.湖北24.湖南25,贵州26. 广西27.广东28.福建29.海南30.澳门31.香港32.台湾33.重庆34.新疆像素坐标如下:Columns 1 through 11100 187 201 187 221 202 258 352 346 336 290211 265 214 158 142 165 121 66 85 106 127Columns 12 through 22297 278 296 274 265 239 302 316 334 325 293135 147 158 177 148 182 203 199 206 215 233Columns 23 through 33280 271 221 233 275 322 250 277 286 342 220216 238 253 287 285 254 315 293 290 263 226Column 3410477二、遗传算法的介绍2.1 遗传算法遗传算法的基本原理是通过作用于染色体上的基因寻找好的染色体来求解问题,它需要对算法所产生的每个染色体进行评价,并基于适应度值来选择染色体,使适应性好的染色体有更多的繁殖机会,在遗传算法中,通过随机方式产生若干个所求解问题的数字编码,即染色体,形成初始种群;通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择高适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下一代新的种群,对这个新的种群进行下一轮的进化。
用matlab求解tsp问题的一种改进遗传算法
用matlab求解tsp问题的一种改
进遗传算法
1.遗传算法:
遗传算法是一种仿生算法,它是根据自然进化规律模拟的进化过程,是一种基于群体智能的搜索方法。
主要包括了四个步骤:初始化、选择、交叉和变异。
2.Matlab求解TSP问题的一种改进遗传算法:
(1)首先,利用matlab的rand函数随机产生多条可行路径,作为遗传算法的初始种群;
(2)然后,对初始种群中的每条路径,计算其适应度函数,也就是路径的总距离,并将它们排序;
(3)接着,使用改进的轮盘赌算法,在当前种群中选择适应度较高的个体,作为新一代种群;
(4)然后,对新一代种群中的每条路径进行交叉运算,产生新的路径;
(5)最后,以一定的概率对新产生的路径进行变异,将变异后的路径加入到新一代种群中,重复上述步骤,直到满足停止条件,便可找到最优解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
遗传算法求解TSP 问题MATLAB 实现
摘要:旅行商问题(TSP )是一个经典的优化组合问题,本文采用遗传算法来求解TSP 问题,深入讨论了遗传算法解决TSP 问题的求解过程,并通过MATLAB 对算法进行了实现,最后对实验结果进行分析,并与粒子群算法进行对比和分析。
关键字:TSP ;遗传算法;粒子群算法
0.引言
旅行商问题是一个经典的优化组合问题,它可以扩展到很多问题,如电路布线、输油管路铺设等,但是,由于TSP 问题的可行解数目与城市数目N 是成指数型增长的,是一个NP 难问题,因而一般只能近似求解,遗传算法(GA )是求解该问题的较有效的方法之一,当然还有如粒子群算法,蚁群算法,神经网络算法等优化算法也可以进行求解。
遗传算法是美国学者Holland 根据自然界“物竞天择,适者生存”现象而提出的一种随机搜索算法,本文采用MATLAB 来实现遗传算法解决TSP 问题。
1.旅行商问题
旅行商问题可以具体描述为:已知n 个城市之间的相互距离,现有一个推销员从某一个城市出发,必须遍访这n 个城市,并且每个城市只能访问一次,最后又必须返回到出发城市,如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短。
用图论术语来表示,就是有一个图g=(v,e),其中v 是定点5,e 是边集,设d=(dij)是有顶点i 和顶点j 之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶点且每个顶点只通过一次的最短距离的回路。
若对与城市v={v1,v2,v3…vn}的一个访问顺序为t=(t1,t2,t3…,tn),其中ti ∈v(i=1,2,..n),且记tn+1=t1,则旅行上问题的数学模型为式1:
min ((),(1))(1,....,)I d t i t i i n δ =+ = (1)
2.遗传算法与粒子群算法
2.1遗传算法
遗传算法的基本原理是通过作用于染色体上的基因寻找好的染色体来求解问题,它需要对算法所产生的每个染色体进行评价,并基于适应度值来选择染色体,使适应性好的染色体有更多的繁殖机会,在遗传算法中,通过随机方式产生若干个所求解问题的数字编码,即染色体,形成初始种群;通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择高适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下一代新的种群,对这个新的种群进行下一轮的进化。
2.2遗传算法的过程
遗传算法的基本过程是:
1. 初始化群体。
2. 计算群体上每个个体的适应度值
3. 由个体适应度值所决定的某个规则选择将进入下一代个体。
4. 按概率Pc 进行交叉操作。
5. 按概率Pm 进行变异操作。
6. 没有满足某种停止条件,则转第2步,否则进入第7步。
7.输出种群中适应度值最优的染色体作为问题的满意解或最优界。
停止条件有两种:一是完成了预先给定的进化代数则停止;二是种群中的最优个体在连续若干代没有改进或平均适应度在连续若干代基本没有改进时停止。
遗传算法过程图如图1:
开始
初始化种群
计算适应度值
选择操作
交叉操作
变异操作
条件停止
适应度最优群体
结束
图1:遗传算法过程框图
3.遗传算法MATLAB代码实现
遗传算法中控制参数如下:Clist城市的坐标,dislist城市距离矩阵,inn初始种群的大小,gnmax最大代数,pc交叉概率,pm变异概率。
3.1开始准备
先读入文件,读入574个城市坐标读入矩阵,并计算城市距离。
如代码:
3.2初始化种群
遗传算法对求解问题本身是一无所知的,这里采用随机生成初始化种群,如下:
计算适应度值,
适应度值是根据适应度函数来计算的,如适应度函数代码如下:
3.3选择操作
选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代产生后代个体,如代码:
3.4交叉操作
许多生物的繁衍是通过染色体的交叉完成的,在遗传算法中使用这一概念,并把交叉作为遗传算法的一个操作算子,其实现过程是对选中用于繁殖下一代的个体,随机地选择两个个体的相同位置,按交叉概率Pc,在选择的位置实行交换,目的在于产生新的基因组合,即新的个体(这里由于源代码太多不列出)
3.5变异操作
是按一定概率随机改变某个个体的基因值,以变异概率Pm对某个个体的某些位执行变异,在变异时,对执行变异的串的对应位求反,如代码:
最后根据具体条件判断是否返回或是继续,最后当满足条件是输出适应度最优群体。
4实验分析
实验硬件环境为普通笔记本电脑,内存2GB,CPU频率2.0GHz。
软件环境为Windows XP Professional SP3操作系统,Matlab7.1。
实验对象是574个城市的旅行商问题。
读入574个城市的坐标,如图1:
图1:574个城市坐标的两种显示
4.1.改变种群数量的对比
当参数设置为种群大小为100,最大迭代次数2000,交叉概率0.85,变异概率为0.05的时候对574个城市求解,如图2。
当参数设置为种群大小为50,最大迭代次数2000,交叉概率0.85,变异概率为0.05的时候对574个城市求解,如图3。
当参数设置为种群50,最大迭代次数为5000,交叉概率0.85,变异概率为0.05的时候
对574个城市求解,如图4.
图2:种群为100最大迭代次数为2000的TSP问题求解结果
图3:种群为50最大迭代次数为2000的TSP问题求解结果
图4:种群为50最大迭代次数为5000的TSP问题求解结果
通过上述种群大小可知迭代越大求解的结果越优化,但是确花费了大量时间,种群越大
求解的结果更优化,所以在时间和求解优化解要权衡,而且改变交叉概率和变异概率也同样影响着收敛速度和优化解的得到。
另外从图可以看出,算法迭代并没有稳定,那是因为迭代的次数不够,造成解的搜索没有稳定和优化,迭代次数一般可以上万次
4.2粒子群算法求解
当参数为50个粒子迭代10次,局部优化使用2-Opt算法,如图4。
图5:50个粒子10次迭代的粒子群TSP问题求解结果
当参数为50个粒子迭代30次,局部优化使用2-Opt算法,如图5。
图6:50个粒子30次迭代的粒子群TSP问题求解结果
当参数为30个粒子迭代30次,局部优化使用2-Opt算法,如图6。
图7:30个粒子30次迭代的粒子群TSP问题求解结果
根据实验结果50粒子10迭代时最短路径为42176,50个粒子30次迭代是最短路径为
41619,30个粒子30次迭代时最短路径为40809,30个粒子30次迭代时解最优,可以看出最优解的得出并不是只受迭代次数或是粒子数影响,在其它条件不变的情况下,两种都对解的求解有影响,如果考虑其它因素的话,求解更加复杂。
4.3 遗传算法同粒子群算法对比
取两个实验的最优解结果,即50粒子群30次迭代的粒子群算法同种群大小为1200的遗传算法的对比,如图8,图9.
图8:30个粒子30次迭代的粒子群TSP问题求解结果
图9:种群大小为100迭代2000次的TSP问题求解结果
采用两种算法对同一TSP问题进行求解,从实验明显可见粒子群算法比遗传算法得到的解更加优化,而且所花费的时间也比遗传算法少得多。
造成这种实验结果的原因可能是算法本身的适应问题,可能是粒子群算法更适合解此类问题;另一方面,可能是遗传算法的参数设置不能达到最优解,因为遗传算法的种群大小,最大迭代次数,交叉概率和变异概率的设定对算法的收敛和最优解的得到有很大影响,可能是我们设定的这些参数不够准确,如在遗传算法中我们只设置了2000次的最大迭代次数,明显不能满足要求,要得到更好的优化解,就必须设置好算法的参数,目前有许多研究都在改进算法,以达到满意的效果。
5总结
本文采用MATLAB实现遗传算法求解TSP问题,并根据实验结果进行了分析,遗传算法是一种智能优化算法,它的实现有些关键点,一是串的编码方式,本质就是问题编码,串长度及编码形式对算法收敛影响极大;二是适应函数的确定,这是选择的基础;三是自身参数的设定,其中重要的是群体大小,最大迭代次数,交叉概率和变异概率,通过实验我们可以看到最大迭代次数对问题求解的精度有影响,交叉概率和变异概率的设定对问题的收敛速度和求解精度都有极大的影响,目前很多研究都是根据具体的领域问题,改进交叉算子,变异算子,寻找最优的参数设定来提高算法收敛速度和保证最优解的得到,对算子的改进和参数值的设定这是将来的研究工作。