SCA|可作为有效改进策略的算法——正余弦优化算法(Matlab/Python)

在这里插入图片描述

正余弦优化算法(Sine cosine algorithm,SCA)是由Mirjalili [1]在2016年提出,目前WOS上引用量2K+,谷歌学术上4K+。

在这里插入图片描述

不得不说Seyedali Mirjalili真是位大神级的人物(下图是Mirjalili开发的部分算法)

在这里插入图片描述

SCA的核心思想是利用正、余弦函数波动的周期性,在全局范围内探索最优解,使算法逐步收敛。其具有结构简单、参数少、易于实现的特点。其优化性能优于GA、PSO、花授粉等,已被广泛用于数据分类、光谱特征峰定位和电力系统调度等不同领域。

在这里插入图片描述

另一方面,算法的混合来看,混合元启发式算法的主要目标是利用每种算法的优点,以最大限度地减少每种算法的缺点。正是由于SCA模型的简单及其优秀的搜索性能,其更易于算法的混合。

本文主要内容包括:SCA算法原理,SCA算法的改进与利用思路,以及SCA算法的MATLAB和Python代码实现。

00 目录

1 正余弦算法SCA原理

2 改进&利用

3 代码目录

4 算法性能

5 源码获取

01 正余弦算法SCA原理

SCA的独特之处在于使用正弦和余弦波来控制探索和开发搜索空间。下面的数学方程可以描述这个过程:

在这里插入图片描述

Pt ij指示迭代t中的最佳个体位置。此外,有四个随机参数r1,r2,r3和r4。r1控制搜索代理的下一个位置,如果r1小于1,则倾向于开发,如果r1大于1,则倾向于勘探。为了平衡勘探与开发,r1的定义式是线性递减的,其中a一般取2。r2表示向外或向内的移动步长,r2参数的范围是[0,2 π]。r3在0和2之间的范围内,如果r3大于1,则更注重全局最优位置,否则不强调。r4是在0和1之间的随机参数,用以转换正弦和余弦。

其寻优示意图如下:
在这里插入图片描述

图:陈亮, 汤显峰. 改进正余弦算法优化特征选择及数据分类[J]. 计算机应用, 2022, 42(6): 1852-1861.

以上就是SCA的全部理论,很简单吧~

02 改进&利用

根据没有免费的午餐(NFL)定理[2],没有一个算法可以处理所有的优化问题,即每个算法都有其优势和局限性,这也激励着学者提出各种改进的算法来解决不同类型的优化问题,同时也为算法间的混合利用提供了参考。

2.1 改进

SCA在面对复杂问题时仍然存在优化精度低、容易陷入局部极值、收敛速度慢等问题,这里给出一种思路。SCA中,r1用于平衡全局搜索和局部开发能力,但线性递减的策略使得前期递减的过快,全局搜索不充分,后期递减的过慢,无法快速收敛,因此可以设计一种非线性的参数r1以提高其搜索能力。同时,针对其易陷入局部最优的问题,也可以引入如Levy等变异策略。

2.2 利用

SCA模型的正余弦震荡变化特性使其在解空间具有良好的搜索能力,可以直接引入该式替换算法某部分的寻优,或是将其融入算法的更新方程中,如下是一篇文献[A collaboration-based hybrid GWO-SCA optimizer for engineering optimization problems]的思路(将SCA融入GWO中):

原GWO算法

在这里插入图片描述

融入SCA的GWO算法
在这里插入图片描述

03 代码目录

在这里插入图片描述
在这里插入图片描述

代码包含MATLAB和Python,考虑到很多同学获取代码后,MATLAB代码部分有乱码(MATLAB版本问题),可以将MATLAB版本改为2020及以上,或使用乱码解决文件夹中的txt文件即可。

代码都经过作者重新注释,代码更清爽,可读性强。

部分代码:(MATLAB与Python)

在这里插入图片描述
在这里插入图片描述

04算法性能

采用标准测试函数初步检验其寻优性能

在Matlab中,进行CEC2005函数的测试,执行程序结果如下:

在这里插入图片描述

在Python中,进行CEC2005函数的测试,执行程序结果如下:

在这里插入图片描述

05 源码获取

在GZH(KAU的云实验台)后台回复 SCA 即可

参考文献

[1] MIRJALILI S.SCA:A sine cosine algorithm for solving optimization problems[J].Knowledge-Based Systems,2016,96:120-133.

[2] Wolpert DH, Macready WG. No free lunch theorems for optimization. IEEE transactions on evolutionary computation 67–82, 1997.

另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。

