Effacer les filtres
Effacer les filtres

GA Vectorized do not return the best FF value

1 vue (au cours des 30 derniers jours)
Lucas Carneiro
Lucas Carneiro le 26 Fév 2018
Hello, I am having a similar problem to this:
https://www.mathworks.com/matlabcentral/answers/367573-ga-didn-t-return-the-x-for-the-best-fitness-value
In my case, I am running GA Vectorized both with ga and gamultiobj. All is fine when Vectorization is off but the solver does not return the best solution with Vectorization on. I am asking myself how to solve this because I need to speed up my optimization.
Here is how my FF is implemented:
function FF=multiobj_mics(pop,n,r,max_d,max_o)
popSize=size(pop,1);
FF=zeros(popSize,2);
k=nchoosek(n,2);
%%Variables
%rad
%meters
%phi=2*pi*rand(1,n); %azimuth
%theta=2*pi*rand(1,n); %elevation
%phi=x(1)....x(n) %-pi pi
%theta=x(n+1)....x(2*n) %0 pi
%%Orientation
vet(1:n-1,1:3,1:n-1,1:popSize)=NaN;
for i=1:1:n-1
x1=r*sin(pop(1:popSize,n+i)).*cos(pop(1:popSize,i));
y1=r*sin(pop(1:popSize,n+i)).*sin(pop(1:popSize,i));
z1=-r*cos(pop(1:popSize,n+i));
p=1;
for j=i+1:1:n
x2=r*sin(pop(1:popSize,n+j)).*cos(pop(1:popSize,j));
y2=r*sin(pop(1:popSize,n+j)).*sin(pop(1:popSize,j));
z2=-r*cos(pop(1:popSize,n+j));
%Normalized mic orientation vector
vet(p,:,i,:)=reshape(([x1 y1 z1]/norm([x1 y1 z1])-[x2 y2 z2]/norm([x2 y2 z2])),[1,3,1,popSize]);
%Cannot use ./
for ii=1:popSize
vet(p,:,i,ii)=vet(p,:,i,ii)/norm(vet(p,:,i,ii));
end
p=p+1;
end
end
%Convert 4D matrix to 3D matrix (vet(3 lines) x pop)
Vet=reshape(vet,[],1);
Vet=reshape(Vet,n-1,3,popSize*(n-1));
C=permute(Vet,[1 3 2]);
C = reshape(C,[],size(Vet,2),1);
[rr,c] = size(C);
Vet = permute(reshape(C',[c,rr/popSize,popSize]),[2,1,3]);
null=any(isnan(Vet),2);
Vet(find(null(:,1,1)==1),:,:) = [];
% Minimum angle btw pairs of mics
for i=1:k
angle=zeros(popSize,k-1);
p=1;
for ii=1:k
if ii~=i
for j=1:popSize
angle(j,p)=atan2(norm(cross(Vet(i,:,j),Vet(ii,:,j))), dot(Vet(i,:,j),Vet(ii,:,j)));
if angle(j,p)>pi/2
angle(j,p)=pi-angle(j,p);
end
end
p=p+1;
end
end
FF(1:popSize,1)=FF(1:popSize,1)+min(angle(:,:),[],2);
end
FF(1:popSize,1)=-max_o*FF(1:popSize,1);
}
if true
% code
end
Is there something not deterministic in this function? Maybe that 'if' to get the supplementary angle? I am using R2016b.
Thanks in advance, Lucas

Réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by