返回顶部
首页 > 资讯 > 后端开发 > Python >Python&Matlab如何实现灰狼优化算法
  • 220
分享到

Python&Matlab如何实现灰狼优化算法

2023-06-29 14:06:13 220人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关python&Matlab如何实现灰狼优化算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 灰狼优化算法基本思想灰狼优化算法是一种群智能优化算法,它的独特之处在于一小部分拥有

这篇文章给大家分享的是有关python&Matlab如何实现灰狼优化算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1 灰狼优化算法基本思想

灰狼优化算法是一种群智能优化算法,它的独特之处在于一小部分拥有绝对话语权的灰狼带领一群灰狼向猎物前进。在了解灰狼优化算法的特点之前,我们有必要了解灰狼群中的等级制度。

Python&Matlab如何实现灰狼优化算法

灰狼群一般分为4个等级:处于第一等级的灰狼用α表示,处于第二阶级的灰狼用β表示,处于第三阶段的灰狼用δ表示,处于第四等级的灰狼用ω表示。按照上述等级的划分,灰狼α对灰狼β、δ和ω有绝对的支配权;灰狼ω对灰狼δ和ω有绝对的支配权;灰狼δ对灰狼ω有绝对的支配权。

2 灰狼捕食猎物过程

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

2.1 社会等级分层

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

2.2 包围猎物

灰狼群体通过以下几个公式逐渐接近并包围猎物:

Python&Matlab如何实现灰狼优化算法

式中,t是当前的迭代代数,A和C是系数向量,Xp和X分别是猎物的位置向量和灰狼的位置向量。A和C的计算公式如下:  

Python&Matlab如何实现灰狼优化算法

式中,a是收敛因子,随着迭代次数从2线性减小到0,r1和r 2服从[ 0,1]之间的均匀分布。

2.3 狩猎

狼群中其他灰狼个体Xi根据α、β和百的位置Xa、XB和Xo来更新各自的位置:

Python&Matlab如何实现灰狼优化算法

式中,Da,Dβ和D6分别表示a,β和5与其他个体间的距离;Xa,Xβ和X6分别代表a,β和5的当前位置;C1,C2,C3是随机向量,X是当前灰狼的位置。

灰狼个体的位置更新公式如下:

Python&Matlab如何实现灰狼优化算法

2.4 攻击猎物

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

2.5 寻找猎物

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

3 实现步骤及程序框图

3.1 步骤

Step1:种群初始化:包括种群数量N,最大迭代次数Maxlter,调控参数a,A,C.

Step2:根据变量的上下界来随机初始化灰狼个体的位置X。

Step3:计算每一头狼的适应度值,并将种群中适应度值最优的狼的位置信息保存Xα,将种群中适应度值次优的狼的位置信息保存为Xβ,将种群中适应度第三优的灰狼的位置信息保存为Xγ

Step4:更新灰狼个体X的位置。

step5:更新参数a,A和C。

Step6:计算每一头灰狼的适应度值,并更新三匹头狼的最优位置。

Step7:判断是否到达最大迭代次数Maxlter,若满足则算法停止并返回Xa的值作为最终得到的最优解,否则转到Step4。

3.2 程序框图

Python&Matlab如何实现灰狼优化算法

