多元宇宙优化算法(Multi-Verse Optimizer,MVO)是Seyedali Mirjalili等于2016年提出的一种新型智能优化算法[1]。它基于宇宙中的物质通过虫洞由白洞向黑洞进行转移的原理进行模拟。在MVO算法中,主要的性能参数是虫洞存在概率和虫洞旅行距离率,参数相对较少,低维度数值实验表现出了相对较优异的性能。
1 算法原理
该算法主要借助宇宙在随机创建过程中高膨胀率物体总是趋于低膨胀率的物体,这种万有引力作用可以使物体转移,借助相关宇宙学规则,可以在搜索空间逐渐趋于最优位置.遍历过程主要分为探索和开采过程,虫洞可以作为转移物体的媒介,通过白洞和黑洞交互作用进行搜索空间探测,本文算法具体操作如下:
2 算法流程图
%_______________________________________________________________________________________% % Multi-Verse Optimizer (MVO) source codes demo version 1.0 % % % % Developed in MATLAB R2011b(7.13) % % % % Author and programmer: Seyedali Mirjalili % % % % e-Mail: ali.mirjalili@gmail.com % % seyedali.mirjalili@griffithuni.edu.au % % % % Homepage: http://www.alimirjalili.com % % % % Main paper: % % % % S. Mirjalili, S. M. Mirjalili, A. Hatamlou % % Multi-Verse Optimizer: a nature-inspired algorithm for global optimization % % Neural Computing and Applications, in press,2015, % % DOI: http://dx.doi.org/10.1007/s00521-015-1870-7 % % % %_______________________________________________________________________________________% % You can simply define your cost in a seperate file and load its handle to fobj % The initial parameters that you need are: %__________________________________________ % fobj = @YourCostFunction % dim = number of your variables % Max_iteration = maximum number of generations % SearchAgents_no = number of search agents % lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n % ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n % If all the variables have equal lower bound you can just % define lb and ub as two single number numbers % To run MVO: [Best_score,Best_pos,cg_curve]=MVO(Universes_no,Max_iteration,lb,ub,dim,fobj) %__________________________________________ clear all clc Universes_no=60; %Number of search agents (universes) Function_name='F17'; %Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper) Max_iteration=500; %Maximum numbef of iterations %Load details of the selected benchmark function [lb,ub,dim,fobj]=Get_Functions_details(Function_name); [Best_score,Best_pos,cg_curve]=MVO(Universes_no,Max_iteration,lb,ub,dim,fobj); figure('Position',[290 206 648 287]) %Draw the search space subplot(1,2,1); func_plot(Function_name); title('Test function') xlabel('x_1'); ylabel('x_2'); zlabel([Function_name,'( x_1 , x_2 )']) grid off shading interp; light; lighting phong; shading interp; %Draw the convergence curve subplot(1,2,2); semilogy(cg_curve,'Color','r') title('Convergence curve') xlabel('Iteration'); ylabel('Best score obtained so far'); axis tight grid off box on legend('MVO') %_______________________________________________________________________________________% % Multi-Verse Optimizer (MVO) source codes demo version 1.0 % % % % Developed in MATLAB R2011b(7.13) % % % % Author and programmer: Seyedali Mirjalili % % % % e-Mail: ali.mirjalili@gmail.com % % seyedali.mirjalili@griffithuni.edu.au % % % % Homepage: http://www.alimirjalili.com % % % % Main paper: % % % % S. Mirjalili, S. M. Mirjalili, A. Hatamlou % % Multi-Verse Optimizer: a nature-inspired algorithm for global optimization % % Neural Computing and Applications, in press,2015, % % DOI: http://dx.doi.org/10.1007/s00521-015-1870-7 % % % %_______________________________________________________________________________________% % You can simply define your cost in a seperate file and load its handle to fobj % The initial parameters that you need are: %__________________________________________ % fobj = @YourCostFunction % dim = number of your variables % Max_iteration = maximum number of generations % SearchAgents_no = number of search agents % lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n % ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n % If all the variables have equal lower bound you can just % define lb and ub as two single number numbers % To run MVO: [Best_score,Best_pos,cg_curve]=MVO(Universes_no,Max_iteration,lb,ub,dim,fobj) %__________________________________________ 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
版本:2014a
完整代码或代写加1564658423