一、旅行商问题

TSP问题即旅行商问题,经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的哈密尔顿回路。

旅行商问题有很多种不同的问法,最近做了几个关于TSP的题,下面总结一下。由于大部分TSP问题都是NP-Hard的,因此很难得到什么高效的多项式级别的算法,一般采用的算法都偏向于暴力搜索以及状压DP,这里都采取用状压DP解决。大部分TSP问题所给的地点数目都非常小。

考虑经典的TSP问题,如果采用状压DP,将每个地点访问与否作为二进制1/0压缩,不难得到状态转移方程:
dp[S][i] = min(dp[S][i], dp[S ^ (1 << (i - 1))][k] + dist[k][i])
S代表当前状态,i(从1开始)表示到达当前状态时最后访问的是第i个地点
k为S中所有访问的与i不同的地点。
dist表示两点间最短路。
以及初始化:
DP[S][i] = dist[start][i](S == 1<<(i - 1))
如果初次遇到状压dp,感到陌生的话,就请仔细思考上面式子的含义,这是大部分TSP问题的关键。

二、灰狼算法

1、灰狼优化算法

灰狼隶属于群居生活的犬科动物,且处于食物链的顶层。灰狼严格遵守着一个社会支配等级关系。如图:

社会等级第一层:狼群中的头狼记为  狼主要负责对捕食、栖息、作息时间等活动作出决策。由于其它的狼需要服从 狼的命令,所以  狼也被称为支配狼。另外,  狼不一定是狼群中最强的狼,但就管理能力方面来说,  狼一定是最好的。

社会等级第二层 狼,它服从于  狼,并协助  狼作出决策。在  狼去世或衰老后, 狼将成为  狼的最候选者。虽然  狼服从  狼,但  狼可支配其它社会层级上的狼。

社会等级第三层 狼,它服从  、 狼,同时支配剩余层级的狼。 狼一般由幼狼、哨兵狼、狩猎狼、老年狼及护理狼组成。

社会等级第四层 狼,它通常需要服从其它社会层次上的狼。虽然看上去  狼在狼群中的作用不大,但是如果没有  狼的存在,狼群会出现内部问题如自相残杀。

GWO 优化过程包含了灰狼的社会等级分层跟踪包围攻击猎物等步骤,其步骤具体情况如下所示。

1)社会等级分层(Social Hierarchy)当设计 GWO 时,首先需构建灰狼社会等级层次模型。计算种群每个个体的适应度,将狼群中适应度最好的三匹灰狼依次标记为  、 ,而剩下的灰狼标记为 。也就是说,灰狼群体中的社会等级从高往低排列依次为;  、 及 。GWO 的优化过程主要由每代种群中的最好三个解(即  、 )来指导完成。

2)包围猎物( Encircling Prey )灰狼捜索猎物时会逐渐地接近猎物并包围它,该行为的数学模型如下:

式中:t 为当前迭代次数:。表示 hadamard 乘积操作;A 和 C 是协同系数向量;Xp 表示猎物的位置向量; X(t) 表示当前灰狼的位置向量;在整个迭代过程中 a 由2 线性降到 0; r1 和 r2 是 [0,1] 中的随机向量。

3)狩猎( Hunring)

灰狼具有识别潜在猎物(最优解)位置的能力,搜索过程主要靠  、 灰狼的指引来完成。但是很多问题的解空间特征是未知的,灰狼是无法确定猎物(最优解)的精确位置。为了模拟灰狼(候选解)的搜索行为,假设  、 具有较强识别潜在猎物位置的能力。因此,在每次迭代过程中,保留当前种群中的最好三只灰狼(  、 ),然后根据它们的位置信息来更新其它搜索代理(包括 )的位置。该行为的数学模型可表示如下:

式中: 分别表示当前种群中  、 的位置向量;X表示灰狼的位置向量; 分别表示当前候选灰狼与最优三条狼之间的距离;当|A|>1时,灰狼之间尽量分散在各区域并搜寻猎物。当|A|<1时,灰狼将集中捜索某个或某些区域的猎物。

从图中可看出,候选解的位置最终落在被  、 定义的随机圆位置内。总的来说,  、 需首先预测出猎物(潜 在最优解)的大致位置,然后其它候选狼在当前最优兰只狼的指引下在猎物附近随机地更新它们的位置。

