鲸鱼优化算法(WOA)
2026/3/21约 1581 字大约 5 分钟
鲸鱼优化算法(WOA)
名称
鲸鱼优化算法(Whale Optimization Algorithm, WOA)
分类
鲸鱼优化算法是一种受生物行为启发的优化算法,属于群体智能与元启发式优化技术范畴。它与其他自然启发式算法密切相关,例如粒子群优化(Particle Swarm Optimization, PSO)和蝙蝠算法(Bat Algorithm)。
- 人工智能
- 计算智能
- 生物启发计算
- 群体智能
- 鲸鱼优化算法
- 群体智能
- 生物启发计算
- 计算智能
策略
鲸鱼优化算法受座头鲸气泡网捕食策略的启发。这种捕食行为通过制造气泡网对猎物进行包围和围捕,在算法中被建模为探索与开发两个阶段的结合。
探索阶段
在探索阶段,搜索个体(鲸鱼)通过跟随随机选取的搜索个体在搜索空间中移动,并结合当前找到的最优解更新自身位置。这使得算法能够探索搜索空间中的不同区域,并维持种群的多样性。
开发阶段
开发阶段模拟了座头鲸的气泡网攻击行为。在该阶段,搜索个体通过朝向当前最优解移动来更新位置,从而模拟气泡网逐渐收缩的过程。该阶段使算法能够在有前景的解附近加强搜索,并进一步细化当前最优解。
鲸鱼优化算法通过基于概率参数自适应调节搜索过程,在探索与开发之间实现平衡。该参数决定搜索个体是更倾向于跟随随机选取的个体,还是朝向当前最优解移动。
过程
数据结构
- 种群数组(
population):由搜索个体(鲸鱼)组成的数组,表示优化问题的潜在解。 - 适应度数组(
fitness):存储种群中每个搜索个体适应度值的数组。 - 最优解(
best_solution):优化过程中当前找到的最优解。
参数
- 种群规模(
population_size):种群中搜索个体(鲸鱼)的数量。 - 最大迭代次数(
max_iterations):优化过程允许执行的最大迭代次数。 - 搜索空间下界(
search_space_min):搜索空间各维度的最小取值。 - 搜索空间上界(
search_space_max):搜索空间各维度的最大取值。 a:用于控制探索与开发平衡的参数。b:用于定义气泡网攻击行为中对数螺旋形状的参数。
过程
- 在搜索空间内随机初始化一个搜索个体(鲸鱼)种群。
- 评估种群中每个搜索个体的适应度。
- 将适应度最优的搜索个体设为当前最优解。
- 当停止准则未满足时(例如未达到最大迭代次数):
- 对种群中的每个搜索个体:
- 生成一个 0 到 1 之间的随机数
r。 - 若
r小于 0.5:- 通过跟随随机选取的搜索个体更新当前位置。
- 否则:
- 通过气泡网攻击行为朝向当前最优解移动,并更新当前位置。
- 生成一个 0 到 1 之间的随机数
- 评估更新后每个搜索个体的适应度。
- 若发现更优解,则更新当前最优解。
- 更新参数
a,以控制探索与开发之间的平衡。
- 对种群中的每个搜索个体:
- 返回找到的最优解。
注意事项
优点
- 简单性:与一些其他元启发式算法相比,鲸鱼优化算法实现较为简单,且易于理解。
- 探索与开发平衡:该算法能够较有效地平衡搜索空间探索与有前景区域开发,从而获得较优解。
- 适应性:通过修改适应度函数和搜索空间表示方式,该算法可以较容易地扩展到多种优化问题。
缺点
- 参数敏感性:算法性能可能对参数取值较为敏感,例如种群规模和最大迭代次数。
- 收敛速度:对于高维或复杂优化问题,该算法的收敛速度可能慢于某些其他元启发式算法。
- 局部最优:与许多元启发式算法类似,若搜索空间具有较强多峰特性,鲸鱼优化算法有时可能陷入局部最优。
启发式建议
种群规模
- 种群规模应足够大,以保证搜索空间的多样性和探索能力,但也不宜过大,以免显著增加计算成本。
- 种群规模的典型取值范围通常为 20 到 100,具体应根据问题复杂度确定。
最大迭代次数
- 最大迭代次数应根据可用计算资源和期望解质量进行设定。
- 增加最大迭代次数能够为算法提供更多收敛时间,并有可能找到更优解,但同时也会增加计算成本。
- 一种常见做法是根据问题规模以及初始运行中的收敛表现来设置最大迭代次数。
探索与开发平衡
- 参数
a用于控制鲸鱼优化算法中探索与开发之间的平衡。 - 在优化过程中逐步减小
a的取值,有助于算法从前期的全局探索平稳过渡到后期的局部开发。 - 常见策略是在线性方式下将
a从 2 递减到 0,从而在前期增强探索能力,在后期增强开发能力。
搜索空间边界
- 搜索空间边界(
search_space_min和search_space_max)应根据优化问题的约束条件和可行区域进行设置。 - 合理定义搜索空间边界有助于算法将搜索集中在相关区域,并避免将计算资源浪费在不可行解上。
螺旋形状参数
- 参数
b用于定义气泡网攻击行为中所采用的对数螺旋形状。 b的默认值通常设置为 1,此时生成的螺旋能够较好平衡开发与探索。- 调整
b的取值会影响螺旋形状以及局部搜索与全局搜索之间的平衡,但默认值在大多数问题中通常具有较好的适用性。