Nelder Mead; Simplex; MSA
3 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Statistics and Machine Learning Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!