遗传算法求解TSP问题

  • 遗传算法简介
  • TSP问题
  • 遗传算法内容
    • 生成初始种群
    • 计算个体适应度
    • 轮盘赌选择
    • 交叉操作
    • 变异操作
    • 图像输出
  • 完整代码
  • 运行结果
  • 总结

遗传算法简介

遗传算法包括初始种群生成,适应度的计算,种群选择,交叉和变异这几项内容

TSP问题

TSP问题是旅行商经过一系列城市使得旅行商经过的总路程最短的问题

遗传算法内容

生成初始种群

// An highlighted block
for i=1:NPf(i,:)=randperm(N);   %初始种群
end

计算个体适应度

// An highlighted blockfor i=1:NPlen(i,1)=D(f(i,N),f(i,1));for j=1:N-1len(i,1)=len(i,1)+D(f(i,j),f(i,j+1));endendmaxlen=max(len);minlen=min(len%计算归一化适应值for i=1:NPfitness(i,1)=(1-(len(i,1)-minlen)/(maxlen-minlen+0.001));end

轮盘赌选择

// An highlighted blocksumFit=sum(fitness);fitvalue=fitness./sumFit;fitvalue=cumsum(fitvalue);ms=sort(rand(NP,1));fiti=1;newi=1;while newi <= NPif (ms(newi)) < fitvalue(fiti)nf(newi,:)=f(fiti,:);  %种群重新生成newi=newi+1;elsefiti=fiti+1;end end

交叉操作

交叉操作是单点交叉的方式,例如12345678和87654321,假如第一个点交叉则变成8234571和17654328

// An highlighted blockfor i=1:2:NPfor j=1:Nif rand<pc%同一种群变化A=find(nf(i,:)==nf(i+1,j));nf(i,A)=nf(i,j);B=find(nf(i+1,:)==nf(i,j));nf(i+1,B)=nf(i+1,j);%交换位置temp1=nf(i+1,j);nf(i+1,j)=nf(i,j);nf(i,j)=temp1;endendend

变异操作

变异是采用单点变异的方式,比如12345678第5个位置变异,则在随机生成一个值比如1赋给第5个位置,则生成的个体是52341678

// An highlighted blockfor i=1:NPfor j=1:Nif rand<pmtemp2=nf(i,j);temp3=randi([1,N],1,1);A=find(nf(i,:)==temp3);nf(i,j)=temp3;nf(i,A)=temp2; endendend

图像输出

figure
for i=1:N-1plot([C(R(i),1),C(R(i+1),1)],[C(R(i),2),C(R(i+1),2)],'bo-')hold on;
end
plot([C(R(N),1),C(R(1),1)],[C(R(N),2),C(R(1),2)],'ro-')
title(['优化最短距离:',num2str(minlen)])

完整代码

