算法背景

灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优化算法。灵感来自于灰狼群体捕食行为。

优点:较强的收敛性能,结构简单、需要调节的参数少,容易实现,存在能够自适应调整的收敛因子以及信息反馈机制,能够在局部寻优与全局搜索之间实现平衡,因此在对问题的求解精度和收敛速度方面都有良好的性能。

缺点:存在着易早熟收敛,面对复杂问题时收敛精度不高,收敛速度不够快

应用:车间调度、参数优化、图像分类、路径规划。


算法思想

灰狼群体中有严格的等级制度,一小部分拥有绝对话语权的灰狼带领一群灰狼向猎物前进。灰狼群一般分为4个等级:  (权利从大到小)模拟领导阶层。

集体狩猎是灰狼的一种社会行为,社会等级在集体狩猎过程中发挥着重要的作用,捕食的过程在α的带领下完成。主要包括三个步骤:

  • 跟踪和接近猎物
  • 骚扰、追捕和包围猎物,直到它停止移动
  • 攻击猎物

社会等级分层

构建灰狼社会等级层次模型,对灰狼的社会等级进行数学建模。

考虑一个搜索空间,现实中狼群由眼睛嗅觉等等知道猎物的位置,然而计算机中模拟无法做到这点,但是我们可以假设,猎物位置是由我们在搜索空间中发现的最佳解决方案提供,我们可以使用该解决方案去找到更好的解决方案,不断迭代优化,此最优解决方案会非常接近最好的解决方案。

将  作为最优解(个体的适应度最优),次优解   ,最佳解决方案  ,剩下的候选解命名为 , 狩猎过程由  引导, 跟随这三只狼。即我们总是去找到三个最佳解决方案,然后围绕该区域进行搜索,目的是找到更好的解决方案然后更新 。


包围猎物

在狩猎过程中,将灰狼围捕猎物的行为定义如下:

个体与猎间的距离公式:

        (1)

灰狼位置更新公式:

        (2)

系数向量:

        (3)

        (4)

其中:t 为迭代次数,D 是个体与猎间的距离向量, ‘’ 不是点积,是乘法, 是猎物位置向量,X 为灰狼位置向量,  是收敛因子(随迭代次数从 2 线性减小到 0 ),r1 和 r2 是随机向量,模取【0-1】之间的随机数。

从公式可以看出,经过移动后灰狼群向  移动,移动方向由自身位置和随机向量 C 决定,移动步长由隔离距离灰狼距离和系数向量 A 决定,即  线性减小意味着随机性和运动步长幅度,步长随迭代次数而减小越来越接近最优解。

狩猎

灰狼能够识别猎物的位置并包围它们。当灰狼识别出猎物的位置后,  在  的带领下指导狼群包围猎物。灰狼个体跟踪猎物位置的数学模型描述如下:

                (5)

其中,  , 和  分别表示   和  , 与其他个体间的距离; 分别代表   和  ,当前的位置; 是随机向量,  X 是当前灰狼的位置。

                (6)

                (7)

式(6)分别定义了狼群中  个体朝向    和  ,  前进的步长和方向 ,式 (7) 定义了ω的最终位置。

攻击猎物

当猎物停止移动时,灰狼通过攻击来完成狩猎过程.为了模拟逼近猎物,  的值被逐渐减小,因此  A的波动范围也随之减小。换句话说,在迭代过程中,当   的值从2线性下降到0时,其对应的 A 的值也在区间 [ - ] 内变化。

如图所示,当  A 的值位于区间内时,灰狼的下一位置可以位于其当前位置和猎物位置之间的任意位置(由于随机),当 -1<A<1 时,狼群向猎物发起攻击(陷入局部最优)。当 A>1 或 A<-1 时,灰狼远离猎物,探索其他区域(为了找到全局最优解)。

