Effacer les filtres
Effacer les filtres

How can I reduce my code ? It suddenly become so so slow

1 vue (au cours des 30 derniers jours)
Rahim Rahim
Rahim Rahim le 7 Fév 2021
Commenté : Adam Danz le 7 Fév 2021
I have a big code, and the tic-toc timing of this part is so big. few days ago my code was work fast. I tried a lot if solutions such as:
  • Pre-allocate variables.
  • Unistall and re-install Matlab.
But with any positive solutions, I can't use parallel because there are a relation between loops. I want my code that become fast as old-days.
The tic toc timing is between 6 seconds and 4 seconds. ( is not take a constant value).
function [Res]=...
ArAddSolutions(Ne, Ar,So,ArMaxSize, Tr,ObF,Constraints,MA,lb,ub)
global ObjOne;
global ObjTwo;
global ObjThree;
NewP=[];
if( size (So,1)>=1 )
% Remove Redudndance In soulution
i=1;
while( i<=size(So,1)-1)
j= i+1;
while( j<=size(So,1))
if(So(i,:)==So(j,:))
So(j,:)=[];
else
j= j+1;
end
end
i=i+1;
end
for i=1: size(So,1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Accept Conditions or nop
Flag4ub=So(i,:)>ub;
Flag4lb=So(i,:)<lb;
Respectb=true;
In =1;
while( ( In<= size(Flag4ub,2) )&& (Respectb) )
if( ( sum(Flag4ub)>0) || (sum (Flag4lb)>0) )
Respectb=false;
end
In =1+In;
end
if( Constraints(So(i,:),Tr) && (Respectb) )
%%%%%%%%%%%%%%%%%%%%%%%%% new soulution exist or In Ar nooooop ;)
ExistInAr=false;
ii=1;
while( ( ii<=size(Ar,1)) && (ExistInAr==false))
if(So(i,:)==Ar(ii,:))
ExistInAr=true;
else
ii= ii+1;
end
end
if(~ExistInAr)
% Non Dominated or nop
NonDominated=true;
DomineListe=[];
Obj1 = ObF(Ne,So(i,:),Tr,ObjOne,MA);
Obj2 = ObF(Ne,So(i,:),Tr,ObjTwo,MA);
Obj3 = ObF(Ne,So(i,:),Tr,ObjThree,MA);
j=1;
while ( (j <= size(Ar,1)) && (NonDominated) )
ArObj1 = ObF(Ne,Ar(j,:),Tr,ObjOne,MA);
ArObj2 = ObF(Ne,Ar(j,:),Tr,ObjTwo,MA);
ArObj3 = ObF(Ne,Ar(j,:),Tr,ObjThree,MA);
if ( (Obj1>ArObj1 ) && (Obj2>ArObj2) && (Obj3>ArObj3 ))
NonDominated=false;
%NewP=[NewP; ArObj1,ArObj2,ArObj3];
else
if ( (Obj1<ArObj1 ) && (Obj2<ArObj2) && (Obj3<ArObj3 ))
DomineListe=[DomineListe,j];
end
end
j=j+1;
end
% Add soulition in Ar
if(NonDominated)
% Remove from Ar If dominate
forj=1:size(DomineListe,1)
Ar( DomineListe(j) ,:)=[];
end
while (size(Ar,1)>=ArMaxSize )
[Ar,ArScore]=...
CrowdingDistanceAlgorithm(Ne, Ar,Tr,ObF,MA);
Ar(size(Ar,1),:)=[];
end
Ar=[Ar; So(i,:)];
end
end
end
end
end
Res=Ar;
end

Réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Produits


Version

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by