4 Python代码实现

 #=======导入线管库======import randomimport numpy #完整代码见微信公众号:电力系统与算法之美#输入关键字:灰狼算法 def GWO(objf, lb, ub, dim, SearchAgents_no, Max_iter):     #===初始化 alpha, beta, and delta_pos=======    Alpha_pos = numpy.zeros(dim)  # 位置.形成30的列表    Alpha_score = float("inf")  # 这个是表示“正负无穷”,所有数都比 +inf 小;正无穷:float("inf"); 负无穷:float("-inf")     Beta_pos = numpy.zeros(dim)    Beta_score = float("inf")     Delta_pos = numpy.zeros(dim)    Delta_score = float("inf")  # float() 函数用于将整数和字符串转换成浮点数。     #====list列表类型=============    if not isinstance(lb, list):  # 作用:来判断一个对象是否是一个已知的类型。 其第一个参数(object)为对象,第二个参数(type)为类型名,若对象的类型与参数二的类型相同则返回True        lb = [lb] * dim  # 生成[100,100,.....100]30个    if not isinstance(ub, list):        ub = [ub] * dim     #========初始化所有狼的位置===================    Positions = numpy.zeros((SearchAgents_no, dim))    for i in range(dim):  # 形成5*30个数[-100,100)以内        Positions[:, i] = numpy.random.unifORM(0, 1, SearchAgents_no) * (ub[i] - lb[i]) + lb[            i]  # 形成[5个0-1的数]*100-(-100)-100    Convergence_curve = numpy.zeros(Max_iter)     #========迭代寻优=====================    for l in range(0, Max_iter):  # 迭代1000        for i in range(0, SearchAgents_no):  # 5            #====返回超出搜索空间边界的搜索代理====            for j in range(dim):  # 30                Positions[i, j] = numpy.clip(Positions[i, j], lb[j], ub[                    j])  # clip这个函数将将数组中的元素限制在a_min(-100), a_max(100)之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。                  #===========以上的循环里,Alpha、Beta、Delta===========        a = 2 - l * ((2) / Max_iter);  #   a从2线性减少到0         for i in range(0, SearchAgents_no):            for j in range(0, dim):                r1 = random.random()  # r1 is a random number in [0,1]主要生成一个0-1的随机浮点数。                r2 = random.random()  # r2 is a random number in [0,1]                 A1 = 2 * a * r1 - a;  # Equation (3.3)                C1 = 2 * r2;  # Equation (3.4)                # D_alpha表示候选狼与Alpha狼的距离                D_alpha = abs(C1 * Alpha_pos[j] - Positions[                    i, j]);  # abs() 函数返回数字的绝对值。Alpha_pos[j]表示Alpha位置,Positions[i,j])候选灰狼所在位置                X1 = Alpha_pos[j] - A1 * D_alpha;  # X1表示根据alpha得出的下一代灰狼位置向量                 r1 = random.random()                r2 = random.random()                 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 = random.random()                r2 = random.random()                 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  # 候选狼的位置更新为根据Alpha、Beta、Delta得出的下一代灰狼地址。         Convergence_curve[l] = Alpha_score;         if (l % 1 == 0):            print(['迭代次数为' + str(l) + ' 的迭代结果' + str(Alpha_score)]);  # 每一次的迭代结果 #========函数==========def F1(x):    s=numpy.sum(x**2);    return s #===========主程序================func_details = ['F1', -100, 100, 30]function_name = func_details[0]Max_iter = 1000#迭代次数lb = -100#下界ub = 100#上届dim = 30#狼的寻值范围SearchAgents_no = 5#寻值的狼的数量x = GWO(F1, lb, ub, dim, SearchAgents_no, Max_iter)

Python&Matlab如何实现灰狼优化算法

5 Matlab实现

