借鉴生物行为:
海鸥的迁徙和攻击行为。海鸥根据季节更替进行迁徙,迁徙飞行时海鸥会避免相互碰撞;海鸥会攻击猎物,攻击时呈螺旋形的运动形态;在一个群体中,海鸥朝着最佳位置的方向前进。
海鸥攻击猎物后的新位置 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。
求解下列函数的最小值:
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) * rd
MS[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, :] + Pbest
X = 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] = GbestScore
return GbestScore, GbestPositon, Curve
运行结果:
最优适应度值: [6.28823104e-226]
最优解: [[-1.77578646e-113 1.77054045e-113]]
可以看到答案非常接近最优适应度值0。
文献 | 改进策略 |
---|---|
王培崇,尹欣洁,李丽荣.一种具有学习机制的海鸥优化算法[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分布变异 |
文献 | 融合的智能优化算法 |
---|---|
王宁,何庆.融合黄金正弦与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]. | 正余弦 |
文献 | 应用 |
---|---|
龙文,徐明,羊洋.用于函数优化和特征选择的翻筋斗觅食海鸥优化算法[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 confirmed | xgboost+时间序列预测 |
王瑞. 基于改进海鸥优化算法的智能工厂柔性作业车间调度问题研究[D].燕山大学,2021. | 作业车间调度问题 |
程亚南,王晓峰,刘凇佐,刘子琳,张九龙.一种求解TSP问题的海鸥算法[J].现代电子技术,2022,45(07):112-116. | 旅行商问题 |
参考书籍:范旭,《Python智能优化算法——从原理到代码实现与应用》第一版,电子工业出版社。