海星优化算法(SFOA)-2024年12月SCI最新算法-公式原理详解与性能测评 Matlab代码免费获取

        声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~

目录

原理简介

一、初始化

二、勘探阶段

三、开发阶段

算法流程图和伪代码

性能测评

参考文献

完整代码


海星优化算法(StarFish Optimization Algorithm, SFOA)是一种新型的元启发式算法(智能优化算法),灵感来源于海星的探索、捕食和再生等行为。该算法采用五维和一维搜索模式相结合的混合搜索模式提高了计算效率,且原文对比的算法达到了100种,不得不说越来越卷了!该成果由Changting Zhong于2024年12月发表在SCI期刊《Neural Computing and Applications上!

由于发表时间较短,谷歌学术上还没人引用!你先用,你就是创新!

这应该是本号介绍的2024年最后一个新优化算法,往后也会给小伙伴们出一个2024年新优化算法合集。

原理简介

灵感:海星分布在世界各地的海洋中,主要分布在深海中,由于缺乏渗透调节系统,在淡水地区很少发现。大多数海星的寿命约为10年,但有些可以活到35年。

、初始化

随机初始化的公式可以用如下方式描述:

式中,Xij表示第i只海星的第j维位置,r表示(0,1)之间的随机数,uj和lj分别为第j维设计变量的上界和下界。

二、勘探阶段

为了模拟海星的探索行为,SFOA算法中建立了探索阶段,模拟海星的五条手臂的搜索能力。在SFOA的探索阶段,提出了一种新的搜索模式,将不同优化问题中五维搜索模式与一维搜索模式相结合。

如果优化问题的维数大于5,则该问题的搜索空间很广,需要海星移动所有五个臂来探索周围环境。因此,建立了这一阶段的数学模型:

式中,ytip和xtip分别表示海星的获得位置和当前位置。XTbestp表示当前最佳位置的p维,p是D维中随机选择的5个维,r表示(0,1)之间的随机数;T为当前迭代次数,Tmax为最大迭代次数,θ在[0, π/2]的范围内。

如果优化问题的维数不大于5 ,则探索阶段采用一维搜索模式更新位置。在这种情况下,海星只有一只手臂移动来搜索食物来源,利用其他海星的位置信息。更新后的位置可以建立为:

式中,XTk1p和XTk2p分别为随机选择的两只海星在p维的位置,A1和A2分别为(- 1,1)之间的两个随机数,p为D维随机选择的数。Et为海星的能量。

三、开发阶段

SFOA在开发阶段考虑了捕食和再生行为,寻求全局解,因此在开发阶段设计了两种更新策略。为了模拟海星的捕食阶段,SFOA采用了平行的双向搜索策略,该策略需要利用其他海星的信息和当前种群的最佳位置。首先计算最佳位置与其他海星之间的五个距离,然后随机选择两个距离作为确认,利用并行双向搜索策略更新每只海星的位置。距离计算公式为:

其中dm是5个获得的全局最佳海星与其他海星之间的距离,mp是5个随机选择的海星。因此,将每只海星在捕食行为中的更新规律建模为:

其中r1和r2为(0,1)之间的随机数,dm中随机选取dm1和dm2。基于并行双向搜索策略,在同一迭代中,候选海星向更好的引导解移动,而其他候选海星则向后退。

如果捕食者捕获海星,海星可能会切断并失去一条手臂以逃避捕获。因此,SFOA的再生阶段只在种群中的最后一个海星中实施(i = N)。由于再生阶段需要几个月的生命,海星的移动速度非常缓慢。因此,我们对再生阶段的更新规则进行建模,位置更新为:

式中T为当前迭代,Tmax为最大迭代次数,N为总体大小。如果得到的位置超出了设计变量的边界,将其位置设为:

算法流程图和伪代码

为了使大家更好地理解,这边给出作者算法的流程图和伪代码,非常清晰!

如果实在看不懂,不用担心,可以看下源代码,再结合上文公式理解就一目了然了!

性能测评

原文作者测试了算法在经典函数、CEC2017和CEC2022上的性能,并比较了100种不同的元启式算法,如海洋捕食者算法、水流优化器(WFO)、LSHADE、LSHADE- cnepsin和LSHADE- spacma。结果表明,SFOA具有求解高维基准函数的能力。

