%%%%%%%%%%%%%%%%%%%%%%%免疫算法求解决TSP问题%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
C=[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;...
3238 1229;4196 1044;4312 790;4386 570;3007 1970;2562 1756;...
2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;...
3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;...
3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;...
2370 2975]; %31个省会城市坐标
N=size(C,1); %TSP问题的规模,即城市数目
D=zeros(N); %任意两个城市距离间隔矩阵
%%%%%%%%%%%%%%%%%%%%%求任意两个城市距离间隔矩阵%%%%%%%%%%%%%%%%%%%%%
for i=1:N
for j=1:N
D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
end
end
NP=200; %免疫个体数目
G=1000; %最大免疫代数
f=zeros(N,NP); %用于存储种群
for i=1:NP
f(:,i)=randperm(N); %随机生成初始种群
end
len=zeros(NP,1); %存储路径长度
for i=1:NP
len(i)=func3(D,f(:,i),N); %计算路径长度
end
[Sortlen,Index]=sort(len);
Sortf=f(:,Index); %种群个体排序
gen=0; %免疫代数
Ncl=10; %克隆个数
%%%%%%%%%%%%%%%%%%%%%%%%%%%免疫循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while gen<G
for i=1:NP/2
%%%%%%%%%%%%选激励度前NP/2个体进行免疫操作%%%%%%%%%%%%%%%
a=Sortf(:,i);
Ca=repmat(a,1,Ncl);
for j=1:Ncl
p1=floor(1+N*rand());
p2=floor(1+N*rand());
while p1==p2
p1=floor(1+N*rand());
p2=floor(1+N*rand());
end
tmp=Ca(p1,j);
Ca(p1,j)=Ca(p2,j);
Ca(p2,j)=tmp;
end
Ca(:,1)=Sortf(:,i); %保留克隆源个体
%%%%%%%%%%%%克隆抑制,保留亲和度最高的个体%%%%%%%%%%%%%%
for j=1:Ncl
Calen(j)=func3(D,Ca(:,j),N);
end
[SortCalen,Index]=sort(Calen);
SortCa=Ca(:,Index);
af(:,i)=SortCa(:,1);
alen(i)=SortCalen(1);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%种群刷新%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:NP/2
bf(:,i)=randperm(N); %随机生成初始种群
blen(i)=func3(D,bf(:,i),N); %计算路径长度
end
%%%%%%%%%%%%%%%%%%%%免疫种群与新种群合并%%%%%%%%%%%%%%%%%%%%%
f=[af,bf];
len=[alen,blen];
[Sortlen,Index]=sort(len);
Sortf=f(:,Index);
gen=gen+1;
trace(gen)=Sortlen(1);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%输出优化结果%%%%%%%%%%%%%%%%%%%%%%%%%%%
Bestf=Sortf(:,1); %最优变量
Bestlen=trace(end); %最优值
figure
for i=1:N-1
plot([C(Bestf(i),1),C(Bestf(i+1),1)],...
[C(Bestf(i),2),C(Bestf(i+1),2)],'bo-');
hold on;
end
plot([C(Bestf(N),1),C(Bestf(1),1)],...
[C(Bestf(N),2),C(Bestf(1),2)],'ro-');
title(['优化最短距离:',num2str(trace(end))]);
figure,plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('亲和度进化曲线')
Matlab领域
- 粉丝: 3w+
- 资源: 3663
最新资源
- 72619971-63e9-4b20-aae7-d6ce002ace9-1.zip
- 蓄电池多模式充放电simulink仿真 双向Buck Boost变器仿真 ①定直流电压控制 ②恒压充放电控制 ③恒流充放电控制 ④恒功率充放电控制 直流电压等级400V
- NC升级元数据的避坑手册文档
- 基于机器视觉的水果分拣系统(Python)
- 南京邮电大学信号与系统期末复习总结
- 目标检测xml文件转txt文件
- 网站系统渗透测试报告.doc
- 安卓开发-身份证识别(腾讯云服务)
- AVPro Video v3 - Ultra Edition 3.0.8.unitypackage
- 代码复现;冷热电气多门互补的微能源网鲁棒优化调度MATLAB复现 随着能源结构调整,集成风/光等可再生能源输入、冷热电气等多种能源互补输出的微能源网得到了逐步发展,如何协调调度微能源网内冷热电气源网荷
- 毕业设计-python的高校学生学业预警系统(毕业全套文档+源代码).zip
- Comsol光学 :taper波导传输及倏逝场效率求解
- 自已使用不建议借鉴0.0sada
- 滑动平均算法(代码十分完整) 1、用于平抑功率波动、包括风电输出功率波动、光伏输出功率波动 得到并网功率 2、另一类是消除噪音 空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度
- 改进下垂控制、微电网控制方向 1、纯阻性负载和冲击负载对母线电压稳(simulink) 2、程序创新点是:采用新改进下垂控制策略(有图形的讲解word) 3、减小直流母线电压的偏差,以混合储能系统为例
- 五种不同类型的数据库安装 在线YUM仓库 二进制本地安装 docker容器平台安装 源码部署 Windows平台
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