麻雀搜索算法matlab代碼
?作者簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進,matlab項目合作可私信。
??個人主頁:Matlab科研工作室
??個人信條:格物致知。
更多Matlab仿真內(nèi)容點擊??
智能優(yōu)化算法 ?神經(jīng)網(wǎng)絡(luò)預測 雷達通信 無線傳感器
信號處理 圖像處理 路徑規(guī)劃 元胞自動機 無人機
? 內(nèi)容介紹
麻雀搜索算法是一種新型的群智能優(yōu)化算法,?在?2020?年由?Xue?等?[15]?提出,主要是受麻雀的覓食?和反哺食行為啟發(fā),具有尋優(yōu)能力強、收斂速度快的特點。麻雀搜索算法將整個麻雀種群分為三類,即尋找食物的生產(chǎn)者,搶奪食物的加入者和發(fā)現(xiàn)危險的警戒者?。生產(chǎn)者和加入者可以相互轉(zhuǎn)化,但各自在?種群中的占比不會發(fā)生變化。在模擬實驗中,需要使用虛擬麻雀進行食物的?尋找,與其他尋優(yōu)算法相同,麻雀搜索算法首先需要對麻雀種群與適應度值進行初始化,麻雀種群可?初始化為如下形式,表達式為式(3)?

中:n為麻雀的數(shù)量;d為要優(yōu)化的變量的維度即獨立參數(shù)的數(shù)目;xnd為第n只麻雀第d維度的值。由此,總體麻雀適應度值表征形式為?

式(4)中:f(x)為個體適應度值。適應度值較好的麻雀(即生產(chǎn)者)在搜索中會優(yōu)先獲得食物并指引群體的覓食方向與范圍,與此同時,生產(chǎn)者會具有更大的覓食搜索范圍。生產(chǎn)者在覓食過程中,位置不斷發(fā)生移動,而在遇到捕食者時,移動規(guī)則又會發(fā)生改變,即?

式(5)中:t為當前迭代次數(shù);j∈{1,2,…,d};xit,j為迭代第t次時,第i個麻雀的第j個維度的值;α∈(0,1],為隨機數(shù);iter_max為迭代次數(shù)最多的常數(shù);R2∈[0,1],為報警值;ST∈[0,1],為安全閾值;Q為服從正態(tài)分布的隨機數(shù);L為1×d階矩陣(元素全為1)。R2<ST時,代表該區(qū)域安全,無捕食者出沒,生產(chǎn)者會出現(xiàn)大范圍覓食行為;R2≥ST時,表示一些麻雀發(fā)現(xiàn)了捕食者并發(fā)出警告,所有麻雀迅速飛入安全區(qū)域。而對加入者而言,在覓食過程中,一旦生產(chǎn)者找到了好的食物源,加入者必會知曉,并飛向它的附近搶食,同時,也有加入者會時刻監(jiān)視生產(chǎn)者,隨時準備爭搶食物。由此加入者的位置更新規(guī)則為

式(6)中:xp為生產(chǎn)者占據(jù)的最佳位置;xworst為全局最差位置;A為1×d階矩陣,每個元素隨機為1或-1;A?=AT(AAT)-1。當i>時,表示適應性較差的第i個加入者搶奪食物失敗,為了更好地獲得食物避免挨餓只能飛往其他地區(qū)進行覓食??傮w而言,假設(shè)意識到危險的麻雀(即警戒者)占10%~20%。初始位置則隨機產(chǎn)生,規(guī)則為

式(7)中:λ為步長控制函數(shù),是一個均值為0,方差為1的正態(tài)分布隨機數(shù);fi為當前麻雀適應值;fg為全局最好適應值;fw為全局最差適應值;k為麻雀移動方向;xbest為全局最優(yōu)位置;ε為最小常數(shù),避免除數(shù)為零。當fi>fg時,警戒者位于種群邊緣,意識到危險后向中央安全區(qū)靠近;當fi=fg時,則是處于種群中央的麻雀意識到了危險,為躲避危險,則向其他麻雀身邊靠攏。
? 部分代碼
%_________________________________________________________________________________
%? Salp Swarm Algorithm (SSA) source codes version 1.0
%
% 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 SSA: [Best_score,Best_pos,SSA_cg_curve]=SSA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)
%__________________________________________
clear all?
clc
SearchAgents_no=30; % Number of search agents
Function_name='F5'; % Name of the test function that can be from F1 to F23 (?
Max_iteration=100; % Maximum numbef of iterations
% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);
[Best_score,Best_pos,SSA_cg_curve]=SSA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
figure('Position',[500 500 660 290])
% %Draw search space
subplot(1,2,1);
func_plot(Function_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel(['( x_1 , x_2 )'])
%Draw objective space
subplot(1,2,2);
semilogy(SSA_cg_curve,'Color','r')
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
axis tight
grid on
box on
legend('SSA')
display(['The best solution obtained by SSA is \m ', num2str(Best_pos)]);
display(['The best optimal value of the objective funciton found by SSA is \n ', num2str(Best_score)]);
img =gcf;? %獲取當前畫圖的句柄
print(img, '-dpng', '-r600', './img.png')? ? ? ? ?%即可得到對應格式和期望dpi的圖像? ??
? 運行結(jié)果

? 參考文獻
[1]郭北濤, 姜旭, 張麗秀. 基于麻雀算法的機械手時間最優(yōu)軌跡規(guī)劃[J]. 組合機床與自動化加工技術(shù), 2022(3):5.