如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看(ง •̀_•́)ง(不点也行),你们的鼓励就是我坚持的动力!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app修改头像和个人信息

效果图 代码&#xff08;总&#xff09; <script setup lang"ts"> import { reqMember, reqMemberProfile } from /services/member/member import type { MemberResult, Gender } from /services/member/type import { onLoad } from dcloudio/uni-app impor…

C++_虚函数表

虚函数表 介绍源码运行结果笔记扩充函数名联编静态联编动态联编 介绍 1.编译器通过指针或引用调用虚函数&#xff0c;不会立即生成函数调用指令&#xff0c;而是用 二级函数指针 代替 1.1确定真实类型 1.2找到虚函数表从而找到入口地址 1.3根据入口地址调用函数(PS:俗称 函数指…

谈谈Spring Bean

一、IoC 容器 IoC 容器是 Spring 的核心&#xff0c;Spring 通过 IoC 容器来管理对象的实例化和初始化&#xff08;这些对象就是 Spring Bean&#xff09;&#xff0c;以及对象从创建到销毁的整个生命周期。也就是管理对象和依赖&#xff0c;以及依赖的注入等等。 Spring 提供…

【QT实战】使用QT5制作一个简易串口助手详细教程,支持打包转发

文章目录 制作串口助手工程所涉及到的头文件ui布局制作串口配置选项添加修饰制作串口打印信息界面添加背景图片 函数查找串口并且添加到ui界面上显示串口数据接收槽函数串口发送槽函数打开串口槽函数 将串口助手封装成可执行文件 本项目的开发环境&#xff1a;windowsQT5qtcrea…

【Docker】数据管理

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 前言 一.数据卷 示例演示 示例剖析…

C#核心--实践小项目(贪吃蛇)

C#核心实践小项目 -- 贪吃蛇 必备知识点--多脚本文件 &#xff08;可观看CSharp核心--52集进行了解&#xff09; 必备知识点--UML类图 必备知识点--七大原则 贪吃蛇 项目展示 控制方向的是&#xff1a;WSAD 确定键是&#xff1a;J 需求分析&#xff08;UML类图&#xff09…

《豫鄂烽火燎原大小焕岭》:一部穿越时空的历史史诗

《豫鄂烽火燎原大小焕岭》&#xff1a;一部穿越时空的历史史诗 一部赓续红色血脉的生动教材 一部讴歌时代英雄和人民精神宝典 当历史的烽烟渐渐远去&#xff0c;留下的是一页页泛黄的记忆和无数英雄的壮丽诗篇。李传铭的力作《豫鄂烽火燎原大小焕岭》正是这样一部深情的回望&am…

小智ToDo:日程待办清单管理的智能助手

在繁忙的工作与生活中&#xff0c;有效的时间管理和任务规划是提高效率的关键。今天&#xff0c;我们来探讨一款名为“小智ToDo”的日程待办清单管理工具&#xff0c;它以其多端数据同步、备忘提醒、日程管理等实用功能&#xff0c;为用户提供了便捷的时间管理解决方案。 小智T…

Jmerer之FTP测试

1、文件上传下载测试&#xff0c;可以使用sample:FTP请求&#xff0c;当然也可以使用HTTP Request采样器中的File Upload向服务器上传文件 2、本章重点介绍FTP请求进行文件的上传下载测试&#xff0c;添加 FTP请求&#xff0c;界面主要配置如下&#xff1a; Server Name or I…

认识异常及异常处理机制之try-catch

异常类 什么是异常&#xff1f;就像人会犯错一样&#xff0c;程序在运行的过程中也会犯错。程序中的错误有两类&#xff0c;一类称为Error&#xff08;错误&#xff09;&#xff0c;另一类称为Exception&#xff08;异常&#xff09;。Error类和Exception类都为Throwable的子类…

基于matlab实现AUTOSAR软件开发---答疑5

最近还是经常有人反馈mode switch的枚举搞不定,我在统一回复下,希望可以解决大家的疑问 运行这个脚本即可,运行成功后,就已经存在于SIMULINK系统里了,程序中可以直接识别到的, 但是运行之后 在matlab基础工作区里也是看不到枚举的,这点大家要注意,不要纠结这个,实际…

STM8入门|第一个工程

开发软件 不支持Keil&#xff0c;使用IAR for STM8&#xff0c;注意 IAR系列有很多种 STM8对应软件是 IAR for STM8 软件下载&#xff1a; 官网下载地址&#xff0c;官网版本下载比较麻烦&#xff0c;可以按教程网盘地址下载。 下载安装教程&#xff1a; https://www.cnblogs…