Área de la Energía, las Industrias y los Recursos Naturales no Renovables                     CARRERA DE INGENIERÍA EN SIS...
INTRODUCCIÓNJGAP es un framework libre basado en la tecnología JAVA. El mismo provee mecanismos paraaplicar principios evo...
INSTALACIÓN Y CONFIGURACIÓN DEL ENTORNOEn primer lugar debe disponerse de una herramienta de desarrollo de aplicaciones ja...
Aplicar los cambios respectivos de instalación del JDK:                                                          4
Descarga e instalación de NetBeans para desarrollo en javaJunto con este manual se adjunta la última versión de NetBeans p...
2. Seleccionar el sistema operativo, donde se lo va a instalar.                                                           ...
3. Procedemos a descargar:                             7
Dirigirse a la carpeta donde se guardó la descarga, y seleccionar “propiedades” para poderejecutar:Seleccionar: “es ejecut...
A continuación, se muestra la forma de instalar NetBeans, para ello hacemos clic en “Next”, entodas las ventanas subsiguie...
Agregar la librería JGAP a la aplicación      Creamos un proyecto en NetBeans para utilizar el framework:      Elegimos qu...
Escribimos el nombre del proyecto:A continuación, cargamos la librería, para ello hacemos clic derecho en Librerías y clic...
Buscamos la librería y la seleccionamos:Finalmente observaremos que se ha cargador correctamente:                         ...
INTRODUCCIÓN A LOS ALGORITMOS GENÉTICOSLos algoritmos genéticos buscan imitar los procesos evolutivos de la naturaleza par...
Rueda de ruletaEste método consiste en construir una ruleta particionada en ranuras de igual tamaño, lascuales se numeran....
MÉTODOS DE REPRODUCCIÓNA continuación se muestran algunas técnicas para reproducir individuos (o cromosomas).Cruza SimpleL...
Cruza binomialPara generar un cromosoma hijo por cruza binomial, se define la probabilidad P0 como laprobabilidad de que e...
EJEMPLO DE APLICACIÓN:Para poder entender cómo funciona el framework y poder manejarlo, un ejemplo deaplicación simple es ...
IMPLEMENTACIÓN DE EJEMPLOPara poder implementar una solución a este problema utilizando JGAP es necesario indicarleal fram...
// Se Crea la funcion de aptitud y se setea en la configuracion// --------------------------------------------------------...
El método guardar población creado para este manual guarda todos los datos de la poblaciónen un xml llamado PoblacionCamin...
ANEXO I: CÓDIGO FUENTE CAMBIO MÍNIMO                                       21
22
23
24
25
26
27
28
NEXO II: EJEMPLO DE EJECUCIONES Y RESULTADOSPara 90 centavosTiempo total de evolución: 18375 msEl cromosoma más apto encon...
ANEXO III: LICENCIAEste fragmento esta publicado en la página principal de JGAP donde explica que es unsoftware libre. Per...
Próxima SlideShare
Cargando en…5
×

Tarea

