一、TSP简介

旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
TSP的数学模型

二、灰狼算法简介

1 前言:
灰狼优化算法(Grey Wolf Optimizer,GWO)由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。该算法受到了灰狼捕食猎物活动的启发而开发的一种优化搜索方法,它具有较强的收敛性能、参数少、易实现等特点。近年来受到了学者的广泛关注,它己被成功地应用到了车间调度、参数优化、图像分类等领域中。
2 算法原理:
灰狼隶属于群居生活的犬科动物,且处于食物链的顶层。灰狼严格遵守着一个社会支配等级关系。如图:

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

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

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

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

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

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

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

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

3)狩猎( Hunring)

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

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

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

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

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

3 VRP问题描述:
假设在一个供求关系系统中,车辆从货源取货,配送到对应的若干配送点。车辆存在最大载货量,且配送可能有时间限制。需要合理安排取货时间,组织适当的行车路线,使用户需求得到满足,同时使某个代价函数最小,比如总工作时间最少、路径最短等。

可以看出TSP问题是VRP问题的一种简单特殊形式。因此,VRP也是一种NP hard 问题。

三、部分源代码

tic
clear
clc
%% 输入数据
dataset=importdata('input.txt');                    %数据中,每一列的含义分别为[序号,x坐标,y坐标]
x=dataset(:,2);                                     %x坐标
y=dataset(:,3);                                     %y坐标
vertexs=dataset(:,2:3);                             %提取各个城市的xy坐标
n=size(dataset,1);                                  %城市数目
m=5;                                                %旅行商数目
start=1;                                            %起点城市
h=pdist(vertexs);                                   %计算各个城市之间的距离,一共有1+2+......+(n-1)=n*(n-1)/2个
dist=squareform(h);                                 %将各个城市之间的距离转换为n行n列的距离矩阵
%% 灰狼算法参数设置
NIND=32;                                            %灰狼个体数目
MAXGEN=200;                                         %最大迭代次数
k=m;                                                %移除相邻路径的数目
%% 初始化种群
population=init_pop(NIND,n,m,start);
init_obj=obj_function(population,n,m,start,dist);   %初始种群目标函数值
%% 灰狼优化
gen=1;                                              %计数器
best_alpha=zeros(MAXGEN,n+m-1);                     %记录每次迭代过程中全局最优灰狼个体
best_obj=zeros(MAXGEN,1);                           %记录每次迭代过程中全局最优灰狼个体的目标函数值alpha_individual=population(1,:);                   %初始灰狼α个体
alpha_obj=init_obj(1);                              %初始灰狼α的目标函数值
beta_individual=population(2,:);                    %初始灰狼β个体
beta_obj=init_obj(2);                               %初始灰狼β的目标函数值
delta_individual=population(3,:);                   %初始灰狼δ个体
delta_obj=init_obj(3);                              %初始灰狼δ的目标函数值
while gen<=MAXGENobj=obj_function(population,n,m,start,dist);    %计算灰狼种群目标函数值%% 确定当前种群中的灰狼α个体、灰狼β个体和灰狼δ个体for i=1:NIND%更新灰狼α个体if obj(i,1)<alpha_obj alpha_obj=obj(i,1); alpha_individual=population(i,:);end%更新灰狼β个体if obj(i,1)>alpha_obj && obj(i,1)<beta_obj beta_obj=obj(i,1); beta_individual=population(i,:);end%更新灰狼δ个体if obj(i,1)>alpha_obj && obj(i,1)>beta_obj && obj(i,1)<delta_obj delta_obj=obj(i,1); delta_individual=population(i,:);endend%% 计算将当前城市插回到当前路线中“插入成本”最小的位置
%输入visit         待插入城市
%输入route:       一条行走路线
%输入dist:        距离矩阵
%输出newRoute:    将visit插入到当前路线最佳位置后的行走路线
%输出deltaC:      将visit插入到当前路线最佳位置后的插入成本
function [newRoute,deltaC]=insRoute(visit,route,dist,maxETD)
start=route(1);                             %起(终)点城市
rcopy=route;                                %复制路线
rcopy(rcopy==start)=[];                     %将start从rcopy中删除
lr=numel(route)-2;                          %除去起点城市和终点城市外,当前路径上的城市数目
%先将城市插回到增量最小的位置
rc0=[];                                     %记录插入城市后符合约束的路径
delta0=[];                                  %记录插入城市后的增量
for i=1:lr+1if i==lr+1rc=[start,rcopy,visit,start];elseif i==1rc=[start,visit,rcopy,start];elserc=[start,rcopy(1:i-1),visit,rcopy(i:end),start];endrc0=[rc0;rc];                           %将路径存储到rc0,其中rc0与delta0对应alen=route_length(rc,dist);dif=alen-maxETD;                        %计算插入成本delta0=[delta0;dif];                    %将插入成本存储到delta0
end
[deltaC,ind]=min(delta0);
newRoute=rc0(ind,:);
end

