You are on page 1of 20

ALGORTIMOS

GENTICOS SIMPLES
CON JAVA
I NTRODUCCI N A LA LI BRER A JGAP
Instructor: Luis Roberto Prez Rios, M.Sc.
Docente Universidad Privada Domingo Savio
http://bo.linkedin.com/in/luisrobertop87
luis.robertop87@gmail.com
JGAP
El paquete, documentacin, fuentes, y todo lo necesario para comenzar a trabajar se encuentra
en:
http://jgap.sourceforge.net/
MANOS A LA OBRA
Programar la evolucin, es una forma de decir comencemos a iterar pseudoaleatoriamente
hasta conseguir el resultado buscado. Y para ello es necesario establecer los sujetos, su
cromosoma, genes y funciones de adaptacin.
Esta presentacin tiene el objetivo de ser una gua del taller programado para resolver 3
problemas simples de optimizacin.
AGREGAR JGAP A PROYECTO JAVA EN
NETBEANS. PASO 1.
Crear un proyecto en Netbeans (Ctrl + Mayus + N )y darle un nombre, por ejemplo Ejercicio1
AS DEBERA QUEDAR
Ahora damos click derecho sobre Libraries del proyecto y luego a Add Library, se abrir una
ventana donde presionaremos el botn Create a continuacin ponemos JGAP (u otro) en
Library Name presionar OK y el el siguiente paso es configurar la nueva librera
En la pestaa Classpath debemos presionar Add JAR/Folder, buscar y seleccionar el archivo
jgap.jar
En la pestaa Source debemos presionar Add JAR/Folder, buscar y seleccionar la carpeta src
En la pestaa Javadoc debemos presionar Add ZIP/Folder, buscar y seleccionar la carpeta doc
Finalmente se debe buscar la librera JGAP y presionar Add Library, y el proyecto debera
quedar como se observa en la segunda imagen.
1. Optimizar la funcin =
2
(I)
Optimizar quiere decir que debemos lograr encontrar el mayor valor posible de f(x) dentro de un conjunto dado
de valores para la variable independiente, en este caso x
Limite del problema:
- El valor de x se considerar entre 0 y 31, es decir 0 < 32
(*) La solucin obviamente es x = 31 con lo que se obtendr f(x) = 31*31 = 961, pero dejemos que la evolucin
haga su trabajo.
Eleccin del cromosoma:
Para este problema, asumiremos que un gen es igual a un bit, por lo tanto el cromosoma ser un vector de bits,
pero de qu longitud?
Si 0 < 32 entonces el mnimo valor es 0 y requiere un solo bit para ser representado, en el caso del mximo
valor 31 se requieren 5 bits ya que equivale a 111111 (Convertir entero a binario).
En caso de un cruce entre sujetos con valores 0 y 31 los mtodos no funcionaran ya que tienen distinta longitud
de cromosomas, por tanto es necesario equilibrar el tamao agregando ceros a la izquierda de los cromosomas
con longitud menor a 5.
1. Optimizar la funcin =
2
(II)
Entonces:
Cromosoma Gen[5]
Y los genes sern un valor entero entre 0 y 1 es decir un bit.
Funcin de adaptacin:
En esta caso es la misma funcin =
2
la que determinar que sujeto esta mejor adaptado
o no (que obtenga el mayor valor o no), pero como hemos cromosificado los valores de x es
necesario volver a convertirlo en entero, es decir convertir binario a decimal.
VALOR CROMOSOMA ARREGLADO
0 0 00000
10 1010 01010
31 11111 11111
1. Optimizar la funcin =
2
(III)
Codificacin con JGAG.
Paso 1: Crear un objeto FuncionAdaptacion (o que tenga otro nombre) heredando de
FitnessFunction, para esto debe dar click derecho sobre su paquete de fuentes por defecto y
agregar una nueva clase.
1. Optimizar la funcin =
2
(IV)
Heredar de la clase abstracta FitnessFunction e implementar
el mtodo evaluate(IChromosome cromosoma)
1. Optimizar la funcin =
2
(V)
Lnea Explicacin
7 Importamos la clase FitnessFunction de la librera JGAP
8 Importamos la clase IChromosome de la librera JGAP
14 Se hereda (extends) la clase FitnessFunction
16 Override, indica que la funcin siguiente es sobre escrita de la clase padre
18 Declaramos un double que contiene el valor de adaptacin, por defecto se
sugiere neutralizarlos, es decir poner 0
20 Retornamos la adaptacin.
Explicacin
8 Importamos la clase Gene de la librera JGAP
17 Declaramos el tamao del cromosoma
22 Obtenemos un arreglo que contiene todos los genes del cromosoma
23 Declaramos un arreglo de tipo entero que permitir almacenar los valores
(alelos) de cada uno de los genes, en este caso valores de tipo entero.
25 Llenamos cada posicin del arreglo binario realizando un casting (int) a
cada alelo de los genes, es decir a su valor.
27 Obtenemos el valor de x a partir de convertir el valor binario a entero.
28 Obtenemos la adaptacin a partir de aplicar f(x) = x^2
Cdigo refactorizado y para cualquier tamao de
cromosoma de la funcin evaluate:
1. Optimizar la funcin =
2
(VI)
Una vez que se cuenta con la funcin de evaluacin, es necesario configurar el algoritmo
gentico, esto lo haremos en la clase Principal, es decir Ejercicio1.java
1. Optimizar la funcin =
2
(VII)
Primero importamos todas las clases necesarias para configurar el algoritmo
1. Optimizar la funcin =
2
(VIII)
Ahora agregamos una excepcin de Configuracin invalida del algoritmo

You might also like