Anda di halaman 1dari 30

rea de la Energa, las Industrias y los Recursos Naturales no Renovables

CARRERA DE INGENIERA EN SISTEMAS

TEMA:

Aplicaciones Informticas Algoritmos Genticos JGAP

Autor:

Iliana Vargas Aguilar LOJA ECUADOR 2011


1

INTRODUCCIN
JGAP es un framework libre basado en la tecnologa JAVA. El mismo provee mecanismos para aplicar principios evolutivos en la resolucin de problemas. Al momento de escribir este documento la ltima versin estable de este framework es la 3.4.3 El trabajo se focaliza en probar este framework y realizar un manual detallado con ejemplos didcticos que permitan aprender a utilizarlo haciendo ms leve su aprendizaje. Incluimos srceen shots para hacer esta tarea ms simple.

INSTALACIN Y CONFIGURACIN DEL ENTORNO


En primer lugar debe disponerse de una herramienta de desarrollo de aplicaciones java. Luego es necesario descargar las libreras JGAP y agregarlas a una aplicacin.

Descarga e instalacin de la mquina virtual de java


Antes de descargar NetBeans para Linux es necesario disponer de la mquina virtual de java para poder compilar las aplicaciones. Esto lo hace automticamente Netbeans pero debe tenerse instalada previamente. Se lo puede realizar instalndolo desde el Gestor de Paquetes Synaptic, como se indica a continuacin:

E instalar el JDK, como se indica en la siguiente imagen:

Aplicar los cambios respectivos de instalacin del JDK:

Descarga e instalacin de NetBeans para desarrollo en java


Junto con este manual se adjunta la ltima versin de NetBeans para poder utilizar el framework. De todas formas se puede bajar de Internet del sitio http://netbeans.org/downloads/ Como se indica en las siguientes imgenes:

1. Seleccionar el idioma deseado

2. Seleccionar el sistema operativo, donde se lo va a instalar.

3. Procedemos a descargar:

Dirigirse a la carpeta donde se guard la descarga, y seleccionar propiedades para poder ejecutar:

Seleccionar: es ejecutable para proceder a instalar:

A continuacin, se muestra la forma de instalar NetBeans, para ello hacemos clic en Next, en todas las ventanas subsiguientes.

Agregar la librera JGAP a la aplicacin


Creamos un proyecto en NetBeans para utilizar el framework:

Elegimos que el proyecto ser de tipo Java:

10

Escribimos el nombre del proyecto:

A continuacin, cargamos la librera, para ello hacemos clic derecho en Libreras y clic en Add JAR/Folder.

11

Buscamos la librera y la seleccionamos:

Finalmente observaremos que se ha cargador correctamente:

12

INTRODUCCIN A LOS ALGORITMOS GENTICOS


Los algoritmos genticos buscan imitar los procesos evolutivos de la naturaleza para resolver problemas. En la naturaleza los individuos de una poblacin se reproducen entre si y de esta forma nacen nuevos individuos. Todos se someten a una seleccin natural durante sus vidas en la que los ms aptos tienen ms probabilidades de sobrevivir, de esta forma las poblaciones evolucionan, mejoran constantemente y se adaptan a los nuevos medios. Para los algoritmos genticos los individuos se denominan cromosomas. Cada cromosoma es una solucin a un problema especfico. Las caractersticas de un cromosoma se denominan genes. Tambin existe una funcin de aptitud, la cual aplicada a cada cromosoma devuelve un valor que indica cuan apto es y permite compararlos entre ellos. Antes de comenzar, es necesario tener una poblacin inicial. Lo que suele hacerse es crear una poblacin de cromosomas al azar. Una vez que se tiene una poblacin se reproducen los individuos para obtener mayor variedad, tal como en la naturaleza. Luego, es necesario seleccionar los mejores, para ir evolucionando. Hay varios mtodos de seleccin pero en general lo que se busca es que los mejores pasen a la prxima generacin y algunos no tan aptos tambin, ya que la variedad ayuda a que en la reproduccin se generen cromosomas ms aptos aun que sus padres. Puede que de la cruza de un cromosoma muy apto y otro no tanto resulte uno mucho mejor a sus padres. En la naturaleza algunas veces sucede un fenmeno llamado mutacin. Este es un pequeo cambio en la informacin gentica producido espordicamente, que provoca un cambio en un individuo. Este cambio asegura ms variedad y provoca cambios positivos o negativos. Los cambios negativos deberan quedar en el olvido gracias a la seleccin natural y los positivos perdurar haciendo evolucionar a la poblacin. Para los algoritmos tambin se puede utilizar mutacin para agregar variedad y obtener mejores soluciones. Para llegar a buenos resultados es necesario recorrer varias generaciones. Es decir, reproducir varias veces los individuos y hacer varias selecciones y algunas pocas mutaciones. Tambin es necesario determinar cundo una solucin es suficientemente apta como para aceptarla. Para esto puede medirse cuanto aumenta la aptitud del mejor cromosoma y si despus de varias generaciones no mejora aun introduciendo mutaciones o aumentando el nmero de cromosomas podemos decidir dejar de evolucionar y utilizar esa solucin. Otra tcnica consiste establecer de ante mano cuantas generaciones se van a considerar.