% 主程序 GWOclearclose allclc %%完整代码见微信公众号:电力系统与算法之美 %输入关键字:灰狼算法 SearchAgents_no = 30 ; % 种群规模dim = 10 ; % 粒子维度Max_iter = 1000 ; % 迭代次数ub = 5 ;lb = -5 ; %% 初始化三匹头狼的位置Alpha_pos=zeros(1,dim);Alpha_score=inf;  Beta_pos=zeros(1,dim);Beta_score=inf;  Delta_pos=zeros(1,dim);Delta_score=inf;    Convergence_curve = zeros(Max_iter,1); %% 开始循环for l=1:Max_iter    for i=1:size(Positions,1)                 %% 返回超出搜索空间边界的搜索代理        Flag4ub=Positions(i,:)>ub;        Flag4lb=Positions(i,:)<lb;        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;                               %% 计算每个搜索代理的目标函数        fitness=sum(Positions(i,:).^2);                %% 更新 Alpha, Beta, and Delta        if fitness<Alpha_score             Alpha_score=fitness; % Update alpha            Alpha_pos=Positions(i,:);        end                if fitness>Alpha_score && fitness<Beta_score             Beta_score=fitness; % Update beta            Beta_pos=Positions(i,:);        end                if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score             Delta_score=fitness; % Update delta            Delta_pos=Positions(i,:);        end    end            a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0        %% 更新搜索代理的位置,包括omegas    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; % Equation (3.3)            C1=2*r2; % Equation (3.4)                        D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1            X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1                                   r1=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 2            X2=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 3            X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3                                     Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)                    end    end      Convergence_curve(l)=Alpha_score;    disp(['Iteration = ' num2str(l)  ', Evaluations = ' num2str(Alpha_score)]); end%========可视化==============figure('unit','normalize','Position',[0.3,0.35,0.4,0.35],'color',[1 1 1],'toolbar','none')%% 目标空间subplot(1,2,1);x = -5:0.1:5;y=x;L=length(x);f=zeros(L,L);for i=1:L    for j=1:L       f(i,j) = x(i)^2+y(j)^2;    endendsurfc(x,y,f,'LineStyle','none');xlabel('x_1');ylabel('x_2');zlabel('F')title('Objective space')%% 狼群算法 subplot(1,2,2);semilogy(Convergence_curve,'Color','r','linewidth',1.5)title('Convergence_curve')xlabel('Iteration');ylabel('Best score obtained so far'); axis tightgrid onbox onlegend('GWO')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)]);

Python&Matlab如何实现灰狼优化算法

Python&Matlab如何实现灰狼优化算法

感谢各位的阅读!关于“Python&Matlab如何实现灰狼优化算法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Python&Matlab如何实现灰狼优化算法

