2024年SCI一区最新优化算法——指数三角优化算法,MATLAB代码免费获取

注:该算法已按照智能优化算法APP标准格式进行整改,可直接集成到APP中,方便大家与自己的算法进行对比。

指数-三角优化(Exponential-trigonometric optimization, ETO)是一种新颖强大的优化器,它基于指数函数和三角函数的复杂组合。ETO算法的结构是为了在两个重要阶段之间取得平衡:勘探和开发,这是许多其他优化算法也试图解决的挑战。与现有算法相比,ETO使用指数函数和三角函数来调整代理的位置,有效地实现了平衡。ETO建立在指数函数和三角函数的结合上。结构设计简单,实现方便,优化时参数调整方便。这不仅提高了算法在探索和利用搜索空间方面的性能,而且为许多不同类型的问题提供了灵活性和适应性。该成果于2024年发表在工程技术领域1区SCI期刊“Computer Methods in Applied Mechanics and Engineering”上。

f54c8605ab561b045d4d1a9f0e168105.png

1.算法原理

(1)约束勘探法

搜索空间在优化算法中起着至关重要的作用。利用和明确定义搜索空间对最终结果有很大的影响。这是因为在大空间中搜索会消耗大量的时间和计算资源,而在太窄的空间中搜索可能会错过最优解。

一些研究提出了约束搜索策略,以最大限度地利用潜在空间并提高性能。这种策略有助于限制搜索空间,减少所需的时间和计算资源,同时仍然确保不会错过最优解决方案。具体来说,在ETO算法中,提出了一种有限探索方法。该方法通过使用以下公式便于高效地探索和利用搜索空间。这有助于优化搜索过程,减少所需的时间和计算资源,同时确保不遗漏最优解:

式中,t表示当前迭代次数,Max_Iter对应总迭代次数,floor为MATLAB中执行舍入运算的函数,a和b为两个调整系数,分别取4.6和1.55。CEi的值由下式确定,而CEi+1表示启动当前和后续约束探索方法的迭代计数。

采用约束搜索策略后,该方法同时更新搜索空间的上限和下限。这个更新过程是策略的一个组成部分,确保搜索空间是动态适应的,以提高优化过程的效率。上限和下限的调整由以下公式控制:

其中,Upi和Lowi分别表示预期搜索空间的上限和下限。R1和r2是在0和1之间随机取的两个系数。 表示到目前为止得到的最优解的第j个位置。 表示次优解在第j个指标处的位置。

(2)初始化阶段

ETO通过随机产生潜在种群的集合来启动其过程。在这种情况下,N表示总体 ,其中 , ,并且该种群中的每个个体都由其在d维中的位置定义。如下式所示,ETO内的种群可以使用特定的矩阵表示来表示:

7b1469d3ef116f4a462fd2fc33fffa43.png

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

其中rand()表示区间[0,1]内的随机值。第j维以Upj和Lowj为界,分别表示上限和下限, 和 。

(3)探索方法

在本研究中,下一个位置的确定不仅受到当前位置的影响,还受到迄今为止确定的最佳解决方案的影响。在优化过程中,探索阶段分为两个阶段,在随后的迭代中维持这一阶段以防止收敛到局部最优点是至关重要的。这两个阶段之间的过渡由下式控制。

(4)第一个探索阶段

在优化过程的早期阶段,初始化种群并确定搜索空间的边界后,个体开始对搜索域进行探索。在第一步,他们在这个巨大的搜索空间中探索潜在的位置。然后,在接下来的一组步骤中,这些个体将逐渐移动到找到的最佳位置。在这个初始探索阶段,根据下式来更新个体的位置:

d51ffc0ebf24aee12fd414d246a7fca8.png

在这种情况下,到该点为止发现的最优解的第j个位置用 表示。 和 分别用于表示当前迭代和后续迭代中第i个解的第j个位置。t是当前迭代的标记。随机数[0,1]区间用q1和rand()表示。在第一阶段, 的权重系数为α1。候选解的初始阶段受α1权值的控制,使得候选解逐渐从自身向最佳解探索。该值由下式确定。

ce39230534390f1a21527c6109eb48b0.png

此外,下图说明了α1在整个初始轮中如何显著变化。然而,在随后的重复实验中,α1值逐渐趋于稳定,振荡幅度逐渐减小。这说明了系数如何帮助算法逐渐收敛并随后寻找更理想的值。

d8578feed170d2184e1bc8f2a89a8dc6.png

(5)第二个开发阶段

