jgap y algoritmos geneticos

Upload: jenny-imacana

Post on 06-Jul-2015

2.205 views

Category:

Documents


2 download

TRANSCRIPT

REA DE LA ENERGA, LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES

INGENIERA DE SISTEMAS

Algoritmos Genticos JGAPNOMBRE: Jenny Paulina Imacaa Fernndez MDULO: X B

TUTOR: Ing. Luis A. Chamba

Loja-Ecuador 2011

2001L22222222 CONTENIDOS 1. Introduccin 2. Instalacin y configuracin del entorno 2.1 Generalidades 2.2 Instalacin de JGAP2.3 Como Cargar El Proyecto a Netbeans

3. Algoritmos Genticos 4. Ejemplo de aplicacin 5. Implementacin de ejemplo Funcin Aptitud

1. INTRODUCCIN JGAP es un componente de programacin de algoritmos genticos que se utiliza como un framework. JGAP son las siglas de Java Genetic Algorithms Package (paquete de algoritmos genticos para Java). 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. Es por ello que en el presente trabajo vamos a relacionar este componente y su aplicacin.

2. INSTALACIN Y CONFIGURACION DEL ENTORNO

2.1.

GENERALIDADES

Se debe disponerse de una herramienta de desarrollo de aplicaciones java. Adems es necesario descargar las libreras JGAP y agregarlas a una aplicacin entonces se debe descargar e instalar la mquina virtual de java, para ello se recomienda visitar los sitios para descargar las aplicaciones. Descarga de instalacin de la mquina virtual de java, se recomienda ir al sitio de: http://java.sun.com/javase/downloads/index.jsp Adems se debe instalar un IDE, que es el entorno en donde se va a trabajar en este caso netbeans. Para ello se puede ir a: http://www.netbeans.org/downloads/ Se lo debe ejecutar y tendremos listo el IDE para utilizarlo.

2.2.

INSTALACIN DE JGAP

Como primer punto se debe descargar la ltima versin de JGAP. Hasta ahora la ltima versin es la 3.4.4. Se debe visitar la siguiente direccin: http://sourceforge.net/projects/jgap/files/ El archivo se llama jgap_3.4.4_full.zip. Se recomienda instalacin completa si no se desea compilar el cdigo. Luego de descargar el archivo se extrae su contenido. Esto puede hacerse en cualquier directorio. Es necesario incluir el archivo jgap.jar como una biblioteca para poder usar las clases de JGAP. LICENCIA El JGAP es software libre y se puede distribuir bajo la GNU LesserPublicLicense 2.1 o posterior. Las aplicaciones comerciales que no descargar la

publiquen su cdigo fuente deben distribuirse bajo la Mozilla PublicLicense. En ese caso deben donarse 50 Euros al proyecto. Obtenido en: http://soloeduca.org/inteligencia-artificial/files/2011/01/Laboratorio-de-AGcon-JGAP-Algoritmos-geneticos.pdf

2.3.

COMO CARGAR EL PROYECTO A NETBEANS

1. Hacemos doble clic en el icono de netbeans para que se cargue la

aplicacin.

2. Para abrir el proyecto hacemos clic en el men Archivo y luego en la opcin Abrir Proyecto.

Y se abre una ventana donde podemos seleccionar la direccin del archivo que deseamos abrir.

Hacer

clic

3. Cuando se carga el proyecto en el IDE netbeans, nos presenta un error, y para solucionarlo hay que cargar la librera JGap.

3. Para eliminar este error se debe cargar la librera se debe hacer clic

en Bibliotecas, luego click derecho agregar archivo Jar/Carpeta.

Luego nos presentara una ventana en la cual nos permite buscar la direccin de la librera e inmediatamente seleccionamos abrir.

E inmediatamente se elimina el error y podr empezar a ejecutar el programa sin ningn inconveniente, dando clic derecho en ejecutar y nos genera los resultados de la corrida de la aplicacin. 5. Para ejecutar el programa tiene dos opciones: Se puede hacer clic en el botn que se seala en la imagen

continuacin:

O se puede hacer clic derecho en la clase ejecutora y desde

all se puede correr la aplicacin , seleccionando Ejecutar Archivo:

6. Una vez que se haya ejecutado cualquier opcin para ejecutar la aplicacin empezara a correr, y la salida por pantalla o por la consola ser:

3. ALGORITMOS GENTICOSLos algoritmos genticos se basan en la teora de la evolucin de Darwin, en pocas palabras: "solo los individuos ms fuertes sobreviven". Recordemos que un algoritmo es una serie de pasos que nos lleva a resolver un problema o a alcanzar un objetivo. Qu es un algoritmo gentico (AG de ahora en adelante)? Un AG es un algoritmo que "produce" una serie de individuos que representan una solucin a nuestro problema u objetivo por alcanzar. Dichos individuos no siempre sern la mejor solucin, por lo que a travs de iteraciones, el algoritmo hace que dichos individuos "evolucionen", con la idea de que cada "generacin" de individuos sea mejor que su predecesora, y cuando el algoritmo termine o converja, tengamos un individuo que tal vez no sea la solucin ptima, pero si una solucin muy aceptable. Tcnicamente, el AG es un problema para resolver bsquedas. Es utilizado principalmente en problemas que no tienen un procedimiento definido para resolverlos. Como se producen las nuevas generaciones? El AG comienza con una primera generacin compuesta de individuos generados al azar. Estos individuos son evaluados por una funcin de aptitud, que determina que tan bien un individuo resuelve el problema. Luego, dicha funcin asigna un valor real a cada individuo.

