GA求解TSP问题MATLAB代码讲解https://www.zhihu.com/video/1245830251734888448
(各位小伙伴也可去bilibili同步观看,https://b23.tv/JMBGdY)
Hello,大家好,今天更新一期使用GA求解TSP问题的MATLAB代码讲解。各位可点击左下角阅读原文,访问优化算法交流地官方闲鱼账号。
01 | 勘误
首先更正一下上一期推文代码的一个错误,在BinaryTourment_Select这个函数的第15行原来写的是R=randperm(N),但实际应该是R=randperm(NIND)。
%
% @作者:随心390
% @微信公众号:优化算法交流地
%
%% 二元锦标赛选择
%输入Chrom: 种群
%输入dist: 距离矩阵
%输出Selch: 二元锦标赛选择出的个体
function Selch=BinaryTourment_Select(Chrom,dist)
Obj=ObjFunction(Chrom,dist); %计算种群目标函数值,即每个个体的总距离
FitnV=Fitness(Obj); %计算每个个体的适应度值,即总距离的倒数
[NIND,N]=size(Chrom); %NIND-种群个数、N-种群长度
Selch=zeros(NIND,N); %初始化二元锦标赛选择出的个体
for i=1:NIND
R=randperm(NIND); %生成一个1~NIND的随机排列
index1=R(1); %第一个比较的个体序号
index2=R(2); %第二个比较的个体序号
fit1=FitnV(index1,:); %第一个比较的个体的适应度值(适应度值越大,说明个体质量越高)
fit2=FitnV(index2,:); %第二个比较的个体的适应度值
%如果个体1的适应度值 大于等于 个体2的适应度值,则将个体1作为第i选择出的个体
if fit1>=fit2
Selch(i,:)=Chrom(index1,:);
else
%如果个体1的适应度值 小于 个体2的适应度值,则将个体2作为第i选择出的个体
Selch(i,:)=Chrom(index2,:);
end
end
end
今天主要讲一下二元锦标赛选择和轮盘赌操作具体的执行过程。
02 | 二元锦标赛选择
比如说有5个个体,每个个体的总距离分别如下(总距离越小越好):
个体1:11
个体2:12
个体3:13
个体4:14
个体5:15
初始选择出的个体为空,即Selch=[]。
那么我们需要选择5次,每次随机选出2个个体。
第1次。假设选出个体1和个体3,很明显个体1总距离更小,所以个体1更好,因此第1次选择个体1,并将个体添加到Selch中,此时Selch=[个体1]。
第2次。假设选出个体2和个体4,很明显个体2总距离更小,所以个体2更好,因此第2次选择个体2,并将个体添加到Selch中,此时Selch=[个体1; 个体2]。
第3次。假设选出个体2和个体5,很明显个体2总距离更小,所以个体2更好,因此第3次选择个体2,并将个体添加到Selch中,此时Selch=[个体1; 个体2; 个体2]。
第4次。假设选出个体2和个体1,很明显个体1总距离更小,所以个体1更好,因此第4次选择个体1,并将个体添加到Selch中,此时Selch=[个体1; 个体2; 个体2; 个体1]。
第5次。假设选出个体4和个体5,很明显个体4总距离更小,所以个体4更好,因此第5次选择个体4,并将个体添加到Selch中,此时Selch=[个体1; 个体2; 个体2; 个体1; 个体4]。
选择5次后的Selch=[个体1; 个体2; 个体2; 个体1; 个体4]。
03 | 轮盘赌
%
% @作者:随心390
% @微信公众号:优化算法交流地
%
%输入pSwap:选择交换结构的概率
%输入pReversion:选择逆转结构的概率
%输入pInsertion:选择插入结构的概率
%输出index:最终选择哪一个邻域结构,即序号:1 2 3
function index=Roulette(pSwap,pReversion,pInsertion)
p=[pSwap pReversion pInsertion];
r=rand;
c=cumsum(p);
index=find(r<=c,1,'first');
end
因为pSwap=0.2,pReversion=0.5 ,pInsertion=0.3。
所以,p=[0.2 0.5 0.3],c=[0.2 0.7 1]。假设随机数r=0.6那么index就是从左向右找出0.6比c中元素小的第一个位置,此时index=2。
04 | MATLAB代码链接
微信关注:优化算法交流地,后台回复GATSP即可提取代码。
更多资源,尽在优化算法交流地。
往期精彩
- 号内搜索
- 遗传算法(GA)求解旅行商问题(TSP)附MATLAB代码
- 车辆路径问题(VRP)合集
- 遗传算法求解0-1背包问题(附matlab源代码)
- 模拟退火(SA)算法求解旅行商 (TSP)问题MATLAB代码讲解
- 多目标优化 | 基于NSGA-II的多目标0-1背包问题求解(附matlab代码)
- 多目标优化 | NSGA-II进阶教程(全网首个三目标优化教程)
- 机器学习 | 基于遗传算法的BP神经网络优化算法(附MATLAB代码)
- 遗传算法求解车间调度问题(附MATLAB代码)
- 多目标优化 | NSGA-II
- word转换为pdf后图片失真的解决办法(全网首发)
- 机器学习 | 简单实现Bp神经网络
- 二维装箱问题之BL法修正版(附MATLAB代码)
- 快速入门文献管理软件-EndNote X9
- 最小二乘法(附MATLAB代码)
- NSGA-II多目标优化算法讲解(附MATLAB代码)
- 基于人工势场法的机器人二维路径规划(附MATLAB代码)
- 基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)
- 蚁群算法通俗讲解(附MATLAB代码)
今天的文章bp神经网络的matlab代码_遗传算法(GA)求解旅行商问题(TSP)MATLAB代码讲解分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/59920.html