4)攻击猎物(Attacking Prey)构建攻击猎物模型的过程中,根据2)中的公式,a值的减少会引起 A 的值也随之波动。换句话说,A 是一个在区间[-a,a](备注:原作者的第一篇论文里这里是[-2a,2a],后面论文里纠正为[-a,a])上的随机向量,其中a在迭代过程中呈线性下降。当 A 在[-1,1]区间上时,则捜索代理(Search Agent)的下一时刻位置可以在当前灰狼与猎物之间的任何位置上。

5)寻找猎物(Search for Prey)灰狼主要依赖  、 的信息来寻找猎物。它们开始分散地去搜索猎物位置信息,然后集中起来攻击猎物。对于分散模型的建立,通过|A|>1使其捜索代理远离猎物,这种搜索方式使 GWO 能进行全局搜索。GWO 算法中的另一个搜索系数是C。从2)中的公式可知,C向量是在区间范围[0,2]上的随机值构成的向量,此系数为猎物提供了随机权重,以便増加(|C|>1)或减少(|C|<1)。这有助于 GWO 在优化过程中展示出随机搜索行为,以避免算法陷入局部最优。值得注意的是,C并不是线性下降的,C在迭代过程中是随机值,该系数有利于算法跳出局部,特别是算法在迭代的后期显得尤为重要。

2.算法流程图

流程图

三、部分代码

clc;
clear;%% TSP问题设置
% 产生问题模型
model = CreateModel('Oliver30.txt');
% 城市分布图
figure(1);
plot(model.x, model.y, 'ms', 'LineWidth', 2, 'MarkerEdgeColor', 'k', 'MarkerFaceColor', 'g')
legend('城市位置')
title('城市分布图', 'fontsize', 12)
xlabel('km', 'fontsize', 12)
ylabel('km', 'fontsize', 12)
grid on
% 适应度函数句柄
Fun = @(tour) TourLength(tour, model);
% TSP参数
M = model.n;                % 城市个数
% GWO参数
N = 50;       % 灰狼个数
Max_iter = 1000;            % 最大迭代次数
lb = -10;   % Lower Bound
ub = 10;   % Upper Bound
dim = M;                        % 维数% 初始化alpha, beta, and delta_pos
Alpha_pos = zeros(1,dim);
Alpha_score = inf; Beta_pos = zeros(1,dim);
Beta_score = inf; Delta_pos = zeros(1,dim);
Delta_score = inf;
% 初始化种群位置
Positions = rand(N, dim).*(ub-lb)+lb;Length_best = zeros(1, Max_iter);
Length_ave = zeros(1, Max_iter);l = 1;   % 迭代计数器%% 迭代寻优
while l < Max_iter+1Positions(i, j) = (X1+X2+X3)/3;        % Equation (3.7)endend  Length_best(l) = Alpha_score;               % 最短距离Length_ave(l) = Length_ave(l)/dim;       % 平均距离disp(['Iteration ' num2str(l) ': Best Fitness = ' num2str(Alpha_score)]);l = l + 1;[~, BestSol] = sort(Alpha_pos);figure(2);PlotSolution(BestSol, model, Alpha_score);pause(0.01);
end%% 进化曲线
figure(3);
t = 1:Max_iter;
plot(t, Length_best, 'r', t, Length_ave, 'b--', 'LineWidth', 2);
xlabel('Iteration');
ylabel('Best Cost');
legend('最短距离','平均距离')
xlabel('迭代次数')
ylabel('距离')
title('各代最短距离与平均距离对比')

四、仿真结果

五、参考文献

[1]高珊,孟亮.贪婪随机自适应灰狼优化算法求解TSP问题[J].现代电子技术,2019,42(14):46-50+54.

