Matlab遗传算法TSP求解
遗传算法求解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求解相关推荐
- MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉、OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子
MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉.OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子.进化逆转算子提高算法局部搜索能力,利用国际通用的TSPLIB数据集中的eil5 ...
- 基于Matlab遗传算法工具箱解决物流中心选址
目录 1.问题 2.建模 3.Matlab编程.求解 1.问题 物流配送中6个客户的位置坐标和配数数量如表1所示,如何设置物流配数中心使得配送量最小. 2.建模 3.Matlab编程.求解 编写目标函 ...
- 2021-05-11 Matlab遗传算法工具箱的使用及实例(非线性规划)
Matlab遗传算法工具箱的使用及实例(非线性规划) 本文将介绍MATLAB遗传算法工具箱求解非线性规划问题.在阅读本文之前,建议读者阅读上一期"MATLAB遗传算法工具箱求解线性规划问题& ...
- MATLAB遗传算法工具箱的使用及实例(非线性规划)
本文将介绍MATLAB遗传算法工具箱求解非线性规划问题.在阅读本文之前,建议读者阅读上一期"MATLAB遗传算法工具箱求解线性规划问题".文章传送门:https://blog.cs ...
- 【GA TSP】基于matlab遗传算法求解旅行商问题【含Matlab源码 1337期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab遗传算法求解旅行商问题[含Matlab源码 1337期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...
- 【GA TSP】基于matlab遗传算法求解旅行商问题【含Matlab源码 1909期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[GA TSP]基于matlab遗传算法求解旅行商问题[含Matlab源码 1909期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...
- 【GA MTSP】基于matlab遗传算法求解多旅行商问题(多且同始终点)【含Matlab源码 1339期】
一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[MTSP]基于matlab遗传算法求解多旅行商问题[ ...
- 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...
- 【生产优化】基于matlab遗传算法求解帐篷工序问题【含Matlab源码 2145期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [生产优化]基于matlab遗传算法求解帐篷工序问题[含Matlab源码 2145期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...
- 【TS TSP】基于matlab禁忌搜索算法求解31城市旅行商问题【含Matlab源码 1143期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab禁忌搜索算法求解31城市旅行商问题[含Matlab源码 1143期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...
最新文章
- 【Python】【应用 01】使用python初步处理文件数据就那么简单!(本文以处理excel和目录为例)
- redis高级-内存淘汰策略
- 删除远程桌面登陆痕迹
- java控制台高级_K9s Kubernetes的高级控制台
- C++03:论容器的使用
- 评论家:亚马逊先于苹果达万亿美元市值
- Android开发笔记(二十五)assets目录下的文件读取
- python(源码包安装 基本使用 循环)
- 地址null一个简单的第三人称汽车驾驶系统
- 【廖雪峰官方网站/Java教程】多线程(3)
- 【收藏版】长文详解基于并行计算的条件随机场
- ddwrt开启USB硬盘
- (转)量化投资发展史:野蛮、乱象、科学
- 国家语言代码大全【方便翻译查询】
- ERP管理系统如何与精益生产MES有效结合
- 出大事了,涛哥你们Java应用GC后不释放内存
- HarmonyOS上玩“语音识别”
- beacon帧字段结构最全总结(一)——beacon基本结构
- 【Docker系列】Docker Swarm 多节点集群
- RealFlow在线教程翻译(2)——Foam with SPH Fluids(基于平滑粒子流体动力学算法(SPH)的流体泡沫)
热门文章
- CTCS列控系统原理--详细学习笔记
- 东芝2000ac废粉盒怎么二次利用_阜新降级组件回收厂家,废太阳能板回收_振昌_光伏...
- 10天学会avr单片机和c语言,郭天祥十天学会AVR单片机
- 安卓 MediaRecorder 音频录制效果很差 模糊解决
- 数据仓库与数据挖掘复习题目
- Vue + Spring Boot 项目实战:人事管理系统——完结撒花
- Memcache UDP 反射放大超大规模的DDoS攻击如何防御?
- WEP_密码破解教程_BT3_使用_(原创技术化)
- java环境已经弄好jar文件还是打不开解决方法
- linux raid卡驱动添加到内核,CentOS安装RAID卡驱动总结