-
Notifications
You must be signed in to change notification settings - Fork 0
/
CruzayMutacion2.m
39 lines (39 loc) · 1.32 KB
/
CruzayMutacion2.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function offspring=CruzayMutacion2(p,m,M,N)
%CR=0.1;
%En la cruza se elige la informacin en comn
%entre ambos padres, se elige con proabilidad CR
%a uno de los padres como "plantilla", y se permutan
%las entradas distintas entre los padres.
%se elige a uno de los padres como plantilla, pues
%cada padre representa un schedule, y elegir "mezclar"
%las entradas distintas podra generar offsprings invlidos.
p=reshape(p,M,N);
m=reshape(m,M,N);
offspring=p;
v=prod(double(p~=m));%1-prod(double(p==m),1);% 1 en los trabajos distintintamente ubicados
%u=rand;
%if u<CR
%if u<CR
% p=rand(1,N)<CR;
% v=abs(p-v);
% v=~v;
%end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Esta parte permuta aleatoriamente los trabajos (columnas de la matriz)
%%que no coinciden entre los padres del individuo actual
indx=1:N; %
c=indx.*v; %
%d=indx.*(~v);
%d(d==0)=[];
c(c==0)=[];%Eliminar los ceros
%if u<CR
offspring(:,c)=offspring(:,c(randperm(length(c))));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%else
% offspring(:,d)=offspring(:,d(randperm(length(d))));
%end
%if u<CR
% offspring=circshift(offspring,[0 randi(N,1)]);
%end
offspring=offspring(:);
end