Genetic Algorithm for points External To a Specific Volume

I'm using the GA to select measurement points in a three-dimensional physics problem.
I can tell GA to select only N_points inside some specified plane above my problem simply as:
X.min = -10; X.max = 10; Y.min = -10; Y.max = 10; Z.min = 0; Z.max = 2;
lb = repmat([X.min Y.min Z.min],[1 N_points]);
ub = repmat([X.max Y.max Z.max],[1 N_points]); %Lower/Upper Boundaries [X,Y,Z]
Is it possible to instead set up constraints so points are only selected outside of some cube? For clarity, a physical example would be there exists volume which a measurement device cannot enter, so the problem searches for points external to that region.
Ideally, I would select points only within a hollow-cube: External to a specific volume, but extending to reasonable limits - thereby minimising the possible search space.

 Respuesta aceptada

Matt J
Matt J el 10 de Ag. de 2022
Editada: Matt J el 10 de Ag. de 2022
You would have to use a non-linear constraint function for that:
function [cineq,ceq]=nonlcon(x)
x=reshape(x,3,[]); %reshape to 3xN_points
cineq(1,:)=vecnorm(x./[Xmax;Ymax;Zmax],inf)-1; %inside box of dimensions Xmax x Ymax x Zmax
cineq(2,:)=1-vecnorm(x./[Xmin;Ymin;Zmin],inf); %outside box of dimensions Xmin x Ymin x Zmin
ceq=[];
end

4 comentarios

Matt J
Matt J el 10 de Ag. de 2022
Editada: Matt J el 10 de Ag. de 2022
In fact, though, cineq(1,:) is unnecessary. You could and probably should use the lb, ub argument for that, as you have been.
ADSW121365
ADSW121365 el 11 de Ag. de 2022
Editada: ADSW121365 el 11 de Ag. de 2022
The comment has confused me slightly, please forgive me, my initial thought is that cineq(2:) would be better suited to the existing lb,ub.
An example may help me: Take a 2 unit cube, where we wish to ignore a central unit cube.
  • In this case, the outside box has limits ranging from -1:1 in XYZ.
  • The inner box, which should be excluded from the search, then has limits ranging from -0.5:0.5 in XYZ.
For this explicit case, what would be your recommended syntax to achieve my intention?
Matt J
Matt J el 11 de Ag. de 2022
Editada: Matt J el 11 de Ag. de 2022
That would be,
ub=ones(3,N_points); lb=-ub; %outside box
x=ga(fun,numel(ub),[],[],[],[],lb,ub,@nonlcon);
function [cineq,ceq]=nonlcon(x)
x=reshape(x,3,[]); %reshape to 3xN_points
cineq=1-vecnorm(x./0.5,inf); %inner box
ceq=[];
end
Perfect I understand now, thankyou!

Iniciar sesión para comentar.

Más respuestas (0)

Productos

Versión

R2021b

Preguntada:

el 10 de Ag. de 2022

Comentada:

el 11 de Ag. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by