这边为了方便大家对比与理解,采用23个标准测试函数,即CEC2005,设置种群数量为30,迭代次数为1000,和23年新出的沙猫群优化算法SCSO进行对比!这边展示其中5个测试函数的图,其余十几个测试函数大家可以自行切换尝试!

可以看到,这个算法在大部分函数上均优于23年新出的SCSO算法,说明该算法性能还是比较不错的!大家应用到各类预测、优化问题中也是一个不错的选择~

参考文献

[1]Zhong C, Li G, Meng Z, et al. Starfish optimization algorithm (SFOA): a bio-inspired metaheuristic algorithm for global optimization compared with 100 optimizers[J]. Neural Computing and Applications, 2024: 1-43.

完整代码

如果需要免费获得图中的完整测试代码,只需点击下方小卡片,再后台回复关键字,不区分大小写:

SFOA

也可点击下方小卡片,再后台回复个人需求(比如SFOA-SVM)定制以下SFOA算法优化模型(看到秒回):

1.回归/时序/分类预测类:SVM、RVM、LSSVM、ELM、KELM、HKELM、DELM、RELM、DHKELM、RF、SAE、LSTM、BiLSTM、GRU、BiGRU、PNN、CNN、BP、XGBoost、TCN、BiTCN、ESN、Transformer等等均可~

2.组合预测类:CNN/TCN/BiTCN/DBN/Transformer/Adaboost结合SVM、RVM、ELM、LSTM、BiLSTM、GRU、BiGRU、Attention机制类等均可(可任意搭配非常新颖)~

3.分解类:EMD、EEMD、VMD、REMD、FEEMD、TVFEMD、CEEMDAN、ICEEMDAN、SVMD、FMD等分解模型均可~

4.路径规划类:机器人路径规划、无人机三维路径规划、冷链物流路径优化、VRPTW路径优化等等~

5.优化类:光伏电池参数辨识优化、光伏MPPT控制、储能容量配置优化、微电网优化、PID参数整定优化、无线传感器覆盖优化、故障诊断等等均可~~

6.原创改进优化算法(适合需要创新的同学):原创改进2024年的海星优化算法SFOA以及班翠鸟PKO、蜣螂DBO等任意优化算法均可,保证测试函数效果!

海星优化算法(Starfish Optimization Algorithm, SOA)是一种模拟海星觅食行为的搜索优化算法。它基于海星觅食过程中探索性和全局最优性的特性设计。以下是Python的一个简单版本的SOA实现代码: ```python import numpy as np class StarfishOptimization: def __init__(self, problem_dim, num_stars, max_iter, alpha=0.5, beta=1): self.problem_dim = problem_dim self.num_stars = num_stars self.max_iter = max_iter self.alpha = alpha self.beta = beta self.stars = self.initialize_stars() self.best_solution = None def initialize_stars(self): stars = [np.random.uniform(-10, 10, self.problem_dim) for _ in range(self.num_stars)] return stars def update_star_position(self, star, g_best): r = np.random.rand(self.problem_dim) c1 = self.alpha * (star - g_best) c2 = self.beta * np.abs(np.random.randn(self.problem_dim)) new_pos = star + r * (c1 + c2) # 确保新位置在搜索空间内 new_pos = np.clip(new_pos, -10, 10) return new_pos def iterate(self): g_best = np.min([self.stars[i] for i in range(self.num_stars)], axis=0) updated_stars = [self.update_star_position(star, g_best) for star in self.stars] for i, star in enumerate(updated_stars): if np.sum(np.square(star)) < np.sum(np.square(self.stars[i])): self.stars[i] = star if not self.best_solution or np.sum(np.square(star)) < np.sum(np.square(self.best_solution)): self.best_solution = star def optimize(self): for _ in range(self.max_iter): self.iterate() return self.best_solution, self.stars # 使用示例 problem_dim = 10 num_stars = 50 max_iter = 1000 optimizer = StarfishOptimization(problem_dim, num_stars, max_iter) best_solution, star_positions = optimizer.optimize() print("Best solution:", best_solution) ``` 请注意,这只是一个基础版本,实际应用中可能需要根据具体问题调整参数和细节。此外,此代码并未包含详细的收敛检查和终止条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值