讲清楚灰狼优化算法

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

什么是灰狼优化算法

灰狼优化算法(Grey Wolf Optimizer, GWO)是一种模仿灰狼捕食行为的优化算法。它的数学建模原理基于灰狼的社会等级和捕猎策略。在这个算法中,灰狼群被分为四个等级:首领(Alpha, α)、副手(Beta, β)、侦察兵(Delta, δ)和欧米伽(Omega, ω)。算法通过模拟灰狼的社会合作行为来寻找最优解。下面是其数学建模原理的简化解释:

  • 社会等级:在算法开始时,会随机生成一群灰狼(解的候选者),通过评估每个解的适应度来模拟社会等级,其中最好的解被认为是Alpha(α),第二和第三好的解分别是Beta(β)和Delta(δ)。其余的解则被视为Omega(ω)。这个社会结构帮助指导搜索过程,确保多样性和算法的收敛。

  • 环绕、追踪和攻击猎物:灰狼的捕食行为被简化为数学模型,用以指导灰狼(解的搜索代理)向猎物(最优解)靠近。这个过程涉及到“环绕猎物”、“追踪猎物”和“攻击猎物”三个阶段。

    • 环绕猎物:通过数学公式模拟灰狼环绕猎物的行为,公式会计算出灰狼应该在搜索空间中的位置,这个位置取决于当前的Alpha、Beta和Delta的位置。

    • 灰狼优化算法,大数据相关算法,算法,数学建模

    • 灰狼优化算法,大数据相关算法,算法,数学建模

    • 追踪猎物:算法会根据猎物的动态位置更新灰狼的位置,以模拟追踪行为。

    • 攻击猎物:当灰狼(搜索代理)足够接近最优解(猎物),算法会进行细微的调整,模拟攻击行为,以精确找到最优解。

    • 更新位置:算法会根据Alpha、Beta和Delta的当前位置更新其他灰狼的位置。这个过程不断重复,直到满足停止条件(例如,达到最大迭代次数或达到足够好的解)。

数学上,灰狼的位置更新依赖于与Alpha、Beta和Delta之间的距离,这些距离会随机地调整,以模拟灰狼在捕猎时的接近和包围猎物的行为。整个过程旨在通过社会等级和集体行动的模拟,高效地探索解空间,并找到问题的最优解。

  • 更新位置:算法会根据Alpha、Beta和Delta的当前位置更新其他灰狼的位置。这个过程不断重复,直到满足停止条件(例如,达到最大迭代次数或达到足够好的解)。

实际案例

我们来尝试一个更详细的步骤和计算过程,以便更好地理解灰狼优化算法(GWO)是如何工作的。我们会用同一个函数
f ( x ) = x 2 f(x)=x^2 f(x)=x2我们将更详细地执行和解释每一步。

1.初始步骤

随机初始化位置:我们设定三只灰狼(Alpha、Beta、Delta)的初始位置,仍然使用
X α = 2 , X β = − 1.5 , X δ = 0.5 , X_{\alpha}=2,X_{\beta}=-1.5,X_{\delta}=0.5, Xα=2,Xβ=1.5,Xδ=0.5,

2.第一轮迭代

为了简化,我们将按以下步骤进行一轮迭代,并提供具体的计算过程。

  1. 计算每只狼的适应度
  • f ( X α ) = 4 f(X_\alpha)=4 f(Xα)=4
  • f ( X β ) = 2.25 f(X_\beta)=2.25 f(Xβ)=2.25
  • f ( X δ ) = 0.25 f(X_\delta)=0.25 f(Xδ)=0.25

因此,我们按适应度排名,Delta是目前的领头(因为我们是最小化问题,所以适应度最小的是领头),其次是Beta,Alpha是最后。

  1. 更新系数A和C
    在实际情况下,
    A和C 的值在每次迭代时都是动态计算的,但为了简化,假设我们得到
    A=0.5和C=1.5。这些值通常由随机数生成和参数a计算得来。其中a从2线性减少到0.

  2. 更新系数