MTODOS DE SELECCIN
A continuacin se muestran algunas de las tcnicas de seleccin ms conocidas

13

Rueda de ruleta
Este mtodo consiste en construir una ruleta particionada en ranuras de igual tamao, las cuales se numeran. A cada individuo de la poblacin se le asigna una cantidad de ranuras proporcional a su aptitud. El proceso se repite hasta completar la cantidad de individuos deseados. Este mtodo de seleccin otorga mayor probabilidad de contribuir a la siguiente generacin a los individuos con mayor aptitud. Hay algunas otras variantes como por ejemplo, incluir en la nueva generacin el mejor representante de la generacin actual. En este caso, se denomina mtodo elitista.

Seleccin por torneo


En este caso dos individuos son elegidos al azar de la poblacin actual y el mejor o ms apto de los dos se coloca en la generacin siguiente. Esto contina hasta que se complete la nueva poblacin.

Basado en el rango
En este esquema se mantiene un porcentaje de la poblacin, generalmente la mayora, para la siguiente generacin. Se coloca toda la poblacin por orden de aptitud, y los M menos dignos son eliminados y sustituidos por la descendencia de alguno de los M mejores con algn otro individuo de la poblacin.

Mtodo Estocstico
Por cada individuo se calcula la aptitud relativa al promedio de aptitudes de la poblacin, y en funcin de esto se asignan las copias. Por ejemplo, si la aptitud promedio de la poblacin es 15 y la aptitud del individuo es 10; entonces su aptitud relativa es 1.5. Esto significa que se colocar una copia en la prxima generacin y que se tiene el 0.5 (50 %) de chance de colocar una segunda copia.

14

MTODOS DE REPRODUCCIN
A continuacin se muestran algunas tcnicas para reproducir individuos (o cromosomas).

Cruza Simple
Los dos cromosomas padres se cortan por un punto, y el material gentico situado entre ellos se intercambia. Dada las siguientes estructuras de longitud 1 = 8, y eligiendo 3 como el punto de cruza se intercambian los segmentos de cromosoma separados por este punto.

Cruza de dos puntos


En este mtodo de cruza de dos puntos, se seleccionan dos puntos aleatoriamente a lo largo de la longitud de los cromosomas y los dos padres intercambian los segmentos entre estos puntos.

Cruza Multipunto
El cromosoma es considerado un anillo, y se eligen n puntos de cruza en forma aleatoria. Si la cantidad de puntos de cruza es par, se intercambian las porciones de cromosomas definidas entre cada par de puntos consecutivos, si es impar se asume un punto de cruza adicional en la posicin cero y se procede de igual modo. Dadas dos estructuras de longitud 1 = 8, con n = 4 puntos de cruza. Intercambiando los segmentos de la posicin 2 a 4 y 6 a 7, se tiene:

15

Cruza binomial
Para generar un cromosoma hijo por cruza binomial, se define la probabilidad P0 como la probabilidad de que el Alelo de cualquier posicin 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 aplicacin del operador, o bien generar un segundo hijo como complemento del primero. Cuando existe igual probabilidad de heredar del padre como de la madre, P0 = 0,5 la cruza se denomina uniforme. Para estructuras de longitud l la cruza uniforme implica un promedio de l/2 puntos de cruza.

