Código del algoritmo genético
Condiciones particulares del problema
f[x_]:=x-IntegerPart[x];
funcion[x_]:=Sin[6*f[Cos[2*x]]]*Cos[f[x]+2]; (*Funcion a minimizar*)
intervalo={0,4}; (*Intervalo de definicion de la funcion*)
individuos=10; (*Numero inicial de individuos*)
poblacion=2*individuos+2; (* Numero de individuos que puede haber como maximo *)
iter=10; (* Numero de iteraciones *)
nuitermuta=4; (* cada cuantas iteraciones se producen mutaciones *)
numuta=10; (* numero maximo de mutaciones que se producen cada vez *)
Inicio del algoritmo
A=Plot[funcion[x],{x,intervalo[[1]],intervalo[[2]]}];
longint=intervalo[[2]]-intervalo[[1]];
propo=longint/(individuos+1);
lista={intervalo[[1]],intervalo[[2]]};
For[i=1,i<=individuos,i++,
lista=Append[lista,N[intervalo[[1]]+i*propo]]
];
Print[«inicio: «,Sort[lista]];
(*Iteraciones*)
For[kk=1,kk<=iter,kk++,
{
Print[«*******
Iteracion: «, kk];
funlis=N[funcion[lista]];
(*Reproduccion*)
While[Length[lista]<=poblacion,
{
alfa=Random[Real,{Min[funlis], Max[funlis]}];
Print[«Se
reproducen los menores de: «,alfa];
longlist=Length[lista];
For[i=1,i<=longlist,i++,
{
If[funlis[[i]]<=alfa,
{
beta=Random[Integer,{1,longlist}];
gama=Random[Real,{0,1}];
res=N[gama*lista[[i]]+(1-gama)*lista[[beta]]];(*nuevo
individuo*)
lista=Append[lista,res];
funlis=Append[funlis,funcion[res]]
}
]
}
]
}
];
Print[«Hijos: «,Sort[lista]];
(*
Mutaciones *)
If[Mod[kk,nuitermuta]==0,
{
alfa=Random[Integer,{1,numuta+1}];
For[s=1, s<=alfa, s++,
{
beta=Random[Real,{intervalo[[1]],intervalo[[2]]}];
Print[«Nueva Mutacion: «,beta, » con valor: «,funcion[beta]];
lista=Append[lista,beta];
funlis=Append[funlis,funcion[beta]]
}
]
}
];
(*Muertes*)
qui=Length[lista]-poblacion-1;
Print[«Quitar
«,qui,» individuos.»];
salto=0;
While[qui>=0,
{
If[salto==0, alfa=Random[Real, {Min[funlis], Max[funlis]}]]
Print[«Se mueren el
inmediatamente mayores de: «,alfa];
mi=10^100; (* Un numero
muy grande *)
funlis=N[funcion[lista]];
For[j=1,j<=Length[lista],j++,
{
If[funlis[[j]]>alfa
&& funlis[[j]]<=mi,
{
mi=funlis[[j]];
jj=j
}
]
}
];
If[mi<10^100, (* el
numero muy grande de arriba *)
{
qui–;
lista=Delete[lista,jj];
funlis=Delete[funlis,jj];
salto=0
},
{
alfatem=alfa;
alfa=alfatem/2;
salto=1
}
]
}
];
Print[«Supervivientes:
«,Sort[lista]];
B=ListPlot[Table[{lista[[i]], funlis[[i]]}, {i,
Length[lista]}],
PlotStyle->{PointSize[0.03],RGBColor[1, 0,
0]}];
Show[A,B];
}
];
(*Solucion*)
res=funcion[lista];
Print[«Resultado: minimo:»,Min[res],» en el punto:
«,lista[[Position[res,Min[res]][[1]][[1]]]]]
Más artículos relacionados con este tema:
- Algoritmo genético
- Código del algoritmo genético
- Ejemplo del algoritmo genético
- Algoritmo genético mejorado
- Código del algoritmo genético mejorado
- Ejemplo del algoritmo genético mejorado