对于每只狼(假设这里只计算Alpha的新位置作为示例),位置更新依据是:
灰狼优化算法,大数据相关算法,算法,数学建模
这里,我们假设所有灰狼都向Delta(当前最佳位置)移动。实际上,Alpha、Beta和Delta的新位置会基于整个群体的当前最优三个位置进行更新,但为了简化,我们只展示了如何更新Alpha的位置。

在实际应用中,每一轮迭代中,所有灰狼的位置都会这样更新,随着迭代的进行,A和C 的动态变化引导着灰狼群体向全局最优解靠拢。对于多维优化问题,位置更新会在每一个维度上独立进行。

经过多轮迭代后,适应度函数在不断引导搜索过程,群里将逐渐聚集在最优解附近。

最后一轮迭代结束时,算法的输出通常包括以下几个方面:

最优解的位置:这是算法认为的最优解或近似最优解的位置。在我们的示例 f ( x ) = x 2 f(x)=x^2 f(x)=x2中,最优解的位置理应是 x = 0 x=0 x=0,因为这个位置的函数值最小, f ( x ) = 0 f(x)=0 f(x)=0.

最优解的函数值:这是在最优解位置处的函数值,代表了问题的最优目标值。对于最小化问题,这是所有迭代中找到的最小函数值;对于最大化问题,则是最大的函数值。在我们的案例中,最优解的函数值是 f ( 0 ) = 0 f(0)=0 f(0)=0
收敛历史:大多数优化算法,包括GWO,都会记录下每次迭代中最优解的变化情况,这有助于分析算法的收敛速度和行为。这可以是一个迭代次数与最优函数值的图表,显示随着迭代次数增加,函数值是如何变化的。

最优解的位置 x ≈ 0 x≈0 x0 一般这个值是我们要的。
最优解的函数值 f ( x ) ≈ 0 f(x)≈0 f(x)0
收敛历史:显示了随着迭代次数增加,最优解的函数值逐渐降低并趋于稳定的过程。

代码复现-基于python

import numpy as np

# 目标函数:f(x) = x^2
def objective_function(x):
    return x ** 2

# 更新狼的位置
def update_position(alpha_pos, beta_pos, delta_pos, position, a, a_dim):
    A1 = 2 * a * np.random.rand(a_dim) - a
    C1 = 2 * np.random.rand(a_dim)
    D_alpha = abs(C1 * alpha_pos - position)
    X1 = alpha_pos - A1 * D_alpha
    
    A2 = 2 * a * np.random.rand(a_dim) - a
    C2 = 2 * np.random.rand(a_dim)
    D_beta = abs(C2 * beta_pos - position)
    X2 = beta_pos - A2 * D_beta
    
    A3 = 2 * a * np.random.rand(a_dim) - a
    C3 = 2 * np.random.rand(a_dim)
    D_delta = abs(C3 * delta_pos - position)
    X3 = delta_pos - A3 * D_delta
    
    new_position = (X1 + X2 + X3) / 3
    return new_position

# GWO算法
def grey_wolf_optimizer(search_agents_count, function, dim, max_iter):
    alpha_pos = np.zeros(dim)
    beta_pos = np.zeros(dim)
    delta_pos = np.zeros(dim)
    
    alpha_score = float("inf")
    beta_score = float("inf")
    delta_score = float("inf")
    
    positions = np.random.uniform(-10, 10, (search_agents_count, dim))
    
    for t in range(max_iter):
        for i in range(search_agents_count):
            # 计算当前狼的适应度
            fitness = function(positions[i])
            
            # 更新Alpha、Beta和Delta
            if fitness < alpha_score:
                alpha_score = fitness
                alpha_pos = positions[i].copy()
            elif fitness < beta_score:
                beta_score = fitness
                beta_pos = positions[i].copy()
            elif fitness < delta_score:
                delta_score = fitness
                delta_pos = positions[i].copy()
                
        a = 2 - t * (2 / max_iter)  # a从2线性减少到0
        
        for i in range(search_agents_count):
            positions[i] = update_position(alpha_pos, beta_pos, delta_pos, positions[i], a, dim)
    
    return alpha_pos, alpha_score

