Filter löschen
Filter löschen

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

1 Ansicht (letzte 30 Tage)
Rahim Rahim
Rahim Rahim am 7 Feb. 2021
Kommentiert: Adam Danz am 7 Feb. 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

Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Produkte


Version

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by