function lg=clasbypreference5(lg,p)
% lg=clasbypreference5(lg,p)
% p : matrix with the ranges of preferences
%
% (c) cpoh 2006
% spref es la clasificacin segun las tablas de preferencias 'p'
% se sigue el criterio de ovo-rule, el peor de los objetivos manda
% por ejemplo: es mejor 6 deseables que 1 Tolerable con 5 altamente
% deseables.
%% inicializa
aux=zeros(lg.numind,lg.nobj);
lg.pref=zeros(lg.numind,1);
npuntos=size(p,2);
%% Vector de valores de ponderacin de cada una de los targets
% para que se cumpla el OVO-rule (depende del nmero de rangos
% de funciones a evaluar)
valores=zeros(1,npuntos);
valores(2)=1;
if npuntos>=3
for i=3:npuntos
valores(i)=lg.nobj*valores(i-1)+1;
end
end
lg.worstpref=valores(end)*lg.nobj;
%% aux contiene en que rango esta cada objetivo segn los targets
% definidos.
% 0=AD,1=D, etc.
for i=1:lg.numind
for j=1:lg.nobj % Para cada punto
k=2;
while (k<=npuntos)&& (lg.spf(i,j)>p(j,k))
aux(i,j)=aux(i,j)+1;
k=k+1;
end
end
end
%% establecimiento de preferencias
for i=1:lg.numind
for j=1:lg.nobj % Para cada punto
lg.pref(i)=lg.pref(i)+ valores(aux(i,j)+1);
end
end
%% incluye sortbyobjective
[lg.pref,ix]=sort(lg.pref);
lg.spf=lg.spf(ix,:);
lg.sps=lg.sps(ix,:);
lg.slayer=lg.slayer(ix,:);