【单目标优化算法】沙猫群优化算法(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥


🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。


座右铭:行百里者,半于九十。

📋 📋 📋 本文目录如下: 🎁 🎁 🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码实现

💥1 概述

本研究提出了一种新的元启发式算法,称为沙猫群优化(SCSO),该算法模拟了试图在自然界中生存的沙猫行为。这些猫能够检测到低于 2 kHz 的低频,并且还具有令人难以置信的挖掘猎物的能力。受这两个特征的启发,所提出的算法由两个主要阶段(搜索和攻击)组成。该算法以平衡的方式控制勘探和开发阶段的过渡,在以较少的参数和操作找到良好的解决方案方面表现良好。它是通过使用定义的自适应策略找到适当运动的方向和速度来实现的。将SCSO算法与CEC20基准函数的10个知名复数测试函数以及现代2019个复杂测试函数进行了测试,并将获得的结果与著名的元启发式算法进行了对比。根据结果,在63.3%的测试函数中找到最佳解的算法是SCSO。此外,SCSO算法还应用于焊接梁设计、拉伸/压缩弹簧设计、压力容器设计、活塞杠杆、减速器设计、三杆桁架设计和悬臂梁设计等<>个具有挑战性的工程设计问题。结果表明,SCSO在收敛率和定位全部或大部分局部/全局最优方面表现良好,优于其他比较方法。

在现实生活中,优化意味着除了最大限度地提高效率和质量外,还意味着最大限度地减少时间和成本。事实上,有很多问题需要优化,既复杂又困难。启发式和元启发式算法是解决问题和获得优化解决方案的两种方法。启发式算法是问题依赖性的,而元启发式算法不依赖于特定问题,最优解是从随机搜索空间和预定义边界[1]中获得的。问题越大越复杂,解决起来就越困难[2]。特别是他们的时间和记忆复杂性会显着恶化。这些类型的问题中最突出的是非确定性多项式时间(NP-hard)问题。NP-hard问题可以通过精确和近似的方法解决。精确的方法保证了具有指数级时间复杂度和高成本的最佳解决方案。启发式算法和元启发式算法都是近似算法的家族,不能保证找到最优解,但得到的解可能更接近最优解,复杂度和实际执行时间更好。因此,第二组通常是首选。另一方面,考虑到启发式方法存在局部陷阱等问题,元启发式方法可以为许多NP难题提供实用且有用的解决方案,并且在实际执行时间内为这些类型的问题找到最优解方面通常表现良好[3]。

元启发式方法不会落入局部陷阱,此外,它们更加灵活,并试图通过简单的实施在更短的时间内以更少的流程成本在全球搜索领域找到最佳解决方案。特别是,元启发式算法的性能可以更成功地解决复杂问题[2]。此外,无免费午餐(NFL)[4]断言没有特定的算法为每个优化问题提供最佳解决方案。因此,开发可用于各种问题的新元启发式算法的需求很大。因此,由于其广泛的使用领域和优势,近年来,元启发式优化算法在许多科学领域变得流行[5,6,7]。一般来说,元启发式算法受到生物或物理现象[8]的启发,并试图在合理的时间内找到最佳解决方案(最大值或最小值)。

元启发式算法通常分为单解算法和基于群体(多)算法两类。在单解算法中,虽然单个解会影响输出,但整个总体都包含在基于总体的算法中。此外,元启发式算法分为进化算法、基于物理算法和群体智能算法。进化算法(EA)的灵感来自自然进化论和达尔文进化论[9]。EA 在随机搜索空间内解决问题,而 EA 是一种基于群体的方法,其中整个总体影响最佳解决方案。遗传算法 (GA) 是 EA 类别 [10] 中众所周知的算法,其灵感来自世代复制。GA 通过模仿交叉、突变和精英主义来产生新一代,以找到全局最优。差分进化(DE)算法是另一种受自然进化驱动的算法。DE算法在生成下一代的选择操作中与GA有所不同[11]。改进的量子衍生合作协同进化算法(MSQCCEA)[12]是目前的研究之一。该算法提高了全局搜索能力,不会落入局部最优陷阱。因此,已经开发出一种量子自旋方向策略,将量子演化方向从13个变为14个。将该方法应用于背包和实际机场登机口分配问题,结果表明所提算法在快速、准确的收敛速率方面具有良好的性能。禁忌搜索(TS)算法是进化算法的另一个例子[15]。进化编程(EP)的灵感来自表型、遗传和变异等行为模型[16]。基于生物地理学的优化器(BBO)[<>]和黑寡妇优化(BWO)[<>]是EA的另一个例子。

基于物理的算法是元启发式方法的另一个家族成员。这些算法受到自然界物理规则的启发,并根据假设的物理事件随机行动。在这种算法中,搜索空间和最优解遵循电磁力、引力和惯性力等物理规律。这一类别中有著名的优化算法,如引力局部搜索(GLSA)[17],引力搜索算法(GSA)[18]和大爆炸-大紧缩(BBBC)[19]。黑洞(BH)算法的灵感来自黑洞现象的事实[20],是基于物理学的另一种算法。该类别中的其他著名作品是带电系统搜索(CSS)[21],曲线空间优化[22],中心力优化(CFO)[23]和基于星系的搜索算法(GbSA)[24]。在此类别的方法中,搜索代理根据假定的物理事件随机操作。

群体智能(SI)是元启发式算法的第三类。通常,SI方法的灵感来自自然界中成群,饲养和成群的动物的社会行为。在这种算法中,搜索代理试图通过影响社交智能来找到最佳解决方案。粒子群优化(PSO)是这一类别中最著名的算法[25]。PSO的灵感来自鸟类在自然界中的运动和社会行为。粒子指示候选解决方案,算法尝试根据这些粒子从搜索空间中找到最佳解决方案。蚁群优化(ACO)是该类别中的另一种算法[26]。ACO算法模拟蚂蚁的觅食行为。自然界中蚂蚁的主要目标是找到目的地(食物)并在源头和目的地之间生成最佳(安全和最低成本)路径。在文献中,该算法已被用于解决许多类型的问题[27,28]。人工蜂群(ABC)[29]算法是另一种模仿蜜蜂社会行为的重要算法。在ABC发现中,在目的地(巢)和源(食物)之间生成了一条路径。寻找丰富的食物资源和蜜蜂体验是ABC算法中寻找最佳解决方案的重要阶段。此类别中的其他算法包括蝙蝠算法 (BA) [30]、萤火虫算法 (FA) [31]、灰狼优化 (GWO) [32] 和不同方差 [33]、鲸鱼优化算法 (WOA) [34]、蜻蜓算法 (DA) [35]、布谷鸟搜索 (CS) [36]、蝴蝶优化算法 (BOA) [37]、风驱动优化 (WDO) [38]、猫群优化 (CSO) [39],果蝇优化算法(FFOA)[40]和花授粉算法(FPA)[41],Salp群算法(SSA)[42],探路者算法(PFA)[43]及其改进版本[3],以及哈里斯鹰优化(HHO)算法[44]。此外,混合元启发式算法近年来已经变得普遍。[45,46]介绍了在这种情况下所做的两项有价值的研究。在[45]中,作者提出了一种基于DA和WDO算法的新方法。作者纠正了这两种算法的缺点,并因此证明了他们提出的方法具有快速的收敛速度和强大的全局搜索能力,并且在寻找解决方案方面是准确的。在[46]中,作者受到BOA和FPA算法的启发,提出了一种灵活的算法来解决全局优化问题。作者提出了一种在探索和开发阶段之间有效切换的新机制,因此该算法表现出平衡的行为。

元启发式算法的主要阶段是探索和开发,每种算法都有特定的策略来实现这些阶段的概念。所提出的算法中这两个阶段之间的平衡越多,成功率就越高。在这些策略中,定义的随机性和适当的系数很重要。正确设置相关系数参数以确保这两个相位之间的良好平衡非常重要[33]。探索意味着在全球范围内进行搜索。此阶段需要更多的搜索,因此相关算法从搜索空间中随机选择一个解决方案。而开发阶段在探索阶段之后,而开发阶段侧重于搜索空间上的解决方案以改进解决方案。换句话说,检查未访问的区域是否是局部最优差的潜在逃生区域。探索中搜索的随机性会影响算法,以避免在探索全局最优的局部最优上陷害。

本文提出了一种新的元启发式优化算法,该算法可能更适合于根据NFL定理解决相关阶段之间表现平衡的各种问题。此外,所提出的算法比目前其他元启发式算法具有更有利的复杂性。该算法受沙猫搜索和狩猎行为的启发,命名为沙猫群优化(SCSO)。沙猫在自然界中独居,但在所提出的算法中,沙猫被认为是一个可以被用户识别为搜索代理的群体。在所提算法的开发中,重点是沙猫寻找猎物的低频噪声检测行为。这些猫检测到低于 2 kHz 的低频,因此它们可以在可能的短时间内长距离捕捉猎物,而且几乎没有动作。此外,沙猫具有令人难以置信的挖掘猎物的能力。由于这两个奇妙的功能,确保了沙猫在自然界中具有搜索和狩猎的特殊能力。所提出的算法在探索和开发阶段也通过自适应机制保持平衡。此外,本文的主要贡献总结如下。

1.两个阶段:搜索和攻击猎物。本文提出的算法(SCSO)就包括了这两个阶段,此外,还提出了一种机制来实现探索和利用阶段的平衡。

2.算法运行时首先根据问题的规模( N pop × N d ) , ( pop = 1 , . . . , n =1,…,n=1,…,n)利用沙丘猫群创建一个候选矩阵,然后就目标函数对每个沙丘猫进行适应度评估,选择出其中最优的个体,其他的个体都朝向该个体移动。

详细数学模型和文章见参考文献。

📚2 运行结果

部分代码:

function [Best_Score,BestFit,Convergence_curve]=SCSO(SearchAgents_no,Max_iter,lb,ub,dim,fobj)

BestFit=zeros(1,dim);

Best_Score=inf;

Positions=initialization(SearchAgents_no,dim,ub,lb);

Convergence_curve=zeros(1,Max_iter);

t=0;

p=[1:360];

while t<Max_iter

for i=1:size(Positions,1)

Flag4ub=Positions(i,:)>ub;

Flag4lb=Positions(i,:)<lb;

Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;

fitness=fobj(Positions(i,:));

if fitness<Best_Score

Best_Score=fitness;

BestFit=Positions(i,:);

end

end

S=2; %%% S is maximum Sensitivity range

rg=S-((S)*t/(Max_iter)); %%%% guides R

for i=1:size(Positions,1)

r=rand*rg;

R=((2*rg)*rand)-rg; %%%% controls to transtion phases

for j=1:size(Positions,2)

teta=RouletteWheelSelection(p);

if((-1<=R)&&(R<=1)) %%%% R value is between -1 and 1

Rand_position=abs(rand*BestFit(j)-Positions(i,j));

Positions(i,j)=BestFit(j)-r*Rand_position*cos(teta);

else

cp=floor(SearchAgents_no*rand()+1);

CandidatePosition =Positions(cp,:);

Positions(i,j)=r*(CandidatePosition(j)-rand*Positions(i,j));

end

end

end

t=t+1;

Convergence_curve(t)=Best_Score;

end

end

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Seyyedabbasi, A., Kiani, F. Sand Cat swarm optimization: a nature-inspired algorithm to solve global optimization problems. Engineering with Computers (2022).

[2]高烨,陶丽丽,马苗.基于猫群优化算法的图像多阈值分割方法[J].中国体视学与图像分析,2018,23(02):125-132.DOI:10.13505/j.1007-1482.2018.23.02.001.

[3]姜天华.猫群优化算法求解柔性作业车间调度问题[J].计算机工程与应用,2018,54(23):259-263+270.

🌈4 Matlab代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351685.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

华为路由器 NAT 配置

拓扑图 静态 NAT 静态地址转换是指外部网络和内部网络之间的地址映射关系由配置确定&#xff0c;该方式适用于内部网络与外部网络之间存在固定访问需求的组网环境。静态地址转换支持双向互访&#xff1a;内网用户可以主动访问外网&#xff0c;外网用户也可以主动访问内网。 一…

Java 冒泡排序法

冒泡排序法是交换排序法的一种 思想&#xff1a; /** * 冒泡法排序 * 比较相邻的元素。如果第一个比第二个小&#xff0c;就交换他们两个。 * 对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最小的数。 * 针…

冒泡排序法定向冒泡排序法的Python实现

冒泡排序法 冒泡排序法&#xff1a;每轮对相邻的两者进行比较&#xff0c;若顺序不对&#xff0c;则进行位置互换&#xff0c;每轮都将使每轮的 最后一位是该轮的大数。 比如在数列&#xff1a;[71, 1, 14, 78, 75, 38, 10, 49, 40, 95] 第一轮交换&#xff1a;71>1 > […

Java:冒泡排序法

冒泡排序法是最基本的排序法之一&#xff0c;冒泡排序法的运行机制是通过循环遍历元素并调整相邻元素顺序来实现的一种简单排序方法。冒泡排序的实质是相邻两个元素比较&#xff0c;然后按照升序或降序调换位置。 下为降序冒泡排序的代码: public class Training {public sta…

基于Java的冒泡排序法

基本过程&#xff1a; 原始顺序是48&#xff0c; 52&#xff0c; -51 &#xff0c;0 &#xff0c;67 &#xff0c;23&#xff0c; -24。开始48和52比较&#xff0c;48<52&#xff0c;则顺序不变&#xff1b;52和-51比较&#xff0c;52>-51,则两者交换位置&#xff08;48…

冒泡排序法过程分析

冒泡排序法过程分析&#xff1a; 下面是代码。建议先自己尝试去实现一下看看&#xff0c;再来看我是如何实现的。 #include <stdio.h> main() { int a[100],i,j,t,n; scanf("%d",&n); //输入一个数n&#xff0c;表示接下来有n个数 for(i1;i<n;i)…

冒泡排序法全攻略

1 算法介绍 冒泡排序法又叫起泡法&#xff0c;在许多程序设计中&#xff0c;我们需要将一个数列进行排序&#xff0c;以方便统计&#xff0c;常见的排序方法有冒泡排序&#xff0c;二叉树排序&#xff0c;选择排序等等。而冒泡排序一直由于其简洁的思想方法和比较高的效率而倍…

js冒泡排序法

冒泡排序法 冒泡排序法其实也是一种最简单&#xff0c;最清晰明了的一种排序算法。主要的运行过程就是重复比较一个数组里面的所有元素&#xff0c;两两做比较&#xff0c;如果他们的顺序不对&#xff0c;则把他们交换位置&#xff0c;一直重复到没有再需要交换元素就结束循环…

冒泡排序法(C语言)

冒泡排序&#xff1a;相邻两个数两两比较&#xff0c;小的数向前移&#xff08;上浮&#xff09;&#xff0c;大的数向后移&#xff08;下沉&#xff09;&#xff0c;如同水中的泡泡上浮一般&#xff1b; 冒泡排序图示&#xff1a; 如果有N个数&#xff0c;则要跑N-1次比较&…

Word控件Spire.Doc 【其他】教程(6):从 Word 中提取 OLE 对象

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

力扣刷题笔记——动态规划

动态规划基础 简称DP&#xff0c;如果某⼀问题有很多重叠⼦问题&#xff0c;使⽤动态规划是最有效的。 动态规划中每⼀个状态⼀定是由上⼀个状态推导出来的 1. 确定dp 数组&#xff08; dp table &#xff09;以及下标的含义 2. 确定递推公式 3. dp 数组如何初始化 4. 确定遍…

【Java系列】MyBatis-Plus常见面试题

问题列表 Q1&#xff1a;MyBatis-Plus是什么&#xff1f;它有什么优点&#xff1f; MyBatis-Plus是MyBatis框架的一个扩展库&#xff0c;它提供了一系列方便的API和工具&#xff0c;可以简化常见的数据库操作。MyBatis-Plus的优点包括&#xff1a; 提高开发效率&#xff1a;My…

MQTT与EMQ

文章目录 1 MQTT协议与EMQ中间件1.1 物联网消息协议MQTT1.1.1 什么是MQTT1.1.2 MQTT相关概念1.1.3 消息服务质量QoS——信息的可靠投递1.1.3.1 QoS0——消息服务质量为0&#xff0c;消息发送至多一次1.1.3.2 QoS1——消息发送至少一次1.1.3.3 QoS2——消息发送仅一次1.1.3.4 不…

MTK平台的SWT异常的简单总结(2)——SWT原理和分析

&#xff08;1&#xff09;原理性 &#xff08;2&#xff09;SWT如何抓取Log 遇到SWT问题详细可参考MTK提供的FAQ&#xff1a;SWT机制介绍。 获取Ap Log的路径&#xff1a;/sdcard/debuglogger/mobilelog/APLog_XXXXX 获取db的路径&#xff1a;/data/aee_exp 如果db没有打包…

HBase统计表行数(RowCount)的四种方法

背景&#xff1a; 对于其他数据存储系统来说&#xff0c;统计表的行数是再基本不过的操作了&#xff0c;一般实现都非常简单&#xff1b;但对于HBase这种key-value存储结构的列式数据库&#xff0c;统计 RowCount 的方法却有好几种不同的花样&#xff0c;并且执行效率差别巨大&…

2023年测试人前景归途?我主攻自动化测试拿到了25k的offer...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

sqlserver 中 @@rowcount的简单用法

返回受上一语句影响的行数。如果行数大于 20 亿&#xff0c;请使用 ROWCOUNT_BIG。 语法 ROWCOUNT 返回类型 int 注释 Transact-SQL 语句可以通过下列方式设置 ROWCOUNT 的值&#xff1a; 将 ROWCOUNT 设置为 受影响或被读取的行的数目。可以将行发送到客户端&#xff0c;…

SQL中row_number函数用法

row_number函数用法 1、函数讲解2、LeetCode实战 1、函数讲解 语法&#xff1a;ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说&#xff0c;row_number()从1开始&#xff0c;为每条分组记录返回一个数字&#xff0c;举例&#xff1a; ROW_NUMBER() OVER(OR…

Hbase进行RowCount统计

对于Table内RowKey个数的统计&#xff0c;一直是HBase系统面临的一项重要工作&#xff0c;目前有三种执行该操作的方式。 测试环境&#xff1a; Apache版的 hadoop-2.6.0 &#xff08;cdh版的hadoop-2.6.0-cdh5.5.2也可以&#xff09; Apache版的 hbase-1.0.0 &#xff08;一…

【完整版】2023二级建造师《建筑实务》真题答案解析(2天考3科)

2023二级建造师考试将在6月3日、4日举行&#xff0c;2023二建《市政实务》考试时间&#xff08;2天考3科&#xff09;&#xff1a;6月4日 9:00-12:00&#xff0c; 考后甘建二将及时发布2023年二建市政实务真题及答案解析&#xff0c;敬请关注 2天考3科地区&#xff1a;四川、山…