GWO 另一个有利于全局探索的组件 C(随机权重) ,C 是[0,2]之间的随机向量。表示狼所在的位置对猎物影响的随机权重,C>1表示影响权重大,反之,表示影响权重小。在算法陷入了局部最优并且不易跳出时, C 的随机性在避免局部最优方面发挥了非常重要的作用。


算法流程

伪代码

Initialize the grey wolf population Xi (i=1,2,,,,n)
Initialize a,A,C,t=0Calculate the fitness of each search agent
X(alpha) = the best search agent
X(bete) = the second best search agent
X(delta) = the third best search agentwhile (t< Max number of iterations)for each search agentUpdate the position of the current search agentend forUpdate a,A,and CCalculate the fitness of all search agentsUpdate X(alpha),X(bete),and X(delta)t=t+1
end whilereturn X(alpha)

算法测试

求函数最大值(一元)

% 灰狼优化算法(求函数极值)
clc;
clear;
close all;
%% 目标函数
f= @(x) - (x - 10) .^ 2 + x .* sin(x) .* cos(2 * x) - 5 * x .* sin(3 * x) ; % 适应度函数表达式(求这个函数的最大值)
figure(1);
fplot(f, [0 20], 'b-');                 % 画出初始图像
title('初始图像');
hold on;
%% 初始化参数
N=30;       % 灰狼个数
dim=1;      % 维度
Iter=50;   % 最大迭代次数
a=2;        % 收敛因子
ub=20;      % 最大值限制
lb=0;       % 最小值限制% 初始化alpha,beta,delta
Alpha_pos=zeros(1,dim);
Alpha_score=-inf; %求最大值改为inf
Beta_pos=zeros(1,dim);
Beta_score=-inf;
Delta_pos=zeros(1,dim);
Delta_score=-inf;Positions=rand(N,dim).*(ub-lb)+lb;      % 初始化个体位置
Convergence_curve=zeros(1,Iter);        % 收敛曲线
l=0;        %循环次数记录%% 迭代求解
while l<Iterfor i=1:size(Positions,1)  % 超出边界处理Flag4ub=Positions(i,:)>ub;Flag4lb=Positions(i,:)<lb;Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;               % 计算个体适应度函数fitness=f(Positions(i,:));% 更新 Alpha, Beta, and Deltaif fitness>Alpha_score Alpha_score=fitness; Alpha_pos=Positions(i,:);end    if fitness<Alpha_score && fitness>Beta_score Beta_score=fitness; Beta_pos=Positions(i,:);end     if fitness<Alpha_score && fitness<Beta_score && fitness>Delta_score Delta_score=fitness; Delta_pos=Positions(i,:);endenda=2-l*((2)/Iter); % 收敛因子从2线性递减到0% 更新灰狼个体的位置for i=1:size(Positions,1)for j=1:size(Positions,2)     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;C1=2*r2;D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); X1=Alpha_pos(j)-A1*D_alpha;r1=rand();r2=rand();          A2=2*a*r1-a;C2=2*r2;       D_beta=abs(C2*Beta_pos(j)-Positions(i,j));X2=Beta_pos(j)-A2*D_beta;r1=rand();r2=rand();          A3=2*a*r1-a; C3=2*r2;          D_delta=abs(C3*Delta_pos(j)-Positions(i,j));X3=Delta_pos(j)-A3*D_delta;Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)         endendl=l+1;    Convergence_curve(l)=Alpha_score;
end
plot(Alpha_pos, f(Alpha_pos), '*r');figure(2);
plot(Convergence_curve);
title('收敛过程'); display(['The best solution obtained by GWO is : ', num2str(Alpha_pos)]);
display(['The best optimal value of the objective funciton found by GWO is : ', num2str(Alpha_score)]);

二元函数求最大值

