当前位置:首页 > MATLAB-智能算法30个案例分析-终极版(带目录)
3、案例实例及结果:
本案例以14个城市为例,假定14个城市的位置坐标为:
表4.1 14个城市的位置坐标
城市编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14
X坐标 16.47 16.47 20.09 22.39 25.23 22 20.47 17.2 16.3 14.05 16.53 21.52 19.41 20.09
Y坐标 96.1 94.44 92.54 93.37 97.24 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 %% 计算适应度 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); %% 交叉操作 SelCh=Recombin(SelCh,Pc); %% 变异 SelCh=Mutate(SelCh,Pm); %% 逆转操作 SelCh=Reverse(SelCh,D); %% 重插入子代的新种群 Chrom=Reins(Chrom,SelCh,ObjV); %% 更新迭代次数 gen=gen+1 ; end %% 画出最优解的路线图 ObjV=PathLength(D,Chrom); %计算路线长度 [minObjV,minInd]=min(ObjV); DrawPath(Chrom(minInd(1),:),X) %% 输出最优解的路线和总距离 disp('最优解:') p=OutputPath(Chrom(minInd(1),:)); disp(['总距离:',num2str(ObjV(minInd(1)))]); disp('-------------------------------------------------------------')
共分享92篇相关文档