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

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、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<=MAXGEN
obj=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,:);
end
end
%% 计算将当前城市插回到当前路线中“插入成本”最小的位置
%输入visit 待插入城市
%输入route: 一条行走路线
%输入dist: 距离矩阵
%输出newRoute: 将visit插入到当前路线最佳位置后的行走路线
%输出deltaC: 将visit插入到当前路线最佳位置后的插入成本
function [newRoute,deltaC]=insRoute(visit,route,dist,maxETD)
start=route(1); %起(终)点城市
rcopy=route; %复制路线
rcopy(rcopystart)=[]; %将start从rcopy中删除
lr=numel(route)-2; %除去起点城市和终点城市外,当前路径上的城市数目
%先将城市插回到增量最小的位置
rc0=[]; %记录插入城市后符合约束的路径
delta0=[]; %记录插入城市后的增量
for i=1:lr+1
if i
lr+1
rc=[start,rcopy,visit,start];
elseif i==1
rc=[start,visit,rcopy,start];
else
rc=[start,rcopy(1:i-1),visit,rcopy(i:end),start];
end
rc0=[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]高珊.基于贪婪随机自适应灰狼优化算法求解TSP的研究与应用[D].太原理工大学

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值