2023年智能算法之双曲正弦余弦优化器(SCHO),原理公式详解,附matlab代码

本文主要是介绍2023年智能算法之双曲正弦余弦优化器(SCHO),原理公式详解,附matlab代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

双曲正弦余弦优化器(Sinh Cosh OptimizerSCHO)是一种新型元启发式算法,该算法基于双曲正弦和双曲余弦特性的数学启发,具有进化能力强、搜索速度快、寻优能力强的特点。该成果于202310月发表在SCI一区,Top顶刊Knowledge-Based Systems上。

32c8d237a53380150b184fcfcf8b2a0a.png

SCHO的灵感来源有三点。首先,如何在勘探和开发之间取得平衡是一个巨大的挑战,其次,面对复杂多样的问题,仍需要提出新的元启发式算法。最后,基于数学启发的优化算法的提出,如sincos算法和算术优化算法(AOA),为研究元启发式算法指明了一个新的可能方向。双曲函数是三角函数中常见的一类,其中sinhcosh是最基本的双曲函数。元启发式算法可以利用coshsinh的两个特性。一是cosh值总是大于1,这是勘探与开发的关键边界,另一种是sinh值在[−1,1]区间内,且接近于零,可以提高勘探开发效率。

算法原理

(1)初始化阶段

与其他元启发式算法一样,SCHO也从随机初始化一组候选解开始。初始化的候选解的数学公式如下所示:  其中X是由以下公式得到的随机候选解集合,  表示第i个解的第j个位置,N表示候选解的个数,dim为问题维数。  其中rand表示[0,1]中的随机值,ublb分别为变量的上界和下界。

(2)勘探阶段

在本研究中,探索下一个位置仍然与它的位置有关,并得到了迄今为止的最优解。在优化过程中,探索分为两个阶段,应该存在于以后的迭代中,以逃避局部最优。在这两个阶段之间切换的值通过以下数学公式:  其中Max迭代表示迭代的最大值,floorMATLAB中向下舍入的函数,ct是用于设置两相切换点的系数。在第一阶段中,在早期的迭代中,搜索代理位置附近的搜索空间外部将被探索,然后搜索代理将逐渐接近获得的最佳解。第一阶段勘探位置更新函数的数学公式如下所示:  其中t表示当前迭代,    分别表示第i个解在当前迭代和下次迭代中的第j个位置;  为到目前为止得到的最优解的第j个位置,r1,r2为区间[0,1]内的随机数;  为第一勘探阶段  的权重系数,控制第一阶段候选解远离自身,逐渐向最优解探索,通过以下公式计算得到。  其中  为单调递减函数,由以下公式计算,    [0,1]中的随机数;  是控制第一阶段勘探精度的敏感系数,固定为0.388  从一个很小的值逐渐减小,这说明了自身位置对于位置更新的重要性,因此,候选解在第一阶段逐渐远离自己,然后寻找最优解。其中  为控制勘探精度的敏感系数,根据本案例实验,其值为0.45。  在第二阶段的探索中,搜索代理几乎不受最佳解的影响,因此它们基于当前位置进行无方向性的探索。其位置更新函数的数学公式如下所示:  其中,ε是一个极小的正数,根据本文实验,ε0.003W2为第二勘探阶段最佳的  的权重系数,  乘以ε大大削弱了最优解对当前解的影响,从而导致对  周围的候选解进行无向随机勘探,W2由以下公式计算得到:  其中r6[0,1]中的随机数,a2为用以下公式计算得到的单谐递减函数:  式中,n为控制第二阶段勘探精度的敏感系数,根据本文实验,取值为0.5

(3)开发阶段

为了充分利用搜索空间,开发分为两个阶段,在整个迭代过程中进行。在第一个开发阶段,开发了X的邻近空间,因此开发公式如下表示:  其中  ,  属于区间[01]中的随机数。  是第一阶段开发的权重系数,它控制候选解从近到远地开发其周围的搜索空间,其数学公式如下所示: 其中  ,  [0,1]中的随机数,a1已由上面公式定义,u与第一勘探阶段相同,固定为0.388

在开发的第二阶段,候选解将围绕迄今为止获得的最优解进行深度开发,并且围绕最优解的开发强度将随着迭代次数的增加而增加。位置更新函数如下所示:  其中    是区间[01]中的随机数,  控制第二开发阶段的程度,它的绝对值在后面的迭代中逐渐增加,增加了开发程度。方程中绝对值前面的系数用于保持候选解的多样性。

(4)有界搜索策略

为了充分利用潜在的搜索空间,在SCHO中采用了一种类似于后期动物狩猎的策略,称为有界搜索策略。通过在早期迭代中探索整个搜索区域,可以找到潜在的搜索空间。为了充分挖掘和利用潜力空间,首先将所有候选解随机初始化到该潜力空间中,然后对该空间进行深度挖掘和利用。该策略的每一开始都是通过以下公式计算:  其中k是从1开始的正整数,  由以下公式计算,  分别表示开始当前和下一个有界搜索策略的迭代次数。α是一个敏感系数,它控制着潜空间深部勘探开发的精度,本实验通过实验将α取为4.6。  其中β控制启动有界搜索策略的值,并设置为1.55。当SCHO每次都使用有界搜索策略时,优化问题的上界和下界将使用以下公式计算: 

其中    表示潜在搜索空间的上界和下界,  表示次优解的第  个位置。

 果展示

以为CEC2005函数集为例,进行结果展示:

7fb88f9a88208bd56e86fccbe4e2ae48.png

497563b676ebbc08702f24a657f5de90.png

