资源简介
tsp旅行商问题,遗传算法,给出10个 30个城市的实例,成功运行
代码片段和文件信息
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
相关资源
- 快速Fourier变换算法及Matlab程序实现
- 基于matlab的数字图像的频域滤波器设
- TDOA时差定位算法仿真
- matlab2015b破解文件
- lasso经典matlab源码
- 经典卡尔曼滤波 目标跟踪 matlab 程序
- Gabor变换实现(CmatlabOpenCV)
- 图像像素级融合 matlab
- 应用MATLAB实现探地雷达数据小波变换
- 两幅图像的互信息的matlab代码
- MATLAB处理心电图的噪声
- Matlab-EMD工具箱 + 详细安装方法
- Random Walk (随机游走) matlab
- Delta机器人正逆解
- MATLAB与机器学习详细.txt
- matlab2011b找不到编译器vs2012的问题
- ook系统matlab仿真
- 图形面积测量
- matlab绘制有效前沿和资本市场线
- 指纹识别matlab实现
- matlab关于蒙特卡洛和算定积分的代码
- EMD经验模态分解MATLAB源代码,非常好
- LDPC编码构造的matlab实现
- 三维点云的配准和融合
- 基于MATLAB的GPS网平差
- MATLAB目标跟踪仿真小程序 (1)
- 广义预测控制matlab仿真程序
- 无线通信MIMO VBLAST的matlab仿真
- 卡尔曼推导流程记录和一个matlab例程
- matlab 边缘检测并求出面积,周长,质
评论
共有 条评论