多種智能優(yōu)化算法運(yùn)行時(shí)間和不同函數(shù)測(cè)試對(duì)比附matlab代碼
多種智能優(yōu)化算法運(yùn)行時(shí)間和不同函數(shù)測(cè)試對(duì)比附matlab代碼
TT_Matlab
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無(wú)人機(jī)等多種領(lǐng)域的Matlab仿真,完整matlab代碼或者程序定制加qq1575304183。
?作者簡(jiǎn)介:熱愛(ài)科研的Matlab仿真開(kāi)發(fā)者,修心和技術(shù)同步精進(jìn),matlab項(xiàng)目合作可私信。
個(gè)人主頁(yè): Matlab科研工作室
個(gè)人信條:格物致知。
更多Matlab仿真內(nèi)容點(diǎn)擊
智能優(yōu)化算法 神經(jīng)網(wǎng)絡(luò)預(yù)測(cè) 雷達(dá)通信 無(wú)線傳感器 電力系統(tǒng)
信號(hào)處理 圖像處理 路徑規(guī)劃 元胞自動(dòng)機(jī) 無(wú)人機(jī)
? 內(nèi)容介紹
智能優(yōu)化算法是一種常用的求解最優(yōu)化問(wèn)題的方法,包括遺傳算法、粒子群優(yōu)化算法、蟻群算法等等。這些算法具有不同的優(yōu)缺點(diǎn)和適用范圍,因此在實(shí)際應(yīng)用中需要進(jìn)行對(duì)比。
下面是一些常見(jiàn)的智能優(yōu)化算法及其特點(diǎn):
遺傳算法(GA):通過(guò)模擬種群遺傳過(guò)程來(lái)尋找最優(yōu)解,具有全局搜索能力和收斂速度較快的特點(diǎn)。
粒子群算法(PSO):通過(guò)模擬粒子在解空間中的運(yùn)動(dòng)過(guò)程來(lái)尋找最優(yōu)解,具有易于實(shí)現(xiàn)和求解速度快的特點(diǎn)。
蟻群算法(ACO):利用蟻群在食物與螞蟻巢穴之間的搜索規(guī)律來(lái)尋找最優(yōu)解,具有分布式搜索和適用于多目標(biāo)優(yōu)化等特點(diǎn)。
-
本文 涵蓋鯨魚(yú)算法、麻雀算法 、 遺傳算法、 蝗蟲(chóng)算法、 灰狼算法 、改進(jìn)蝗蟲(chóng)算法、改進(jìn)灰狼算法 、 改 進(jìn) 飛蛾算法 、飛蛾算法 、多元宇宙算法、 北方蒼鷹算法、 粒子群算法、蛇群算法、 正弦算法等
為了比較這些算法的性能,通常需要進(jìn)行不同函數(shù)測(cè)試。常用的測(cè)試函數(shù)包括Sphere、Rastrigin、Griewank、Ackley、Schwefel和Rosenbrock等。這些函數(shù)具有不同的復(fù)雜度和性質(zhì),可以用于評(píng)估不同算法的性能。另外加入了運(yùn)行時(shí)間對(duì)比。
? 部分代碼
%_________________________________________________________________________________
% Equilibrium Optimizer source code (Developed in MATLAB R2015a)
%
% programming: Afshin Faramarzi & Seyedali Mirjalili
%
% e-Mail: afaramar@hawk.iit.edu,
%
% paper:
% A. Faramarzi, M. Heidarinejad, B. Stephens, S. Mirjalili,
% Equilibrium optimizer: A novel optimization algorithm
% Knowledge-Based Systems
% DOI: https://doi.org/10.1016/j.knosys.2019.105190
%____________________________________________________________________________________
function [Ave,Sd,Convergence_curve]=EO(Particles_no,Max_iter,lb,ub,dim,fobj,Run_no)
for irun=1:Run_no
Ceq1=zeros(1,dim); Ceq1_fit=inf;
Ceq2=zeros(1,dim); Ceq2_fit=inf;
Ceq3=zeros(1,dim); Ceq3_fit=inf;
Ceq4=zeros(1,dim); Ceq4_fit=inf;
C=initialization(Particles_no,dim,ub,lb);
Iter=0; V=1;
a1=2;
a2=1;
GP=0.5;
while Iter<Max_iter
for i=1:size(C,1)
Flag4ub=C(i,:)>ub;
Flag4lb=C(i,:)<lb;
C(i,:)=(C(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
fitness(i)=fobj(C(i,:));
if fitness(i)<Ceq1_fit
Ceq1_fit=fitness(i); Ceq1=C(i,:);
elseif fitness(i)>Ceq1_fit && fitness(i)<Ceq2_fit
Ceq2_fit=fitness(i); Ceq2=C(i,:);
elseif fitness(i)>Ceq1_fit && fitness(i)>Ceq2_fit && fitness(i)<Ceq3_fit
Ceq3_fit=fitness(i); Ceq3=C(i,:);
elseif fitness(i)>Ceq1_fit && fitness(i)>Ceq2_fit && fitness(i)>Ceq3_fit && fitness(i)<Ceq4_fit
Ceq4_fit=fitness(i); Ceq4=C(i,:);
end
end
%---------------- Memory saving-------------------
if Iter==0
fit_old=fitness; C_old=C;
end
for i=1:Particles_no
if fit_old(i)<fitness(i)
fitness(i)=fit_old(i); C(i,:)=C_old(i,:);
end
end
C_old=C; fit_old=fitness;
%-------------------------------------------------
Ceq_ave=(Ceq1+Ceq2+Ceq3+Ceq4)/4; % averaged candidate
C_pool=[Ceq1; Ceq2; Ceq3; Ceq4; Ceq_ave]; % Equilibrium pool
t=(1-Iter/Max_iter)^(a2*Iter/Max_iter); % Eq (9)
for i=1:Particles_no
lambda=rand(1,dim); % lambda in Eq(11)
r=rand(1,dim); % r in Eq(11)
Ceq=C_pool(randi(size(C_pool,1)),:); % random selection of one candidate from the pool
F=a1*sign(r-0.5).*(exp(-lambda.*t)-1); % Eq(11)
r1=rand(); r2=rand(); % r1 and r2 in Eq(15)
GCP=0.5*r1*ones(1,dim)*(r2>=GP); % Eq(15)
G0=GCP.*(Ceq-lambda.*C(i,:)); % Eq(14)
G=G0.*F; % Eq(13)
C(i,:)=Ceq+(C(i,:)-Ceq).*F+(G./lambda*V).*(1-F); % Eq(16)
end
Iter=Iter+1;
Convergence_curve(Iter)=Ceq1_fit;
Ceqfit_run(irun)=Ceq1_fit;
end
% display([’Run no : ’, num2str(irun)]);
% display([’The best solution obtained by EO is : ’, num2str(Ceq1,10)]);
% display([’The best optimal value of the objective funciton found by EO is : ’, num2str(Ceq1_fit,10)]);
% disp(sprintf(’--------------------------------------’));
end
Ave=mean(Ceqfit_run);
Sd=std(Ceqfit_run);
end
%%
function [Cin,domain]=initialization(SearchAgents_no,dim,ub,lb)
Boundary_no= size(ub,2); % numnber of boundaries
% If the boundaries of all variables are equal and user enter a signle
% number for both ub and lb
if Boundary_no==1
Cin=rand(SearchAgents_no,dim).*(ub-lb)+lb;
domain=ones(1,dim)*(ub-lb);
end
% If each variable has a different lb and ub
if Boundary_no>1
for i=1:dim
ub_i=ub(i);
lb_i=lb(i);
Cin(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i;
end
domain=ones(1,dim).*(ub-lb);
end
end
? 運(yùn)行結(jié)果
? 參考文獻(xiàn)
?? 代碼獲取關(guān)注我
??部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除
?? 關(guān)注我領(lǐng)取海量matlab電子書(shū)和數(shù)學(xué)建模資料
-
2023年各省最新電價(jià)一覽!8省中午執(zhí)行谷段電價(jià)! 2023-01-03
-
PPT導(dǎo)出高分辨率圖片的四種方法 2022-09-22
-
全國(guó)消防救援總隊(duì)主官及簡(jiǎn)歷(2023.2) 2023-02-10
-
我們的前輩!歷屆全國(guó)工程勘察設(shè)計(jì)大師完整名單! 2022-11-18
-
關(guān)于某送變電公司“4·22”人身死亡事故的快報(bào) 2022-04-26