a5ac6649e2730a6aee8645476f8c4fbe.png

e048acbbe58e0e73fca08af59c9978d1.png

287e35a71eaf21040a202c23bc730cd9.png

 MATLAB核心代码

function [Destination_fitness,Destination_position,Convergence_curve]=SCHO(N,Max_iteration,lb,ub,dim,fobj)Destination_position=zeros(1,dim);
Destination_fitness=inf;
Destination_position_second=zeros(1,dim);
Convergence_curve=zeros(1,Max_iteration);
Position_sort = zeros(N,dim);
%Initialize SCHO parameters
u=0.388;
m=0.45;
n=0.5;
p=10;
q=9;
Alpha=4.6;
Beta=1.55;
BS=floor(Max_iteration/Beta);
ct=3.6;
T=floor(Max_iteration/ct);
BSi=0;
BSi_temp=0;
ub_2=ub;
lb_2=lb;
%Initialize the set of random solutions
X=initialization(N,dim,ub,lb);
Objective_values = zeros(1,size(X,1));
% Calculate the fitness of the first set and find the best one
for i=1:size(X,1)Objective_values(1,i)=fobj(X(i,:));if Objective_values(1,i)<Destination_fitnessDestination_position=X(i,:);Destination_fitness=Objective_values(1,i);end
end
Convergence_curve(1)=Destination_fitness;
t=2; 
%Main loop
while t<=Max_iteration    for i=1:size(X,1) % in i-th solutionfor j=1:size(X,2) % in j-th dimension%update A by using Eq. (17)cosh2=(exp(t/Max_iteration)+exp(-t/Max_iteration))/2;sinh2=(exp(t/Max_iteration)-exp(-t/Max_iteration))/2;r1=rand();A=(p-q*(t/Max_iteration)^(cosh2/(sinh2)))*r1; % enter the bounded search strategyif t==BSi
ub_2=Destination_position(j)+(1-t/Max_iteration)*abs(Destination_position(j)-Destination_position_second(j));
lb_2=Destination_position(j)-(1-t/Max_iteration)*abs(Destination_position(j)-Destination_position_second(j));if ub_2>ubub_2=ub;endif lb_2<lblb_2=lb;endX=initialization(N,dim,ub_2,lb_2);                BSi_temp=BSi;BSi=0;end% the first phase of exploration and exploitation    if t<=T%3.6-3.62  r2=rand();r3=rand();a1=3*(-1.3*t/Max_iteration+m);r4=rand();r5=rand();if A>1sinh=(exp(r3)-exp(-r3))/2;cosh=(exp(r3)+exp(-r3))/2;W1=r2*a1*(cosh+u*sinh-1);if r5<=0.5X(i,j)=Destination_position(j)+r4*W1*X(i,j);elseX(i,j)=Destination_position(j)-r4*W1*X(i,j);  end                elsesinh=(exp(r3)-exp(-r3))/2;cosh=(exp(r3)+exp(-r3))/2;W3=r2*a1*(cosh+u*sinh);if r5<=0.5X(i,j)=Destination_position(j)+r4*W3*X(i,j);elseX(i,j)=Destination_position(j)-r4*W3*X(i,j);  endendelse% the second phase of exploration and exploitationr2=rand();r3=rand();a2=2*(-t/Max_iteration+n);W2=r2*a2;r4=rand();r5=rand();if A<1sinh=(exp(r3)-exp(-r3))/2;cosh=(exp(r3)+exp(-r3))/2;X(i,j)= X(i,j)+(r5*sinh/cosh*abs(W2*Destination_position(j)-X(i,j)));elseif r4<=0.5X(i,j)=X(i,j)+(abs(0.003*W2*Destination_position(j)-X(i,j)));elseX(i,j)=X(i,j)+(-abs(0.003*W2*Destination_position(j)-X(i,j)));  endend endendBSi=BSi_temp;endfor i=1:size(X,1)         % Check if solutions go outside the search spaceand bring them backFlag4ub=X(i,:)>ub_2;Flag4lb=X(i,:)<lb_2;X(i,:)=(X(i,:).*(~(Flag4ub+Flag4lb)))+(ub_2+lb_2)/2.*Flag4ub+lb_2.*Flag4lb;        % Calculate the objective valuesObjective_values(1,i)=fobj(X(i,:));
%         % Update the destination if there is a better solutionif Objective_values(1,i)<Destination_fitnessDestination_position=X(i,:);Destination_fitness=Objective_values(1,i);endend%find the second solutionif t==BSBSi=BS+1;BS=BS+floor((Max_iteration-BS)/Alpha);temp = zeros(1,dim);temp2 = zeros(N,dim);%sortingfor i=1:(size(X,1)-1)for j=1:(size(X,1)-1-i)if Objective_values(1,j) > Objective_values(1,j+1)temp(1,j) = Objective_values(1,j);Objective_values(1,j) = Objective_values(1,j+1);Objective_values(1,j+1) = temp(1,j);temp2(j,:) = Position_sort(j,:);Position_sort(j,:) = Position_sort(j+1,:);Position_sort(j+1,:) = temp2(j,:);   endendendDestination_position_second=Position_sort(2,:);%the second solutionendConvergence_curve(t)=Destination_fitness;t=t+1;
end

参考文献

[1]  Bai J, Li Y, Zheng M, et al. A sinh cosh optimizer[J]. Knowledge-Based Systems, 2023, 282: 111081.

完整代码获取方式:后台回复关键字:

TGDM101

这篇关于2023年智能算法之双曲正弦余弦优化器(SCHO),原理公式详解,附matlab代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份