Ahora, en base a su valor de aptitud los individuos tendrn una probabilidad de ser seleccionados como padres de la siguiente generacin. Como ya mencionamos que el AG esta basado en la teora de la evolucin de Darwin, los individuos con mejor valor de aptitud tendrn una probabilidad mayor de ser seleccionados que los individuos con menor valor de aptitud. Cuando tengamos a los individuos seleccionados, los podemos "cruzar" o "mutar" para obtener nuevos individuos que conformarn nuestra siguiente generacin. Si al cruzar a los padres obtenemos hijos con mejor valor de aptitud que ellos, los hijos pasan a formar parte de la nueva generacin, en caso contrario, pasamos los padres a la siguiente generacin. Luego de muchas generaciones, posiblemente obtengamos a un "superindividuo" que ser la mejor solucin a nuestro problema.

4. EJEMPLODE APLICACIN Para poder entender como funciona el framework y poder manejarlo, un ejemplo de aplicacin simple es lo indicado. Se puede suponer que es necesario descomponer un cierto monto de dinero en la menor cantidad posible de monedas. Por ejemplo: En

la aplicacin si se tienen 323 descomponerse de la siguiente forma:

centavos

puede

3 Monedas de 1 dlar 2 Monedas de 10 centavos 3 Monedas de 1 centavo 8 monedas en total Pero tambin puede descomponerse de la siguiente forma: 323 Monedas de 1 centavo. 323 monedas en total. O puede ser a su vez:

32 Monedas de 10 centavos 3 Moneda de 1 centavo

35 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 msapta 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 como: Moneda de 1 dlar (100 centavos)

Moneda de 50 centavos Moneda de 25 centavos Moneda de 10 centavos Moneda de 5 centavos Moneda de 1 centavo

5. IMPLEMENTACIN DEL 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 Cambio Mnimo y la funcin aptitud se codificar en la clase Cambio Mnimo Funcin Aptitud 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 porque existen seis tipos de moneda posible en el Ecuador.

Ejemplo: Cantidad de Monedas de 1 dlar 1

Cantidad de Monedas de 50 1 centavos Cantidad de Monedas de 25 1 centavos Cantidad de Monedas de 10 1 centavos Cantidad centavos Cantidad centavo de de Monedas de 5 1 de 1

Monedas

Este cromosoma sumara 191 centavos en 6 monedas. Una vez definido el modelo se puede comenzar a codificar la solucin. A continuacin se explica a como se implement el ejemplo de aplicacin y que clases y funciones principales se utilizaron. Primero se debe crear una configuracin con valores predeterminados que luego se irn modificando Configurationconf = new DefaultConfiguration(); Luego se le indica que el mejor elemento siempre pase a la prxima generacin conf.setPreservFittestIndividual(true); Se crea la funcin de aptitud que ms adelante se explicar y se setea en la configuracin FitnessFunctionmyFunc CambioMinimoFuncionAptitud(Monto); conf.setFitnessFunction(myFunc); = new

Tambin se debe crear un cromosoma de ejemplo para que el framework conozca su estructura Gene[] sampleGenes = new Gene[6]; sampleGenes[0] = new IntegerGene(conf, 0, Math.round(CambioMinimoFuncionAptitud.MAX_MONTO/100));// Moneda 1 usd sampleGenes[1] = new IntegerGene(conf, 0, 10); // Moneda 50 centavos sampleGenes[2] = new IntegerGene(conf, 0, 10); // Moneda 25 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 centavos IChromosomesampleChromosome sampleGenes); = new Chromosome(conf,

conf.setSampleChromosome(sampleChromosome); Es importante tener en cuenta los valores mximos y mnimos ya que si se cargan mal, podra eliminar muchas soluciones que podran ser las mejores o si son muy amplios llevar ms 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(); El mtodo guardar poblacin creado para este manual guarda todos los datos de la poblacin en un xml llamado PoblacionCaminoMinimo.xml para demostrar como trabaja el Framework con las poblaciones y los xml. guardarPoblacion(Poblacion); De esta forma se obtiene el cromosoma ms apto de la poblacin IChromosomecromosomaMasApto Poblacion.getFittestChromosome(); =

FUNCIN APTITUD La clase que implementar la funcin aptitud debe heredar de FitnessFunction y redefinir el mtodo: public double evaluate(IChromosomecromosoma) 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 deaptitud.