Mutacin
En la Evolucin, una mutacin es un suceso bastante poco comn (sucede aproximadamente una de cada mil replicaciones), en la mayora de los casos las mutaciones son letales, pero en promedio, contribuyen a la diversidad gentica de la especie. En un algoritmo gentico tendrn el mismo papel, y la misma frecuencia (es decir, muy baja). Una vez establecida la frecuencia de mutacin, por ejemplo, uno por mil, se examina cada bit de cada cadena. Si un nmero 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 del nmero de individuos que haya y del nmero de bits por individuo, puede resultar que las mutaciones sean extremadamente raras en una sola generacin. No hace falta decir que no conviene abusar de la mutacin. Es cierto que es un mecanismo generador de diversidad, y, por tanto, la solucin cuando un algoritmo gentico est estancado, pero tambin es cierto que reduce el algoritmo gentico a una bsqueda aleatoria. Siempre es ms conveniente usar otros mecanismos de generacin de diversidad, como aumentar el tamao de la poblacin, o garantizar la aleatoriedad de la poblacin inicial.

16

EJEMPLO DE APLICACIN:
Para poder entender cmo funciona el framework y poder manejarlo, un ejemplo de aplicacin simple es lo indicado. Supongamos que es necesario descomponer un cierto monto de dinero en la menor cantidad posible de monedas. Por ejemplo si se tienen 1,35 pesos (135 centavos) puede descomponerse de la siguiente forma: 1 Moneda de un dlar 1 Moneda de 25 centavos 1 Moneda de 10 centavos 3 monedas en total Pero tambin 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 una solucin 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 se necesiten ms apta ser la solucin ya que lo que se busca es lograr la menor cantidad de monedas posibles. Cada cromosoma tendr 6 genes. Los genes en este problema son nmeros enteros que representan la cantidad de monedas de cada tipo. Moneda de un dlar (100 centavos) Moneda de 50 centavos Moneda de 25 centavos Moneda de 10 centavos Moneda de 5 centavos Moneda de 1 centavo

17

IMPLEMENTACIN DE EJEMPLO
Para poder implementar una solucin a este problema utilizando JGAP es necesario indicarle al framework una serie de parmetros y codificar la funcin de aptitud. Para este caso la clase principal se llamar CambioMinimo y la funcin aptitud se codificar en la clase CambioMinimoFuncionAptitud En primer lugar se debe modelar el problema, es decir definir como se compone cada gen de los cromosomas (soluciones posibles). Para este problema puntual cada gen ser un nmero entero y representar la cantidad de un tipo de moneda de ese cromosoma. Por lo tanto cada cromosoma tendr 6 genes. Ejemplo:

Este cromosoma sumara 275 centavos en 4 monedas. Una vez definido el modelo se puede comenzar a codificar la solucin. A continuacin se explica a grandes rasgos como se implement el ejemplo de aplicacin y que clases y funciones principales se utilizaron. Pero para ms detalle se encuentra el anexo con el cdigo fuete explicado instruccin por instruccin. Primero se debe crear una configuracin con valores predeterminados que luego se irn modificando:
// Se crea una configuracion con valores predeterminados. // ------------------------------------------------------------Configuration conf = new DefaultConfiguration();

Luego se le indica que el mejor elemento siempre pase a la prxima generacin


// Se indica en la configuracion que el elemento ms apto siempre pase // a // la proxima generacion // ------------------------------------------------------------conf.setPreservFittestIndividual(true);

Se crea la funcin de aptitud que ms adelante se explicar y se setea en la configuracin


18

// Se Crea la funcion de aptitud y se setea en la configuracion // --------------------------------------------------------FitnessFunction myFunc = new CambioMinimoFuncionAptitud(Monto); conf.setFitnessFunction(myFunc);

Tambin se debe crear un cromosoma de ejemplo para que el framework conozca su estructura:
// en // // // // // // // Ahora se debe indicar a la configuracion como seran los cromosoma: // 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 1 Dolar sampleGenes[1] = new IntegerGene(conf, 0, 10); // Moneda 50 centavos sampleGenes[2] = new IntegerGene(conf, 0, 10); // Moneda 20 centavos sampleGenes[3] = new IntegerGene(conf, 0, 10); // Moneda 10 centavos sampleGenes[4] = new IntegerGene(conf, 0, 10); // Moneda 5 centavos sampleGenes[5] = new IntegerGene(conf, 0, 10); // Moneda 1 centavo IChromosome sampleChromosome = new Chromosome(conf, sampleGenes); conf.setSampleChromosome(sampleChromosome);

