1 算法介绍

1.1 TSP介绍

“旅行商问题”(Traveling Salesman Problem,TSP)可简单描述为:一位销售商从n个城市中的某一城市出发,不重复地走完其余n-1个城市并回到原出发点,在所有可能路径中求出路径长度最短的一条。

旅行商的路线可以看作是对n城市所设计的一个环形,或者是对一列n个城市的排列。由于对n个城市所有可能的遍历数目可达(n-1)!个,因此解决这个问题需要O(n!)的计算时间。而由美国密执根大学的Holland教授发展起来的遗传算法,是一种求解问题的高效并行全局搜索方法,能够解决复杂的全局优化问题,解决TSP问题也成为遗传算法界的一个目标。

1.2 灰狼算法求解tsp模型

灰狼算法(greywolfoptimizer,gwo)是澳大利亚学者seyedalimirjalili于2014年根据灰狼种群的习性提出的一种元启发式算法。该算法根据灰狼喜欢群居的特性引入了社会统治阶层。在种群中,将其分为四个阶层:α狼(负责对种群发出命令的优势狼,即领头狼);β狼(辅助头狼做出决策等活动的优势狼);δ狼(侦察、站岗、狩猎和看护幼崽等相关活动是这种狼的主要活动,是服从于前两种狼的优势狼。);ω狼(服从于前三种优势狼,是位于统治阶级中最底端的狼)。算法利用根据灰狼种群在搜寻、围捕猎物的行为构建算法的数学描述公式,通过迭代获取最优解。通过基准函数的仿真结果表明,灰狼算法能够比遗传算法、粒子群算法等更快更好地完成最优解的搜寻。虽然灰狼算法在连续空间表现出了较好地应用效果,但是应对tsp问题时,在离散空间下的表现不是十分满意。因此,需要对传统的灰狼算进行改进,来更有效地处理tsp问题。

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+1for i = 1:N% 边界处理Flag4ub = Positions(i, :) > ub;Flag4lb = Positions(i, :) < lb;Positions(i, :) = (Positions(i, :).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;             % 按行升序排列产生城市序列[~, sol] = sort(Positions, 2);      % 计算目标函数值(即路径距离)fitness = Fun(sol(i, :));Length_ave(l) = Length_ave(l)+fitness;% 更新Alpha, Beta, and Deltaif fitness < Alpha_score Alpha_score = fitness; Alpha_pos = Positions(i, :);endif fitness > Alpha_score && fitness < Beta_score Beta_score = fitness; Beta_pos = Positions(i, :);endif fitness > Alpha_score && fitness > Beta_score && fitness < Delta_score Delta_score = fitness; Delta_pos = Positions(i, :);endenda = 2-l*((2)/Max_iter); % a从2线性减到0% 更新所有个体位置for i = 1:Nfor j = 1:dim r1 = rand(); % r1 is a random number in [0,1]r2 = rand(); % r2 is a random number in [0,1]A1 = 2*a*r1-a;        % Equation (3.3)C1 = 2*r2;              % Equation (3.4)D_alpha = abs(C1*Alpha_pos(j)-Positions(i, j)); % Equation (3.5)-part 1X1 = Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1r1 = rand();r2 = rand();A2 = 2*a*r1-a;    % Equation (3.3)C2 = 2*r2;          % Equation (3.4)D_beta = abs(C2*Beta_pos(j)-Positions(i, j));   % Equation (3.5)-part 2X2 = Beta_pos(j)-A2*D_beta;                        % Equation (3.6)-part 2       r1 = rand();r2 = rand(); A3 = 2*a*r1-a;      % Equation (3.3)C3 = 2*r2;             % Equation (3.4)D_delta = abs(C3*Delta_pos(j)-Positions(i, j));      % Equation (3.5)-part 3X3 = Delta_pos(j)-A3*D_delta;                            % Equation (3.5)-part 3             Positions(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('各代最短距离与平均距离对比')

3 仿真结果

4 参考文献

[1]高珊. 基于贪婪随机自适应灰狼优化算法求解TSP的研究与应用[D]. 太原理工大学.

[2]李延柯, 原慧琳. 一种基于灰狼算法的路径规划方法:, CN110675004A[P]. 2020.

5 代码下载

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

  1. 【路径规划】基于萤火虫算法求解旅行商问题matlab源码

    1 简介 基于求解TSP问题,提出一种离散型萤火虫群优化(DGSO)算法,该算法结合TSP问题特点,给出一种有效编码和解码方法,并定义适合编码的个体间距离计算公式和编码更新公式.同时,为增强算法求解T ...

  2. 【TSP问题】基于改进遗传算法求解旅行商问题matlab源码

    1 算法介绍 模型介绍见这里. 2 部分代码 nn=40; % number of cities asz=10; % area size asx x asz ​ ​ ps=3000; % popula ...

  3. 【优化算法】粒子群优化灰狼算法【含Matlab源码 006期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]粒子群优化灰狼算法[含Matlab源码 006期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏优化求解( ...

  4. 【优化算法】莱维飞行和随机游动策略的灰狼算法【含Matlab源码 1500期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]莱维飞行和随机游动策略的灰狼算法[含Matlab源码 1500期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  5. qr-rls算法matlab实现,【预测模型】基于RLS算法进行预测matlab源码

    一.简介 1 概述 递归最小二乘(RLS)算法是一种典型的数据处理方法,由著名学者高斯在1795年提出,高斯认为,根据所获得的观测数据来推断未知参数时,未知参数最可能的值是这样一个数据,即它使各项实际 ...

  6. 【图像处理】基于ART算法实现图像重建matlab源码

    1 简介 ART算法是一个不断迭代的图像重建方法,提高该算法的重建速度一直是研究的重要方面.针对ART算法简化权因子重建模型,提出了一种快速网格遍历算法,通过简单的加减法和比较运算,即可确定射束穿过的 ...

  7. 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  8. 【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab划分法k-means聚类算法[含Matlab源码 1941期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  9. 【聚类算法】基于matlab改进的粒子群算法优化K-means算法【含Matlab源码 1946期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab改进的粒子群算法优化K-means算法[含Matlab源码 1946期] 点击上面蓝色字体,直接付费下载,即可 ...

最新文章

  1. shell脚本 逐行读取文本并且 进行字符串的截取
  2. 调用c++_WebAssembly: 在C代码中调用JS的函数
  3. 高可用的 MFS 文件分布式系统(Drdb+heartbeat+MFS )
  4. cef在android中使用_关于富文本在Android中的应用以及遇到的坑
  5. Mongodb最基础入门教程
  6. 服务器内的虚拟机无法上网,VMware虚拟机中无法上网如何解决
  7. pxe安装linux系统工具,Linux的PXE自动化无人值守安装系统
  8. 此笔记只作为自身笔记,结构比较混乱,不建议参考,如有需要请访问其他文献,servlet的基础知识和使用
  9. python 有限域函数库_有限域:计算矩阵的逆
  10. linux下安装oracle instant client,linux下安装Oracle instant client
  11. 融云 SDK 5.0.0 功能迭代
  12. 微信小程序编辑与显示列表信息
  13. Halcon教程第一讲 读取多张图片
  14. android 简书代码截图工具,Android 截屏
  15. mysql数据库repair_MySQL数据库中的REPAIRTABLE语法介绍
  16. python登录脚本_python实现的登录和操作开心网脚本分享
  17. 2016 安全行业全景图——By 安全牛
  18. pii 400_为什么要加密所有个人身份信息(PII)
  19. 猫眼爬虫三-终极篇:破解滑动验证,动态字体加密
  20. 聊一聊 vscode 的代码格式化

热门文章

  1. IDEA把C盘占满的问题
  2. 国内物联网平台(4):京东微联
  3. 电脑在IDE模式下能正常启动,改成AHCI后蓝屏——解决方法
  4. Nginx部署VUE前端页面(图文解说详细版)
  5. 小米生态链之冷思考:究竟要“链”上多少行业?最终会停在哪里?
  6. C++挖掘程序本质(第二章C++面向对象-上)李明杰-M了个J 配套教材
  7. 利用爬虫爬取 zol网站热门手机
  8. 小熊派回顾:学习GPIO,学习ADC
  9. OVS 网桥的相关说明
  10. macOS 10.14 mojave安装低版本iTunes 12.6.x (转载)