Вы находитесь на странице: 1из 4

% Matriz de Beneficios

Matriz_Beneficios= [1 0.28 0.25 0.15 0.20;


2 0.45 0.41 0.25 0.33;
3 0.65 0.55 0.40 0.42;
4 0.78 0.65 0.50 0.48;
5 0.90 0.75 0.62 0.53;
6 1.02 0.80 0.73 0.56;
7 1.13 0.85 0.82 0.58;
8 1.23 0.88 0.90 0.60;
9 1.32 0.90 0.96 0.60;
10 1.38 0.90 1.00 0.60 ];

% Generacion de la Poblacion Inicial


X = randi(7,8000,4); % Vector azar del 1 al 7 de [8000,4]
% Restriccion suma igual a 10
aux=1;
for i=1:1:8000
if sum(X(i,:))==10
M(aux,:)=X(i,:);
aux=aux+1;
end
end
% Poblaci�n Inicial Entera y Decimal
for i=1:1:20
Pob_Inicial_Enteros(i,:)=M(i,:);
end
% Evaluaci�n de la Funcion Objetivo
for i=1:1:20
for j=1:1:4
V_1=find(Matriz_Beneficios(:,1)==Pob_Inicial_Enteros(i,j));
M_Ev_Beneficios(i,j)=Matriz_Beneficios(V_1,j+1);
end
Suma(i,:)=sum(M_Ev_Beneficios(i,:)); % Suma de las filas de los
beneficios evaluados
end
M_Beneficios_Conc=[Pob_Inicial_Enteros Suma]; % Matriz Concateada para
ordenarla
[~, s] = sort(M_Beneficios_Conc(:, 5),'descend'); % Ordenar la matriz de las
posibles soluciones
M_Benef_Ordenada=M_Beneficios_Conc(s, :) % Matriz Ordenada 5
columnas
resul=M_Benef_Ordenada;
M_Benef_Ordenada(:,5) = []; % Matriz de beneficios
ordenada
%aux6=21;

%% Inicio Algoritmo Gen�tico


% Conversion de la Matriz de Entero a Binario
for t=1:1:1000
disp(t);
B = M_Benef_Ordenada.'; % Matriz Traspuesta
M_Binaria = de2bi(B,3);
aux1=1;
for i=1:1:20
M_Benef_Ordenada_Binario(i,:)=[M_Binaria(aux1,:) M_Binaria(aux1+1,:)
M_Binaria(aux1+2,:) M_Binaria(aux1+3,:)];
aux1=aux1+4;
end
% Seleccionar los Padres e Hijos
M_Padres = M_Benef_Ordenada_Binario;
M_Hijos = M_Benef_Ordenada_Binario;
M_Padres([13,14,15,16,17,18,19,20],:) = [];
M_Hijos([1,2,3,4,5,6,7,8,9,10,11,12,],:) = [];
% Operaciones Gen�ticas
for i=1:1:8

if i<=2 % Metodo Crossover Metodo Crosver Genera dos hijos


stop=2;
while stop~=0
stop=0;
col1=floor((12)*rand+1); % Aletorio primer padre
col2=floor((12)*rand+1); % Aleatorio segundo padre
fil1=floor((4)*rand+1); % Aleatorio Punto de cruce
aux4=1;
for j=1:1:12
if j <= (12-fil1)
Nuevos_Hijos(i,j)=M_Padres(col2,j);
else
Nuevos_Hijos(i,j)=M_Padres(col1,aux4);
aux4=aux4+1;
end
end
for s=1:1:20
if Nuevos_Hijos(i,:)== M_Benef_Ordenada_Binario(s,:)
stop=stop+1;

end
end
%disp(stop);
end
end % Fin M�todo Crossover

if i <= 7 && i>=3 %Inicio Recombinacion


stop1=2;
while stop1~=0
stop1=0;
Comparacion = randi([0 1],1,12);
col3=floor((12)*rand+1);
for k=1:1:12
if M_Padres(col3,k)==Comparacion(1,k)
Nuevos_Hijos(i,k)=1;
else
Nuevos_Hijos(i,k)=0;
end
end
for s=1:1:20
if Nuevos_Hijos(i,:)== M_Benef_Ordenada_Binario(s,:)
stop1=stop1+1;

end
end
end
end % Fin Recombinacion

if i==8 % Inicio Permutacion


col4=floor((12)*rand+1);
fil2=floor((12)*rand+1);
for m=1:1:12
if m==fil2
if M_Padres(col3,m)==1
Nuevos_Hijos(i,m)=0;
else
Nuevos_Hijos(i,m)=1;
end
else
Nuevos_Hijos(i,m)=M_Padres(col3,m);
end
end
end % Fin Permutacion
end
% Validaion de no tener ceros
indice=1;
aviso=0;
for i=1:1:8
for j=1:1:4
aviso=sum(Nuevos_Hijos(i,indice)+
Nuevos_Hijos(i,indice+1)+Nuevos_Hijos(i,indice+2));
if aviso == 0
Nuevos_Hijos(i,indice)=1;
end
indice=indice+3;
end
indice=1;
end

%
M_Final_Binaria = [M_Benef_Ordenada_Binario; Nuevos_Hijos];
Nuevos_Hijos;

% Conversion de Matriz Binaria a Entera


aux5=1;
for i=1:1:28
for j=1:1:4
p= [M_Final_Binaria(i,aux5) M_Final_Binaria(i,aux5+1)
M_Final_Binaria(i,aux5+2)]; % Concatenacion
M_Entera_Nueva(i,j)=bi2de(p);
aux5=aux5+3;
% Aumenta la posicion de en multiplos de tres
end
aux5=1;
end
%extra=aux6;
% EVALUACION DE LAFUNCI�N OBJETIVO
% Restricci�n suma
aux6=1;
for i=1:1:28
if sum(M_Entera_Nueva(i,:))==10
M_Suma_Evaluada(aux6,:)=M_Entera_Nueva(i,:);
aux6=aux6+1;
%disp(aux6);
end
end
% Segunada Evaluacion
for i=1:1:aux6-1
for j=1:1:4
Valor=find(Matriz_Beneficios(:,1)==M_Suma_Evaluada(i,j));
M_N_Beneficios(i,j)=Matriz_Beneficios(Valor,j+1);
end
SumaTotal(i,:)=sum(M_N_Beneficios(i,:)); % Suma de las filas de
los beneficios evaluados
end
M_Beneficios_Concatenada=[M_Suma_Evaluada SumaTotal]; % Matriz
Concateada para ordenarla
[~, s] = sort(M_Beneficios_Concatenada(:, 5),'descend'); % Ordenar la matriz
de las posibles soluciones
M_Be_N_Ordenada=M_Beneficios_Concatenada(s, :) % Matriz Ordenada 5
columnas
M_Be_N_Ordenada(:,5) = []; % Matriz de beneficios
ordenada
% Nueva matriz de 20
for i=1:1:20
M_Be_N_Enteros1(i,:)=M_Be_N_Ordenada(i,:);
end
disp(aux6);
M_Benef_Ordenada=M_Be_N_Enteros1;
end

Вам также может понравиться