【智能算法】白鲸优化算法(BWO)原理及实现


1.背景

2022年,C Zhong受到自然界白鲸行为启发,提出了白鲸优化算法(Beluga Whale Optimization, BWO)。

在这里插入图片描述
在这里插入图片描述

2.算法原理

2.1算法思想

BWO算法模拟了白鲸的行为,如游泳、捕食和鲸鱼坠落。BWO包含探索阶段和开发阶段。探索阶段通过随机选择白鲸来保证设计空间的全局搜索能力,开发阶段控制设计空间的局部搜索能力。

在这里插入图片描述

2.2算法过程

BWO算法可以根据平衡因子Bf从探索过渡到开发:
B f = B 0 ( 1 − T / 2 T m a x ) (1) B_f=B_0(1-T/2T_{max})\tag{1} Bf=B0(1T/2Tmax)(1)

探索阶段

BWO的探索阶段是通过考虑白鲸的游泳行为来建立:
{ X i , j T + 1 = X i , p j T + ( X r , p 1 T − X i , p j T ) ( 1 + r 1 ) sin ⁡ ( 2 π r 2 ) , j = e v e n X i , j T + 1 = X i , p j T + ( X r , p 1 T − X i , p j T ) ( 1 + r 1 ) cos ⁡ ( 2 π r 2 ) , j = o d d (2) \begin{cases}X_{i,j}^{T+1}=X_{i,p_{j}}^{T}+\left(X_{r,p_{1}}^{T}-X_{i,p_{j}}^{T}\right)(1+r_{1})\sin\left(2\pi r_{2}\right),&j=even\\X_{i,j}^{T+1}=X_{i,p_{j}}^{T}+\left(X_{r,p_{1}}^{T}-X_{i,p_{j}}^{T}\right)(1+r_{1})\cos\left(2\pi r_{2}\right),&j=odd\end{cases}\tag{2} Xi,jT+1=Xi,pjT+(Xr,p1TXi,pjT)(1+r1)sin(2πr2),Xi,jT+1=Xi,pjT+(Xr,p1TXi,pjT)(1+r1)cos(2πr2),j=evenj=odd(2)
其中,sin(2πr2)和cos(2πr2)表示镜像白鲸的鳍朝向水面,根据奇数和偶数选择的维度,更新后的位置反映了白鲸在游泳或潜水时的同步或镜像行为。

开发阶段

BWO的开发阶段灵感来自于白鲸的捕食行为,白鲸可以根据附近白鲸的位置合作觅食和移动:
X i T + 1 = r 3 X b e s t T − r 4 X i T + C 1 ⋅ L F ⋅ ( X r T − X i T ) (3) X_{i}^{T+1}=r_{3}X_{best}^{T}-r_{4}X_{i}^{T}+C_{1}\cdot L_{F}\cdot\left(X_{r}^{T}-X_{i}^{T}\right)\tag{3} XiT+1=r3XbestTr4XiT+C1LF(XrTXiT)(3)
其中,LF是莱维飞行步长。

鲸落行为

少数白鲸坠落深海,滋养生物,形成“鲸鱼坠落”现象。鲨鱼和无脊椎动物聚集食用尸体,吸引毛甲壳类动物。骨骼最终被细菌和珊瑚分解。模拟鲸鱼掉落行为,选择掉落概率模拟微小变化。确保种群数量不变,通过白鲸位置和鲸落步长更新位置:
X i T + 1 = r 5 X i T − r 6 X r T + r 7 X s t e p (4) X_i^{T+1}=r_5X_i^T-r_6X_r^T+r_7X_{step}\tag{4} XiT+1=r5XiTr6XrT+r7Xstep(4)
其中r5, r6, r7为(0,1)之间的随机数,Xstep为鲸鱼下降的步长:
X s t e p = ( u b − l b ) exp ⁡ ( − C 2 T / T max ⁡ ) (5) X_{step}=(u_b-l_b)\exp{(-C_2T/T_{\max})}\tag{5} Xstep=(ublb)exp(C2T/Tmax)(5)
其中,C2为与鲸鱼下降概率和种群规模相关的阶跃因子(C2 = 2Wf×n),鲸鱼坠落的概率(Wf)计算为线性函数:
W f = 0.1 − 0.05 T / T max ⁡ (6) W_f=0.1-0.05T/T_{\max}\tag{6} Wf=0.10.05T/Tmax(6)

流程图

在这里插入图片描述

伪代码

在这里插入图片描述

3.结果展示

在这里插入图片描述
在这里插入图片描述

4.参考文献

[1] Zhong C, Li G, Meng Z. Beluga whale optimization: A novel nature-inspired metaheuristic algorithm[J]. Knowledge-Based Systems, 2022, 251: 109215.

5.代码获取

### 白鲸优化算法简介 白鲸优化算法(Beluga Whale Optimization Algorithm, BWO)是一种新型的元启发式优化算法,其设计灵感来源于自然界中白鲸的行为模式[^1]。该算法通过模拟白鲸的游泳、捕食以及鲸落过程中的群体协作机制来完成目标函数的寻优操作。 #### 原理概述 BWO 的核心思想在于模仿白鲸的社会活动特性,主要包括以下几个方面: - **游泳行为**:描述个体在搜索空间内的随机探索能力。 - **捕食行为**:表示种群逐步逼近最优解的过程。 - **鲸落现象**:用于增强局部开发能力和跳出局部极值的能力[^2]。 这些行为共同构成了 BWO 算法的基础框架,使其具备较强的全局与局部搜索性能。 --- ### 白鲸优化算法的核心公式 以下是 BWO 中的关键更新方程: #### 游泳阶段 在初始阶段,算法主要依赖于随机游动来进行广泛的空间探索。位置更新公式如下所示: ```python X_i(t+1) = X_i(t) + rand() * (UB - LB) ``` 其中 `rand()` 表示均匀分布的随机数,`UB` 和 `LB` 是变量上下界[^3]。 #### 捕食阶段 当迭代进入中期时,算法会逐渐聚焦到更接近最优解的位置上。此时采用以下公式调整粒子位置: ```python if r < 0.5: X_i(t+1) = X_best(t) - A * abs(C * X_best(t) - X_i(t)) else: X_i(t+1) = X_best(t) + A * abs(C * X_best(t) - X_i(t)) ``` 这里引入两个系数矩阵 \(A\) 和 \(C\),它们随时间线性减小以平衡探索与开发之间的关系[^4]。 #### 鲸落阶段 为了进一步提高收敛精度并防止早熟收敛,在后期加入鲸落效应作为扰动项: ```python Delta_X = alpha * exp(-beta * t) * sin(2*pi*t/T_max) X_i(t+1) += Delta_X ``` 上述表达式定义了一个周期性的正弦波形干扰信号,有助于打破停滞状态下的单调变化趋势。 --- ### Python 实现代码示例 下面提供一段完整的基于 Python 编写的白鲸优化算法程序模板: ```python import numpy as np def objective_function(x): """ 定义待优化的目标函数 """ return sum(xi ** 2 for xi in x) class BelugaWhaleOptimization: def __init__(self, dim=30, pop_size=30, max_iter=500, lb=-10, ub=10): self.dim = dim # 维度大小 self.pop_size = pop_size # 种群规模 self.max_iter = max_iter # 迭代次数上限 self.lb = lb # 下限边界 self.ub = ub # 上限边界 self.X = None # 当前种群位置 self.fitness = None # 对应适应度值 def init_population(self): """ 初始化种群 """ self.X = np.random.uniform(low=self.lb, high=self.ub, size=(self.pop_size, self.dim)) def evaluate_fitness(self): """ 计算当前种群各成员的适应度 """ self.fitness = np.array([objective_function(individual) for individual in self.X]) def update_position(self, iter_count): """ 更新每一代种群的位置 """ a = 2 - 2 * iter_count / self.max_iter # 参数a从2递减至0 c_values = 2 * np.random.rand() for i in range(len(self.X)): p = np.random.rand() if p >= 0.5: new_pos = self.X[np.argmin(self.fitness)] \ - a * abs(c_values * self.X[np.argmin(self.fitness)] - self.X[i]) else: new_pos = self.X[np.argmin(self.fitness)] \ + a * abs(c_values * self.X[np.argmin(self.fitness)] - self.X[i]) delta_x = 0.01 * np.exp(-iter_count/self.max_iter)*np.sin(np.pi*iter_count/self.max_iter) new_pos += delta_x # 边界约束处理 new_pos[new_pos > self.ub] = self.ub new_pos[new_pos < self.lb] = self.lb self.X[i] = new_pos def run(self): """ 执行整个进化流程 """ best_solution = [] best_fitness_history = [] self.init_population() for iteration in range(self.max_iter): self.evaluate_fitness() current_best_index = np.argmin(self.fitness) current_best_fit = self.fitness[current_best_index] best_fitness_history.append(current_best_fit) best_solution.append(self.X[current_best_index].copy()) self.update_position(iteration) return best_solution[-1], min(best_fitness_history) # 测试运行 bwo_instance = BelugaWhaleOptimization(dim=10, pop_size=30, max_iter=500, lb=-10, ub=10) optimal_soln, optimal_val = bwo_instance.run() print(f"最佳解:{optimal_soln}, 最佳适应度值={optimal_val}") ``` 此脚本实现了基本版本的白鲸优化器,并针对球面测试函数进行了验证演示。 --- ### 应用场景举例 除了理论探讨外,实际工程领域也广泛应用到了此类智能计算方法论之中。比如解决复杂的连续型组合最优化难题或者离散决策类任务均可借助它达成高效求解目的。 具体而言像路径规划问题里头就经常能看到它的身影;另外还有诸如特征选择、参数调校等方面同样存在广阔前景等待挖掘拓展。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小O的算法实验室

谢谢大佬的肯定!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值