煙臺網(wǎng)站建設哪家好呢網(wǎng)絡顧問
?
💥💥💞💞歡迎來到本博客????💥💥
🏆博主優(yōu)勢:🌞🌞🌞博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。
??座右銘:行百里者,半于九十。
📋📋📋本文目錄如下:🎁🎁🎁
目錄
💥1 概述
📚2 運行結果
🎉3?文獻來源
🌈4 Matlab代碼實現(xiàn)
💥1 概述
在過去的十年中,元啟發(fā)式技術已經(jīng)變得非常流行。這種流行是由于幾個主要原因:靈活性、無梯度機制和這些算法的局部最優(yōu)避免。前兩個優(yōu)點源于元啟發(fā)式通過僅查看輸入和輸出來考慮和解決優(yōu)化問題。換句話說,元啟發(fā)式方法將優(yōu)化問題假設為黑盒。因此,無需計算搜索空間的導數(shù)。這使得它們在解決各種問題方面具有高度的靈活性。由于元啟發(fā)式屬于隨機優(yōu)化技術家族,因此它們受益于隨機運算符。這有助于他們在解決實際問題時避免局部解決方案,這些問題通常具有大量的局部最優(yōu)。由于這些優(yōu)點,元啟發(fā)式的應用可以在科學和工業(yè)的不同分支中找到。
元啟發(fā)式算法分為兩大類:進化[1]和群體智能[2]技術。進化算法模仿自然界中的進化概念。此類中最好和最受推崇的算法是遺傳算法(GA)[3]。該算法模擬了達爾文進化論的概念。在 GA 中,優(yōu)化是通過針對特定問題的一組隨機解決方案啟動的。通過目標函數(shù)評估解后,根據(jù)解的適應度值修改解的變量。由于最好的個體更有可能參與改進其他解決方案,因此隨機初始解決方案很可能得到改進。文獻中還有其他幾種進化算法,如差分進化(DE)[4],進化策略(ES)[5]和進化規(guī)劃(EP)[6],[7]和基于生物地理學的優(yōu)化(BBO)算法[8]。
群體智能技術模仿自然界中群體、牛群、學校或成群生物的智能。這些算法的主要基礎源于一群生物的集體行為。例如,螞蟻能夠在沒有集中控制單元的情況下共同保證蟻群的生存。換句話說,沒有人告訴螞蟻在哪里以及如何找到食物來源,但它們會合作在離巢穴很遠的地方找到食物。此類中最受歡迎的兩種算法是蟻群優(yōu)化 (ACO) [9] 和粒子群優(yōu)化 (PSO) [10]。ACO算法模仿螞蟻的社會行為,以找到巢穴和源食物之間的最短路徑。PSO算法模擬鳥類在導航和狩獵中的集體行為。文獻中的其他群體智能技術包括:人工蜂群(ABC)算法[11],布谷鳥搜索(CS)算法[12],螢火蟲算法(FA)[13],蝙蝠算法(BA)[14],灰狼優(yōu)化器(GWO)[15],[16],[17],海豚回聲定位(DE)[18],鯨魚優(yōu)化算法(WOA)[19],果蠅優(yōu)化算法(FOA)[20]和和諧搜索[21],[22]。
無論進化和群體智能技術之間的差異如何,共同點是在優(yōu)化過程中改進一個或一組解決方案。如果一種算法只改進了一個解決方案,它被稱為個人主義算法。如果一組解決方案得到改進,則稱為集體算法。個人主義算法是有益的,因為所需的函數(shù)評估數(shù)量少,并且整體優(yōu)化過程簡單。然而,局部最優(yōu)停滯的概率非常高。集體算法能夠更好地避免局部解決方案并交換有關搜索空間的信息。但是,此類技術需要更多的功能評估。一些個人主義算法是禁忌搜索(TS)[6],[23],爬山[24],迭代局部搜索(ILS)[25]和模擬退火(SA)[26],變量鄰域搜索(VNS)[27]和引導局部搜索[28]。眾所周知的集體算法是 GA、ACO、PSO、DE 和 ES。
盡管文獻中提出的算法有其優(yōu)點,但無免費午餐(NFL)[29]已經(jīng)證明,這些算法都不能解決所有優(yōu)化問題。換句話說,在解決所有優(yōu)化問題時,所有元啟發(fā)式方法的表現(xiàn)都相似。該定理揭示了新算法和特定算法在不同領域的重要性,因為算法在解決一組問題時的有效性并不能保證它在不同的測試問題集中取得成功。這就是本文的動機,首先提出了一種新的元啟發(fā)式優(yōu)化算法來解決單目標問題,然后擴展到多目標版本。本文的其余部分組織如下。
第二節(jié)回顧文獻和相關著作。第2節(jié)介紹了所提出的靈感和數(shù)學模型。本節(jié)還提出了Salp Swarm算法(SSA)和多目標Salp Swarm算法(MSSA)。第3節(jié)介紹和討論了兩種算法在各種基準函數(shù)上的定性和定量結果。SSA和MSSA都被用來解決第4節(jié)中幾個具有挑戰(zhàn)性的實際問題。最后,第5節(jié)總結了這項工作,并提出了幾個未來的研究方向。
本工作提出了兩種新穎的優(yōu)化算法,稱為Salp Swarm算法(SSA)和多目標Salp Swarm算法(MSSA),用于解決具有單個和多個目標的優(yōu)化問題。SSA和MSSA的主要靈感是在海洋中航行和覓食時鱸魚的成群行為。這兩種算法在幾個數(shù)學優(yōu)化函數(shù)上進行了測試,以觀察并確認它們在尋找優(yōu)化問題的最佳解決方案方面的有效行為。數(shù)學函數(shù)結果表明,SSA算法能夠有效地改進初始隨機解,并向最優(yōu)收斂。MSSA結果表明,該算法能夠在高收斂性和覆蓋率下逼近帕累托最優(yōu)解。本文還考慮使用SSA和MSSA解決幾個具有挑戰(zhàn)性且計算成本高昂的工程設計問題(例如翼型設計和船用螺旋槳設計)。真實案例研究的結果證明了所提出的算法在解決具有困難和未知搜索空間的實際問題方面的優(yōu)點。
📚2 運行結果
部分代碼:
function [FoodFitness,FoodPosition,Convergence_curve]=SSA(N,Max_iter,lb,ub,dim,fobj)
if size(ub,1)==1
? ? ub=ones(dim,1)*ub;
? ? lb=ones(dim,1)*lb;
end
Convergence_curve = zeros(1,Max_iter);
%Initialize the positions of salps
SalpPositions=initialization(N,dim,ub,lb);
FoodPosition=zeros(1,dim);
FoodFitness=inf;
%calculate the fitness of initial salps
for i=1:size(SalpPositions,1)
? ? SalpFitness(1,i)=fobj(SalpPositions(i,:));
end
[sorted_salps_fitness,sorted_indexes]=sort(SalpFitness);
for newindex=1:N
? ? Sorted_salps(newindex,:)=SalpPositions(sorted_indexes(newindex),:);
end
FoodPosition=Sorted_salps(1,:);
FoodFitness=sorted_salps_fitness(1);
%Main loop
l=2; % start from the second iteration since the first iteration was dedicated to calculating the fitness of salps
while l<Max_iter+1
? ??
? ? c1 = 2*exp(-(4*l/Max_iter)^2); % Eq. (3.2) in the paper
? ??
? ? for i=1:size(SalpPositions,1)
? ? ? ??
? ? ? ? SalpPositions= SalpPositions';
? ? ? ??
? ? ? ? if i<=N/2
? ? ? ? ? ? for j=1:1:dim
? ? ? ? ? ? ? ? c2=rand();
? ? ? ? ? ? ? ? c3=rand();
? ? ? ? ? ? ? ? %%%%%%%%%%%%% % Eq. (3.1) in the paper %%%%%%%%%%%%%%
? ? ? ? ? ? ? ? if c3<0.5?
? ? ? ? ? ? ? ? ? ? SalpPositions(j,i)=FoodPosition(j)+c1*((ub(j)-lb(j))*c2+lb(j));
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? SalpPositions(j,i)=FoodPosition(j)-c1*((ub(j)-lb(j))*c2+lb(j));
? ? ? ? ? ? ? ? end
? ? ? ? ? ? ? ? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
? ? ? ? ? ? end
? ? ? ? ? ??
? ? ? ? elseif i>N/2 && i<N+1
? ? ? ? ? ? point1=SalpPositions(:,i-1);
? ? ? ? ? ? point2=SalpPositions(:,i);
? ? ? ? ? ??
? ? ? ? ? ? SalpPositions(:,i)=(point2+point1)/2; % % Eq. (3.4) in the paper
? ? ? ? end
? ? ? ??
? ? ? ? SalpPositions= SalpPositions';
? ? end
? ??
? ? for i=1:size(SalpPositions,1)
? ? ? ??
? ? ? ? Tp=SalpPositions(i,:)>ub';Tm=SalpPositions(i,:)<lb';SalpPositions(i,:)=(SalpPositions(i,:).*(~(Tp+Tm)))+ub'.*Tp+lb'.*Tm;
? ? ? ??
? ? ? ? SalpFitness(1,i)=fobj(SalpPositions(i,:));
? ? ? ??
? ? ? ? if SalpFitness(1,i)<FoodFitness
? ? ? ? ? ? FoodPosition=SalpPositions(i,:);
? ? ? ? ? ? FoodFitness=SalpFitness(1,i);
? ? ? ? ? ??
? ? ? ? end
? ? end
? ??
? ? Convergence_curve(l)=FoodFitness;
? ? l = l + 1;
end
🎉3?文獻來源
部分理論來源于網(wǎng)絡,如有侵權請聯(lián)系刪除。
[1]? S. Mirjalili, A.H. Gandomi, S.Z. Mirjalili, S. Saremi, H. Faris, S.M. Mirjalili,
? Salp Swarm Algorithm: A bio-inspired optimizer for engineering design problems
? Advances in Engineering Software