当前位置:   article > 正文

SCI一区龙格库塔算法,原理详解,MATLAB代码免费获取

龙格库塔法matlab

龙格库塔算法(Runge Kutta Method,RUN)是一种基于龙格库塔法的数学基础而提出的一种基于种群的无隐喻优化方法。提出的Runge Kutta优化器(RUN)被开发用于处理未来各种类型的优化问题。RUN利用由龙格库塔方法计算的斜率变化的逻辑作为全局优化的有前途的逻辑搜索机制。这种搜索机制得益于两个积极的探索和开发阶段,探索有前途的地区在特征空间和建设性的运动,向全球最佳解决方案。通过对50个数学测试函数和4个实际工程问题的测试,比较了RUN算法和其他元启发式算法的效率。RUN提供了非常有前途和有竞争力的结果,显示出上级探索和开发趋势,快速收敛速度和避免局部最优。

f4540e52ce435e864470c1b068134739.png

该成果于2021年发表在知名一区SCI期刊“Expert Systems with Applications”上。

82f0844c459edb46f31ac608814c75ab.png

RUN使用计算出的斜率作为搜索逻辑,以探索搜索空间中的有希望区域,并根据基于群的优化算法的逻辑构建一组用于种群集合进化的规则。

1、算法原理

(1)种群初始化:

在这一步中,逻辑是在允许的迭代次数内设置要进化的初始群。在RUN中,为一个大小为N的种群随机生成N个位置。种群中的每个成员xn (N = 1,2,…,N)是一个优化问题的维数为D的解。一般来说,初始位置是通过以下思路随机创建的:

式中,Ll和Ul分别为问题第l个变量(l = 1,2,…,D)的下界和上界,rand为[0,1]范围内的随机数。这个规则只是在一定范围内生成一些解。

(2)搜索机制的根源

采用RK方法确定了该RUN中的搜索机制。利用一阶导数定义系数k1,由下式计算。并且,由于应用位置目标函数需要相当长的计算时间,因此本文提出的优化算法使用位置xn而不是其适应度y(xn)。根据下式, xn +Δx和xn−Δx是xn的两个相邻位置,将y(x)视为最小化问题,xn−Δx和xn +Δx位置分别有最佳和最差位置。因此,要创建基于种群的算法,位置xn−Δx等于xb(即xb是xn周围的最佳位置),而位置xn +Δx等于xw(即xw是xk周围的最差位置)。因此,定义k1为:

其中xw和xb是每次迭代得到的最坏解和最优解,它们是根据从总体(xr1, xr2, xr3)中随机选择的三个解确定的,并且r1∕r2∕r3∕= n。

8689b9e05307d78a7e915dcf1ea3dd09.png

为了增强探索搜索,产生随机行为,可以将上式改写为:

其中rand为[0,1]范围内的随机数。总的来说,最佳解决方案(xb)在寻找有前途的领域和向全球最佳解决方案迈进方面发挥着至关重要的作用。因此,在本研究中,使用一个随机参数(u)来增加优化过程中最优解(xb)的重要性。在下式中,Δx可表示为:

334d275d020d274bcb7e4278b9c90dce.png

其中rand为[0,1]范围内的随机数。总的来说,最佳解决方案(xb)在寻找有前途的领域和向全球最佳解决方案迈进方面发挥着至关重要的作用。因此,在本研究中,使用一个随机参数(u)来增加优化过程中最优解(xb)的重要性。参数γ是由解空间大小决定的尺度因子,在优化过程中呈指数递减。Xavg是每次迭代中所有解决方案的平均值。

据此,其他三个系数(即k2、k3、k4)可分别写成:

b799afdd53ef56a7f5d3865fe19d3b08.png

其中,rand1和rand2为[0,1]范围内的两个随机数。

(3)更新解决方案

RUN算法从一组随机个体(解)开始优化过程。在每次迭代中,解使用RK方法更新它们的位置。为此,RUN使用由RK方法获得的解决方案和搜索机制。图2描述了位置如何使用RK方法更新其位置。在本研究中,全局探索的公式如下

局部开发的公式如下

其中μ为随机数,randn为正态分布的随机数。

(4)提高解决方案质量

在RUN算法中,增强的解决方案质量(ESQ)被用来提高解决方案的质量,并避免在每次迭代局部最优。通过应用ESQ,RUN算法确保每个解决方案都朝着更好的位置移动。在所提出的ESQ中,计算三个随机解的平均值(xavg),并将其与最佳位置(xb)组合以生成新的解(xnew1)。执行以下方案以使用ESQ创建解决方案(xnew2):