# 主程序
if __name__ == "__main__":
    search_agents_count = 10  # 狼群的数量
    max_iter = 20  # 最大迭代次数
    dim = 1  # 问题的维度
    
    best_pos, best_score = grey_wolf_optimizer(search_agents_count, objective_function, dim, max_iter)
    
    print(f"Best Position: {best_pos}, Best Score: {best_score}")

可视化

import numpy as np
import matplotlib.pyplot as plt

# 目标函数:f(x) = x^2
def objective_function(x):
    return x ** 2

# 更新狼的位置
def update_position(alpha_pos, beta_pos, delta_pos, position, a, a_dim):
    A1 = 2 * a * np.random.rand(a_dim) - a
    C1 = 2 * np.random.rand(a_dim)
    D_alpha = abs(C1 * alpha_pos - position)
    X1 = alpha_pos - A1 * D_alpha
    
    A2 = 2 * a * np.random.rand(a_dim) - a
    C2 = 2 * np.random.rand(a_dim)
    D_beta = abs(C2 * beta_pos - position)
    X2 = beta_pos - A2 * D_beta
    
    A3 = 2 * a * np.random.rand(a_dim) - a
    C3 = 2 * np.random.rand(a_dim)
    D_delta = abs(C3 * delta_pos - position)
    X3 = delta_pos - A3 * D_delta
    
    new_position = (X1 + X2 + X3) / 3
    return new_position

# GWO算法
def grey_wolf_optimizer(search_agents_count, function, dim, max_iter):
    alpha_pos = np.zeros(dim)
    beta_pos = np.zeros(dim)
    delta_pos = np.zeros(dim)
    
    alpha_score = float("inf")
    beta_score = float("inf")
    delta_score = float("inf")
    
    positions = np.random.uniform(-10, 10, (search_agents_count, dim))
    
    for t in range(max_iter):
        for i in range(search_agents_count):
            # 计算当前狼的适应度
            fitness = function(positions[i])
            
            # 更新Alpha、Beta和Delta
            if fitness < alpha_score:
                alpha_score = fitness
                alpha_pos = positions[i].copy()
            elif fitness < beta_score:
                beta_score = fitness
                beta_pos = positions[i].copy()
            elif fitness < delta_score:
                delta_score = fitness
                delta_pos = positions[i].copy()
                
        a = 2 - t * (2 / max_iter)  # a从2线性减少到0
        
        for i in range(search_agents_count):
            positions[i] = update_position(alpha_pos, beta_pos, delta_pos, positions[i], a, dim)
    
    return alpha_pos, alpha_score, positions

# 主程序
search_agents_count = 10  # 狼群的数量
max_iter = 20  # 最大迭代次数
dim = 1  # 问题的维度

best_pos, best_score, final_positions = grey_wolf_optimizer(search_agents_count, objective_function, dim, max_iter)

# 可视化
x = np.linspace(-10, 10, 400)
y = objective_function(x)

plt.figure(figsize=(10, 6))
plt.plot(x, y, label="Objective Function: $f(x) = x^2$")
plt.scatter(final_positions, objective_function(final_positions), color="red", label="Final Positions of Grey Wolves")
plt.scatter(best_pos, best_score, color="gold", marker="*", s=200, label="Best Position")
plt.title("Grey Wolf Optimizer (GWO) Finding Minimum of $f(x) = x^2$")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.legend()
plt.grid(True)
plt.show()

灰狼优化算法,大数据相关算法,算法,数学建模
从图中可以看出,灰狼的最终位置聚集在了函数的最低点附近,这表明GWO成功地引导了搜索过程向全局最小值逼近。这个简单的示例清楚地展示了GWO算法的工作原理和其在寻找最优解方面的能力。文章来源地址https://www.toymoban.com/news/detail-853858.html