% 灰狼优化算法(求函数极值)
clc;
clear;
close all;
%% 目标函数
[ZuoBiao_x, ZuoBiao_y] = meshgrid(-10:0.1:10,-5:0.1:5);   % 产生二维坐标
ZuoBiao_z = f_xy(ZuoBiao_x, ZuoBiao_y);
figure(1);
s = mesh(ZuoBiao_x, ZuoBiao_y, ZuoBiao_z);                % 画出初始图像
title('初始图像');
%% 初始化参数
N=30;       % 灰狼个数
dim=2;      % 维度
Iter=200;   % 最大迭代次数
a=2;        % 收敛因子
ub=[10 5];      % 最大值限制
lb=[-10 -5];       % 最小值限制% 初始化alpha,beta,delta
Alpha_pos=zeros(1,dim);
Alpha_score=-inf; %求最大值改为inf
Beta_pos=zeros(1,dim);
Beta_score=-inf;
Delta_pos=zeros(1,dim);
Delta_score=-inf;Positions=rand(N,dim).*(ub-lb)+lb;      % 初始化个体位置
Convergence_curve=zeros(1,Iter);        % 收敛曲线
l=0;        %循环次数记录%% 迭代求解
while l<Iterfor i=1:size(Positions,1)  % 超出边界处理Flag4ub=Positions(i,:)>ub;Flag4lb=Positions(i,:)<lb;Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;               % 计算个体适应度函数fitness=f_xy(Positions(i,1), Positions(i,2));% 更新 Alpha, Beta, and Deltaif fitness>Alpha_score Alpha_score=fitness; Alpha_pos=Positions(i,:);end    if fitness<Alpha_score && fitness>Beta_score Beta_score=fitness; Beta_pos=Positions(i,:);end     if fitness<Alpha_score && fitness<Beta_score && fitness>Delta_score Delta_score=fitness; Delta_pos=Positions(i,:);endenda=2-l*((2)/Iter); % 收敛因子从2线性递减到0% 更新灰狼个体的位置for i=1:size(Positions,1)for j=1:size(Positions,2)     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;C1=2*r2;D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); X1=Alpha_pos(j)-A1*D_alpha;r1=rand();r2=rand();          A2=2*a*r1-a;C2=2*r2;       D_beta=abs(C2*Beta_pos(j)-Positions(i,j));X2=Beta_pos(j)-A2*D_beta;r1=rand();r2=rand();          A3=2*a*r1-a; C3=2*r2;          D_delta=abs(C3*Delta_pos(j)-Positions(i,j));X3=Delta_pos(j)-A3*D_delta;Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)         endendl=l+1;    Convergence_curve(l)=Alpha_score;
endfigure(2);
plot(Convergence_curve);
title('收敛过程'); display(['The best solution obtained by GWO is : ', num2str(Alpha_pos)]);
display(['The best optimal value of the objective funciton found by GWO is : ', num2str(Alpha_score)]);

多元函书求最小值(代码,24个测试函数,感兴趣下载)

链接:https://pan.baidu.com/s/1sQxYMXhwF1xhRqhXB1kJpQ 
提取码:1234

GWO解TSP问题(网上找了好久,都不全,自己补充一下,简单注释一下,有问题私聊哦)

