💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码实现
💥1 概述
自然一直是大多数基于群体的随机优化技术的主要灵感来源。顾名思义,它们随机执行优化。优化过程通常通过创建一组随机解决方案开始。然后,这些初始解决方案在预定义数量的步骤(称为迭代或生成)中组合、移动或演变。这几乎是所有基于群体的算法的主要框架。使算法与该领域的其他算法不同的是,在优化过程中组合、移动或发展解决方案的机制。
本文提出了一种新颖的自然启发算法,称为多节优化器(MVO)。该算法的主要灵感基于宇宙学中的三个概念:白洞、黑洞和虫洞。开发这三个概念的数学模型分别用于执行探索、开发和局部搜索。MVO 算法首先以 19 个具有挑战性的测试问题为基准。然后将其应用于五个实际工程问题,以进一步确认其性能。为了验证结果,将MVO与四种众所周知的算法进行了比较:灰狼优化器,粒子群优化,遗传算法和引力搜索算法。结果表明,所提算法能够提供极具竞争力的结果,并且在大多数测试台上优于文献中的最佳算法。真实案例研究的结果也证明了MVO在解决未知搜索空间的实际问题方面的潜力。
📚2 运行结果
部分代码:
%__________________________________________
function [Best_universe_Inflation_rate,Best_universe,Convergence_curve]=MVO(N,Max_time,lb,ub,dim,fobj)
%Two variables for saving the position and inflation rate (fitness) of the best universe
Best_universe=zeros(1,dim);
Best_universe_Inflation_rate=inf;%Initialize the positions of universes
Universes=initialization(N,dim,ub,lb);%Minimum and maximum of Wormhole Existence Probability (min and max in
% Eq.(3.3) in the paper
WEP_Max=1;
WEP_Min=0.2;Convergence_curve=zeros(1,Max_time);
%Iteration(time) counter
Time=1;%Main loop
while Time<Max_time+1
%Eq. (3.3) in the paper
WEP=WEP_Min+Time*((WEP_Max-WEP_Min)/Max_time);
%Travelling Distance Rate (Formula): Eq. (3.4) in the paper
TDR=1-((Time)^(1/6)/(Max_time)^(1/6));
%Inflation rates (I) (fitness values)
Inflation_rates=zeros(1,size(Universes,1));
for i=1:size(Universes,1)
%Boundary checking (to bring back the universes inside search
% space if they go beyoud the boundaries
Flag4ub=Universes(i,:)>ub;
Flag4lb=Universes(i,:)<lb;
Universes(i,:)=(Universes(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
%Calculate the inflation rate (fitness) of universes
Inflation_rates(1,i)=fobj(Universes(i,:));
%Elitism
if Inflation_rates(1,i)<Best_universe_Inflation_rate
Best_universe_Inflation_rate=Inflation_rates(1,i);
Best_universe=Universes(i,:);
end
end
[sorted_Inflation_rates,sorted_indexes]=sort(Inflation_rates);
for newindex=1:N
Sorted_universes(newindex,:)=Universes(sorted_indexes(newindex),:);
end
%Normaized inflation rates (NI in Eq. (3.1) in the paper)
normalized_sorted_Inflation_rates=normr(sorted_Inflation_rates);
Universes(1,:)= Sorted_universes(1,:);
%Update the Position of universes
for i=2:size(Universes,1)%Starting from 2 since the firt one is the elite
Back_hole_index=i;
for j=1:size(Universes,2)
r1=rand();
if r1<normalized_sorted_Inflation_rates(i)
White_hole_index=RouletteWheelSelection(-sorted_Inflation_rates);% for maximization problem -sorted_Inflation_rates should be written as sorted_Inflation_rates
if White_hole_index==-1
White_hole_index=1;
end
%Eq. (3.1) in the paper
Universes(Back_hole_index,j)=Sorted_universes(White_hole_index,j);
end
if (size(lb,2)==1)
%Eq. (3.2) in the paper if the boundaries are all the same
r2=rand();
if r2<WEP
r3=rand();
if r3<0.5
Universes(i,j)=Best_universe(1,j)+TDR*((ub-lb)*rand+lb);
end
if r3>0.5
Universes(i,j)=Best_universe(1,j)-TDR*((ub-lb)*rand+lb);
end
end
end
if (size(lb,2)~=1)
%Eq. (3.2) in the paper if the upper and lower bounds are
%different for each variables
r2=rand();
if r2<WEP
r3=rand();
if r3<0.5
Universes(i,j)=Best_universe(1,j)+TDR*((ub(j)-lb(j))*rand+lb(j));
end
if r3>0.5
Universes(i,j)=Best_universe(1,j)-TDR*((ub(j)-lb(j))*rand+lb(j));
end
end
end
end
end
%Update the convergence curve
Convergence_curve(Time)=Best_universe_Inflation_rate;
%Print the best universe details after every 50 iterations
if mod(Time,50)==0
display(['At iteration ', num2str(Time), ' the best universes fitness is ', num2str(Best_universe_Inflation_rate)]);
end
Time=Time+1;
end