在开发的后期阶段,候选解决方案将围绕到那时为止已确定的最优解决方案进行更深入的探索。这一阶段的特点是在最优解附近进行深入而集中的探索。随着迭代的进行,这种局部探索的强度增加,表明越来越重视最优解。这种在搜索空间的最有利区域内加强搜索的策略由下式控制,它为更新候选解的位置提供了数学框架:

36c150c92298fd19b52aca160b5a60dd.png

在此上下文中,rand()表示落在[0,1]区间内的随机数。由公式计算得到的权重系数α2在后续开采阶段起着举足轻重的作用。绝对值之前的系数c有助于保持候选解之间的多样性。系数c将根据下式计算:

其中d1和d2由等式(10)、(11)确定。系数c是通过指数函数和三角函数的巧妙结合来确定的,创造了一个独特而有效的机制。这不仅增强了更新最优位置的能力,还优化了搜索过程,提高了性能,并确保找到的解决方案将实现最佳优化。

(6)转换机制

为了能够在勘探和开发阶段之间灵活地移动,需要一种有效的转换技术。在前人研究的基础上,提出了一种新的转换机制来匹配和优化ETO算法的效率。在第一阶段,这种转移机制以勘探为主,但也有少量的开采。随着过程的迭代,这种过渡机制逐渐转向主要关注开发,但仍然保持少量的探索。这种转换机制是根据下式实现的,它有助于确保对完整搜索域的探索和利用,同时在后续迭代中避免局部最优。这创造了一种灵活有效的搜索优化方法:

其中值d1和d2是通过公式计算的。同时,rand()表示从[0,1]范围内选择的随机数。当CM > = 1时,ETO处于勘探模式。反之,当CM < 1时,ETO转为开发模式。

综上所述,ETO算法分为四个主要部分。其中包括边界搜索策略、探索和开发的双重阶段以及CM转换机制。

首先,ETO通过随机生成一组可能的解决方案开始,然后开始对搜索域进行探索。在这一阶段,为了保持搜索空间的可调性,提高优化过程的效率,对上界和下界进行了修正。这包括引导搜索代理向从一定距离获得的最佳解决方案,或利用搜索代理附近的搜索空间。如果没有,ETO将过渡到第二阶段并进行探索,深入研究搜索域的潜在领域。此外,ETO采用边界搜索方法在预期区域内重新分配所有搜索代理,随后进行第二阶段的勘探和开发。在勘探开发过程中,标量参数d1和d2至关重要。d1和d2两个参数,有助于缩小搜索空间,在优化过程中提高收敛速度和准确性。最后,部署过渡过程,在勘探和开采之间交替进行。在探索机制和开发机制之间,这种切换机制有助于确保和灵活地移动。在接下来的迭代中,它还有助于摆脱局部最优。

所提出的ETO伪代码在算法1、2、3、4中进行了详细阐述

f2b97bd0f5cb0151c0a9578149c564fe.png

162de233e70f857c8b7e6cc500bad1f9.png

02bf0442fc2bc1d6a012bf3f35b85a58.png

9ef4d3e3fe40d9d43f779f444c4bfe38.png

ETO的流程图如下所示。

f53556b9d9074492756732862f181232.png

2.结果展示

e821c0b2bf9e4ff0fa910ddcb29e7770.png

dd0d5fae81819276315f9a02da0750ee.png

733f5dae4e372922c88223df97b1b40e.png

7d4dc45ad5535a894aa6934e4094ad99.png

c07e554cc1d5ae3ef89da1685cd90457.png

3.MATLAB核心代码

%微信公众号搜索:淘个代码,获取更多免费代码
function [Destination_fitness,Destination_position,Convergence_curve]=ETO(N,Max_Iter,LB,UB,Dim,Fobj)
% N-种群数,Max_It-最大迭代次数,LB-下限,UB-上限,Dim-维度,Fobj-目标函数
Destination_position=zeros(1,Dim);
Destination_fitness=inf;
Destination_position_second=zeros(1,Dim);
Convergence_curve=zeros(1,Max_Iter);
Position_sort = zeros(N,Dim);
%Initialize ETO parameters
b=1.55;
CE=floor(1+(Max_Iter/b));
T=floor(1.2+Max_Iter/2.25);
CEi=0;
CEi_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_fitness
        Destination_position=X(i,:);
        Destination_fitness=Objective_values(1,i);
    end