Es importante tener en cuenta los valores mximos y mnimos ya que si se cargan mal, podra eliminar muchas soluciones que talvez sean las mejores o si son muy amplios costara mas tiempo de procesamiento llegar a soluciones optimas Se puede configurar el tamao que tendr la poblacin (Cantidad de cromosomas de una generacin)
conf.setPopulationSize(200);

Para poder evolucionar se necesita una poblacin inicial. El framework permite cargarla de un xml pero lo mejor en este caso es indicarle que genere una poblacin inicial aleatoria.
Poblacion = Genotype.randomInitialGenotype(conf);

El mtodo envolve evoluciona una generacin. Se lo llama una cierta cantidad de veces con un loop para que realice cierta cantidad de evoluciones.
Poblacion.evolve();

19

El mtodo guardar poblacin creado para este manual guarda todos los datos de la poblacin en un xml llamado PoblacionCaminoMinimo.xml para demostrar cmo trabaja el Framework con las poblaciones y los xml. Para ms detalle ver el cdigo fuente del anexo.
guardarPoblacion(Poblacion);

De esta forma se obtiene el cromosoma ms apto de la poblacin


IChromosome cromosomaMasApto = Poblacion.getFittestChromosome();

Funcin Aptitud
La clase que implementar la funcin aptitud debe heredar de FitnessFunction y redefinir el mtodo
public double evaluate(IChromosome cromosoma)

Este mtodo le permite al framework determinar que cromosoma es ms apto que otro. El valor devuelto debe ser un double positivo. Por defecto, se entiende que un valor ms alto devuelto corresponde a un cromosoma ms apto pero esto puede no ser as, depende del evaluador que se haya utilizado. En el ejemplo se tiene en cuenta esto antes de devolver el valor de aptitud.

20

ANEXO I: CDIGO FUENTE CAMBIO MNIMO

21

22

23

24

25

26

27

28

NEXO II: EJEMPLO DE EJECUCIONES Y RESULTADOS


Para 90 centavos
Tiempo total de evolucin: 18375 ms El cromosoma ms apto encontrado tiene un valor de aptitud de: 996.0 Y est formado por la siguiente distribucin de monedas: 0 Moneda 1 dlar 1 Moneda 50 centavos 1 Moneda 25 centavos 1 Moneda 10 centavos 1 Moneda 5 centavos 0 Moneda 1 centavo Para un total de 90 centavos en 4 monedas.

Para 125 Centavos


Tiempo total de evolucin: 15735 ms El cromosoma ms apto encontrado tiene un valor de aptitud de: 998.0 Y est formado por la siguiente distribucin de monedas: 1 Moneda 1 dlar 0 Moneda 50 centavos 1 Moneda 25 centavos 0 Moneda 10 centavos 0 Moneda 5 centavos 0 Moneda 1 centavo Para un total de 125 centavos en 2 monedas.

Para 87 Centavos
Y est formado por la siguiente distribucin de monedas: 0 Moneda 1 dlar 1 Moneda 50 centavos 1 Moneda 25 centavos 1 Moneda 10 centavos 0 Moneda 5 centavos 2 Moneda 1 centavo Para un total de 87 centavos en 5 monedas.

29

ANEXO III: LICENCIA


Este fragmento esta publicado en la pgina principal de JGAP donde explica que es un software libre. Pero si se quiere utilizar de forma comercial es necesario donar al menos 20 euros a JGAP. JGAP is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Instead, you could choose to use the Mozilla Public License to use JGAP in commercial applications without the need of publishing your source code or make it reverse engineerable (as is required with the GNU License). For using the MPL you have to donate at least 20 Euros to JGAP. Maybe you would like to browser further information about using JGAP commercially. JGAP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above mentioned GNU Lesser Public License and the Mozilla Public License for more details. But we offer really a lot of unit tests which help assure a very high probability for a correct piece of software!

30

Anda mungkin juga menyukai