其中 , , 

β是[0,1]范围内的随机数。c是随机数,w是随机数,其随着迭代次数的增加而减小。r是一个整数,可以是1、0或-1。xbest是迄今为止探索的最佳解决方案。根据上述方案,对于w < 1(即,后面的迭代),解Xnew 2趋向于创建开发搜索,而对于w ≥ 1(i.即,早期迭代),解Xnew 2趋向于进行探索搜索。

如下图所示,在RUN中考虑三条路径进行优化。该算法首先使用RK搜索机制生成位置xn+1,然后使用ESQ机制在搜索空间中探索有希望的区域。

4e6d8e72d6272238474f2f86e756e8f0.png

RUN优化算法对应的伪代码如下

2573c75b546015d53c8c2a81c3404480.png

RUN优化算法对应的流程图如下

ffbc51c2193b81e624118b257b2e96f4.png

2、结果展示

51b8df64776f98457216a1f9b6b994c2.png

64b041103e924950596fc6bb704366ae.png

f1e36ddde51982e9e6f900aae4b8d627.png

3、MATLAB核心代码

  1. %% 淘个代码 %%
  2. % 微信公众号搜索:淘个代码,获取更多代码
  3. % 龙格库塔算法(RUN)
  4. function [Best_Cost,Best_X,Convergence_curve]=RUN(nP,MaxIt,lb,ub,dim,fobj)
  5. Cost=zeros(nP,1);                % Record the Fitness of all Solutions
  6. X=initialization(nP,dim,ub,lb);  % Initialize the set of random solutions   
  7. Xnew2=zeros(1,dim);
  8. Convergence_curve = zeros(1,MaxIt);
  9. for i=1:nP
  10.     Cost(i) = fobj(X(i,:));      % Calculate the Value of Objective Function
  11. end
  12. [Best_Cost,ind] = min(Cost);     % Determine the Best Solution
  13. Best_X = X(ind,:);
  14. Convergence_curve(1) = Best_Cost;
  15. %% Main Loop of RUN 
  16. it=1;%Number of iterations
  17. while it<MaxIt
  18.     it=it+1;
  19.     f=20.*exp(-(12.*(it/MaxIt))); % (Eq.17.6
  20.     Xavg = mean(X);               % Determine the Average of Solutions
  21.     SF=2.*(0.5-rand(1,nP)).*f;    % Determine the Adaptive Factor (Eq.17.5)
  22.     
  23.     for i=1:nP
  24.             [~,ind_l] = min(Cost);
  25.             lBest = X(ind_l,:);   
  26.             [A,B,C]=RndX(nP,i);   % Determine Three Random Indices of Solutions
  27.             [~,ind1] = min(Cost([A B C]));
  28.             % Determine Delta X (Eqs. 11.1 to 11.3)
  29.             gama = rand.*(X(i,:)-rand(1,dim).*(ub-lb)).*exp(-4*it/MaxIt);  
  30.             Stp=rand(1,dim).*((Best_X-rand.*Xavg)+gama);
  31.             DelX = 2*rand(1,dim).*(abs(Stp));
  32.             
  33.             % Determine Xb and Xw for using in Runge Kutta method
  34.             if Cost(i)<Cost(ind1)                
  35.                 Xb = X(i,:);
  36.                 Xw = X(ind1,:);
  37.             else
  38.                 Xb = X(ind1,:);
  39.                 Xw = X(i,:);
  40.             end
  41.             SM = RungeKutta(Xb,Xw,DelX);   % Search Mechanism (SM) of RUN based on Runge Kutta Method
  42.                         
  43.             L=rand(1,dim)<0.5;
  44.             Xc = L.*X(i,:)+(1-L).*X(A,:);  % (Eq. 17.3)
  45.             Xm = L.*Best_X+(1-L).*lBest;   % (Eq. 17.4)
  46.               
  47.             vec=[1,-1];
  48.             flag = floor(2*rand(1,dim)+1);
  49.             r=vec(flag);                   % An Interger number 
  50.             
  51.             g = 2*rand;
  52.             mu = 0.5+.1*randn(1,dim);
  53.             
  54.             % Determine New Solution Based on Runge Kutta Method (Eq.18
  55.             if rand<0.5
  56.                 Xnew = (Xc+r.*SF(i).*g.*Xc) + SF(i).*(SM) + mu.*(Xm-Xc);
  57.             else
  58.                 Xnew = (Xm+r.*SF(i).*g.*Xm) + SF(i).*(SM)+ mu.*(X(A,:)-X(B,:));
  59.             end  
  60.             
  61.         % Check if solutions go outside the search space and bring them back
  62.         FU=Xnew>ub;FL=Xnew<lb;Xnew=(Xnew.*(~(FU+FL)))+ub.*FU+lb.*FL; 
  63.         CostNew=fobj(Xnew);
  64.         
  65.         if CostNew<Cost(i)
  66.             X(i,:)=Xnew;
  67.             Cost(i)=CostNew;
  68.         end
  69. %% Enhanced solution quality (ESQ)  (Eq. 19)      
  70.         if rand<0.5
  71.             EXP=exp(-5*rand*it/MaxIt);
  72.             r = floor(Unifrnd(-1,2,1,1));
  73.             u=2*rand(1,dim); 
  74.             w=Unifrnd(0,2,1,dim).*EXP;               %(Eq.19-1)
  75.             
  76.             [A,B,C]=RndX(nP,i);
  77.             Xavg=(X(A,:)+X(B,:)+X(C,:))/3;           %(Eq.19-2)         
  78.             
  79.             beta=rand(1,dim);
  80.             Xnew1 = beta.*(Best_X)+(1-beta).*(Xavg); %(Eq.19-3)
  81.             
  82.             for j=1:dim
  83.                 if w(j)<1 
  84.                     Xnew2(j) = Xnew1(j)+r*w(j)*abs((Xnew1(j)-Xavg(j))+randn);
  85.                 else
  86.                     Xnew2(j) = (Xnew1(j)-Xavg(j))+r*w(j)*abs((u(j).*Xnew1(j)-Xavg(j))+randn);
  87.                 end
  88.             end
  89.             
  90.             FU=Xnew2>ub;FL=Xnew2<lb;Xnew2=(Xnew2.*(~(FU+FL)))+ub.*FU+lb.*FL;
  91.             CostNew=fobj(Xnew2);            
  92.             
  93.             if CostNew<Cost(i)
  94.                 X(i,:)=Xnew2;
  95.                 Cost(i)=CostNew;
  96.             else
  97.                 if rand<w(randi(dim)) 
  98.                     SM = RungeKutta(X(i,:),Xnew2,DelX);
  99.                     Xnew = (Xnew2-rand.*Xnew2)+ SF(i)*(SM+(2*rand(1,dim).*Best_X-Xnew2));  % (Eq. 20)
  100. FU=Xnew>ub;FL=Xnew<lb;Xnew=(Xnew.*(~(FU+FL)))+ub.*FU+lb.*FL;
  101.                     CostNew=fobj(Xnew);
  102.                     
  103.                     if CostNew<Cost(i)
  104.                         X(i,:)=Xnew;
  105.                         Cost(i)=CostNew;
  106.                     end
  107.                 end
  108.             end
  109.         end
  110. % End of ESQ         
  111. %% Determine the Best Solution
  112.         if Cost(i)<Best_Cost
  113.             Best_X=X(i,:);
  114.             Best_Cost=Cost(i);
  115.         end
  116.     end
  117. % Save Best Solution at each iteration    
  118. Convergence_curve(it) = Best_Cost;
  119. disp(['it : ' num2str(it) ', Best Cost = ' num2str(Convergence_curve(it) )]);
  120. end
  121. end
  122. % A funtion to determine a random number 
  123. %with uniform distribution (unifrnd function in Matlab) 
  124. function z=Unifrnd(a,b,c,dim)
  125. a2 = a/2;
  126. b2 = b/2;
  127. mu = a2+b2;
  128. sig = b2-a2;
  129. z = mu + sig .* (2*rand(c,dim)-1);
  130. end
  131. % A function to determine thress random indices of solutions
  132. function [A,B,C]=RndX(nP,i)
  133. Qi=randperm(nP);Qi(Qi==i)=[];
  134. A=Qi(1);B=Qi(2);C=Qi(3);
  135. end

参考文献

[1]Ahmadianfar I, Heidari A A, Gandomi A H, et al. RUN beyond the metaphor: An efficient optimization algorithm based on Runge Kutta method[J]. Expert Systems with Applications, 2021, 181: 115079.

完整代码获取

后台回复关键词:

TGDM834

获取更多代码:

cb8c48ee3cc412775fa19b92b5c7d01a.png

  1. 或者复制链接跳转:
  2. https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/926601
推荐阅读
相关标签
  

闽ICP备14008679号