ejemplos JGAP

download ejemplos JGAP

If you can't read please download the document

Transcript of ejemplos JGAP

Prctica de Algoritmos Genticos

ndice de contenidoInformacin previa:...................................................................................................................................1 Problema volumen.....................................................................................................................................2 Problema Sphere........................................................................................................................................3 Problema: Funcion (X > 0) OR (X == -8) OR (X == - 5)......................................................................15 Problema: aprender Hello word...........................................................................................................18

Informacin previa:LOS ALGORITMOS GENETICOS. Los algoritmos genticos se basan en la teora de la evolucin de Charles Darwin. Se tiene una poblacin, donde cada individuo posee diferentes caractersticas. Esas caractersticas se muestran favorables o no frente a un mtodo de seleccin al que se enfrentan todos los individuos. As se van identificando los que poseen las mejores caractersticas. Las caractersticas de los individuos estn dadas por sus cromosomas. Un cromosoma es un conjunto de genes. Cada gen es responsable de indicar el tipo de una sola caracterstica del individuo. El valor que toma el gen se llama alelo.

En la biologa, los individuos mejor adaptados al medio donde se encuentran son los que sobreviven. De esa forma se reproducen, dando lugar a una descendencia que hereda sus caractersticas ventajosas. Tambin se dan variaciones en los genes por medio de la combinacin (reproduccin sexual) o por cambios aleatorios(mutaciones). As surgen de forma natural ms caractersticas que a su vez son puestas a prueba y permiten a sus portadores sobrevivir y reproducirse si son las ms adecuadas para el ambiente que les rodea. Los algoritmos genticos son una analoga de lo que ocurre biolgicamente, pero aplicada a encontrar la mejor solucin a un problema. Cada solucin es un individuo. El mtodo de seleccin se llama funcin de ajuste, e indica la aptitud de cada individuo para resolver el problema. Tambin existen cromosomas con genes y sus respectivos alelos. A los cromosomas se les aplican operadores genticos, equivalentes a la mutacin y la reproduccin sexual,de forma que se generan y ponen a prueba nuevas soluciones. De ese modo, los algoritmos genticos son un mtodo para probar mltiples soluciones autogeneradas a un problema. JGAP- Framework para algoritmos genticos. JGAP son las siglas de Java Genetic Algorithms Package (paquete de algoritmos genticos para Java). Es un componente de programacin de algoritmos genticos que se utiliza como un framework. JGAP es software libre y se puede distribuir bajo la GNU Lesser Public License 2.1 o posterior. Las aplicaciones comerciales que no publiquen su cdigo fuente deben distribuirse bajo la Mozilla Public License. En ese caso deben donarse 50 Euros al proyecto. JGAP tiene clases e interfaces para representar: Genes (Gene), cromosomas (Chromosome), individuos(IChromosome), la poblacin (Genotype), la funcin de ajuste (FitnessFunction) y operadores genticos. Se trata de una solucin genrica, sin relacin alguna con un problema particula.. Por esa razn se deben crear nuevas

clases que heredan o implementan las clases e interfaces mencionadas. As se adapta JGAP al problema especfico que se quiere solucionar. JGAP tambin se encarga de la simulacin de un ambiente para que se desarrolle y sobreviva la mejor solucin. El motor gentico crea varias soluciones (individuos) aleatoriamente con el mtodo randomInitialGenotype(). Aplica operadores genticos (mutacin y combinacin) para que surjan nuevas soluciones con el mtodo evolve(). Pone a prueba cada solucin con la funcin de ajuste evaluate(). Y por ltimo retorna el cromosoma del individuo mejor adaptado con getFittestChromosome(). Para instalar JGAPE, el primer paso es descargar la ltima versin. Se puede encontrar en la siguiente direccin: http://sourceforge.net/projects/jgap/files/.El archivo se llama jgap_x.x.x_full.zip (x.x.x corresponde al nmero de versin). Se recomienda descargar el de instalacin completa si no se desea compilar el cdigo. Luego de descargar el archivo se extrae su contenido. Esto puede hacerse en cualquier directorio. Por ltimo slo es necesario incluir el archivo jgap.jar como una biblioteca para poder usar las clases de JGAP.

