【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013

这篇具有很好参考价值的文章主要介绍了【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

狼群算法((Wolf pack algorithm ,WPA)采用了基于人工狼主体的自下而上的设计方法和基于职责分工的协作式搜索路径结构。

  1. 吴虎胜等在 2013 年提出
  2. 模拟狼群捕食行为及其猎物分配方式
【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013

截止到 2023 年,算法引用趋势

【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013

1. 狼相关的生物群行为

狼是分布最广的群居群猎动物。有明确的社会分工,它们团结协作为狼群的生存与发展承担着各自的责任。智能颇高,彼此之间通过气味、叫声沟通。

狼的社会分工有头狼、探狼和猛狼:

  • 头狼: 将当前离猎物气味浓度最高(适应度最优)的狼作为头狼,起指挥狼群行动的作用,头领狼召唤其他狼向猎物靠近,具有指挥狼群行动的能力,在搜寻过程中头狼的角色是动态变化的。
  • 探狼: 初始时,狼群会派出一部分狼作为探狼,在环境四周搜寻猎物。探狼在搜寻过程中如果发现猎物气味浓度更高,就作为头狼,呼唤其他的狼进行围捕行为。后期,比较不同的探狼猎物的适应度,选择适应度较高的作为头狼。
  • 猛狼: 猛狼感应到头狼呼唤,就立刻向头狼位置奔袭,在奔袭的过程中,若是发现猎物的适应度更高,则立刻替代原来的头领狼,指挥其他狼行动。
【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013

猎物分配规则: 捕获猎物后,狼群并不是平均分配猎物,而是按“论功行赏、由强到弱”的方式分配,即先将猎物分配给最先发现、捕到猎物的强壮的狼,而后再分配给弱小的狼。(即论功行赏,先强后弱)

将狼群的整个捕猎行动抽象为三种智能行为:游走行为、召唤行为和围攻行为

2. 算法仿生设计

2.1 头狼产生规则

初始化: 初始解空间中,具有最优目标函数值的人工狼即为头狼。

迭代: 在迭代过程中,将每次迭代后最优狼的目标函数值与前一代中头狼的值进行比较,若更优则对头狼位置进行更新,若此时存在多匹的情况,则随机选一匹成为头狼。头狼不执行3种智能行为而直接进入下次迭代,直到它被其他更强的人工狼所替代。

目标函数值:定义为人工狼所能感知到的猎物气味浓度 Y = f ( X ) Y=f(X) Y=f(X)

2.2 游走行为:探狼搜索猎物

初始化: 将解空间中除头狼外最佳的 S_num 匹人工狼视为探狼,在解空间中搜索猎物, S_num 随机取 [ n / ( α + 1 ) , n / α ] [n/(α+1),n/α] [n/(α+1),n/α] 之间的整数, α α α 为探狼比例因子。

游走: 选择气味最浓并且大于当前位置气味浓度 Y i 0 Y_{i0} Yi0 的方向前进一步:

x i d p = x i d + s i n ⁡ ( 2 π × p / h ) × s t e p a d x_{id}^p=x_{id}+sin⁡(2π×p/ℎ)× step_a^d xidp=xid+sin(2π×p/h)×stepad

其中, s t e p a d step_a^d stepad 为游走步长, h ℎ h 为游走方向, p = 1 , 2 , … , h p=1,2,…,ℎ p=1,2,,h

重复以上游走行为,直至存在某一匹探狼的气味浓度 Y i > Y l e a d Y_i> Y_{lead} Yi>Ylead,则探狼 i i i 代替头狼并发起召唤行为,或者达到最大游走次数 T m a x T_{max} Tmax

2.3 召唤行为:

头狼通过嚎叫发起召唤行为,头狼周围的猛狼以较大的奔袭步长逼近头狼所在位置。

x i d k + 1 = x i d k + s t e p b d ⋅ ( g d k − x i d k ) ∣ g d k − x i d k ∣ x_{id}^{k+1}=x_{id}^k+step_b^d⋅\frac{(g_d^k−x_{id}^k)}{|g_d^k−x_{id}^k|} xidk+1=xidk+stepbdgdkxidk(gdkxidk)

其中, g d k g_d^k gdk 为第 k k k 代群体头狼在第 d d d 维空间的位置, s t e p b d step_b^d stepbd 为奔袭步长。

奔袭途中,若猛狼 i i i 的气味浓度 Y i > Y l e a d Y_i> Y_{lead} Yi>Ylead,则猛狼 i i i 代替头狼并发起召唤行为;若 Y i < Y l e a d Y_i< Y_{lead} Yi<Ylead,则猛狼 i i i 继续奔袭直到 d i s ≤ d n e a r d_{is}≤d_{near} disdnear 时加入到对猎物的攻击行列,即转入围攻行为。
d n e a r = 1 D ω ∑ d = 1 D ∣ m a x d − m i n d ∣ d_{near}=\frac{1}{Dω}\sum_{d=1}^D|max_d−min_d| dnear=Dω1d=1Dmaxdmind

其中, ω ω ω 为距离判定因子,待寻优的第 d d d 维变量取值范围为 [ m i n d , m a x d ] [min_d, max_d] [mind,maxd]

2.4 围攻行为:猛狼和探狼联合对猎物进行围攻以捕获猎物

x i d k + 1 = x i d k + λ ⋅ s t e p c d ⋅ ∣ G d k − x i d k ∣ x_{id}^{k+1}=x_{id}^k+λ⋅step_c^d⋅|G_d^k−x_{id}^k| xidk+1=xidk+λstepcdGdkxidk

其中, G d k G_d^k Gdk 为第 k k k 代群体中猎物在第 d d d 维空间的位置, s t e p c d step_c^d stepcd 为攻击步长, λ λ λ 为 [-1, 1] 之间均匀分布的随机数。

围攻途中,若人工狼 i i i 的气味浓度大于原有位置气味浓度,则更新位置;否则,人工狼位置不变。

注: 围攻行为和召唤行为,其实都是猛狼响应头狼的召唤,向头狼位置移动,只是在召唤阶段以较大的步长移动,在距离头狼较近时,转而执行围攻行为,以较小的步长移动,以防止步长过大,跨过头狼的位置。

2.5 三种步长的关系

s t e p a d = s t e p b d 2 = 2 ⋅ s t e p c d = ∣ m a x d − m i n d ∣ / S step_a^d=\frac{step_b^d}{2}=2⋅step_c^d=|max_d−min_d|/S stepad=2stepbd=2stepcd=maxdmind∣/S
其中, S S S 为步长因子,待寻优的第 d d d 维变量取值范围为 [ m i n d , m a x d ] [min_d, max_d] [mind,maxd]


【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013


2.6 “强者生存”的狼群更新机制

猎物按照“由强到弱”的原则进行分配,导致弱小的狼会被饿死。即在算法中去除目标函数值最差的R匹人工狼,同时随机产生R匹人工狼。

R 取 [ n 2 × β , n / β ] [\frac{n}{2}×β, n/β] [2n×β,n/β] 之间的随机整数, β β β 为群体更新比例因子。

3. 算法流程

【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013
【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013

4. 算法相关改进

  • 奔袭步长采用非线性的动态惯性权重系数公式,使得奔袭步长的取值依靠适应度值的变化而自动调整,从而增加在搜索过程中的智能性;

  • 围攻步长采用自适应的更新公式,使围攻步长随着迭代次数的不断增大而逐渐减小,从而就提高找到更优值的概率;

  • 在狼群每次移动过程中, 利用头狼移动方向包含的潜在猎物位置信息引导狼群进化,并加强头狼在狼群中的领导力度。

5. 代码实现(chatGPT)

其中,fitness_func 是优化问题的目标函数,lb 和 ub 是自变量的上下界,dim 是自变量的维度,max_gen 是最大迭代次数,pop_size 是种群大小,alpha、beta 和 delta 是狼群更新常数。函数返回最优解 bestX 和最优解的函数值 bestF。
需要注意的是,在更新狼群位置时,需要对狼群的位置进行边界处理,确保自变量在规定的区间内。此外,狼群算法的收敛性较差,需要通过适当的参数设置和多次运行来获得较优的解。

function [bestX, bestF] = wolf_pack_algorithm(fitness_func, lb, ub, dim, max_gen, pop_size, alpha, beta, delta)
% 狼群算法
% fitness_func - 适应度函数
% lb - 自变量下界
% ub - 自变量上界
% dim - 自变量维度
% max_gen - 最大迭代次数
% pop_size - 种群大小
% alpha - 狼群更新常数
% beta - 狼群更新常数
% delta - 狼群更新常数
    % 初始化种群
    pop = create_population(lb, ub, dim, pop_size);
    % 计算适应度
    fitness = evaluate_fitness(fitness_func, pop, pop_size);
    % 寻找最优解
    [bestF, bestIdx] = min(fitness);
    bestX = pop(bestIdx, :);
    % 迭代优化
    for gen = 1:max_gen
        % 更新狼群位置
        for i = 1:pop_size
            % 计算狼群中每个狼的适应度
            fitness_i = fitness(i);
            for j = 1:pop_size
                if fitness(j) < fitness_i
                    r1 = rand(1, dim);
                    r2 = rand(1, dim);
                    A = alpha * (2 * r1 - 1);
                    C = 2 * r2;
                    D = abs(C .* bestX - pop(i, :));
                    X1 = bestX - A .* D;
                    fitness_X1 = evaluate_fitness(fitness_func, X1, 1);
                    % 更新最优解
                    if fitness_X1 < bestF
                        bestF = fitness_X1;
                        bestX = X1;
                    end
                    % 更新狼群位置
                    if fitness_X1 < fitness_i
                        pop(i, :) = X1;
                        fitness_i = fitness_X1;
                    else
                        r3 = rand;
                        if r3 < beta
                            X2 = pop(j, :) + delta * (rand(1, dim) - 0.5);
                            fitness_X2 = evaluate_fitness(fitness_func, X2, 1);
                            % 更新最优解
                            if fitness_X2 < bestF
                                bestF = fitness_X2;
                                bestX = X2;
                            end
                            % 更新狼群位置
                            if fitness_X2 < fitness_i
                                pop(i, :) = X2;
                                fitness_i = fitness_X2;
                            end
                        end
                    end
                end
            end
        end
    end
end
% 初始化种群
function pop = create_population(lb, ub, dim, pop_size)
    pop = repmat(lb, pop_size, 1) + rand(pop_size, dim) .* repmat((ub - lb), pop_size, 1);
end
% 计算适应度
function fitness = evaluate_fitness(fitness_func, pop, pop_size)
    fitness = zeros(pop_size, 1);
    for i = 1:pop_size
        fitness(i) = fitness_func(pop(i, :));
    end
end

5.1 函数输入

function [bestX, bestF] = wolf_pack_algorithm(fitness_func, lb, ub, dim, max_gen, pop_size, alpha, beta, delta)

这个函数的输入参数包括:

fitness_func:用户定义的适应度函数,用于计算每个个体的适应度值。

lb 和 ub:自变量的最小值和最大值。

dim:自变量的维度。

max_gen:最大迭代次数。

pop_size:种群大小。

alpha、beta 和 delta:狼群更新常数。

5.2 种群初始化

pop = create_population(lb, ub, dim, pop_size);

这个函数用于生成初始的种群,其中 lb 和 ub 分别是自变量的最小值和最大值,dim 是自变量的维度,pop_size 是种群大小。这里采用了随机生成的方式,即将每个自变量的取值随机生成在 lb 和 ub 之间。

5.3 适应度计算

fitness = evaluate_fitness(fitness_func, pop, pop_size);

这个函数用于计算种群中每个个体的适应度值,其中 fitness_func 是用户定义的适应度函数,pop 是种群的矩阵表示,pop_size 是种群大小。

5.4 最优解寻找

[bestF, bestIdx] = min(fitness);
bestX = pop(bestIdx, :);

这段代码用于寻找当前种群中的最优解,即使适应度函数最小化的自变量取值。min 函数返回种群中最小适应度值 bestF 和对应的索引 bestIdx,然后通过 pop(bestIdx, 😃 取出最优解的自变量取值 bestX。

5.5 迭代优化

for gen = 1:max_gen
    % 更新狼群位置
    for i = 1:pop_size
        % 计算狼群中每个狼的适应度
        fitness_i = fitness(i);
        for j = 1:pop_size
            if fitness(j) < fitness_i
                r1 = rand(1, dim);
                r2 = rand(1, dim);
                A = alpha * (2 * r1 - 1);
                C = 2 * r2;
                D = abs(C .* bestX - pop(i, :));
                X1 = bestX - A .* D;
                fitness_X1 = evaluate_fitness(fitness_func, X1, 1);
                % 更新最优解
                if fitness_X1 < bestF
                    bestF = fitness_X1;
                    bestX = X1;
                end
                % 更新狼群位置
                if fitness_X1 < fitness_i
                    pop(i, :) = X1;
                    fitness_i = fitness_X1;
                else
                    r3 = rand;
                    if r3 < beta
                        X2 = pop(j, :) + delta * (rand(1, dim) - 0.5);
                        fitness_X2 = evaluate_fitness(fitness_func, X2, 1);
                        % 更新最优解
                        if fitness_X2 < bestF
                            bestF = fitness_X2;
                            bestX = X2;
                        end
                        % 更新狼群位置
                        if fitness_X2 < fitness_i
                            pop(i, :) = X2;
                            fitness_i = fitness_X2;
                        end
                    end
                end
            end
        end
    end
end

这段代码是狼群算法的核心部分,主要是通过更新狼群的位置来优化目标函数。具体来说,每个狼的位置通过以下方式进行更新:

计算狼与最优解的距离,并计算出一个向量 D。

根据 alpha、beta 和 delta 的值,计算出一个向量 A。

计算出新的位置向量 X1。

计算新位置的适应度值 fitness_X1。

如果新位置的适应度值小于当前位置的适应度值,更新位置和适应度值。

如果新位置的适应度值大于等于当前位置的适应度值,根据 beta 的值决定是否采用另一个狼的位置进行更新。如果随机数小于 beta,则找到另一个适应度更好的狼,并根据 delta 的值计算出新位置 X2,然后计算新位置的适应度值 fitness_X2。如果新位置的适应度值小于当前位置的适应度值,更新位置和适应度值。
在上述过程中,还需要注意对位置向量进行边界处理,确保自变量在规定的区间内。

5.6 函数输出

function [bestX, bestF] = wolf_pack_algorithm(fitness_func, lb, ub, dim, max_gen, pop_size, alpha, beta, delta)

最后,函数输出寻找到的最优解 bestX 和最优解的适应度值 bestF。

References

[1] 吴虎胜, 张凤鸣, 吴庐山. 一种新的群体智能算法——狼群算法[J]. 系统工程与电子技术, 2013, 35(11):9.

[2] 基于群智能的路径规划算法(五)------狼群算法文章来源地址https://www.toymoban.com/news/detail-489748.html

到了这里,关于【智能优化算法】狼群算法 (Wolf Pack Algorithm, WPA),2013的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 多目标鳟海鞘算法(Multi-objective Salp Swarm Algorithm,MSSA)求解微电网优化MATLAB

    微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 多目标鳟海鞘算法(Multi-objective Salp Swarm Algorithm,MSSA)由Seyedali Mirjalili等人于2017年提

    2024年02月07日
    浏览(33)
  • C#,人工智能,机器人,路径规划,A*(AStar Algorithm)算法、源代码及计算数据可视化

    Peter Hart  Nils Nilsson  Bertram Raphael  参考: C#,人工智能(AI)机器人路径规划(Path Planning)的ARA*(Anytime Replanning A* Algorithm)算法与源程序 https://blog.csdn.net/beijinghorn/article/details/125464754 A*算法最初由斯坦福研究院(Stanford Institute)的  Peter Hart,Nils Nilsson,Bertram Raphael  发表于

    2024年01月18日
    浏览(50)
  • 智能优化算法:白鲸优化算法-附代码

    摘要:白鲸优化算法([Beluga whale optimization,BWO)是由是由 Changting Zhong 等于2022 年提出的一种群体智能优化算法。其灵感来源于白鲸的群体觅食行为。 BWO建立了探索、开发和鲸鱼坠落的三个阶段,分别对应于成对游泳、捕食和鲸落的行为。BWO中的平衡因子和鲸落概率是自适应的

    2023年04月08日
    浏览(59)
  • 智能优化算法:金枪鱼群优化算法-附代码

    摘要:金枪鱼群优化算法(Tuna swarm optimization,TSO),是于2021年提出的一种新型智能优化算法,该算法通过模拟金枪鱼群体的觅食行为,来对问题进行寻优。具有寻优能力强,收敛速度快等特点。 1.1 初始化 与其他智能优化算法一样,金枪鱼种群在搜索空间内随机初始化。 X

    2023年04月25日
    浏览(33)
  • 智能优化算法:卷积优化算法-2023 附代码

    摘要:将二维卷积运算引入智能优化算法的种群位置更新过程,提出一种新的智能优化算法,即卷积优化算法(Convolution Optimization Algorithm,COA)。 该算法主要包括卷积搜索和解质量增强 2 种机制:在卷积搜索过程中,分别定义纵向卷积核、横向卷积核和区域卷积核,依次进行二维卷积运

    2023年04月16日
    浏览(34)
  • 智能优化算法——灰狼优化算法(Python&Matlab实现)

    目录 1 灰狼优化算法基本思想 2 灰狼捕食猎物过程 2.1 社会等级分层 2.2 包围猎物 2.3 狩猎 2.4 攻击猎物 2.5 寻找猎物 3 实现步骤及程序框图 3.1 步骤 3.2 程序框图 4 Python代码实现 5 Matlab实现 灰狼优化算法是一种群智能优化算法,它的独特之处在于 一小部分 拥有绝对话语权的灰

    2024年02月15日
    浏览(37)
  • 智能优化算法:多目标粒子群优化算法(MOPSO)

    目录 一、粒子群优化算法(Particle Swarm Optimization,PSO) 二、多目标优化Pareto支配 三、多目标粒子群优化算法(Multiple Objective Particle Swarm Optimization,MOPSO) 四、参考文献: 粒子群算法(PSO)[1]是一种群智能优化算法,于1995年Kennedy和Eberhart提出,其灵感来源于鸟群的协作觅食行

    2023年04月19日
    浏览(32)
  • 智能优化算法之遗传算法

    该算法已被很多篇文章讲解,本文将会去除很多较简单的内容,挑选认为重点核心部分进行讲述,内容中有属于信息的收集整理部分,也有属于自己理解的部分。         遗传算法是一类借鉴生物界的进化规律演化而来的随机化搜索方法。它是由美国的J.Holland教授1975年首

    2024年02月09日
    浏览(30)
  • Matlab群体智能优化算法之鹈鹕优化算法(POA)

    Pelican Optimization Algorithm: A Novel Nature-Inspired Algorithm for Engineering Applications 参考文献:Trojovský P, Dehghani M. Pelican Optimization Algorithm: A Novel Nature-Inspired Algorithm for Engineering Applications[J]. Sensors, 2022, 22(3): 855. 注:仅记录学习,如有侵权,联系删除。 The behavior and strategy of pelicans when

    2023年04月08日
    浏览(30)
  • 智能优化算法 — 蜣螂优化算法(Dung beetle optimizer,DBO)

    引言 小时候,蜣螂还是比较多见的,还顽皮地将粪球给它弄走,或者给它来点障碍。现在放牛的几乎看不到了,蜣螂没东西可推了,也慢慢从我们的视线中消失了。 2022年11月27日,东华大学沈波教授团队,继麻雀搜索算法(Sparrow Search Algorithm,SSA)之后,又提出了一种全新的

    2024年02月02日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包