2023年智能优化算法---能量谷优化器 Energy valley optimizer(EVO),附MATLAB代码和文献...

简介

能量谷优化器(EVO)是一种新的元启发式算法,它的算法是受到了关于稳定性和不同粒子衰变模式的先进物理原理的启发。在文献中,作者与CEC函数中最先进的算法进行了比较,并且证明该算法确实很强劲。算法原理大家请参考文献。

01

结果展示

在CEC2005函数中结果展示:

02代码展示

properties 复制代码
function [Best_score,Best_Pos,Conv_History]=EVO(nParticles,MaxFes,lb,ub,VarNumber,fobj)
 
%% Problem Information
CostFunction = fobj;          % @ Cost Function
VarMin = lb *ones(1,VarNumber);        % Lower bound of variable;
VarMax = ub *ones(1,VarNumber);         % Upper bound of variable;
 
%% Counters
Iter=0;   % Iterations
FEs=0;    % Function Evaluations
 
%% Initialization
Particles=[]; NELs=[];
for i=1:nParticles
    Particles(i,:)=unifrnd(VarMin,VarMax,[1 VarNumber]);
    NELs(i,1)=CostFunction(Particles(i,:));
    FEs=FEs+1;
end
 
% Sort Particles
[NELs, SortOrder]=sort(NELs);
Particles=Particles(SortOrder,:);
BS=Particles(1,:); 
BS_NEL=NELs(1);
WS_NEL=NELs(end);
 
%% Main Loop
while FEs<MaxFes
    Iter=Iter+1;
    NewParticles=[];
    NewNELs=[];   
   for i=1:nParticles
       Dist=[];
       for j=1:nParticles
           Dist(j,1)=distance(Particles(i,:), Particles(j,:));
       end
       [ ~, a]=sort(Dist);
       CnPtIndex=randi(nParticles);
       if CnPtIndex<3
           CnPtIndex=CnPtIndex+2;
       end
       CnPtA=Particles(a(2:CnPtIndex),:);
       CnPtB=NELs(a(2:CnPtIndex),:);
       X_NG=mean(CnPtA);
       X_CP=mean(Particles);
       EB=mean(NELs);            
       SL=(NELs(i)-BS_NEL)/(WS_NEL-BS_NEL); SB=rand;
       if NELs(i)>EB   
           if SB>SL         
               AlphaIndex1=randi(VarNumber);
               AlphaIndex2=randi([1 VarNumber], AlphaIndex1 , 1);
               NewParticle(1,:)=Particles(i,:);
               NewParticle(1,AlphaIndex2)=BS(AlphaIndex2);               
               GamaIndex1=randi(VarNumber);
               GamaIndex2=randi([1 VarNumber], GamaIndex1 , 1);
               NewParticle(2,:)=Particles(i,:);
               NewParticle(2,GamaIndex2)=X_NG(GamaIndex2);           
               NewParticle = max(NewParticle,VarMin);
               NewParticle = min(NewParticle,VarMax);  
               NewNEL(1,1)=CostFunction(NewParticle(1,:));
               NewNEL(2,1)=CostFunction(NewParticle(2,:));               
               FEs=FEs+2;    
           else               
               Ir=unifrnd(0,1,1,2); Jr=unifrnd(0,1,1,VarNumber);
               NewParticle(1,:)=Particles(i,:)+(Jr.*(Ir(1)*BS-Ir(2)*X_CP)/SL);
               Ir=unifrnd(0,1,1,2); Jr=unifrnd(0,1,1,VarNumber);
               NewParticle(2,:)=Particles(i,:)+(Jr.*(Ir(1)*BS-Ir(2)*X_NG));  
               NewParticle = max(NewParticle,VarMin);
               NewParticle = min(NewParticle,VarMax);
               NewNEL(1,1)=CostFunction(NewParticle(1,:));
               NewNEL(2,1)=CostFunction(NewParticle(2,:)); 
               FEs=FEs+2;   
           end    
       else 
           NewParticle(1,:)=Particles(i,:)+randn*SL*unifrnd(VarMin,VarMax,[1 VarNumber]);         
           NewParticle = max(NewParticle,VarMin);
           NewParticle = min(NewParticle,VarMax);
           NewNEL(1,1)=CostFunction(NewParticle(1,:));   
           FEs=FEs+1;
       end
   NewParticles=[NewParticles ; NewParticle];    
   NewNELs=[NewNELs ; NewNEL];
   end
   NewParticles=[NewParticles ; Particles];    
   NewNELs=[NewNELs ; NELs]; 
   
   % Sort Particles
   [NewNELs, SortOrder]=sort(NewNELs);
   NewParticles=NewParticles(SortOrder,:);
   BS=NewParticles(1,:); 
   BS_NEL=NewNELs(1); 
   WS_NEL=NewNELs(end);
   Particles=NewParticles(1:nParticles,:);
   NELs=NewNELs(1:nParticles,:);
 
   % Store Best Cost Ever Found
   BestCosts(Iter)=BS_NEL;
   
   % Show Iteration Information
   disp(['Iteration ' num2str(Iter) ': Best Cost = ' num2str(BestCosts(Iter))]);
end
 
Eval_Number=FEs;
Conv_History=BestCosts;
Best_Pos=BS;
Best_score=BestCosts(end);
end
%% Calculate the Euclidean Distance
function o = distance(a,b)
for i=1:size(a,1)
    o(1,i)=sqrt((a(i)-b(i))^2);
end
end

03

参考文献

1 Azizi M , Aickelin U , Khorshidi H A , et al. Energy valley optimizer: a novel metaheuristic algorithm for global and engineering optimizationJ. Scientific Reports.

04关键词回复

代码获取方式后台回复关键词:2023,免费获取2023年智能优化算法合集matlab代码。

相关推荐
ujainu小3 分钟前
原生性能优化:6变量实现高效桥接
开发语言·华为·性能优化·harmonyos
甄同学8 分钟前
第十七篇:Bash Executor命令执行器,安全运行Shell命令
开发语言·安全·bash
张3239 分钟前
Go语言基础 Map 函数值 闭包
开发语言·golang
变量未定义~17 分钟前
单调栈-四元组问题
数据结构·算法
冷小鱼25 分钟前
AI Agent 核心算法:任务规划(Planning)的深度技术解析
人工智能·算法·planning
杜子不疼.29 分钟前
【C++ 在线五子棋对战】- 会话管理模块实现
开发语言·c++
退休倒计时33 分钟前
【每日一题】LeetCode 78. 子集 TypeScript
算法·leetcode·typescript
有点。34 分钟前
C++深度优先搜索(DFS)的概念(一)
开发语言·c++·深度优先
旖-旎36 分钟前
《LeetCode 978 最长湍流子数组 || LeetCode 139 单词拆分》
c++·算法·leetcode·动态规划
时间的拾荒人39 分钟前
C语言编译与链接:从源码到可执行程序的完整解析
c语言·开发语言