ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:52.03KB ,
资源ID:7331992      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7331992.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(应用GA和PSO算法求解10城市TSP问题.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

应用GA和PSO算法求解10城市TSP问题.docx

1、应用GA和PSO算法求解10城市TSP问题应用GA和PSO算法求解10城市TSP问题1 问题描述旅行团计划近期在城市A、B、C、D、E、F、G、H、I和J共10个城市间进行一次周游旅行,为了尽量节省旅行开支,希望能找到一条里程数最少或相对较少的旅行路线。问题1,给定10个城市之间的公路里程如表1所示,并要求使用GA算法求解优化问题。问题2,与问题1数据相同,要求使用PSO算法求解优化问题。表1 城市位置坐标(单位:km)横坐标纵坐标城市A40 44.39城市B24.3914.63城市C17.0722.93城市D22.9376.1城市E51.7194.14城市F87.3265.36城市G68.7

2、852.19城市H84.8836.09城市I66.8325.36城市J61.9526.342 使用GA算法求解2.1 算法描述 (1) 编码和适应度函数 分别用1-10表示城市A-J,然后采用自然数编码方式为TSP问题编码,例如,旅程(1 6 2 8 9 10 5 7 3 4)表示从城市A出发分别经过了F-B-H-I-J-E-G-C-D的一次旅行。每一个问题的解及算法中的个体都可以计算相应的距离。那么种群中的最小距离和最大距离也相应的可以确定。选择种群个数为50。根据种群中个体的距离并考虑使用自适应的标定方法,定义如下的适应度函数, 使用此适应度函数的后面的乘方次数可以调整来改变淘汰速度。这里

3、选择2,表示淘汰速度比较适中。 (2) 定义算子 选择算子,根据适应度函数的大小进行选择。计算每个个体被选中的概率,以各个个体所分配到的概率值作为其遗传到下一代的概率,基于这些概率用赌盘选择法来产生下一代群体。 交叉算子,采用部分映射交叉(Partially Mapped Crossover, PMX)方法实现算法交叉。首先选取选需要交叉的区间段,然后确定区间段的映射关系,接下来交换区间段的遗传信息,此时未换部分的遗传信息会出现不合法的情况,因此根据将未换部分按映射关系进行交换。交叉率为0.9。 变异算子,把一个染色体中的两个基因的交换作为变异算法。在算法中随机的产生一个染色体中需要交换的两个

4、基因的位置,将这两个基因进行交换来实现变异。变异率为0.2。 (3) 算法流程 根据上述的遗传算子的定义,并设置最大的迭代次数为1000,将GA算法流程叙述如下, (i) 随机生成初始种群。 (ii) 按照本节(1)中的公式计算各个个体适应度的值。 (iii) 判断是否达到了最大的迭代次数。若是,算法结束,输出计算结果;若否,转到(iv)。 (iv) 按照本节(2)中的选择算子进行选择操作。 (v) 选择交叉宽度并随机确定交叉切点,按照本节(2)中的交叉算子进行交叉操作。 (vi) 按照本节(2)中的变异算子进行变异操作。 (vii) 将遗传算子产生的种群作为新的种群,转到(ii)。2.2 G

5、A算法计算结果 使用Matlab编程实现2.1中的算法,计算结果如下。 图1 GA算法过程的距离值变化 图2 GA算法求解的10城市TSP问题的结果 最后的结果编码为(8 9 10 2 3 1 4 5 6 7),解为H-I-J-B-C-A-D-E-F-G,距离为269.0671。 从计算结果可以看出,算法迭代到300步时已经收敛到了局部的最优值。经过大量的计算发现至多迭代到300步,算法收敛到局部最优值。经过进一步的验证发现,这个局部最优解也是全局最优解。3 使用PSO算法求解3.1 算法描述 (1)TSP问题的交换子和交换序 设n个节点的TSP问题的解序列为s=(ai),i=1n。定义交换子

6、SO(i1,i2)为交换解S中的点ai1和ai2,则S=S+SO(i1,i2)为解S经算子SO(i1,i2)操作后的新解。 一个或多个交换子的有序队列就是交换序,记作SS,SS=(SO1,SO2,SON)。其中,SO1,SON等是交换子,之间的顺序是有意义的, 意味着所有的交换子依次作用于某解上。 若干个交换序可以合并成一个新的交换序,定义为两个交换序的合并算子。设两个交换序SS1和SS2按先后顺序作用于解S上,得到新解S。假设另外有一个交换序SS作用于同一解S上,能够得到形同的解S,可定义 和属于同一等价集,在交换序等价集中,拥有最少交换子的交换序称为该等价集的基本交换序。(2)TSP问题的

7、速度和位置更新算式根据(1)中的交换子和交换序的定义,可以根据基本的PSO算法速度更新算式和位置更新算式,重新定义如下的速度和位置更新算式, 式中,、为0,1区间的随机数。为粒子与个体极值的交换序,以概率保留;为粒子与全局极值的交换序,以概率保留。粒子的位置按照交换序进行更新。为惯性权重。 (3) 算法流程 按照本节中的有关定义给出算法流程如下, (i) 初始化粒子群,给每一个粒子一个初始解和随机的交换序。 (ii) 判断是否达到最大迭代次数1000。若是,算法结束,输出结果;若不是,转到(iii)。 (iii) 根据粒子当前位置计算下一个新解: (a) 计算A=,A是一个基本交换序,表示A作

8、用于得到; (b) 计算B=,B是一个基本交换序; (c) 按照(2)中的公式更新速度和位置。 (d) 如果得到了更好的个体位置,更新。 (iv) 如果得到了更好的群体位置,更新。3.2 PSO算法的计算结果 编程实现3.1中的算法,计算结果如下。计算程序见附录。 图3 PSO算法过程的距离值变化 图4 PSO算法求解的10城市TSP问题的结果 最后的结果编码为(1 4 5 6 7 8 9 10 2 3),解为A-D-E-F-G-H-I-J-B-C,距离为269.0671。 从计算结果可以看出,算法迭代到200步时已经收敛到了局部的最优值。这个局部最优解也是全局最优解。从收敛的速度的平均意义上

9、而言,PSO算法与GA算法比收敛的更快。附录% GA算法的代码% GA算法程序. data = load(pos10.txt);a=data(:,2) data(:,3); n=50; % 种群数目C=1000; % 迭代次数 Pc=0.9; % 交叉概率Pm=0.2; % 变异概率 % GA算法初始化. N,NN=size(D); farm=zeros(n,N); for i=1:n farm(i,:)=randperm(N); end R=farm(1,:); len=zeros(n,1); fitness=zeros(n,1); counter=0; % GA算法迭代 while cou

10、nter=rand nn=nn+1; FARM(nn,:)=farm(i,:); end end FARM=FARM(1:nn,:); % FARM (nn*N) aa,bb=size(FARM);%(aa=nn) % 交叉 FARM2=FARM; for i=1:2:aa if Pcrand&iaa A=FARM(i,:); B=FARM(i+1,:); L=length(a);if L=rand&L10 W=ceil(L/10)+8;else W=floor(L/10)+8;endp=unidrnd(L-W+1);%随机选择交叉范围for i=1:W x=find(a=b(1,p+i-1)

11、; 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); end FARM(i,:)=A; FARM(i+1,:)=B; end end % 变异 FARM2=FARM; for i=1:aa if Pm=rand FARM(i,:)=mutate(FARM(i,:); end end % 群体更新 FARM2=zeros(n-aa+1,N); if n-aa=1 for i=1:n-aa FARM2(i,:)=randpe

12、rm(N); end end FARM=R;FARM;FARM2; aa,bb=size(FARM); if aan FARM=FARM(1:n,:); end farm=FARM; clear FARM RR(counter+1)=myLength(D,R) % 统计迭代次数。 counter=counter+1 ; end % 结果图形显示figurehold onplot(a(R(1),1),a(R(10),1),a(R(1),2),a(R(10),2),ms-,LineWidth,2,MarkerEdgeColor,k,MarkerFaceColor,g);scatter(a(:,1)

13、,a(:,2),ms)grid onhold 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,LineWidth,4,MarkerEdgeColor,k,MarkerFaceColor,g) hold onend % 结果输出RRlength% 其他函数function a=mutate(a)L=length(a);rray=randperm(L);a(rray(1),a(rray(2)=exchange(a(rray(1

14、),a(rray(2);function 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% PSO算法代码% PSO算法代码data=load(pos10.txt)cityCoor=data(:,2) data(:,3); n=size(cityCoor,1); cityDist=zeros(n,n); for i=1:n for j=1:n if i=j cityDi

15、st(i,j)=(cityCoor(i,1)-cityCoor(j,1)2+. (cityCoor(i,2)-cityCoor(j,2)2)0.5; end cityDist(j,i)=cityDist(i,j); endendindividual=zeros(indiNumber,n);% 初始化nMax=1000; % 迭代次数indiNumber=50; % 粒子个数% 初始化个体和群体最优值indiFit=fitness(individual,cityCoor,cityDist);value,index=min(indiFit);tourPbest=individual; tourGb

16、est=individual(index,:) ; recordPbest=inf*ones(1,indiNumber); recordGbest=indiFit(index); xnew1=individual;% 循环寻找最优路径L_best=zeros(1,nMax);for N=1:nMax % 更新最优值 indiFit=fitness(individual,cityCoor,cityDist); for i=1:indiNumber if indiFit(i)recordPbest(i) recordPbest(i)=indiFit(i); tourPbest(i,:)=indiv

17、idual(i,:); end if indiFit(i)dist individual(i,:)=xnew1(i,:); end % 全体最优值更新速度 c1=round(rand*(n-2)+1; c2=round(rand*(n-2)+1; while c1=c2 c1=round(rand*(n-2)+1; c2=round(rand*(n-2)+1; end chb1=min(c1,c2); chb2=max(c1,c2); cros=tourGbest(chb1:chb2); ncros=size(cros,2); for j=1:ncros for k=1:n if xnew1(

18、i,k)=cros(j) xnew1(i,k)=0; for t=1:n-k temp=xnew1(i,k+t-1); xnew1(i,k+t-1)=xnew1(i,k+t); xnew1(i,k+t)=temp; end end end end xnew1(i,n-ncros+1:n)=cros; dist=0; for j=1:n-1 dist=dist+cityDist(xnew1(i,j),xnew1(i,j+1); end dist=dist+cityDist(xnew1(i,1),xnew1(i,n); if indiFit(i)dist individual(i,:)=xnew1

19、(i,:); end % 惯性项 c1=round(rand*(n-1)+1; c2=round(rand*(n-1)+1; while c1=c2 c1=round(rand*(n-2)+1; c2=round(rand*(n-2)+1; end temp=xnew1(i,c1); xnew1(i,c1)=xnew1(i,c2); xnew1(i,c2)=temp; dist=0; for j=1:n-1 dist=dist+cityDist(xnew1(i,j),xnew1(i,j+1); end dist=dist+cityDist(xnew1(i,1),xnew1(i,n); if i

20、ndiFit(i)dist individual(i,:)=xnew1(i,:); end end value,index=min(indiFit); L_best(N)=indiFit(index); tourGbest=individual(index,:); end% 其他函数function dist=dist(x,D)n=size(x,2);dist=0;for i=1:n-1 dist=dist+D(x(i),x(i+1);enddist=dist+D(x(1),x(n);function indiFit=fitness(x,cityCoor,cityDist)m=size(x,1);n=size(cityCoor,1);indiFit=zeros(m,1);for i=1:m for j=1:n-1 indiFit(i)=indiFit(i)+cityDist(x(i,j),x(i,j+1); end indiFit(i)=indiFit(i)+cityDist(x(i,1),x(i,n);end

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1