头脑风暴优化算法_一种新颖的交叉算子——头脑风暴优化(BSO)算法求解旅行商问题(TSP)预备知识...

本文介绍了使用头脑风暴优化(BSO)算法求解旅行商问题(TSP)时的一种新颖交叉算子。通过详细步骤展示了如何生成子代个体,该算子结合贪婪思想,根据城市间距离选择相邻节点。文章以8个城市为例,解释了交叉算子的工作原理,并预告了其在BSO求解TSP中的应用效果。
摘要由CSDN通过智能技术生成
知乎视频​www.zhihu.com
zhihu-card-default.svg

hello,大家好,祝各位端午节快乐!虽说已经是假期,但习惯了平日上班工作的节奏,于是默默地打开了电脑看起了文献。近期打算更新一篇头脑风暴优化(BSO)算法求解旅行商问题(TSP)的推文,在查阅相关文献的时候,看到了一个比较有趣的交叉算子,至于这个交叉算子和BSO求解TSP问题有什么关联,下一期推文会为大家讲解。今天,各位小伙伴先了解一下这个交叉算子的实现机制即可。

我们还是以求解TSP问题为例,8个城市的坐标如下所示。

618d060b559e8cc1eb429881d5b61249.png

每两个点之间的距离矩阵如下所示:

07bd9faef1bbd4e4a3830a48db9df0e5.png

现在随机生成两个父代个体parent1和parent2,分别如下:

parent1:1 2 4 6 7 5 8 3,总距离为200.7。

parent2:3 5 1 4 2 7 6 8,总距离为261.9。

然后按照以下步骤生成子代个体child1和child2


(1)初始化child1和child2。

child1=zeros(1,8);              %初始化子代个体1
child2=zeros(1,8);              %初始化子代个体2

(2)先随机生成一个1~8之间的随机数,作为child1和child2的起点,比如说为这个随机数为6,即start=6

start=randperm(8,1);            %随机选择一个城市作为子代个体的起点
start_c=start;                  %复制start
child1(1)=start;                %更新子代个体1的起点为start
child2(1)=start;                %更新子代个体2的起点为start

(3)复制父代个体parent1和parent2,初始化child1更新的位置pos,因为起点已经确定,所以pos初始化为2

parent1_c1=parent1;             %复制parent1
parent2_c1=parent2;             %复制parent2
pos=2;                          %记录child中的位置

(4)先更新子代个体child1

a)分别在parent1_c1中找到与城市6右侧紧邻的城市right1,parent2_c1中找到与城市6右侧紧邻的城市right2。此例中parent1_c1中与城市6右侧紧邻的城市是7,parent2_c1中与城市6右侧紧邻的城市是8。

b)比较6和7之间的距离dist(6,7)与6和8之间的距离dist(6,8)的大小,

如果dist(6,7)<=dist(6,8),则更新child1的第2个位置上的元素,即child1(pos)=7。否则,child1(pos)=8。

这里其实采用的就是一种贪婪的思想,哪个右紧邻点离6近,就选择哪个点作为下一个点这里因为dist(6,7)<=dist(6,8),所以child1(2)=7

c)将城市6从parent1_c1和parent2_c1删除,此时

parent1_c1:1 2 4 7 5 8 3

parent2_c2:3 5 1 4 2 7 8

%% 更新parent1_c1和parent2_c1
parent1_c1(parent1_c1==start)=[];
parent2_c1(parent2_c1==start)=[];

d)更新start和pos,此时start=7和pos=3

%% 更新start
start=child1(pos);
%% 更新pos
pos=pos+1;

e)按照上述方式不断循环,直到parent1_c1中,只剩下一个元素。


(5)最终child1为6 7 8 3 1 2 5 4,总距离为145.6


(6)复制父代个体parent1和parent2,重置child2的起点为start_c,重置更新位置pos为2

parent1_c2=parent1;             %复制parent1
parent2_c2=parent2;             %复制parent2
start=start_c;                  %更新start为初始start
pos=2;                          %记录child中的位置

(7)再更新子代个体child2

a)分别在parent1_c2中找到与城市6左侧紧邻的城市right1,parent2_c2中找到与城市6左侧紧邻的城市right2。此例中parent1_c2中与城市6左侧紧邻的城市是4,parent2_c2中与城市6左侧紧邻的城市是7。

b)比较dist(4,6)与dist(7,6)的大小,

如果dist(4,6)<=dist(7,6),则更新child2的第2个位置上的元素,即child2(pos)=4。否则,child2(pos)=7。这里因为dist(4,6)>dist(7,6),所以child2(2)=7

c)将城市6从parent1_c2和parent2_c2删除,此时

parent1_c1:1 2 4 7 5 8 3

parent2_c2:3 5 1 4 2 7 8

%% 更新parent1_c2和parent2_c2
parent1_c2(parent1_c2==start)=[];
parent2_c2(parent2_c2==start)=[];

d)更新start和pos,此时start=7和pos=3

e)按照上述方式不断循环,直到parent1_c2中,只剩下一个元素。


(8)最终child2为6 7 2 1 3 8 5 4,总距离为178.8

可以看出这种交叉算子得出的结果还是不错的,那究竟它与BSO的结合求解TSP的效果会如何呢?

下期会公布结果,敬请期待。

参考

Wu Y , Wang X , Qi J , et al. An Adaptive Brain Storm Optimization Algorithm Based on Heuristic Operators for TSP[M]// Bio-inspired Computing: Theories and Applications. 2020.

各位新来的小伙伴如果是智能优化算法初学者的话,可以看

如何自学智能优化算法?​mp.weixin.qq.com
4680603eebca2074a683f0d3cb15ae24.png

这篇推文快速进行学习。

更多资源尽在:优化算法交流地

往期精选

  • 号内搜索
  • 如何自学智能优化算法?
  • 头脑风暴优化(BSO)算法(附MATLAB代码)
  • 遗传模拟退火算法求解旅行商(TSP)问题
  • 车辆路径问题(VRP)合集
  • 旅行商问题(TSP)合辑
  • MATLAB导入txt文件技巧大全
  • 遗传算法(GA)求解旅行商问题(TSP)MATLAB代码讲解
  • 遗传算法求解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代码)
  • 混合粒子群算法通俗讲解(附MATLAB代码)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值