close all
clear all
clc%读入初始数据
FP1=fopen('shuju.txt','rt');
N=fscanf(FP1,'%d',1);  %初始个体数
C=fscanf(FP1,'%f',[2,N]);   %个体坐标
C=C';
D=zeros(N);   %两两距离
for i=1:Nfor j=1:ND(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;%求任意两个城市的间距end
end
NP=200;   %种群规模
G=500;   %迭代次数
f=zeros(NP,N);   %种群
nf=zeros(NP,N);   %子种群
pc=0.4; %交叉概率
pm=0.2; %变异概率
F=[];
for i=1:NPf(i,:)=randperm(N);   %初始种群
end
R=f(1,:);   %最优种群
len=zeros(NP,1);   %存储路径长度
fitness=zeros(NP,1);   %存储归一化值
gen=0;%计算各种群的适应度值,即种群的长度
while gen<Gfor i=1:NPlen(i,1)=D(f(i,N),f(i,1));for j=1:N-1len(i,1)=len(i,1)+D(f(i,j),f(i,j+1));endendmaxlen=max(len);minlen=min(len);rr=find(len==minlen);   %找到最小值种群所在的位置R=f(rr(1,1),:);   %最小值种群的基因%计算归一化适应值for i=1:NPfitness(i,1)=(1-(len(i,1)-minlen)/(maxlen-minlen+0.001));end%基于轮盘赌的复制操作sumFit=sum(fitness);fitvalue=fitness./sumFit;fitvalue=cumsum(fitvalue);ms=sort(rand(NP,1));fiti=1;newi=1;while newi <= NPif (ms(newi)) < fitvalue(fiti)nf(newi,:)=f(fiti,:);  %种群重新生成newi=newi+1;elsefiti=fiti+1;end end%交叉操作for i=1:2:NPfor j=1:Nif rand<pc%同一种群变化A=find(nf(i,:)==nf(i+1,j));nf(i,A)=nf(i,j);B=find(nf(i+1,:)==nf(i,j));nf(i+1,B)=nf(i+1,j);%交换位置temp1=nf(i+1,j);nf(i+1,j)=nf(i,j);nf(i,j)=temp1;endendend%变异操作for i=1:NPfor j=1:Nif rand<pmtemp2=nf(i,j);temp3=randi([1,N],1,1);A=find(nf(i,:)==temp3);nf(i,j)=temp3;nf(i,A)=temp2; endendendf=nf;f(1,:)=R;clear Fgen=gen+1;Rlength(gen)=minlen;
end
figure
for i=1:N-1plot([C(R(i),1),C(R(i+1),1)],[C(R(i),2),C(R(i+1),2)],'bo-')hold on;
end
plot([C(R(N),1),C(R(1),1)],[C(R(N),2),C(R(1),2)],'ro-')
title(['优化最短距离:',num2str(minlen)])
figure
plot(Rlength)
xlabel('迭代次数')
ylabel('目标函数')
title('适应度进化曲线')
disp('最短路径路程是:')
disp(R)

运行结果


总结

利用遗传算法可以解决TSP问题,结果较准确,但是迭代收敛的慢,易陷入局部最优

Matlab遗传算法TSP求解相关推荐

  1. MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉、OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子

    MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉.OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子.进化逆转算子提高算法局部搜索能力,利用国际通用的TSPLIB数据集中的eil5 ...

  2. 基于Matlab遗传算法工具箱解决物流中心选址

    目录 1.问题 2.建模 3.Matlab编程.求解 1.问题 物流配送中6个客户的位置坐标和配数数量如表1所示,如何设置物流配数中心使得配送量最小. 2.建模 3.Matlab编程.求解 编写目标函 ...

  3. 2021-05-11 Matlab遗传算法工具箱的使用及实例(非线性规划)

    Matlab遗传算法工具箱的使用及实例(非线性规划) 本文将介绍MATLAB遗传算法工具箱求解非线性规划问题.在阅读本文之前,建议读者阅读上一期"MATLAB遗传算法工具箱求解线性规划问题& ...

  4. MATLAB遗传算法工具箱的使用及实例(非线性规划)

    本文将介绍MATLAB遗传算法工具箱求解非线性规划问题.在阅读本文之前,建议读者阅读上一期"MATLAB遗传算法工具箱求解线性规划问题".文章传送门:https://blog.cs ...

  5. 【GA TSP】基于matlab遗传算法求解旅行商问题【含Matlab源码 1337期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab遗传算法求解旅行商问题[含Matlab源码 1337期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  6. 【GA TSP】基于matlab遗传算法求解旅行商问题【含Matlab源码 1909期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[GA TSP]基于matlab遗传算法求解旅行商问题[含Matlab源码 1909期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  7. 【GA MTSP】基于matlab遗传算法求解多旅行商问题(多且同始终点)【含Matlab源码 1339期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[MTSP]基于matlab遗传算法求解多旅行商问题[ ...

  8. 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  9. 【生产优化】基于matlab遗传算法求解帐篷工序问题【含Matlab源码 2145期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [生产优化]基于matlab遗传算法求解帐篷工序问题[含Matlab源码 2145期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  10. 【TS TSP】基于matlab禁忌搜索算法求解31城市旅行商问题【含Matlab源码 1143期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab禁忌搜索算法求解31城市旅行商问题[含Matlab源码 1143期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

最新文章

  1. 【Python】【应用 01】使用python初步处理文件数据就那么简单!(本文以处理excel和目录为例)
  2. redis高级-内存淘汰策略
  3. 删除远程桌面登陆痕迹
  4. java控制台高级_K9s Kubernetes的高级控制台
  5. C++03:论容器的使用
  6. 评论家:亚马逊先于苹果达万亿美元市值
  7. Android开发笔记(二十五)assets目录下的文件读取
  8. python(源码包安装 基本使用 循环)
  9. 地址null一个简单的第三人称汽车驾驶系统
  10. 【廖雪峰官方网站/Java教程】多线程(3)
  11. 【收藏版】长文详解基于并行计算的条件随机场
  12. ddwrt开启USB硬盘
  13. (转)量化投资发展史:野蛮、乱象、科学
  14. 国家语言代码大全【方便翻译查询】
  15. ERP管理系统如何与精益生产MES有效结合
  16. 出大事了,涛哥你们Java应用GC后不释放内存
  17. HarmonyOS上玩“语音识别”
  18. beacon帧字段结构最全总结(一)——beacon基本结构
  19. 【Docker系列】Docker Swarm 多节点集群
  20. RealFlow在线教程翻译(2)——Foam with SPH Fluids(基于平滑粒子流体动力学算法(SPH)的流体泡沫)

热门文章

  1. CTCS列控系统原理--详细学习笔记
  2. 东芝2000ac废粉盒怎么二次利用_阜新降级组件回收厂家,废太阳能板回收_振昌_光伏...
  3. 10天学会avr单片机和c语言,郭天祥十天学会AVR单片机
  4. 安卓 MediaRecorder 音频录制效果很差 模糊解决
  5. 数据仓库与数据挖掘复习题目
  6. Vue + Spring Boot 项目实战:人事管理系统——完结撒花
  7. Memcache UDP 反射放大超大规模的DDoS攻击如何防御?
  8. WEP_密码破解教程_BT3_使用_(原创技术化)
  9. java环境已经弄好jar文件还是打不开解决方法
  10. linux raid卡驱动添加到内核,CentOS安装RAID卡驱动总结