tutorial jgap

21
ALGORÍTMOS GENÉTICOS TEMA: ALUMNA: Silvia Maribel michay p. MÓDULO: X”B” DOCENTE: Ing. Luis Antonio Chamba. Loja – ecuador. 2011 JGAP.

Upload: silvia-michay

Post on 18-Dec-2014

4.862 views

Category:

Technology


8 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Tutorial jgap

ALGORÍTMOS GENÉTICOS

TEMA:

ALUMNA:

Silvia Maribel michay p.

MÓDULO:

X”B”

DOCENTE:

Ing. Luis Antonio Chamba.

Loja – ecuador.

2011

JGAP.

Page 2: Tutorial jgap

JGAP

INTRODUCCION.

JGAP son las siglas de Java Genetic Algorithms Package (paquete de algoritmos

genéticos para Java). Es un componente de programación de algoritmos genéticos que

se utiliza como un framework

Los algoritmos genéticos se basan en la teoría de la evolución de Charles Darwin. Se

tiene una población, donde cada individuo posee diferentes características.

Esas características se muestran favorables o no frente a un método de selección al

que se enfrentan todos los individuos. Así se van identificando los que poseen las

mejores características.

Las características de los individuos están dadas por sus cromosomas.

Un cromosoma es un conjunto de genes. Cada gen es responsable de indicar el tipo de

una sola característica del individuo. El valor que toma el gen se llama alelo.

En la biología, 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 características ventajosas.

También se dan variaciones en los genes por medio de la combinación (reproducción

sexual) o por cambios aleatorios (mutaciones). Así surgen de forma natural

más características que a su vez son puestas a prueba y permiten a sus portadores

sobrevivir y reproducirse si son las más adecuadas para el ambiente que les rodea.

Los algoritmos genéticos son una analogía de lo que ocurre biológicamente, pero

aplicada a encontrar la mejor solución a un problema. Cada solución es un individuo.

El método de selección se llama función de ajsute, e indica la aptitud de cada individuo

para resolver el problema. También existen cromosomas con genes y sus respectivos

alelos.

A los cromosomas se les aplican operadores genéticos, equivalentes a la mutación y la

reproducción sexual, de forma que se generan y ponen a prueba nuevas soluciones.

Page 3: Tutorial jgap

De ese modo, los algoritmos genéticos son un método para probar múltiples

soluciones “autogeneradas” a un problema.

¿QUÉ OFRECE JGAP?

JGAP tiene clases e interfaces para representar:

Genes (Gene).

Cromosomas (Chromosome).

Individuos (IChromosome).

La población (Genotype).

La función de ajuste (FitnessFunction).

Operadores genéticos.

Se trata de una solución genérica, sin relación alguna con un problema particular. Por esa

razón se deben crear nuevas clases que heredan o implementan las clases e interfaces

mencionadas. Así se adapta JGAP al problema específico que se quiere solucionar.

MOTOR GENÉTICO.

El “motor genético” crea varias soluciones (individuos) aleatoriamente con el método

randomInitialGenotype().

Aplica operadores genéticos (mutación y combinación) para que surjan nuevas soluciones con

el método evolve (). Pone a prueba cada solución con la función de ajuste evaluate(). Y por

último retorna el cromosoma del individuo mejor adaptado con getFittestChromosome().

LICENCIA.

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

código fuente deben distribuirse bajo la Mozilla Public License.

Page 4: Tutorial jgap

INSTALACION Y CONFIGURACION DE JGAP.

Para poder instalar y configurar el framework JGAP es necesario tener instalado los siguientes

programas.

MÁQUINA VIRTUAL DE JAVA.

Qué es?

El JDK (Java Development Kit) es un software que provee

herramientas de desarrollo para la creación de programas en java.

Puede instalarse en una computadora local o en una unidad de red.

El JDK suministrado por Sun Microsystems incluye:

Un compilador.

Un intérprete de aplicaciones.

Un depurador en línea de comandos.

Un visualizador de applets entre otros elementos.

En la unidad de red se puede tener la aplicación distribuida en varias

computadoras y trabajar como una sola aplicación.

En los sistemas Windows sus variables de entorno son:

JAVAPATH: es un path completo del directorio donde está instalado el JDK.

CLASSPATH: son las librerías o clases de usuario.

PATH: variable donde se agrega la ubicación de JDK Los programas más importantes

que se incluyen son:

El mismo que podemos descargarlo desde la siguiente pagina.

http://www.oracle

.com/technetwork

/java/javase/dow

nloads/index.html

Page 5: Tutorial jgap

En este caso se utiliza NetBeans la versión que mejor te convenga y para esta práctica

utilizare NetBeans 6.9.1, si no lo tienes instalado en tu equipo podemos descargar desde la

siguiente página.

http://netbeans.org/

QUE ES NETBEANS?

Es un entorno de desarrollo, hecho principalmente

para el lenguaje de programación Java.

Existe además un número importante de módulos para

extender el NetBeans IDE.

NetBeans IDE es un producto libre y gratuito sin restricciones de uso.

NetBeans es un proyecto de código abierto de gran éxito con una gran base de usuarios, una

comunidad en constante crecimiento, y con cerca de 100 socios en todo el mundo.

Sun MicroSystems fundó el proyecto de código abierto NetBeans

en junio de 2000 y continúa siendo el patrocinador principal de los

proyectos.

La plataforma NetBeans permite que las aplicaciones sean desarrolladas a partir de un

conjunto de componentes de software llamados módulos.

Un módulo es un archivo Java que contiene clases de java escritas para interactuar con las

APIs de NetBeans y un archivo especial (manifest file) que lo identifica como módulo.

Las aplicaciones construidas a partir de módulos pueden ser extendidas agregándole nuevos

módulos.

Debido a que los módulos pueden ser desarrollados independientemente, las aplicaciones

basadas en la plataforma NetBeans pueden ser extendidas fácilmente por otros

desarrolladores de software.

Luego de tener estos programas procedemos a descargar el framework JGAP

http://sourceforge.net/projects/jgap/files/

Page 6: Tutorial jgap

El archivo se llama jgap_3.5_full.zip. Se recomienda descargar el de instalación completa si no

se desea compilar el código.

Luego de descargar el archivo se extrae su contenido. Esto puede hacerse en cualquier

directorio. Por último sólo es necesario incluir el archivo jgap.jar como una biblioteca para

poder usar las clases de JGAP.

Luego de tener todos los programas necesarios ahora si procedemos a instalar y configurar a

continuación se explicara cuáles son los pasos a seguir para lograr el resultado deseado:

Primeramente abrimos nuestro entorno de desarrollo.

Page 7: Tutorial jgap

Luego abrimos nuestro proyecto y nos vamos a propiedades de nuestro proyecto y deberemos

agregar a jgap como biblioteca para esto se puede hacer desde las propiedades del proyecto,

en el nodo “Libraries”. Como nos muestra la imagen la ventana de propiedades del proyecto.

VAMOS A LA PARTE

DE LIBRERÍAS

Damos click en ADD JAR/FOLDER

Page 8: Tutorial jgap

Luego de agregamos la librería o el jar de jgap.jar en nuestro proyecto

Page 9: Tutorial jgap

INTRODUCCION A ALGORITMOS GENETICOS.

Un algoritmo es una serie de pasos organizados que

describe el proceso que se debe seguir, para dar solución

a un problema específico.

En los años 1970, de la mano de John Henry Holland,

surgió una de las líneas más prometedoras de la

inteligencia artificial, la de los algoritmos genéticos. Son

llamados así porque se inspiran en la evolución biológica

y su base genético-molecular.

Estos algoritmos hacen evolucionar una población de individuos sometiéndola a acciones

aleatorias semejantes a las que actúan en la evolución biológica (mutaciones y

recombinaciones genéticas), así como también a una Selección de acuerdo con algún criterio,

en función del cual se decide cuáles son los individuos más adaptados, que sobreviven, y

cuáles los menos aptos, que son descartados.

Es incluido dentro de los algoritmos evolutivos, que incluyen también las estrategias

evolutivas, la programación evolutiva y la programación genética. Dentro de esta última se

han logrado avances curiosos:

En 1999, por primera vez en la historia, se concedió una patente a un invento no realizado

