Nelder Mead; Simplex; MSA

2 ビュー (過去 30 日間)
dhiman banerjee
dhiman banerjee 2019 年 11 月 11 日
編集済み: Matt J 2019 年 11 月 11 日
I have coded Nelder -mead simplex method but getting some error: looks it is stuck in infinite loop. Please help.
************************************************************************************************************************************************************************************
function [Best_pos1,Best_score1]=simplex(Moth_pos1,Moth_fitness1,fobj,SearchAgents_no,ub,lb,OPTIONS)
%[Best_pos,Best_score,Convergence_curve]=MSA(SearchAgents_no,Nc,G,ub,lb,d,fobj,OPTIONS);
%StdVal=10; %any value for convergence
% n=3; %value of N+1
P=1; %reflection coefficient
Chi=2; %expansion coefficient
Gamma=0.5; %contraction coefficient
Sig=0.5; %shrink coefficient
StdVal=1;
while(StdVal > 0.00001)
[Best_score1, location] = min(Moth_fitness1(1:SearchAgents_no+1));
Best_pos1=Moth_pos1(location,:);
[Moth_fitness1,L]=sort(Moth_fitness1);
L1=L.';
Moth_pos11 = Moth_pos1(L1,:);
centroid=(sum(Moth_pos11 ))./SearchAgents_no;
xr=centroid+P*(centroid-Moth_pos11(SearchAgents_no,:));%Reflect
xr=feasiblity(xr,ub,lb,OPTIONS);
if (fobj(Moth_pos11(1,:))<= fobj(xr)&& fobj(xr)<fobj(Moth_pos11(SearchAgents_no,:)))
Moth_pos11(SearchAgents_no+1,:)=xr;
continue;
end
if(fobj(xr) < fobj(Moth_pos11(1,:))) %Expand
xe = (1-Chi).*centroid+Chi.*xr;
xe=feasiblity(xe,ub,lb,OPTIONS);
if(fobj(xe) < fobj(xr))
Moth_pos11(SearchAgents_no+1,:)=xe;
continue;
else
Moth_pos11(SearchAgents_no+1,:)=xr;
continue;
end
end
if(fobj(Moth_pos11(SearchAgents_no,:)) <= fobj(xr)) %Contract
xcout = (1-Gamma).*centroid + Gamma.*xr; %Contract Outside
xcout=feasiblity(xcout,ub,lb,OPTIONS);
xcin = (1-Gamma).*centroid + Gamma.*Moth_pos11(SearchAgents_no+1,:); %Contract Inside
xcin=feasiblity(xcin,ub,lb,OPTIONS);
if fobj(Moth_pos11(SearchAgents_no,:)) <= fobj(xr) && fobj(xr) < fobj(Moth_pos11(SearchAgents_no+1,:)) && fobj(xcout) <= fobj(xr)
Moth_pos11(SearchAgents_no+1,:)=xcout;
continue;
elseif fobj(Moth_pos11(SearchAgents_no+1,:))<= fobj(xr) && fobj(xcin) < fobj(Moth_pos11(SearchAgents_no+1,:)) %Contract Inside
Moth_pos11(SearchAgents_no+1,:) = xcin;
continue;
else
for i=2:SearchAgents_no+1
Moth_pos11(i,:)= (1-Sig).*Moth_pos11(1,:) + Sig.*Moth_pos11(i,:);
end
end
end
for i2 = 1:SearchAgents_no+1
Moth_fitness11(i2,:) = fobj(Moth_pos11(i2,:));
end
Moth_fitness11=sort(Moth_fitness11);
if Moth_fitness11(SearchAgents_no+1,:)-Moth_fitness11(1,:)<StdVal
[Best_score1, location] = min(Moth_fitness11);
Best_pos1 = Moth_pos11(location,:);
break;
else
continue;
end
end

回答 (0 件)

カテゴリ

Help Center および File ExchangeStatistics and Machine Learning Toolbox についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by