四、运行结果



五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

【MVO MTSP】基于matlab灰狼算法求解多旅行商问题(同始终点)【含Matlab源码 1564期】相关推荐

  1. 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  2. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  3. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  4. 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DWT音频数字水印[含GUI源码 712期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  5. 【Matlab通信】DTMF双音多频电话拨号仿真【含GUI源码 805期】

    一.代码运行视频(哔哩哔哩) [Matlab通信]DTMF双音多频电话拨号仿真[含GUI源码 805期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  6. 【Matlab心音信号】EMD心音信号特征提取【含GUI源码 1735期】

    一.代码运行视频(哔哩哔哩) [Matlab心音信号]EMD心音信号特征提取[含GUI源码 1735期] 二.matlab版本及参考文献 1 matlab版本 2014a *2 参考文献 [1] 沈再 ...

  7. 【选址优化】基于粒子群算法求解配电网抢修选址优化问题含Matlab源码

    1 简介 基于粒子群算法求解配电网抢修选址优化问题​. 2 部分代码 function DrawCircle(Circle1, Circle2, r, 3600, s)​plot(model.trou ...

  8. 【路径规划】基于matlab灰狼算法机器人栅格地图最短路径规划【含Matlab源码 2334期】

    ⛄一.灰狼算法的厂房巡检机器人路径规划简介 0 引言 近年来,我国各行各业的不断发展使相关工作流程得到了完善,其中巡检岗位是一个不可或缺的职位,尤其是在电厂.燃气厂房和煤矿等危险领域中的工作,更不能缺 ...

  9. 【路径规划】基于matlab灰狼算法机器人栅格地图最短路径规划【含Matlab源码 1761期】

    ⛄一.灰狼算法的厂房巡检机器人路径规划简介 0 引言 近年来,我国各行各业的不断发展使相关工作流程得到了完善,其中巡检岗位是一个不可或缺的职位,尤其是在电厂.燃气厂房和煤矿等危险领域中的工作,更不能缺 ...

  10. 【WSN定位】基于matlab灰狼算法优化无线传感器非测距定位【含Matlab源码 2008期】

    一.无线传感器网络DVHop定位算法简介 1 传统DV-hop算法定位算法原理 DV-hop算法中主要将节点分为锚节点与未知节点,锚节点在整个网络中占有一定的比例,因为锚节点本身带有GPS定位系统,而 ...

最新文章

  1. 美国新规:自动驾驶车,从此不需要驾驶位了
  2. 音叉晶体振荡器-32.768Hz
  3. matlab 转换 tfrecord,训练数据集与TFRecord互相转换的两种方式
  4. 【Android 逆向】ELF 文件格式 ( 程序头数据 | 节区头数据 | 动态符号表 )
  5. 简易ASP文件缓存技术
  6. python转义符个数,python(五)——运算符、字符串、转义字符
  7. Java链表—— LinkedList
  8. 自定义ant中table表格的展开图标 修改ant-vue-design中嵌套表格table的expandIcon自定义图标
  9. 天合光能环卫机器人_无人驾驶已在南京多个领域落地!无人环卫,离全面落地还有多久...
  10. 传统企业是滚雪球逻辑
  11. AcWing 890. 能被整除的数(容斥原理)
  12. FPGA(FIR)数字信号处理
  13. java集成极光推送
  14. 在oracle中使用lpad函数生成唯一标识符ID
  15. 中兴--维克多博士问题(背包问题升级版)
  16. 我是屌丝——彪悍的人生不需要代言
  17. 利用Excel进行多张表的合并计算,操作简单
  18. virtualxposed使用教程_Xposed 插件开发入门教程(一)
  19. 使用Eclipse把java文件打包成jar
  20. 萌新问题合集:2.win10关于ftp保存了密码怎么取消?

热门文章

  1. android 手机ssh客户端,android手机ssh客户端ConnectBot
  2. mysql 数组_mysql怎么存数组
  3. 第一台电子计算机乌拉尔,2018网易爱乐之战题目答案大全一览
  4. 按键精灵html库,【源码分享】雷电模拟器 - 按键精灵PC - 命令库
  5. 华为员工能拿多少钱,揭秘一个真实的华为
  6. python中的wait和notify
  7. qq企业邮箱登录服务器,腾讯邮箱登录入口(腾讯企业邮箱免费用户申请)
  8. SAR、PAR和DAR
  9. Merlin——零知识证明(1)理论篇
  10. 数据结构--逻辑结构