海鸥优化算法(Seagull Optimization Algorithm,SOA)

2023-11-07 13:30

本文主要是介绍海鸥优化算法(Seagull Optimization Algorithm,SOA),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1 算法思想
  • 2 算法步骤
  • 3 求解函数最值(Python实现)
  • 4 算法进阶
    • 直接改进SOA
    • 融合别的智能优化算法来改进SMA
    • SMA及其改进的应用

原论文:
[1]Gaurav Dhiman, Vijay Kumar. Seagull optimization algorithm: Theory and its applications for large-scale industrial engineering problems. Knowledge-Based Systems. 2019(165), 169-196.

1 算法思想

借鉴生物行为
海鸥的迁徙和攻击行为。海鸥根据季节更替进行迁徙,迁徙飞行时海鸥会避免相互碰撞;海鸥会攻击猎物,攻击时呈螺旋形的运动形态;在一个群体中,海鸥朝着最佳位置的方向前进。

2 算法步骤

  1. 初始化参数;
  2. 初始化种群位置;
  3. 计算适应度值并保留全局最优位置;
  4. 迁徙,全局搜索:
    抽象海鸥的迁徙行为主要有三步,第一要满足避免碰撞条件(这样可以确保种群多样性);第二要计算最佳位置的方向;第三要根据该方向移动到新的位置。
    第一,计算不与相邻海鸥碰撞的新位置 C s ( t ) C_s(t) Cs(t)
    C s ( t ) = A × P s ( t ) A = f c − ( t × f c M a x i t e r a t i o n ) C_s(t)=A×P_s(t) \\ A = f_c-(t×\frac{f_c}{Max_{iteration}}) Cs(t)=A×Ps(t)A=fc(t×Maxiterationfc)
    其中, P s ( t ) P_s(t) Ps(t)为当前位置;t为当前迭代次数;A为海鸥在搜索空间中的运动行为; f c f_c fc为控制A变化频率的函数,从2线性递减到0; M a x i t e r a t i o n Max_{iteration} Maxiteration为最大迭代次数。
    第二,计算最佳位置的方向 M s ( t ) M_s(t) Ms(t)
    M s ( t ) = B × ( P b e s t ( t ) − P s ( t ) ) B = 2 × A 2 × r M_s(t)=B×(P_{best}(t)-P_s(t)) \\ B=2×A^2×r Ms(t)=B×(Pbest(t)Ps(t))B=2×A2×r
    其中, P b e s t ( t ) P_{best}(t) Pbest(t)为当前最佳位置; P s ( t ) P_s(t) Ps(t)为当前位置;B为平衡全局与局部搜索能力的随机数;r为[0,1]内的随机数。
    第三,根据该方向移动到新位置 D s ( t ) D_s(t) Ds(t)
    D s ( t ) = ∣ C s ( t ) + M s ( t ) ∣ D_s(t)=|C_s(t)+M_s(t)| Ds(t)=Cs(t)+Ms(t)
  5. 攻击猎物,局部搜索:
    海鸥攻击猎物时在空中进行螺旋运动,抽象到三维空间中为:
    { x = r c o s ( θ ) y = r s i n ( θ ) z = r θ r = u × e θ v \left\{ \begin{aligned} & x=rcos(\theta) \\ & y=rsin(\theta) \\ & z=r\theta \\ & r=u×e^{\theta v} \end{aligned} \right. x=rcos(θ)y=rsin(θ)z=rθr=u×eθv
    其中,r为螺旋半径,会越来越小; θ \theta θ为[0, 2π]内的随机角度值;u和v是两个决定螺旋形状的参数,轨迹模拟出来大概是这个样子:
    在这里插入图片描述

海鸥攻击猎物后的新位置 P s ( t ) P_s(t) Ps(t)
P s ( t ) = D s ( t ) × x × y × z + P b e s t ( t ) P_s(t)=D_s(t)×x×y×z+P_{best}(t) Ps(t)=Ds(t)×x×y×z+Pbest(t)
6. 判断是否满足终止条件,若不满足,返回步骤3。

3 求解函数最值(Python实现)

求解下列函数的最小值:
f ( x 1 , x 2 ) = x 1 2 + x 2 2 f(x_1,x_2)=x_1^2+x_2^2 f(x1,x2)=x12+x22
标准答案是0,函数长这个样子:
在这里插入图片描述
主函数:

import numpy as np
from matplotlib import pyplot as plt
import SOA'''适应度函数'''
def fun(X):Results = np.sum(X ** 2)return Results'''主函数 '''
#设置参数
pop = 30 #种群数量
MaxIter = 200 #最大迭代次数
dim = 2 #维度
lb = -10*np.ones(dim) #下边界
ub = 10*np.ones(dim)#上边界
#适应度函数选择
fobj = fun
GbestScore,GbestPositon,Curve = SOA.SOA(pop,dim,lb,ub,MaxIter,fobj) # 调用SOA函数
print('最优适应度值:',GbestScore)
print('最优解:',GbestPositon)

SOA.py:

import numpy as np
import copy'''海鸥优化算法'''
'''
输入:
pop:种群数量
dim:每个个体的维度
lb:个体下边界,维度为[1,dim]
ub:个体上边界,维度为[1,dim]
MaxIter:最大迭代次数
fun:适应度函数接口
输出:
GbestScore:最优解对应的适应度值
GbestPositon:最优解
Curve:画迭代图用
'''
def SOA(pop, dim, lb, ub, MaxIter, fun):# 1.初始化参数Curve = np.zeros([MaxIter, 1])  # 画迭代图用CS = np.zeros([pop, dim])  # 海鸥迁徙过程用到的三个变量,CS为满足避免碰撞条件的位置MS = np.zeros([pop, dim])  # MS为最佳位置的方向DS = np.zeros([pop, dim])  # DS为最终迁徙完得到的新位置fc = 2  # ???论文中的fc从2线性递减到0,可以控制变量A的变化频率,第4.1步用u = 1  # 螺旋形状的相关参数,第5步用v = 1  # 螺旋形状的相关参数,第5步用# 2.根据种群数量与边界来初始化种群位置X = initialization(pop, ub, lb, dim)  # 初始化种群# 3.计算适应度值并保留全局最优值fitness = CaculateFitness(X, fun)  # 计算适应度值fitness, sortIndex = SortFitness(fitness)  # 对适应度值排序,得到排序后的适应度值和对应的索引X = SortPosition(X, sortIndex)  # 根据排序后的索引对种群排序GbestScore = copy.copy(fitness[0])  # 此时fitness的第一个值为最好的适应度值GbestPositon = np.zeros([1, dim])GbestPositon[0, :] = copy.copy(X[0, :])  # 此时X的第一个值为最好的个体X_new = copy.copy(X)for i in range(MaxIter):# print("第"+str(i)+"次迭代")Pbest = X[0, :]for j in range(pop):# 4.1计算Cs,得到避免碰撞的位置,保持种群多样性,全局搜索A = fc - (i * (fc / MaxIter))CS[j, :] = X[j, :] * A# 4.2计算Ms,得到最佳位置的方向rd = np.random.random()B = 2 * (A ** 2) * rdMS[j, :] = B * (Pbest - X[j, :])# 4.3计算Ds,到达新位置DS[j, :] = np.abs(CS[j, :] + MS[j, :])# 5.海鸥进行螺旋运动攻击猎物,局部搜索# 螺旋形状theta = np.random.random()r = u * np.exp(theta * v) # theta为[0,1]x = r * np.cos(theta * 2 * np.pi) # theta为[0,2π]y = r * np.sin(theta * 2 * np.pi) # theta为[0,2π]z = r * theta # theta为[0,1]# 攻击猎物后的位置X_new[j, :] = x * y * z * DS[j, :] + PbestX = BorderCheck(X_new, ub, lb, pop, dim)  # 边界检查fitness = CaculateFitness(X, fun)  # 计算适应度值fitness, sortIndex = SortFitness(fitness)  # 对适应度值排序,拿到索引X = SortPosition(X, sortIndex)  # 根据索引对种群排序if (fitness[0] <= GbestScore):  # 更新全局最优GbestScore = copy.copy(fitness[0])GbestPositon[0, :] = copy.copy(X[0, :])Curve[i] = GbestScorereturn GbestScore, GbestPositon, Curve

运行结果:
最优适应度值: [6.28823104e-226]
最优解: [[-1.77578646e-113 1.77054045e-113]]
可以看到答案非常接近最优适应度值0。

4 算法进阶

  1. 在标准测试函数、CEC2014测试函数中表现一般;
  2. 标准工程优化设计问题上SOA优势很大;
  3. 螺旋行为与鲸鱼优化算法有些相似;
  4. 原文中的公式与作者上传的源码里的公式有差异;
  5. 在迭代前期收敛速度很慢,容易陷入局部最优值;
  6. 虽然当前个体确实没有和其他个体存在位置冲突,但是在螺旋飞行的过程中难免会存在个体碰撞,全局搜索能力不如想象的好;
  7. 优化Quadric函数(F3)存在问题,与全局最优相差上万;
  8. 优化Rosenbrock函数(F5)效果不好,与全局最优相差4;
  9. 优化Rastrigin函数Griewank(F9,11,16,18)效果好,能找到全局最优;

直接改进SOA

文献改进策略
王培崇,尹欣洁,李丽荣.一种具有学习机制的海鸥优化算法[J].郑州大学学报(工学版),2022,43(06):8-14.反向学习
龙文,徐明,羊洋.用于函数优化和特征选择的翻筋斗觅食海鸥优化算法[J/OL].计算机应用研究:1-7[2022-10-19].翻筋斗觅食策略
严爱军,胡开成.提高海鸥优化算法寻优能力的改进策略及其应用[J/OL].信息与控制:1-11[2022-10-19].并行搜索+反向学习+马尔可夫过程
王娟,秦江涛.混沌映射与t-分布变异策略改进的海鸥优化算法[J].计算机应用研究,2022,39(01):170-176+182.tent混沌映射+t分布变异
王宁,何庆.融合黄金正弦与sigmoid连续化的海鸥优化算法[J].计算机应用研究,2022,39(01):157-162+169.sigmoid连续化
秦维娜,张达敏,尹德鑫,蔡朋宸.一种基于非线性惯性权重的海鸥优化算法[J].小型微型计算机系统,2022,43(01):10-14.非线性惯性权重+莱维飞行机制
毛清华,王迎港.融合改进Logistics混沌和正弦余弦算子的自适应t分布海鸥算法[J/OL].小型微型计算机系统:1-9[2022-10-19].Logistics混沌映射+t分布变异

融合别的智能优化算法来改进SMA

文献融合的智能优化算法
王宁,何庆.融合黄金正弦与sigmoid连续化的海鸥优化算法[J].计算机应用研究,2022,39(01):157-162+169.黄金正弦
丁飞,江铭炎.基于改进狮群算法和BP神经网络模型的房价预测[J].山东大学学报(工学版),2021,51(04):8-16.狮群算法LSO
毛清华,王迎港.融合改进Logistics混沌和正弦余弦算子的自适应t分布海鸥算法[J/OL].小型微型计算机系统:1-9[2022-10-19].正余弦

SMA及其改进的应用

文献应用
龙文,徐明,羊洋.用于函数优化和特征选择的翻筋斗觅食海鸥优化算法[J/OL].计算机应用研究:1-7[2022-10-19].特征选择
丁飞,江铭炎.基于改进狮群算法和BP神经网络模型的房价预测[J].山东大学学报(工学版),2021,51(04):8-16.BP神经网络+房价预测
Improved seagull optimization algorithm of partition and XGBoost of prediction for fuzzy time series forecasting of COVID-19 daily confirmedxgboost+时间序列预测
王瑞. 基于改进海鸥优化算法的智能工厂柔性作业车间调度问题研究[D].燕山大学,2021.作业车间调度问题
程亚南,王晓峰,刘凇佐,刘子琳,张九龙.一种求解TSP问题的海鸥算法[J].现代电子技术,2022,45(07):112-116.旅行商问题

参考书籍:范旭,《Python智能优化算法——从原理到代码实现与应用》第一版,电子工业出版社。

这篇关于海鸥优化算法(Seagull Optimization Algorithm,SOA)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/363927

相关文章

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语