% 灰狼优化算法GWO (求TSP问题)
clc;
clear;
%% 初始化参数
N=100;            % 灰狼个数
Max_iter=1000;    % 最大迭代次数
load('city.mat');       % 导入城市数据
City=city;              % 保存城市位置用于计算距离
M=size(city,1);         % 得到TSP问题的规模,即城市数目
dim=M;      % 维度figure('name','灰狼优化算法');
plot(city(:,1),city(:,2),'o');  %描点   city--(30,2)
for i=1:Mtext(city(i,1)+0.5,city(i,2),num2str(i));       %标号
end
title('城市初始位置');% 初始化alpha,beta,delta
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=zeros(N,dim);
for i=1:NPositions(i,:)=randperm(dim);          %随机排列,比如[2 4 5 6 1 3]
endLength_best = zeros(1, Max_iter);       % 定义每次迭代的最短距离
Length_ave = zeros(1, Max_iter);        % 定义每次迭代的平均距离
l = 1;   % 迭代计数器
%% 迭代寻优
while l < Max_iter+1for i = 1:N% 按行升序排列产生城市序列[~, sol] = sort(Positions, 2);             % 计算目标函数值(即路径距离)fitness = Fun(sol(i, :),City,M);Length_ave(l) = Length_ave(l)+fitness;% 更新Alpha, Beta, and Deltaif fitness < Alpha_score Alpha_score = fitness; Alpha_pos = Positions(i, :);end     if fitness > Alpha_score && fitness < Beta_score Beta_score = fitness; Beta_pos = Positions(i, :);end  if fitness > Alpha_score && fitness > Beta_score && fitness < Delta_score Delta_score = fitness; Delta_pos = Positions(i, :);endend      a = 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;       C1 = 2*r2;              D_alpha = abs(C1*Alpha_pos(j)-Positions(i, j));X1 = Alpha_pos(j)-A1*D_alpha; r1 = rand();r2 = rand();     A2 = 2*a*r1-a;   C2 = 2*r2;         D_beta = abs(C2*Beta_pos(j)-Positions(i, j));  X2 = Beta_pos(j)-A2*D_beta;                              r1 = rand();r2 = rand();      A3 = 2*a*r1-a;     C3 = 2*r2;            D_delta = abs(C3*Delta_pos(j)-Positions(i, j));     X3 = Delta_pos(j)-A3*D_delta;                                       Positions(i, j) = (X1+X2+X3)/3;       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);         % 得到最优解
endfigure(2);
for i=1:M-1plot([City(BestSol(i),1),City(BestSol(i+1),1)],[City(BestSol(i),2),City(BestSol(i+1),2)],'bo-');hold on;
end
plot([City(BestSol(M),1),City(BestSol(1),1)],[City(BestSol(M),2),City(BestSol(1),2)],'ro-');
for i=1:Mtext(City(i,1)+0.5,City(i,2),num2str(i));       %标号
end
text(City(BestSol(1),1),City(BestSol(1),2),'    起点');
text(City(BestSol(M),1),City(BestSol(M),2),'    终点');
title('最终路线图');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('各代最短距离与平均距离对比')
P=zeros(1, 30);function len=Fun(sol,City,M)  % 距离计算函数
len=0;
for k=1:M-1len=len+sqrt(sum((City(sol(1,k),:)-City(sol(1,k+1),:)).^2));
end
len=len+sqrt(sum((City(sol(1,M),:)-City(sol(1,1),:)).^2));
end

测试数据依旧用我们以前用的:

链接:https://pan.baidu.com/s/1j7omLCzx1uIJS0VdBbR-eA 
提取码:1234

测试效果:


[1] S. Mirjalili, S. M. Mirjalili, and A. Lewis, "Grey Wolf Optimizer," Advances in Engineering Software, vol. 69, pp. 46-61, 2014.

