资源简介
tsp旅行商问题,遗传算法,给出10个 30个城市的实例,成功运行
![](http://www.nz998.com/pic/47663.jpg)
代码片段和文件信息
function gaTSP
CityNum=30; %输入城市数目,可更改
[dislistClist]=tsp(CityNum);
inn=100; %初始种群大小
gnmax=1000; %最大代数
pc=0.8; %交叉概率
pm=0.8; %变异概率
%产生初始种群
for i=1:inn
s(i:)=randperm(CityNum);
end
[fp]=objf(sdislist);
gn=1;
while gn for j=1:2:inn
seln=sel(sp); %选择操作
scro=cro(sselnpc); %交叉操作
scnew(j:)=scro(1:);
scnew(j+1:)=scro(2:);
smnew(j:)=mut(scnew(j:)pm); %变异操作
smnew(j+1:)=mut(scnew(j+1:)pm);
end
s=smnew; %产生了新的种群
[fp]=objf(sdislist); %计算新种群的适应度
%记录当前代最好和平均的适应度
[fmaxnmax]=max(f);
ymean(gn)=1000/mean(f);
ymax(gn)=1000/fmax;
%记录当前代的最佳个体
x=s(nmax:);
drawTSP(Clistxymax(gn)gn0);
gn=gn+1;
%pause;
end
gn=gn-1;
figure(2);
plot(ymax‘r‘); hold on;
plot(ymean‘b‘);grid;
title(‘搜索过程‘);
legend(‘最优解‘‘平均解‘);
end
%------------------------------------------------
%计算适应度函数
function [fp]=objf(sdislist);
inn=size(s1); %读取种群大小
for i=1:inn
f(i)=CalDist(dislists(i:)); %计算函数值,即适应度
end
f=1000./f‘;
%计算选择概率
fsum=0;
for i=1:inn
fsum=fsum+f(i)^15;
end
for i=1:inn
ps(i)=f(i)^15/fsum;
end
%计算累积概率
p(1)=ps(1);
for i=2:inn
p(i)=p(i-1)+ps(i);
end
p=p‘;
end
%--------------------------------------------------
function pcc=pro(pc);
test(1:100)=0;
l=round(100*pc);
test(1:l)=1;
n=round(rand*99)+1;
pcc=test(n);
end
%--------------------------------------------------
%“选择”操作
function seln=sel(sp);
inn=size(p1);
%从种群中选择两个个体
for i=1:2
r=rand; %产生一个随机数
prand=p-r;
j=1;
while prand(j)<0
j=j+1;
end
seln(i)=j; %选中个体的序号
end
end
%------------------------------------------------
%“交叉”操作
function scro=cro(sselnpc);
bn=size(s2);
pcc=pro(pc); %根据交叉概率决定是否进行交叉操作,1则是,0则否
scro(1:)=s(seln(1):);
scro(2:)=s(seln(2):);
if pcc==1
c1=round(rand*(bn-2))+1; %在[1bn-1]范围内随机产生一个交叉位
c2=round(rand*(bn-2))+1;
chb1=min(c1c2);
chb2=max(c1c2);
middle=scro(1chb1+1:chb2);
scro(1chb1+1:chb2)=scro(2chb1+1:chb2);
scro(2chb1+1:chb2)=middle;
for i=1:chb1
while find(scro(1chb1+1:chb2)==scro(1i))
zhi=find(scro(1chb1+1:chb2)==scro(1i));
y=scro(2chb1+zhi);
scro(1i)=y;
end
while find(scro(2chb1+1:chb2)==scro(2i))
zhi=find(scro(2chb1+1:chb2)==scro(2i));
y=scro(1chb1+zhi);
scro(2i)=y;
end
end
for i=chb2+1:bn
while find(scro(11:chb2)==scro(1i))
zhi=find(scro(11:chb2)==scro(1i));
y=scro(2zhi);
scro(1i)=y;
end
while find(scro(21:chb2)==scro(2i))
zhi=find(scro(21:chb2)==scro(2i));
y=scro(1zhi);
scro(2i)=y;
end
end
end
end
%--------------------------------------------------
%“变异”操作
function snnew=mut(snewpm);
bn=size(snew2);
snnew=snew;
pmm=pro(pm); %根据变异概率决定是否进行变
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5137 2018-01-17 16:45 gaTSP.m
----------- --------- ---------- ----- ----
5137 1
相关资源
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
- k近邻算法matlab实现
- matlab识别系统
评论
共有 条评论