713 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
713
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
45
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Tarea

  1. 1. Área de la Energía, las Industrias y los Recursos Naturales no Renovables CARRERA DE INGENIERÍA EN SISTEMASTEMA: Aplicaciones Informáticas Algoritmos Genéticos JGAP Autor: Iliana Vargas Aguilar LOJA – ECUADOR 2011 1
  2. 2. INTRODUCCIÓNJGAP es un framework libre basado en la tecnología JAVA. El mismo provee mecanismos paraaplicar principios evolutivos en la resolución de problemas. Al momento de escribir estedocumento la última versión estable de este framework es la 3.4.3El trabajo se focaliza en probar este framework y realizar un manual detallado con ejemplosdidácticos que permitan aprender a utilizarlo haciendo más leve su aprendizaje. Incluimos “srceenshots” para hacer esta tarea más simple. 2
  3. 3. INSTALACIÓN Y CONFIGURACIÓN DEL ENTORNOEn primer lugar debe disponerse de una herramienta de desarrollo de aplicaciones java. Luegoes necesario descargar las librerías JGAP y agregarlas a una aplicación.Descarga e instalación de la máquina virtual de javaAntes de descargar NetBeans para Linux es necesario disponer de la máquina virtual de javapara poder compilar las aplicaciones. Esto lo hace automáticamente Netbeans pero debetenerse instalada previamente.Se lo puede realizar instalándolo desde el Gestor de Paquetes Synaptic, como se indica acontinuación:E instalar el JDK, como se indica en la siguiente imagen: 3
  4. 4. Aplicar los cambios respectivos de instalación del JDK: 4
  5. 5. Descarga e instalación de NetBeans para desarrollo en javaJunto con este manual se adjunta la última versión de NetBeans para poder utilizar elframework. De todas formas se puede bajar de Internet del sitiohttp://netbeans.org/downloads/Como se indica en las siguientes imágenes: 1. Seleccionar el idioma deseado 5
  6. 6. 2. Seleccionar el sistema operativo, donde se lo va a instalar. 6
  7. 7. 3. Procedemos a descargar: 7
  8. 8. Dirigirse a la carpeta donde se guardó la descarga, y seleccionar “propiedades” para poderejecutar:Seleccionar: “es ejecutable” para proceder a instalar: 8
  9. 9. A continuación, se muestra la forma de instalar NetBeans, para ello hacemos clic en “Next”, entodas las ventanas subsiguientes. 9
  10. 10. Agregar la librería JGAP a la aplicación Creamos un proyecto en NetBeans para utilizar el framework: Elegimos que el proyecto será de tipo Java: 10
  11. 11. Escribimos el nombre del proyecto:A continuación, cargamos la librería, para ello hacemos clic derecho en Librerías y clic en AddJAR/Folder. 11
  12. 12. Buscamos la librería y la seleccionamos:Finalmente observaremos que se ha cargador correctamente: 12
  13. 13. INTRODUCCIÓN A LOS ALGORITMOS GENÉTICOSLos algoritmos genéticos buscan imitar los procesos evolutivos de la naturaleza para resolverproblemas. En la naturaleza los individuos de una población se reproducen entre si y de estaforma nacen nuevos individuos. Todos se someten a una selección natural durante sus vidasen la que los más aptos tienen más probabilidades de sobrevivir, de esta forma laspoblaciones evolucionan, mejoran constantemente y se adaptan a los nuevos medios.Para los algoritmos genéticos los individuos se denominan cromosomas. Cada cromosoma esuna solución a un problema específico. Las características de un cromosoma se denominangenes. También existe una función de aptitud, la cual aplicada a cada cromosoma devuelve unvalor que indica cuan apto es y permite compararlos entre ellos.Antes de comenzar, es necesario tener una población inicial. Lo que suele hacerse es crearuna población de cromosomas al azar.Una vez que se tiene una población se reproducen los individuos para obtener mayorvariedad, tal como en la naturaleza. Luego, es necesario seleccionar los mejores, para irevolucionando. Hay varios métodos de selección pero en general lo que se busca es que losmejores pasen a la próxima generación y algunos no tan aptos también, ya que la variedadayuda a que en la reproducción se generen cromosomas más aptos aun que sus padres. Puedeque de la cruza de un cromosoma muy apto y otro no tanto resulte uno mucho mejor a suspadres.En la naturaleza algunas veces sucede un fenómeno llamado mutación. Este es un pequeñocambio en la información genética producido esporádicamente, que provoca un cambio en unindividuo. Este cambio asegura más variedad y provoca cambios positivos o negativos. Loscambios negativos deberían quedar en el olvido gracias a la selección natural y los positivosperdurar haciendo evolucionar a la población. Para los algoritmos también se puede utilizarmutación para agregar variedad y obtener mejores soluciones.Para llegar a buenos resultados es necesario recorrer varias generaciones. Es decir, reproducirvarias veces los individuos y hacer varias selecciones y algunas pocas mutaciones. También esnecesario determinar cuándo una solución es suficientemente apta como para aceptarla. Paraesto puede medirse cuanto aumenta la aptitud del mejor cromosoma y si después de variasgeneraciones no mejora aun introduciendo mutaciones o aumentando el número decromosomas podemos decidir dejar de evolucionar y utilizar esa solución. Otra técnicaconsiste establecer de ante mano cuantas generaciones se van a considerar.MÉTODOS DE SELECCIÓNA continuación se muestran algunas de las técnicas de selección más conocidas 13
  14. 14. Rueda de ruletaEste método consiste en construir una ruleta particionada en ranuras de igual tamaño, lascuales se numeran. A cada individuo de la población se le asigna una cantidad de ranurasproporcional a su aptitud.El proceso se repite hasta completar la cantidad de individuos deseados. Este método deselección otorga mayor probabilidad de contribuir a la siguiente generación a los individuoscon mayor aptitud.Hay algunas otras variantes como por ejemplo, incluir en la nueva generación el mejorrepresentante de la generación actual. En este caso, se denomina método elitista.Selección por torneoEn este caso dos individuos son elegidos al azar de la población actual y el mejor o más aptode los dos se coloca en la generación siguiente. Esto continúa hasta que se complete la nuevapoblación.Basado en el rangoEn este esquema se mantiene un porcentaje de la población, generalmente la mayoría, para lasiguiente generación. Se coloca toda la población por orden de aptitud, y los M menos dignosson eliminados y sustituidos por la descendencia de alguno de los M mejores con algún otroindividuo de la población.Método EstocásticoPor cada individuo se calcula la aptitud relativa al promedio de aptitudes de la población, y enfunción de esto se asignan las copias. Por ejemplo, si la aptitud promedio de la población es15 y la aptitud del individuo es 10; entonces su aptitud relativa es 1.5. Esto significa que secolocará una copia en la próxima generación y que se tiene el 0.5 (50 %) de chance de colocaruna segunda copia. 14
  15. 15. MÉTODOS DE REPRODUCCIÓNA continuación se muestran algunas técnicas para reproducir individuos (o cromosomas).Cruza SimpleLos dos cromosomas padres se cortan por un punto, y el material genético situado entre ellosse intercambia.Dada las siguientes estructuras de longitud 1 = 8, y eligiendo 3 como el punto de cruza seintercambian los segmentos de cromosoma separados por este punto.Cruza de dos puntosEn este método de cruza de dos puntos, se seleccionan dos puntos aleatoriamente a lo largode la longitud de los cromosomas y los dos padres intercambian los segmentos entre estospuntos.Cruza MultipuntoEl cromosoma es considerado un anillo, y se eligen n puntos de cruza en forma aleatoria. Si lacantidad de puntos de cruza es par, se intercambian las porciones de cromosomas definidasentre cada par de puntos consecutivos, si es impar se asume un punto de cruza adicional en laposición cero y se procede de igual modo.Dadas dos estructuras de longitud 1 = 8, con n = 4 puntos de cruza. Intercambiando lossegmentos de la posición 2 a 4 y 6 a 7, se tiene: 15
  16. 16. Cruza binomialPara generar un cromosoma hijo por cruza binomial, se define la probabilidad P0 como laprobabilidad de que el Alelo de cualquier posición del descendiente se herede del padre, y 1 –P0 como la probabilidad de que lo herede de la madre.En este caso se puede construir un único hijo por cada aplicación del operador, o bien generarun segundo hijo como complemento del primero.Cuando existe igual probabilidad de heredar del padre como de la madre, P0 = 0,5 la cruza sedenomina uniforme. Para estructuras de longitud l la cruza uniforme implica un promedio del/2 puntos de cruza.MutaciónEn la Evolución, una mutación es un suceso bastante poco común (sucede aproximadamenteuna de cada mil replicaciones), en la mayoría de los casos las mutaciones son letales, pero enpromedio, contribuyen a la diversidad genética de la especie. En un algoritmo genéticotendrán el mismo papel, y la misma frecuencia (es decir, muy baja).Una vez establecida la frecuencia de mutación, por ejemplo, uno por mil, se examina cada bitde cada cadena. Si un número generado aleatoriamente está por debajo de esa probabilidad,se cambiará el bit (es decir, de 0 a 1 o de 1 a 0). Si no, se dejará como está. Dependiendo delnúmero de individuos que haya y del número de bits por individuo, puede resultar que lasmutaciones sean extremadamente raras en una sola generación.No hace falta decir que no conviene abusar de la mutación. Es cierto que es un mecanismogenerador de diversidad, y, por tanto, la solución cuando un algoritmo genético estáestancado, pero también es cierto que reduce el algoritmo genético a una búsqueda aleatoria.Siempre es más conveniente usar otros mecanismos de generación de diversidad, comoaumentar el tamaño de la población, o garantizar la aleatoriedad de la población inicial. 16
  17. 17. EJEMPLO DE APLICACIÓN:Para poder entender cómo funciona el framework y poder manejarlo, un ejemplo deaplicación simple es lo indicado.Supongamos que es necesario descomponer un cierto monto de dinero en la menor cantidadposible de monedas. Por ejemplo si se tienen 1,35 pesos (135 centavos) puededescomponerse de la siguiente forma: 1 Moneda de un dólar 1 Moneda de 25 centavos 1 Moneda de 10 centavos 3 monedas en totalPero también puede descomponerse de la siguiente forma: 27 Monedas de 5 centavos. 27 monedas en total.Hay muchas formas de descomponer este monto en monedas cada una de ellas es unasolución posible al problema (cromosoma) y tiene un valor de aptitud asociado, que deberádepender de la cantidad de monedas totales de ese cromosoma. Cuantas menos monedas senecesiten más apta será la solución ya que lo que se busca es lograr la menor cantidad demonedas posibles.Cada cromosoma tendrá 6 genes. Los genes en este problema son números enteros querepresentan la cantidad de monedas de cada tipo. Moneda de un dólar (100 centavos) Moneda de 50 centavos Moneda de 25 centavos Moneda de 10 centavos Moneda de 5 centavos Moneda de 1 centavo 17
  18. 18. IMPLEMENTACIÓN DE EJEMPLOPara poder implementar una solución a este problema utilizando JGAP es necesario indicarleal framework una serie de parámetros y codificar la función de aptitud.Para este caso la clase principal se llamará CambioMinimo y la función aptitud se codificará enla clase CambioMinimoFuncionAptitudEn primer lugar se debe modelar el problema, es decir definir como se compone cada gen delos cromosomas (soluciones posibles). Para este problema puntual cada gen será un númeroentero y representará la cantidad de un tipo de moneda de ese cromosoma. Por lo tanto cadacromosoma tendrá 6 genes.Ejemplo:Este cromosoma sumaría 275 centavos en 4 monedas.Una vez definido el modelo se puede comenzar a codificar la solución.A continuación se explica a grandes rasgos como se implementó el ejemplo de aplicación yque clases y funciones principales se utilizaron. Pero para más detalle se encuentra el anexocon el código fuete explicado instrucción por instrucción.Primero se debe crear una configuración con valores predeterminados que luego se iránmodificando:// Se crea una configuracion con valores predeterminados.// -------------------------------------------------------------Configuration conf = new DefaultConfiguration();Luego se le indica que el mejor elemento siempre pase a la próxima generación// Se indica en la configuracion que el elemento más apto siempre pase //a// la proxima generacion// -------------------------------------------------------------conf.setPreservFittestIndividual(true);Se crea la función de aptitud que más adelante se explicará y se setea en la configuración 18
  19. 19. // Se Crea la funcion de aptitud y se setea en la configuracion// ---------------------------------------------------------FitnessFunction myFunc = new CambioMinimoFuncionAptitud(Monto);conf.setFitnessFunction(myFunc);También se debe crear un cromosoma de ejemplo para que el framework conozca suestructura:// Ahora se debe indicar a la configuracion como seran los cromosoma: //en// este caso tendran 5 genes (uno para cada tipo de moneda) con un// valor// entero (candiad de monedas de ese tipo).// Se debe crear un cromosoma de ejemplo y cargarlo en la// configuracion// Cada gen tendra un valor maximo y minimo que debe setearse.// --------------------------------------------------------------Gene[] sampleGenes = new Gene[6];sampleGenes[0] = new IntegerGene(conf, 0,Math.round(CambioMinimoFuncionAptitud.MAX_MONTO / 100)); // Moneda 1DolarsampleGenes[1] = new IntegerGene(conf, 0, 10); // Moneda 50 centavossampleGenes[2] = new IntegerGene(conf, 0, 10); // Moneda 20 centavossampleGenes[3] = new IntegerGene(conf, 0, 10); // Moneda 10 centavossampleGenes[4] = new IntegerGene(conf, 0, 10); // Moneda 5 centavossampleGenes[5] = new IntegerGene(conf, 0, 10); // Moneda 1 centavoIChromosome sampleChromosome = new Chromosome(conf, sampleGenes);conf.setSampleChromosome(sampleChromosome);Es importante tener en cuenta los valores máximos y mínimos ya que si se cargan mal, podríaeliminar muchas soluciones que talvez sean las mejores o si son muy amplios costara mastiempo de procesamiento llegar a soluciones optimasSe puede configurar el tamaño que tendrá la población (Cantidad de cromosomas de unageneración)conf.setPopulationSize(200);Para poder evolucionar se necesita una población inicial. El framework permite cargarla de unxml pero lo mejor en este caso es indicarle que genere una población inicial aleatoria.Poblacion = Genotype.randomInitialGenotype(conf);El método envolve evoluciona una generación. Se lo llama una cierta cantidad de veces con unloop para que realice cierta cantidad de evoluciones.Poblacion.evolve(); 19
  20. 20. El método guardar población creado para este manual guarda todos los datos de la poblaciónen un xml llamado PoblacionCaminoMinimo.xml para demostrar cómo trabaja elFramework con las poblaciones y los xml. Para más detalle ver el código fuente del anexo.guardarPoblacion(Poblacion);De esta forma se obtiene el cromosoma más apto de la poblaciónIChromosome cromosomaMasApto = Poblacion.getFittestChromosome();Función AptitudLa clase que implementará la función aptitud debe heredar de FitnessFunction y redefinir elmétodopublic double evaluate(IChromosome cromosoma)Este método le permite al framework determinar que cromosoma es más apto que otro. Elvalor devuelto debe ser un double positivo.Por defecto, se entiende que un valor más alto devuelto corresponde a un cromosoma másapto pero esto puede no ser así, depende del evaluador que se haya utilizado. En el ejemplose tiene en cuenta esto antes de devolver el valor de aptitud. 20
  21. 21. ANEXO I: CÓDIGO FUENTE CAMBIO MÍNIMO 21
  22. 22. 22
  23. 23. 23
  24. 24. 24
  25. 25. 25
  26. 26. 26
  27. 27. 27
  28. 28. 28
  29. 29. NEXO II: EJEMPLO DE EJECUCIONES Y RESULTADOSPara 90 centavosTiempo total de evolución: 18375 msEl cromosoma más apto encontrado tiene un valor de aptitud de:996.0Y está formado por la siguiente distribución de monedas:0 Moneda 1 dólar1 Moneda 50 centavos1 Moneda 25 centavos1 Moneda 10 centavos1 Moneda 5 centavos0 Moneda 1 centavoPara un total de 90 centavos en 4 monedas.Para 125 CentavosTiempo total de evolución: 15735 msEl cromosoma más apto encontrado tiene un valor de aptitud de:998.0Y está formado por la siguiente distribución de monedas:1 Moneda 1 dólar0 Moneda 50 centavos1 Moneda 25 centavos0 Moneda 10 centavos0 Moneda 5 centavos0 Moneda 1 centavoPara un total de 125 centavos en 2 monedas.Para 87 CentavosY está formado por la siguiente distribución de monedas:0 Moneda 1 dólar1 Moneda 50 centavos1 Moneda 25 centavos1 Moneda 10 centavos0 Moneda 5 centavos2 Moneda 1 centavoPara un total de 87 centavos en 5 monedas. 29
  30. 30. ANEXO III: LICENCIAEste fragmento esta publicado en la página principal de JGAP donde explica que es unsoftware libre. Pero si se quiere utilizar de forma comercial es necesario donar al menos 20euros a JGAP.JGAP is free software; you can redistribute it and/or modify it under the terms of the GNULesser Public License as published by the Free Software Foundation; either version 2.1 of theLicense, or (at your option) any later version. Instead, you could choose to use the MozillaPublic License to use JGAP in commercial applications without the need of publishing yoursource code or make it reverse engineerable (as is required with the GNU License). For usingthe MPL you have to donate at least 20 Euros to JGAP. Maybe you would like to browserfurther information about using JGAP commercially.JGAP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; withouteven the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Seethe above mentioned GNU Lesser Public License and the Mozilla Public License for moredetails. But we offer really a lot of unit tests which help assure a very high probability for acorrect piece of software! 30

×