灰狼优化算法(GWO)(解决TSP问题,代码完整免费)相关推荐

  1. 灰狼优化算法GWO的理论知识以及python代码实现

    灰狼优化算法GWO的理论知识以及python代码实现 GWO 算法的等级结构 GWO 算法的数学模型 灰狼算法的python实现 寻优结果 下载链接 GWO 算法的等级结构 灰狼优化算法是模拟食物链顶 ...

  2. 灰狼优化算法GWO求解置换流水车间调度问题FSP

    灰狼优化算法GWO求解置换流水车间调度问题 置换流水车间调度问题(PFSP)是一类最基本.最经典的流水车间调度问题,本文主要讨论使用灰狼优化算法(GWO)求解单目标PFSP. 置换流水车间调度问题模型 ...

  3. 灰狼优化算法GWO优化SVM支持向量机惩罚参数c和核函数参数g,有例子

    灰狼优化算法GWO优化SVM支持向量机惩罚参数c和核函数参数g,有例子,易上手,简单粗暴,替换数据即可,分类问题. 仅适应于windows系统,质量保证,完美运行. 本人在读博士研究生,已发表多篇sc ...

  4. 【Matlab】智能优化算法_灰狼优化算法GWO

    [Matlab]智能优化算法_灰狼优化算法GWO 1.背景介绍 2.基本思想 2.1 等级制度 2.2 狩猎方式 3.公式推导 3.1 社会等级制度 3.2 包围猎物 3.3 包围猎物 3.4 攻击猎 ...

  5. 灰狼优化算法--简单易懂附python代码

    ps:本博文为个人理解,如有错误请不吝赐教 本博文部分引用了 https://blog.csdn.net/haha0332/article/details/8880591*0 1.算法原理:简单的讲, ...

  6. 基于 Iterative 映射和单纯形法的改进灰狼优化算法-附代码

    基于 Iterative 映射和单纯形法的改进灰狼优化算法 文章目录 基于 Iterative 映射和单纯形法的改进灰狼优化算法 1.灰狼优化算法 2. 改进灰狼优化算法(SMIGWO) 2.1 混沌 ...

  7. Python实现GWO智能灰狼优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjal ...

  8. Python实现GWO智能灰狼优化算法优化支持向量机回归模型(svr算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjal ...

  9. Python实现GWO智能灰狼优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 灰狼优化算法(GWO),由澳大利亚格里菲斯大学学者 Mirjal ...

最新文章

  1. 生信服务器 | 更改 CentOS/RHEL 6/7 中的时区
  2. leetcode 2 Add two numbers
  3. kotlin集合操作符——总数操作符
  4. Java / Web项目中的NPM模块Browser-Sync
  5. 【渝粤教育】广东开放大学 综合英语1 形成性考核 (36)
  6. 红河学院计算机科学与技术,2016年红河学院计算机科学与技术专业最低分是多少?...
  7. pandas 更改单元格的值_懂Excel轻松入门Python数据分析包pandas(二十四):连续区域...
  8. python网络验证系统_python3+django2 开发易语言网络验证(下)
  9. code回归采访哭 ladies_南太铉直播下跪?星船新男团?Mina归队?Kingdom来了?itzy回归?...
  10. 【JAVA SE】第十二章 流(Stream)、IO流和文件(File)
  11. 【ElasticSearch】 ElasticSearch 写入流程
  12. 拓端tecdat|R语言ARIMA集成模型预测时间序列分析
  13. 如何使用 SQL 对数据进行分析?
  14. python大神年薪_我程序员年薪 80 万被亲戚鄙视不如在二本教书的博士生?
  15. html中href传递参数,a href带参数传递
  16. yamlip 安装_SpringBoot中yaml配置对象
  17. java聊天室持续监听,[Java聊天室server]实战之二 监听类
  18. 维基解密说会帮科技公司解决漏洞 可后者并不买账
  19. CDH部署完成后启动失败的解决方案
  20. 如何将自定义网站在iphone手机上添加至主屏幕的图标

热门文章

  1. 我分析了b站10万条弹幕,发现了歪嘴战神的终极奥义!(文末重磅福利)
  2. ArcGIS制作矢量动图
  3. 如何做成gif动画图片?教你简单三步制作gif动图
  4. cuda必须装在c盘吗_软件安装到C盘会影响计算机运行速度吗?一个问题引发的思考...
  5. 我们“看到”的物联网,未来真正走向领域是这些方面....
  6. windows磁盘管理
  7. squid缓存服务器 ACL访问控制 传统代理 透明代理 squid日志分析 反向代理
  8. Win10笔记本用雷电3接口外接显卡加速tensorflow深度学习步骤
  9. vc禁止标题栏拖动窗口
  10. python新版个人所得税_Python 小案例 计算个人所得税