本文链接: https://lsjlt.com/news/325281.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python&Matlab如何实现灰狼优化算法
    这篇文章给大家分享的是有关Python&Matlab如何实现灰狼优化算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 灰狼优化算法基本思想灰狼优化算法是一种群智能优化算法,它的独特之处在于一小部分拥有...
    99+
    2023-06-29
  • Python&Matlab实现灰狼优化算法的示例代码
    目录1 灰狼优化算法基本思想2 灰狼捕食猎物过程2.1 社会等级分层2.2 包围猎物2.3 狩猎2.4 攻击猎物2.5 寻找猎物3 实现步骤及程序框图3.1 步骤3.2 程序框图4 ...
    99+
    2024-04-02
  • Matlab如何实现黑洞优化算法
    这篇文章主要介绍“Matlab如何实现黑洞优化算法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Matlab如何实现黑洞优化算法”文章能帮助大家解决问题。1.概述1.1黑洞算法根据黑洞现象原理首次提...
    99+
    2023-07-02
  • Python和Matlab如何实现蝙蝠算法
    这篇文章主要介绍“Python和Matlab如何实现蝙蝠算法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python和Matlab如何实现蝙蝠算法”文章能帮助大家解决问题。1 前言蝙蝠算法是201...
    99+
    2023-06-29
  • 基于Matlab怎么实现野狗优化算法
    本篇内容介绍了“基于Matlab怎么实现野狗优化算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.概述野狗优化算法(Dingo Opti...
    99+
    2023-06-30
  • 基于Matlab怎么实现鲸鱼优化算法
    这篇文章主要介绍“基于Matlab怎么实现鲸鱼优化算法”,在日常操作中,相信很多人在基于Matlab怎么实现鲸鱼优化算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Matlab怎么实现鲸鱼优化算法”的疑...
    99+
    2023-06-30
  • Matlab实现黑洞优化算法的示例代码
    目录前言1.概述1.1黑洞算法1.2黑洞搜索优化算法1.3黑洞搜索算法的实现过程2.Matlab代码实现2.1主函数2.2目标函数2.3黑洞优化算法 3.结果展现前言 应...
    99+
    2024-04-02
  • 基于Matlab实现鲸鱼优化算法的示例代码
    目录1.鲸鱼优化算法建模1.1 包围猎物1.2 螺旋狩猎1.3 搜索猎物 1.4 算法流程图2.Matlab代码实现 2.1 结果2.2 代码...
    99+
    2024-04-02
  • 基于Matlab实现野狗优化算法的示例代码
    目录1.概述2.捕食过程的数学模型2.1 种群初始化2.2 群体攻击过程2.3 迫害攻击过程2.4 野狗的存活率3.Matlab代码实现3.1 代码3.2 结果1.概述 ...
    99+
    2024-04-02
  • 基于Matlab实现嗅觉优化算法的示例代码
    目录1.概述2.37 个 CEC 基准测试函数代码3.F1 Matlab代码仿真1.概述 嗅觉剂优化是一种新颖的优化算法,旨在模仿气味分子源尾随的药剂的智能行为。该概念分为三个阶段(...
    99+
    2024-04-02
  • Python如何实现归一化算法
    今天小编给大家分享一下Python如何实现归一化算法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.前言   &...
    99+
    2023-06-29
  • Python编程算法:如何优化算法性能?
    在Python编程中,算法优化是一项至关重要的任务。一个优化良好的算法可以显著提高程序的性能,从而提高用户体验和程序的可靠性。本文将介绍一些常用的Python算法优化技巧,帮助读者更好地理解如何提高程序的性能。 使用Python内置函数...
    99+
    2023-06-28
    编程算法 开发技术 git
  • 如何优化AMP服务器以实现最大负载
    Apache、MySQL、PHP(AMP)是最常用的服务器端技术栈之一。它们通常用于开发和管理动态网站和Web应用程序。作为一名Web开发人员,在开发Web应用程序时,您必须学习如何优化AMP服务器以实现最大负载。本文将帮助您了解如何使用A...
    99+
    2023-05-14
  • 如何在 Python 编程算法中优化实时接口?
    Python 是一种高级编程语言,因其易读、易写、易学等特点而备受青睐。在 Python 编程中,算法是一个非常重要的部分。随着现代技术的发展和应用,实时接口已经成为了许多应用场景中必不可少的一部分。在这篇文章中,我们将介绍如何在 Pyth...
    99+
    2023-10-02
    编程算法 接口 实时
  • python如何实现循环优化
    这篇文章给大家分享的是有关python如何实现循环优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。循环优化# 不推荐写法。代码耗时:6.7秒def computeSum(size: ...
    99+
    2023-06-27
  • Python 编程算法:如何优化 load 过程?
    在进行 Python 编程时,我们经常需要从文件或数据库中读取数据。这个过程中,我们常常会遇到 load 过程较慢的问题。本文将介绍如何优化 load 过程,提高程序的运行效率。 选择合适的数据结构 在 Python 中,列表(lis...
    99+
    2023-06-01
    编程算法 编程算法 load
  • Python如何实现KPM算法
    这篇文章主要介绍Python如何实现KPM算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!知识点说明:先说前缀,和后缀吧比如有一个串:abab则在下标为3处的(前缀和后缀都要比下标出的长度小1,此处下标为3出的长度...
    99+
    2023-06-21
  • python如何实现Simhash算法
    这篇文章主要介绍python如何实现Simhash算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、simhash步骤simhash包含分词、hash、加权、合并、降维五大步骤simhash代码如下:import...
    99+
    2023-06-29
  • 优化 PHP 算法实现的技巧
    优化 php 算法实现技巧包括:使用内置函数;减少不必要的循环;使用寻址符号 &amp; 提高效率;优化数组访问,例如提前计算数组长度、使用 list() 函数分配多个元素、使用...
    99+
    2024-05-07
    算法 php 冒泡排序
  • LeetCode算法如何优化PHP中的索引对象实现?
    在PHP中,索引对象是一种非常常见的数据结构,可以用来快速访问和操作数组中的元素。然而,当数组非常大时,索引对象的实现可能会变得非常低效。本文将介绍如何使用LeetCode算法来优化PHP中的索引对象实现,从而提高程序的性能。 什么是索...
    99+
    2023-09-01
    索引 对象 leetcode
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作