【路径规划】基于灰狼算法求解旅行商TSP问题matlab源码相关推荐

  1. 【优化求解】改进灰狼算法求解重油热解模型matlab源码

    Grey Wolf Optimizer是Seyedali Mirjalili受大灰狼捕食策略的启发,于2014年提出的一种元启发式算法,主要模拟了搜索猎物.包围猎物和攻击猎物,源代码关注公众号后,回复 ...

  2. 【VRP问题】基于NSGA算法求解多中心VRP问题matlab源码

    1 简介 1.1 NSGAII算法 NSGA一II算法的基本思想为:首先,随机产生规模为N的初始种群,非支配排序后通过遗传算法的选择.交叉.变异三个基本操作得到第一代子代种群;其次,从第二代开始,将父 ...

  3. 【故障检测问题】基于matlab免疫算法求解故障检测问题【含Matlab源码 196期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[故障检测问题]基于matlab免疫算法求解故障检测问题[含Matlab源码 196期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭 ...

  4. 【优化求解】基于粒子群算法求解多目标优化问题matlab源码

    [优化求解]基于粒子群算法求解多目标优化问题matlab源码 1 算法介绍 1.1 关于速度和位置 粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快 ...

  5. 【路径规划-TSP问题】基于蚁群算法求解实际地图旅行商问题含Matlab源码

    1 内容介绍 旅行商问题的传统求解方法是遗 传算法,此算法收敛速度慢,并不能获得问题的最优解.为了求取旅行商问题的最优解,本文在阐述蚁群算法的基本原理,模型以及在旅行商问题中的实现过程的基 础上,提出 ...

  6. 【定位问题】基于matlab chan算法、fang算法、taylor算法求解目标定位问题【含Matlab源码 2135期】

    ⛄一.chan+taylor算法移动基站无源定位简介 1 引言 随着无人机的普及,低空空域的安全问题受到人们的极大关注.针对该问题,本研究对"非合作型"无人机采用一种基于时差法的无 ...

  7. 【LSTM回归预测】基于matlab灰狼算法优化LSTM回归预测【含Matlab源码 2038期】

    ⛄一.灰狼算法及LSTM简介 1 灰狼算法简介 1.1 前言 灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种 ...

  8. 【车间调度】基于灰狼优化算法求解柔性作业车间问题matlab源码

    一.简介 Grey Wolf Optimizer是Seyedali Mirjalili受大灰狼捕食策略的启发,于2014年提出的一种元启发式算法,主要模拟了搜索猎物.包围猎物和攻击猎物,源代码关注公众 ...

  9. 【优化求解】基于水母搜索优化器JS算法求解多目标优化问题matlab源码

    1 简介 1.1  人工水母算法原理背景 水母生活在世界上不同深度和温度的水中.它们酷似钟状,一些水母的直径小于1cm,然有些水母直径则非常大.它们有各种各样的颜色.大小和形状.大多数水母偏好海洋环境 ...

最新文章

  1. Java多线程复习:2(线程的创建和使用)
  2. EqualLogic控制器算法研究一:基本管理
  3. 用Arduino检测环境中的温湿度
  4. vue中弹窗input框聚焦_Vue 中如何让 input 聚焦?(包含视频讲解)
  5. java sqlldr导入_使用SQL*LOADER将TXT或CSV数据导入ORACLE(转)
  6. Android 底层驱动开发步骤——linux内核层、HAL层、JNI层
  7. Dubbo的终端操作方法
  8. cfg桩设备型号_试桩、试验桩、工程桩是一回事吗?
  9. java Socket通信(一)
  10. 详解log4j2(下) - 按日志级别区分文件输出
  11. Scala-2.13.0 安装及配置
  12. plt python 画直线_Matplotlib:先搞明白plt. /ax./ fig再画
  13. CFS调度器的思想的新理解
  14. 吴恩达点赞的deeplearning.ai课程总结
  15. EMNLP自然语言处理经验方法
  16. 胚胎干细胞研究成果集锦,目录大合集
  17. Element UI 进度条文字样式修改
  18. 拯救者笔记本ubuntu亮度调节
  19. 使用华为nexus6p进行拍并照裁剪图片和从相册裁剪图片
  20. Windows10下查看网卡MAC地址的方法

热门文章

  1. [Noip模拟题]寿司
  2. Android本机号码及Sim卡状态的获取
  3. Markdown中实现内容及代码块折叠操作
  4. python机器人算法_机器人实用Python代码合集,5大类算法助你搞定自主导航
  5. python下标越界异常_python异常处理
  6. python 异常类型(比较全)
  7. python 读取xml文件 正则_XML文件中配置正则表达式
  8. echarts中横坐标值显示不全(自动隐藏)解决方案
  9. 计算机二级和初级的区别
  10. android 8 微信红包,微信安卓8.0已来,这个更新让iOS用户羡慕