《MATLAB智能算法30个案例》:第4章 基于遗传算法的TSP算法

《MATLAB智能算法30个案例》:第4章 基于遗传算法的TSP算法

1. 前言

《MATLAB智能算法30个案例分析》是2011年7月1日由北京航空航天大学出版社出版的图书,作者是郁磊、史峰、王辉、胡斐。本书案例是各位作者多年从事算法研究的经验总结。书中所有案例均因国内各大MATLAB技术论坛网友的切身需求而精心设计,其中不少案例所涉及的内容和求解方法在国内现已出版的MATLAB书籍中鲜有介绍。《MATLAB智能算法30个案例分析》采用案例形式,以智能算法为主线,讲解了遗传算法、免疫算法、退火算法、粒子群算法、鱼群算法、蚁群算法和神经网络算法等最常用的智能算法的MATLAB实现。

本书共给出30个案例,每个案例都是一个使用智能算法解决问题的具体实例,所有案例均由理论讲解、案例背景、MATLAB程序实现和扩展阅读四个部分组成,并配有完整的原创程序,使读者在掌握算法的同时更能快速提高使用算法求解实际问题的能力。《MATLAB智能算法30个案例分析》可作为本科毕业设计、研究生项目设计、博士低年级课题设计参考书籍,同时对广大科研人员也有很高的参考价值。

《MATLAB智能算法30个案例分析》与《MATLAB 神经网络43个案例分析》一样,都是由北京航空航天大学出版社出版,其中的智能算法应该是属于神经网络兴起之前的智能预测分类算法的热门领域,在数字信号处理,如图像和语音相关方面应用较为广泛。本系列文章结合MATLAB与实际案例进行仿真复现,有不少自己在研究生期间与工作后的学习中有过相关学习应用,这次复现仿真示例进行学习,希望可以温故知新,加强并提升自己在智能算法方面的理解与实践。下面开始进行仿真示例,主要以介绍各章节中源码应用示例为主,本文主要基于MATLAB2015b(32位)平台仿真实现,这是本书第四章基于遗传算法的TSP算法实例,话不多说,开始!

2. MATLAB 仿真示例

打开MATLAB,点击“主页”,点击“打开”,找到示例文件
在这里插入图片描述

选中GA_TSP.m.m,点击“打开”

GA_TSP.m.m源码如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:遗传算法求解TSP问题(为选择操作从新设计后程序)
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-07-5
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输入:
%D       距离矩阵
%NIND    为种群个数
%X       参数是中国34个城市的坐标(初始给定)
%MAXGEN  为停止代数,遗传到第MAXGEN代时程序停止,MAXGEN的具体取值视问题的规模和耗费的时间而定
%m       为适值淘汰加速指数,最好取为1,2,3,4,不宜太大
%Pc      交叉概率
%Pm      变异概率
%输出:
%R       为最短路径
%Rlength 为路径长度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 清空环境
clc
clear all
close all

tic
%% 加载数据
load CityPosition3  %可分别载入CityPosition1,CityPosition2,CityPosition3进行测试
% X=data;
D=Distanse(X);  %生成距离矩阵
N=size(D,1);    %城市个数
%% 遗传参数
NIND=100;       %种群大小
MAXGEN=200;     %最大遗传代数
Pc=0.9;         %交叉概率
Pm=0.05;        %变异概率
GGAP=0.9;       %代沟
%% 初始化种群
Chrom=InitPop(NIND,N);
%% 画出随机解的路径图
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);
    %% 交叉操作
    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('-------------------------------------------------------------')
toc

添加完毕,点击“运行”,开始仿真,输出仿真结果如下:

初始种群中的一个随机值:
28>30>15>23>25>11>12>24>16>14>27>13>26>10>5>31>6>4>21>1>22>9>20>3>2>17>8>7>29>19>18>28
总距离:44.7407
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
最优解:
14>12>6>5>23>11>29>31>30>27>28>26>25>24>19>20>21>22>18>3>17>16>4>2>8>9>10>7>13>15>1>14
总距离:16.6154
-------------------------------------------------------------
时间已过 9.394610 秒。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 小结

TSP旅行商问题,一直是比较热门的一个优化问题,许多方法都在这个问题上有过示例与应用,从某种层面上来说,这其实也是一个规划问题,比如常见的路径规划上,不知有没做地图导航相关的同学科普一下,应该是在我们常见的导航,特别是跨城市之间的导航中有所应用,自己笔记中关于旅行商问题的也有不少示例,具体文末链接。对本章内容感兴趣或者想充分学习了解的,建议去研习书中第四章节的内容。后期会对其中一些知识点在自己理解的基础上进行补充,欢迎大家一起学习交流。

MATLAB小技巧(23)矩阵分析–模拟退火

MATLAB小技巧(26)蚁群算法TSP求解

猜你喜欢

转载自blog.csdn.net/sinat_34897952/article/details/125589917