资源简介
中国省会的TSP问题. 亲手写的,注释详细,带图形演示,感兴趣的朋友来下载吧.
代码片段和文件信息
clcclear
hold on
%起点
global star_point;
star_point=5;
sj0=importdata(‘provincial_ capital_coordinate.txt‘); %加载数据(每个点的经纬度)
%整理好数据
x=sj0.data(:1); %经度
y=sj0.data(:2); %纬度
landcolor = [111];
%载入坐标轴范围(维度范围 经度范围)
ax = worldmap([15 53][70 135]);
%载入陆地地区shapefile文件 usegeocoord 将数据视为经纬度
land = shaperead(‘gadm36_CHN_1.shp‘ ‘UseGeoCoords‘ true);
%显示陆地 以landcolor做填充颜色
h=geoshow(ax land ‘FaceColor‘ landcolor);
%显示地点
point_data.Geometry=‘Point‘;
point_data.Lon=x;
point_data.Lat=y;
geoshow(point_data‘Marker‘ ‘*‘);
textm(yxchar(sj0.textdata(2:362))); %第一个参数为纬度,第二个为经度
%选取起点 %起点要放在头和尾各一次
x([1 star_point]:)=x([star_point 1]:);
y([1 star_point]:)=y([star_point 1]:);
x=[x;x(1)];
y=[y;y(1)];
sj=[xy];
sj=sj*pi/180; %单位化成弧度
point_number=size(sj1);
d=zeros((point_number)); %距离矩阵d的初始值。
%已知经纬度求两点之间大圆航线距离,配置好邻接矩阵d
for i=1:(point_number-1)
for j=i+1:(point_number)
d(ij)=6370*acos(cos(sj(i1)-sj(j1))*cos(sj(i2))*cos(sj(j2))+sin(sj(i2))*sin(sj(j2)));
end
end
d=d+d‘; w=50; g=(point_number-2); %w为种群的个数,g为进化的代数
rand(‘state‘sum(clock)); %初始化随机数发生器
for k=1:w %通过改良圈算法选取初始种群
c=randperm((point_number-2)); %产生1,...,(point_number-2)的一个全排列
c1=[1c+1(point_number)]; %生成初始解
for t=1:(point_number) %该层循环是修改圈
flag=0; %修改圈退出标志
for m=1:(point_number-2)
for n=m+2:(point_number-1)
if d(c1(m)c1(n))+d(c1(m+1)c1(n+1)) c1(m+1:n)=c1(n:-1:m+1); flag=1; %修改圈
end
end
end
if flag==0
J(kc1)=1:(point_number); break %记录下较好的解并退出当前层循环
end
end
end
J(:1)=0; J=J/(point_number); %把整数序列转换成[01]区间上的实数,即转换成染色体编码
for k=1:g %该层循环进行遗传算法的操作
A=J; %交配产生子代A的初始染色体
c=randperm(w); %产生下面交叉操作的染色体对
for i=1:2:w
F=2+floor((point_number-2)*rand(1)); %产生交叉操作的地址
temp=A(c(i)[F:(point_number)]); %中间变量的保存值
A(c(i)[F:(point_number)])=A(c(i+1)[F:(point_number)]); %交叉操作
A(c(i+1)F:(point_number))=temp;
end
by=[]; %为了防止下面产生空地址,这里先初始化
while ~length(by)
by=find(rand(1w)<0.1); %产生变异操作的地址
end
B=A(by:); %产生变异操作的初始染色体
for j=1:length(by)
bw=sort(2+floor((point_number-2)*rand(13))); %产生变异操作的3个地址
B(j:)=B(j[1:bw(1)-1bw(2)+1:bw(3)bw(1):bw(2)bw(3)+1:(point_number)]); %交换位置
end
G=[J;A;B]; %父代和子代种群合在一起
[SGind1]=sort(G2); %把染色体翻译成1,...(point_number)的序列ind1
num=size(G1); long=zeros(1num); %路径长度的初始值
for j=1:num
for i=1:(point_number-1)
long(j)=long(j)+d(ind1(ji)ind1(ji+1)); %计算每条路径长度
end
end
[slongind2]=sort(long); %对路径长度按照从小到大排序
J=G(ind2(1:w):); %精选前w个较短的路径对应的染色体
%记录下平均路径长度数据
long_mean(k)=mean(long);
end
path=ind1(ind2(1):) flong=slong(1) %解的路径及路径长度
sj=sj.*180./pi; %坐标弧度化成角度
xx=sj(path1);yy=sj(path2);
lujin.Geometry=‘Line‘;
lujin.Lon=xx;
lujin.Lat=yy;
geoshow(lujin ‘Color‘ ‘blue‘) %画出路径
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 14278656 2018-05-07 03:46 TSP_中国省会城市\gadm36_CHN_1.shp
文件 3466 2019-05-17 15:04 TSP_中国省会城市\My_Genetic_Algorithm.asv
文件 3518 2019-05-17 15:07 TSP_中国省会城市\My_Genetic_Algorithm.m
文件 1760 2019-05-09 14:03 TSP_中国省会城市\provincial_ capital_coordinate.txt
目录 0 2019-05-17 15:04 TSP_中国省会城市
----------- --------- ---------- ----- ----
14287400 5
- 上一篇:2018美赛E题优秀论文中英对照
- 下一篇:DEVOPS 成熟度模型
相关资源
- 数学建模算法与应用第2版习题解答的
- 三相异步电动机运行仿真及GUI设计
- 小波特征提取与支持向量机识别
- 轨迹优化软件gpops5.2
- TSP-数据集
- 混沌系统同步控制的代码
- tsp 测试库 tsp
- A10-rtsph264_硬件编码.zip
- 数字听诊器设计
- 算法集合道格拉斯、遗传算法、krig
- 通过中心频率来确定VMD分解个数,程
- 基于混沌的语音加密系统设计.rar
- 2017年数学建模原题ABCD题目,含附件
- 数字图像处理期末作业
- 黄竞伟《计算智能》课件
- Kriging+遗传算法
- 利用GPML V4.2工具箱实现高斯过程回归
- 遗传并行算法代码-高性能
- 《基于遗传算法的自动组卷系统》
- 《电力电子、电机控制系统的建模和
- 基于改进的广义回归神经网络的态势
- indeo 5
- 改进遗传算法求解走班制下的排课问
- 遗传算法优化PID参数的代码
- 遗传算法完整毕业设计
- 基于遗传算法实现排课代码
- 求实验数据的spwvd分布,包括功率谱,
- 遗传算法的多目标优化问题
- 伪Wigner-Ville分布,可以运行。
- ceemd分解,可以运行
评论
共有 条评论