到了这里,关于讲清楚灰狼优化算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 模拟退火算法与遗传算法求解多目标优化问题的算法实现(数学建模)

    模拟退火算法是一种全局优化算法,解决的问题通常是找到一个最小化(或最大化)某个函数的全局最优解。它通过模拟物理退火的过程来搜索解空间,在开始时以一定的温度随机生成初始解,然后一步步降低温度,同时在当前解的周围随机搜索新的解,并根据一定概率接受

    2024年02月02日
    浏览(57)
  • 集货运输优化:数学建模步骤,Python实现蚁群算法(解决最短路径问题), 蚁群算法解决旅行商问题(最优路径问题),节约里程算法

    目录 数学建模步骤 Python实现蚁群算法(解决最短路径问题)  蚁群算法解决旅行商问题(最优路径问题)

    2024年02月09日
    浏览(57)
  • 基于多目标混合策略鲸鱼优化算法的镜场布局优化-2023国赛数学建模A题第三问解题思路 - 定日镜场的优化设计(详细过程,小白读完就会)

    选择对 EB布局进行更深入的研究,主要探究其布局关键参数方位间距因子 Asf和极限重置因子 Arlim如何取值可以得到光学性能更好的定日镜场。故选择应用改进后的混合策略鲸鱼优化算法对 EB布局进行优化,同时结合实例 Gemasolar电站相关数据进行验证分析。 5.1.1优化目标与工

    2024年02月09日
    浏览(43)
  • 【2023 年第三届长三角高校数学建模竞赛】C 题 考研难度知多少 考研情况相关数据下载

    C 题 考研难度知多少 据相关媒体报道,2023 年考研可以称得上是“最难”的一年,全国研究生报考人数突破新高达到 474 万人、部分考研学生感染新冠带病赴考、保研名额增多 挤压考研录取名额等因素都导致了 2023 年考研上岸难度加大。不少同学参加完 2023 年考研直呼:今年

    2024年02月06日
    浏览(62)
  • 【列车节能优化】--灰狼优化算法的应用

    当今社会对能源资源的需求越来越大,如何提高列车的能效,减少能源的消耗和环境污染已经成为一个重要的研究方向。列车节能优化是一种综合运用机械、电气、控制等学科知识,通过采用先进的算法和技术手段来优化列车的能耗、运行效率和安全性,实现降低能源消耗和

    2024年02月11日
    浏览(41)
  • 智能优化算法——灰狼优化算法(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日
    浏览(59)
  • 启发式算法之灰狼优化算法

    蚁群算法?秃鹰算法?布谷鸟算法?鱼群算法?猴群算法?这都是些啥? 这些算法听起来都很接地气,实际上也确实很接地气。它们都是学者通过观察动物们的行为得到的灵感,从而设计出来的精彩的算法。以动物命名的算法可远不止这些,比如还有蜂群算法、狼群算法、蝙

    2024年02月13日
    浏览(43)
  • 【代码思路】2023mathorcup 大数据数学建模B题 电商零售商家需求预测及库存优化问题

    各位同学们好,我们之前已经发布了第一问的思路视频,然后我们现在会详细的进行代码和结果的一个讲解,然后同时我们之后还会录制其他小问更详细的思路以及代码的手把手教学。 大家我们先看一下代码这一部分,我们采用的软件是Jupyter,大家可以下载Anaconda,然后选择

    2024年02月08日
    浏览(51)
  • 灰狼优化算法(MOGWO)

    固定大小的外部档案用来保存帕累托优化解 在多目标搜索空间中,这个档案被用来定义狼群社会等级和捕猎行为 这个算法在10个多目标测试集进行测试,并与MOEA/D和MOPSO进行对比 将多个目标集成一个单一的目标 两个缺点:一个均匀分布的权重不能保证生成一组均匀分布的帕

    2024年03月21日
    浏览(49)
  • 灰狼优化算法(GWO)

    一、背景知识 灰狼优化算法(Grey Wolf Optimizer, GWO),由澳大利亚格里菲斯大学学者Mirjalili等人于2014年提出来的一种群智能优化算法。灵感来自于灰狼群体捕食行为。GWO算法模拟了自然界中灰狼的领导等级和狩猎机制。将灰狼分为四种类型,用来模拟等级阶层。此外,还模拟了

    2024年04月14日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包