MATLAB_智能算法30个案例分析 有目录(13)
发布时间:2021-06-05
发布时间:2021-06-05
6 7 8 9 10 11 12 13 14
22 20.47 17.2 16.3 14.05 16.53 21.52 19.41 20.09
96.05 97.02 96.29 97.38 98.12 97.38 95.59 97.13 92.55
从某个城市出发访问每个城市一次且仅一次, 最后回到出发城市,如何安排才使其所走路线最短。
结果:
优化前的一个随机路线轨迹图
图4.1 随机路线图
随机路线为:
11—>7—>10—>4—>12—>9—>14—>8—>13—>5—>2—>3—>6—>1—>11 总距离:71.1144 优化后的路线图:
图4.2 最优解路线图
最优解路线:
5—>4—>3—>14—>2—>1—>10—>9—>11—>8—>13—>7—>12—>6—>5 总距离:29.3405 优化迭代过程:
图4.3 遗传算法进化过程图
4、主程序:
clear
clc
close all
load CityPosition1;%个城市坐标位置 NIND=100; %种群大小 MAXGEN=200;
Pc=0.9; %交叉概率 Pm=0.05; %变异概率
GGAP=0.9; %代沟(Generation gap) D=Distanse(X); %生成距离矩阵 N=size(D,1); %(34*34) %% 初始化种群
Chrom=InitPop(NIND,N);
%% 在二维图上画出所有坐标点 % figure
% plot(X(:,1),X(:,2),'o'); %% 画出随机解的路线图 DrawPath(Chrom(1,:),X) pause(0.0001)
%% 输出随机解的路线和总距离 disp('初始种群中的一个随机值:') OutputPath(Chrom(1,:));
Rlength=PathLength(D,Chrom(1,:));
disp(['总距离:',num2str(Rlength)]);
disp('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') %% 优化 gen=0; figure;
hold on;box on xlim([0,MAXGEN]) title('优化过程') xlabel('代数') ylabel('最优值')
ObjV=PathLength(D,Chrom); %计算路线长度 preObjV=min(ObjV); while gen<MAXGEN
%% 计算适应度
ObjV=PathLength(D,Chrom); %计算路线长度 % fprintf('%d %1.10f\n',gen,min(ObjV))
line([gen-1,gen],[preObjV,min(ObjV)]);pause(0.0001) preObjV=min(ObjV); FitnV=Fitness(ObjV); %% 选择
SelCh=Select(Chrom,FitnV,GGAP); %% 交叉操作