基于粒子群算法的TSP问题研究 - 图文(14)
w1=0.5; %个体经验保留概率 w2=0.5; %全局经验保留概率 M=200; %最大迭代次数 m=30; %微粒数
CityNum=10; %问题的规模(城市个数)
[dislist,Clist]=tsp(CityNum);%返回dislist可以求出两城市间的距离,Clist表示城市的列表
NC=1;%迭代计数器
R_best=zeros(M,CityNum); %各代最佳路线 L_best=inf.*ones(M,1);%各代最佳路线的长度 L_ave=zeros(M,1);%各代路线的平均长度
%产生微粒的初始位置 for i=1:m
x(i,:)=randperm(CityNum);%产生30个微粒要走的30各城市的列表
L(i)=SumDistance(dislist,x(i,:));%产生这30个微粒各自按上边路径走的总路程 end
p=x; %p为个体最好解
pL=L;%用数组表示每个个体目前的最短路径,也是由于这也是初始化,以后这个距离也要不断更新
[L_best(1,1), n_best]=min(L);%L_best(1,1)表示初始化中30个粒子中最优总距离,n_best表示第几个粒子是最优解
R_best(1,:)=x(n_best,:);%R_best(1,:)表示当前最优微粒所走城市的路径 L_ave(1,1)=mean(L);%L_ave(1,1),30个微粒走的总路程的平均值
%初始交换序
v=ones(CityNum-1,2,m);
figure(1);
while NC<=M %停止条件之一:达到最大迭代次数 for i=1:m
xnew(i,:)=changeFun(x(i,:),v(:,:,i));%初始化交换后返回的矩阵类型
37
西安工业大学毕业设计(论文)
A=changeNum(x(i,:),p(i,:));%产生与个体相比较的交换序 Arand=randFun(A,w1);%用来对个体经验进行保留
xnew(i,:)=changeFun(xnew(i,:),Arand);%对经验已经保留的进行更新其新的位置。
B=changeNum(x(i,:),R_best(NC,:));%产生与全局最优相比较的交换序 Brand=randFun(B,w2);%用来对全局经验进行保留
xnew(i,:)=changeFun(xnew(i,:),Brand);%对经验已经保留的进行更新其新的位置
v(:,:,i)=changeNum(x(i,:),xnew(i,:));%记录实际交换序
L(i)=SumDistance(dislist,xnew(i,:));%产生这30个微粒各自按上边路径走的总路程
if L(i) pL(i)=L(i);%调整局部最优解 end end [L_bestnew, n_best]=min(L);%L_bestnew用来表示当前更新的全局最短路径长度,n_best表示是第n_best个达到最优 R_bestnew=xnew(n_best,:);%R_bestnew用来得到当前最优路径的线路 L_ave(NC+1,1)=mean(L);%此次更新30个粒子的所走路程的平均值 if L_bestnew R_best(NC+1,:)=R_bestnew;%找到更优解,把以前的替换掉,迭代次数加1 else L_best(NC+1,1)=L_best(NC,1); R_best(NC+1,:)=R_best(NC,:);%表示此次更新没有比以前更优,保持以前的,迭代次数加1 end x=xnew; plotTSP10(Clist,R_best(NC,:),L_best(NC,1),NC,0);%clist是关于城市位置的一个矩阵,并绘制此次路径图 %pause; NC=NC+1; end %输出结果 Pos=find(L_best==min(L_best));%在迭代完成后找出最终的最短路径的粒子 Shortest_Route=R_best(Pos(1),:);%返回所找到最短路径的粒子所走的路径 Shortest_Length=L_best(Pos(1));%返回最终的最短路径的长度 figure(2); plot([L_best L_ave]);%绘制每次迭代,最短路径和平均路径的变化,使大家更容易看到次算法的效率 text(85,4.5,['结果:本次搜索最短距离为 ',num2str(Shortest_Length)]); 38 西安工业大学毕业设计(论文) legend('最短距离','平均距离');%%用来区分最短路径和平均路径 end function xnew=changeFun(x,C) changeLen=size(C,1);%返回矩阵c的行数 xnew=x; for i=1:changeLen a=xnew(C(i,1)); xnew(C(i,1))=xnew(C(i,2));%通过c这个交换序对当前粒子进行更新 xnew(C(i,2))=a;%逐个交换位置 end end function C=changeNum(x,y) CityNum=size(x,2);%返回矩阵x的列数 C=ones(CityNum-1,2);%初始化一个交换序 for i=1:CityNum-1 pos=find(x==y(i));%找到x中第i个元素和y中元素相同的位置形成一个交换子 C(i,:)=[i pos];%交换子的产生 %x=changeFun(x,C(i,:)); end end function v=randFun(v,w) randLen=size(v,1);%返回矩阵v的行数 for i=1:randLen if rand>w v(i,2)=v(i,1);%保留经验1-w end end end 39
相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




