基于瘋狂自適應(yīng)的樽海鞘算法求解單目標(biāo)優(yōu)化問題附matlab代碼
?作者簡(jiǎn)介:熱愛科研的
開發(fā)者,修心和技術(shù)同步精進(jìn),matlab項(xiàng)目合作可私信。??個(gè)人主頁:
??個(gè)人信條:格物致知。
更多Matlab仿真內(nèi)容點(diǎn)擊??
?? ? ?
? ? ? ?
? 內(nèi)容介紹
針對(duì)樽海鞘群算法求解精度不高和收斂速度慢等缺點(diǎn),提出一種基于瘋狂自適應(yīng)的樽海鞘群算法.引入Tent混沌序列生成初始種群,以增加初始個(gè)體的多樣性;在食物源位置上引入瘋狂算子,增強(qiáng)種群的多樣性;在追隨者位置更新公式中引入自適應(yīng)慣性權(quán)重,使算法的全局搜索和局部搜索能力得到更好的平衡.使用統(tǒng)計(jì)分析、收斂速度分析、Wilcoxon檢驗(yàn)、經(jīng)典基準(zhǔn)函數(shù)和CEC2014函數(shù)的標(biāo)準(zhǔn)差評(píng)估改進(jìn)樽海鞘群算法的效率.結(jié)果表明,改進(jìn)算法具有更好的全局搜索能力和求解魯棒性,同時(shí),尋優(yōu)精度和收斂速度也比原來算法有所增強(qiáng),尤其在求解高維和多峰測(cè)試函數(shù)上,改進(jìn)算法擁有更好的性能.
? 部分代碼
%_________________________________________________________________________________
%? Salp Swarm Algorithm (SSA) source codes version 1.0
%
%? Developed in MATLAB R2016a
%
%? 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, 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
%? ?DOI: http://dx.doi.org/10.1016/j.advengsoft.2017.07.002
%____________________________________________________________________________________
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
? 運(yùn)行結(jié)果



? 參考文獻(xiàn)
[1]張達(dá)敏, 陳忠云, 辛梓蕓,等. 基于瘋狂自適應(yīng)的樽海鞘群算法[J]. 控制與決策, 2020, 35(9):9.
?? 關(guān)注我領(lǐng)取海量matlab電子書和數(shù)學(xué)建模資料
??部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除