end
Convergence_curve(1)=Destination_fitness;
t=2; 
%Main loop
while t<=Max_Iter    
    for i=1:size(X,1) % in i-th solution
        
        for j=1:size(X,2) % in j-th dimension
           
            %update A by using Eq. (17)
            d1=0.1*exp(-0.01 * t) * cos(0.5 * Max_Iter * (1 - t / Max_Iter));
            d2=-0.1*exp(-0.01 * t) * cos(0.5 * Max_Iter * (1 - t / Max_Iter));
          
            CM=(sqrt(t/Max_Iter)^tan(d1/(d2)))*rand()*0.01; 
            % enter the bounded search strategy
            if t==CEi
                UB_2=Destination_position(j)+(1-t/Max_Iter)*abs(rand()*Destination_position(j)-Destination_position_second(j))*rand();
                LB_2=Destination_position(j)-(1-t/Max_Iter)*abs(rand()*Destination_position(j)-Destination_position_second(j))*rand();
                if UB_2>UB
                    UB_2=UB;
                end
                if LB_2<LB
                    LB_2=LB;
                end
                X=initialization(N,Dim,UB_2,LB_2);                
                CEi_temp=CEi;
                CEi=0;
            end
        % the first phase of exploration and exploitation    
        if t<=T%3.6-3.62  
            q1=rand();
            q3=rand();
            q4=rand();
            if CM>1
                d1=0.1*exp(-0.01 * t) * cos(0.5 * Max_Iter * (q1));
                d2=-0.1*exp(-0.01 * t) * cos(0.5 * Max_Iter * (q1));
                alpha_1=rand()*3*(t/Max_Iter-0.85)*exp(abs(d1/d2)-1);
                if q1<=0.5
                    X(i,j)=Destination_position(j)+rand()*alpha_1*abs(Destination_position(j)-X(i,j));
                else
                    X(i,j)=Destination_position(j)-rand()*alpha_1*abs(Destination_position(j)-X(i,j));  
                end                
            else
                d1=0.1*exp(-0.01 * t) * cos(0.5 * Max_Iter * (q3));
                d2=-0.1*exp(-0.01 * t) * cos(0.5 * Max_Iter * (q3));
                alpha_3=rand()*3*(t/Max_Iter-0.85)*exp(abs(d1/d2)-1.3);
                if q3<=0.5
                    X(i,j)=Destination_position(j)+q4*alpha_3*abs(rand()*Destination_position(j)-X(i,j));
                else
                    X(i,j)=Destination_position(j)-q4*alpha_3*abs(rand()*Destination_position(j)-X(i,j));  
                end
            end
        else
            % the second phase of exploration and exploitation
            q2=rand();
            alpha_2=rand()*exp(tanh(1.5*(-t/Max_Iter-0.75) - rand()));
            if CM<1
                d1=0.1*exp(-0.01 * t) * cos(0.5 * Max_Iter * (q2));
                d2=-0.1*exp(-0.01 * t) * cos(0.5 * Max_Iter * (q2));
                X(i,j)= X(i,j)+exp(tan(abs(d1/d2))*abs(rand()*alpha_2*Destination_position(j)-X(i,j)));
            else
                if q2<=0.5
                    X(i,j)=X(i,j)+3*(abs(rand()*alpha_2*Destination_position(j)-X(i,j)));
                else
                    X(i,j)=X(i,j)-3*(abs(rand()*alpha_2*Destination_position(j)-X(i,j)));  
                end
            end 
        end
        end
        CEi=CEi_temp;
    end
    for i=1:size(X,1)         
        % Check if solutions go outside the search spaceand bring them back
        Flag4ub=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 values
        Objective_values(1,i)=Fobj(X(i,:));
%         % Update the destination if there is a better solution
        if Objective_values(1,i)<Destination_fitness
            Destination_position=X(i,:);
            Destination_fitness=Objective_values(1,i);
        end
    end
    % find the second solution
    if t==CE
        CEi=CE+1;
        CE=CE+floor(2-t*2/(Max_Iter-CE*4.6)/1);
        temp = zeros(1,Dim);
        temp2 = zeros(N,Dim);
        %sorting
        for 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,:);   
                end
            end
        end
        Destination_position_second=Position_sort(2,:);%the second solution
    end
    Convergence_curve(t)=Destination_fitness;
    t=t+1;
end

4.参考文献

[1]Luan T M, Khatir S, Tran M T, et al. Exponential-trigonometric optimization algorithm for solving complicated engineering problems[J]. Computer Methods in Applied Mechanics and Engineering, 2024, 432: 117411.

下方卡片获取代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘个代码_

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值