Problema volumen.Enunciado: Escribir un programa para maximizar el volumen de un cilindro en el que la suma de su radio (r) y su altura (h) debe ser de 30cm. El volumen de un cilindro se expresa con la funcin: V(r, h) = 2 r2 h La restriccin del problema es: r + h = 30 Expresando h en funcin de r h(r) = 30 r Reemplazando en la funcin del volumen en contramos la funcin de ajuste: V(r, h) = 2 r2 (30 - r) Planteando la solucin: La funcin de ajuste de JGAP se implementa sobrecargando el mtodo evaluate() en una subclase de FitnessFunction (se debe extender). Esta funcin se debe especificar de modo que un resultado mayor indique que el individuo evaluado es ms apto. Como el mejor resultado lo dar el mayor volumen. public double evaluate(IChromosome sujeto) { double radio = (Double)sujeto.getGene(0).getAllele(); return 2 * Math.PI * Math.pow(radio, 2) * (30 radio); } Se debe configurar el entorno que el motor gentico de JGAP va a simular. Para ello se usa una instancia de la claseConfiguration. Configuration configuracion = new DefaultConfiguration(); Luego se indica la funcin de ajuste que se va a usar con una instancia de la subclase de FitnessFunction

FitnessFunction maximizarV olumen = new FuncionAjusteMaximizarV olumen(); configuracion.setFitnessFunction(maximizarV olumen); Despus se debe crear un cromosoma de muestra. Se usa para indicar la cantidad de genes que lo componen, as como su tipo de dato y de preferencia un rango de valores para los alelos. Especificar un rango es importante porque reduce la cantidad de posibilidades que se pueden generar, mejorando el tiempo de ejecucin. Gene[] genes = { new DoubleGene(configuracion, 0. 0, 30. 0) }; Chromosome cromosoma = new Chromosome(configuracion, genes); configuracion.setSampleChromosome(cromosoma); El siguiente paso es definir el tamao de la poblacin. Una vez hecho, se pueden crear los individuos de la primera generacin de forma automtica y aleatoria. configuracion.setPopulationSize(TAMANIO_POBLACION); Genotype poblacion = Genotype.randomInitialGenotype(configuracion); Se contina con la evolucin de las diferentes generaciones. Puede ir dentro de un ciclo para hacerlo varias veces. En cada generacin se seleccionan los mejores individuos por medio de la funcin de ajuste. A partir de ellos se crea la siguiente generacin, mejor adaptada para resolver el problema. for (int i = 0; i < CANTIDAD_GENERACIONES; i++) { poblacion.evolve(); } Para terminar se obtiene el cromosoma del individuo mejor adaptado de la ltima generacin. IChromosome mejorSolucion = poblacion.getFittestChromosome(); A partir de ese cromosoma se puede obtener su valor con el mtodo getAllele() y su resultado en la funcin deajuste con getFitnessValue() (que en este ejemplo es el volumen). Una salida obtenida fue la siguiente: El mayor volumen es para un radio de 19.98009774232426 cm y una altura de 10.019902257675739 cm. El volumen resultante es de 25132.666615185735 cm cbicos. Algo interesante de los algoritmos genticos es que no son determinsticos. Los resultados de distintas ejecuciones tendrn pequeas diferencias. Eso se debe a la generacin aleatoria de los alelos para los genes. Es poco probable que en ejecuciones distintas se den de forma exacta los mismos valores hasta el ltimo decimal.

Problema Sphere.Enunciado: Escribe un programa en C para minimizar la funcin Sphere, definida como: N

f X= xi2i=0 donde X={x1, x2, ...xN} y x toma valores en el intervalo [-5.12, 5.12]. El valor de N ser 2, es decir, la funcin ser bidimensional. Para codificar cada variable xi usaremos 10 bits, por lo que solo podremos representar 1024 puntos. La siguiente tabla describe los posibles individuos o soluciones al problema:

genotipo 0000000000 0000000000 .................. 1111111111 1111111111

fenotipo punto (-5.12,-5.12) .................. punto (5.12,5.12)

Valor de f(x) o aptitud f(-5.12,-5.12)=52.4288 .................. f(5.12,5.12)=52.4288

En la grfica podemos ver la representacin invertida de la funcin Sphere

Para implementar el AG binario utilizar una seleccin por torneos de 2, cruce en un punto, mutacin en un punto. Parar el AG cuando f(x)