directamente por un ser humano: se trata de una antena de forma extraña, pero que funciona

perfectamente en las condiciones a las que estaba destinada. No hay, sin embargo, nada

injusto en el hecho de que el autor del algoritmo genético del que salió la forma de la antena

se haya atribuido la autoría de la patente, pues él escribió el programa e ideó el criterio de

selección que condujo al diseño patentado.

Un algoritmo genético es un método de búsqueda dirigida basada en probabilidad. Bajo una

condición muy débil (que el algoritmo mantenga elitismo, es decir, guarde siempre al mejor

elemento de la población sin hacerle ningún cambio) se puede demostrar que el algoritmo

converge en probabilidad al óptimo. En otras palabras, al aumentar el número de iteraciones,

la probabilidad de tener el óptimo en la población tiende a 1 (uno).

Page 10: Tutorial jgap

ALGORITMO GENÉTICO SIMPLE.

El Algoritmo Genético Simple, también denominado Canónico, se representa en la Como se

verá a continuación, se necesita una codificación o representación del problema, que resulte

adecuada al mismo.

Además se requiere una función de ajuste o adaptación al problema, la cual asigna un número

real a cada posible solución codificada.

Durante la ejecución del algoritmo, los padres deben ser seleccionados para la reproducción, a

continuación dichos padres seleccionados se cruzaran generando dos hijos, sobre cada uno de

los cuales actuara un operador de mutación.

El resultado de la combinación de las anteriores funciones será un conjunto de individuos

(posibles soluciones al problema), los cuales en la evolución del Algoritmo Genético formarían

parte de la siguiente población.

Page 11: Tutorial jgap

MÉTODOS DE SELECCIÓN.

A continuación se muestran algunas de las técnicas de selección más conocidas:

Rueda de ruleta.

Este método consiste en construir una ruleta particionada en ranuras de igual tamaño, las

cuales se numeran. A cada individuo de la población se le asigna una cantidad de ranuras

proporcional a su aptitud.

El proceso se repite hasta completar la cantidad de individuos deseados. Este método de

selección otorga mayor probabilidad de contribuir a la siguiente generación a los individuos

con mayor aptitud.

Selección por torneo.

En este caso dos individuos son elegidos al azar de la población actual y el mejor o más apto

de los dos se coloca en la generación siguiente. Esto continúa hasta que se complete la nueva

población.

Basado en el rango.

En este esquema se mantiene un porcentaje de la población, generalmente la mayoría, para la

siguiente generación.

Se coloca toda la población por orden de aptitud, y los M menos dignos son eliminados y

sustituidos por la descendencia de alguno de los M mejores con algún otro individuo de la

población.

Método estocástico.

Para cada individuo se calcula la aptitud relativa al promedio de aptitudes de la población, y

en función de esto se asignan las copias.

Page 12: Tutorial jgap

MÉTODOS DE REPRODUCCIÓN.

Cruza simple.

Los dos cromosomas padres se cortan por un punto, y el material genético situado entre ellos

se intercambia.

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 los 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

posición cero y se procede de igual modo.

Cruza binomial.

Para generar un cromosoma hijo por cruza binomial, se define la probabilidad P0 como la

probabilidad 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 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.

Page 13: Tutorial jgap

IMPLEMENTACIÓN.

Para poder implementar una solución a este problema utilizando jgap es necesario indicarle al

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á 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 número

entero y representará la cantidad de un tipo de moneda de ese cromosoma. Por lo tanto cada

cromosoma tendrá 6 genes.

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 y

que clases y funciones principales se utilizaron. Pero para más detalle se encuentra el anexo

con el código fuete explicado instrucción por instrucción.

Primero se debe crear una configuración con valores predeterminados que luego se irán

modificando.

Page 14: Tutorial jgap

CÓDIGO FUENTE CAMBIO MÍNIMO.

Page 15: Tutorial jgap
Page 16: Tutorial jgap
Page 17: Tutorial jgap
Page 18: Tutorial jgap
Page 19: Tutorial jgap
Page 20: Tutorial jgap

EJECUCIÓN Y RESULTADOS.

Page 21: Tutorial jgap

LICENCIA.

Este fragmento esta publicado en la página 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!