You are on page 1of 27

UNIVERSIDAD

NACIONAL
DE LOJA

Area de la Energa las Industrias y los Recursos Naturales No Renovables


Carrera de Ingenier

a en Sistemas
Actualizaci on del manual de JGAP
adaptado a la moneda de D olar
Inteligencia Artificial: Algoritmos
Gen

eticos
M odulo D ecimo A
Autores:
Veloso Gabriel Alejandro.
Arce Ruben.
Coautores:
Chuquihuanca-Vicente, Leonardo-Rafael.
Saquicela-Celi, Yesica-Norelly.
Docente:
Chamba-Eras, Luis-Antonio.
1

Indice general
A. Tema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
B. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
C. Instalaci on y conguraci on del entorno . . . . . . . . . . . . . . . . . . . . . 6
1 . Descarga e instalacion de la maquina virtual de java . . . . . . . . . 6
2 . Descarga e instalacion de Netbeans . . . . . . . . . . . . . . . . . . . 6
3 . Descarga e instalacion de JGAP . . . . . . . . . . . . . . . . . . . . . 7
4 . Agregar las libreras a una aplicaci on . . . . . . . . . . . . . . . . . . 8
D. Introduccion A Los Algoritmos Geneticos [1] . . . . . . . . . . . . . . . . . . 11
E. Metodos de Selecci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1 . Rueda de ruleta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2 . Selecci on por torneo . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 . Basado en el rango . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4 . Metodo Estoc astico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
F. Metodos de Reproduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1 . Cruza Simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 . Cruza de dos puntos . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 . Cruza Multipunto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4 . Cruza bimonial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5 . Mutaci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
G. Ejemplo de Aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
H. Implementaci on de ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
I. Anexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1 . Anexo I: Codigo Fuente Cambio Mnimo . . . . . . . . . . . . . . . . 19
2 . Anexo II: Ejemplo de Ejecuciones Y Resultados . . . . . . . . . . . . 25
3 . Anexo III: Licencia JGAP . . . . . . . . . . . . . . . . . . . . . . . . 26
4 . Anexo IV: Licencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2

Indice de tablas
1. Ejemplo monedas mnimas . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3

Indice de guras
1. Descarga del JDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2. Descarga del NetBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3. Descarga de las libreras JGAP . . . . . . . . . . . . . . . . . . . . . . . . . 7
4. NetBeans 8.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5. Proyecto JGAPractica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6. Proyecto JGAPractica sin libreras . . . . . . . . . . . . . . . . . . . . . . . 9
7. Agregar libreras al Proyecto JGAPractica . . . . . . . . . . . . . . . . . . . 9
8. Libreras JGAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
9. Libreras JGAP agregadas al proyecto . . . . . . . . . . . . . . . . . . . . . 10
10. Cruza simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
11. Cruza Multipunto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4
A. Tema
Actualizaci on del manual de JGAP
adaptado a la moneda de D olar
5
B. Introducci on
JGAP es un framework libre (ver anexo 3 licencia para mas informacion) basado en
la tecnologa JAVA. El mismo provee mecanismos para aplicar principios evolutivos en la
resoluci on de problemas. Al momento de escribir este documento la ultima version estable
de este framework es la 3.6.2
Nuestro trabajo se focaliza en probar este framework y realizar un manual detallado con un
ejemplo didactico que permitan aprender a utilizarlo haciendo mas leve su curva de apren-
dizaje. Incluiremos capturas de pantalla para hacer esta tarea mas simple.
C. Instalacion y conguracion 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 aplicaci on.
1 . Descarga e instalacion de la maquina virtual de java
Antes de descargar el (IDE)NEtbeans es necesario disponer de la maquina virtual de java
para poder compilar las aplicaciones. Esto lo hace automaticamente el NEtbeans pero debe
tenerse instalada previamente. Para lo cual la podemos descargar del siguiente enlace. Ver
gura 1
[http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.
html?ssSourceSiteId=otnes]
Figura 1: Descarga del JDK
2 . Descarga e instalacion de Netbeans
Para poder hacer uso del framework podemos hacer uso de la version de NetBeans que
mejor te convenga, pero para esta practica se ara uso de NetBeans 8.0. Ver gura 2 Para lo
cual la podemos descargar del siguiente enlace.
6
Figura 2: Descarga del NetBeans
[https://netbeans.org/downloads/]
Una vez descargado procedemos a realizar la instalacion de NetBeans,y dejarlo listo para
su uso.
3 . Descarga e instalacion de JGAP
Se deben descargar las libreras de JGAP desde el sitio ocial, hasta el da de hoy la
ultima version de JGAP es la 3.6.2. Ver gura 3
Para lo cual la podemos descargar del siguiente enlace.
[http://sourceforge.net/projects/jgap/files/]
Figura 3: Descarga de las libreras JGAP
7
El archivo se llama jgap 3.6.2 full.zip. Se recomienda descargar el de instalaci on completa
si no se desea compilar el c odigo.
Luego de descargar el archivo se extrae su contenido. Esto puede hacerse en cualquier
directorio. Por ultimo s olo 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 congurar
a continuaci on se explicara cuales son los pasos a seguir para lograr el resultado deseado.
4 . Agregar las libreras a una aplicacion
Primeramente abrimos nuestro entorno de desarrollo. Ver gura 4
Figura 4: NetBeans 8.0
Posterior procedemos a agregar la librera jgap al proyecto que vamos a trabajar, para lo
cual abrimos el proyecto. Ver Figura 5. JGAPractica en el IDE Netbeans.
Figura 5: Proyecto JGAPractica
8
Como podemos observar en la Figura 6. el proyecto contiene errores debido a que a un no
tenemos la librera agregada.
Figura 6: Proyecto JGAPractica sin libreras
Para poder agregar las libreras al proyecto nos vamos a propiedades de nuestro proyecto
y la parte superior izquierda hacemos clic en la opcion Libraries, posteriormente hacemos
clic en la parte derecha en el boton Add JAR/Folder, como se muestra en Figura 7.
Figura 7: Agregar libreras al Proyecto JGAPractica
9
Buscamos la carpeta donde se encuentran las libreras JGAP y agregamos los jars corres-
pondientes haciendo click en el bot on Abrir. Ver gura 8.
Figura 8: Libreras JGAP
Una vez realizado esto ya se pueden utilizar las libreras desde una clase java de ese
proyecto. Ver gura 9.
Figura 9: Libreras JGAP agregadas al proyecto
Una vez realizado estos pasos ya estamos listos para poder a desarrollar con las librerias
JGAP en nuestro entorno java.
10
D. Introducci on A Los Algoritmos Geneticos [1]
Los algoritmos geneticos buscan imitar los procesos evolutivos de la naturaleza para re-
solver problemas. En la naturaleza los individuos de una poblacion se reproducen entre si y
de esta forma nacen nuevos individuos. Todos se someten a una selecci on natural durante
sus vidas en la que los mas aptos tienen mas probabilidades de sobrevivir, de esta forma las
poblaciones evolucionan, mejoran constantemente y se adaptan a los nuevos medios.
Para los algoritmos geneticos los individuos se denominan cromosomas. Cada cromosoma
es una solucion a un problema especco. Las caractersticas de un cromosoma se denominan
genes. Tambien existe una funci on 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 poblaci on inicial. Lo que suele hacerse es crear
una poblacion de cromosomas al azar.
Una vez que se tiene una poblacion se reproducen los individuos para obtener mayor
variedad, tal como en la naturaleza. Luego, es necesario seleccionar los mejores, para ir evo-
lucionando. Hay varios metodos de selecci on pero en general lo que se busca es que los mejores
pasen a la proxima generaci on y algunos no tan aptos tambien, ya que la variedad ayuda
a que en la reproducci on se generen cromosomas mas 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 fen omeno llamado mutaci on. Este es un peque no
cambio en la informaci on genetica producido espor adicamente, que provoca un cambio en un
individuo. Este cambio asegura m as variedad y provoca cambios positivos o negativos. Los
cambios negativos deberan quedar en el olvido gracias a la selecci on natural y los positivos
perdurar haciendo evolucionar a la poblacion. Para los algoritmos tambien se puede utilizar
mutaci on para agregar variedad y obtener mejores soluciones.
Para llegar a buenos resultados es necesario recorrer varias generaciones. Es decir, re-
producir varias veces los individuos y hacer varias selecciones y algunas pocas mutaciones.
Tambien es necesario determinar cuando una soluci on es sucientemente apta como para
aceptarla. Para esto puede medirse cuanto aumenta la aptitud del mejor cromosoma y si
despues de varias generaciones no mejora aun introduciendo mutaciones o aumentando el
numero de cromosomas podemos decidir dejar de evolucionar y utilizar esa solucion. Otra
tecnica consiste establecer de ante mano cuantas generaciones se van a considerar.
E. Metodos de Selecci on [1]
A continuaci on se muestran algunas de las tecnicas de selecci on mas conocidas.
1 . Rueda de ruleta
Este metodo consiste en construir una ruleta particionada en ranuras de igual tama no,
las cuales se numeran. A cada individuo de la poblacion se le asigna una cantidad de ranuras
11
proporcional a su aptitud.
El proceso se repite hasta completar la cantidad de individuos deseados. Este metodo de
selecci on otorga mayor probabilidad de contribuir a la siguiente generacion a los individuos
con mayor aptitud.
Hay algunas otras variantes como por ejemplo, incluir en la nueva generaci on el mejor
representante de la generacion actual. En este caso, se denomina metodo elitista.
2 . Seleccion por torneo
En este caso dos individuos son elegidos al azar de la poblaci on actual y el mejor o m as
apto de los dos se coloca en la generacion siguiente. Esto contin ua hasta que se complete la
nueva poblaci on.
3 . Basado en el rango
En este esquema se mantiene un porcentaje de la poblaci on, generalmente la mayora,
para la siguiente generaci on. Se coloca toda la poblaci on por orden de aptitud, y los M
menos dignos son eliminados y sustituidos por la descendencia de alguno de los M mejores
con alg un otro individuo de la poblaci on.
4 . Metodo Estocastico
Por cada individuo se calcula la aptitud relativa al promedio de aptitudes de la poblacion,
y en funcion de esto se asignan las copias. Por ejemplo, si la aptitud promedio de la poblacion
es 15 y la aptitud del individuo es 10; entonces su aptitud relativa es 1.5. Esto signica que
se colocara una copia en la proxima generaci on y que se tiene el 0.5 (50 %) de chance de
colocar una segunda copia.
F. Metodos de Reproduccion [1]
A continuaci on se muestran algunas tecnicas para reproducir individuos (o cromosomas).
1 . Cruza Simple
Los dos cromosomas padres se cortan por un punto, y el material genetico 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. Ver gura 10.
Figura 10: Cruza simple
12
2 . Cruza de dos puntos
En este metodo 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.
3 . 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
denidas entre cada par de puntos consecutivos, si es impar se asume un punto de cruza
adicional en la posicion 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 posici on 2 a 4 y 6 a 7, se tiene. Ver gura 11.
Figura 11: Cruza Multipunto
4 . Cruza bimonial
Para generar un cromosoma hijo por cruza binomial, se dene la probabilidad P0 como
la probabilidad de que el Alelo de cualquier posici on 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 unico hijo por cada aplicaci on 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.
5 . Mutaci on
En la Evoluci on, una mutacion es un suceso bastante poco com un (sucede aproximada-
mente una de cada mil replicaciones), en la mayora de los casos las mutaciones son letales,
pero en promedio, contribuyen a la diversidad genetica de la especie. En un algoritmo geneti-
co tendran el mismo papel, y la misma frecuencia (es decir, muy baja).
Una vez establecida la frecuencia de mutacion, por ejemplo, uno por mil, se examina
cada bit de cada cadena. Si un n umero generado aleatoriamente est a por debajo de esa
probabilidad, se cambiara el bit (es decir, de 0 a 1 o de 1 a 0). Si no, se dejar a como est a.
Dependiendo del n umero de individuos que haya y del n umero de bits por individuo, puede
resultar que las mutaciones sean extremadamente raras en una sola generaci on.
No hace falta decir que no conviene abusar de la mutacion. Es cierto que es un mecanismo
generador de diversidad, y, por tanto, la soluci on cuando un algoritmo genetico est a estanca-
do, pero tambien es cierto que reduce el algoritmo genetico a una b usqueda aleatoria. Siempre
13
es m as conveniente usar otros mecanismos de generacion de diversidad, como aumentar el
tama no de la poblaci on, o garantizar la aleatoriedad de la poblaci on inicial.
G. Ejemplo de Aplicacion [1]
Para poder entender como funciona el framework y poder manejarlo, un ejemplo de apli-
caci on simple es lo indicado.
Supongamos que es necesario descomponer un cierto monto de dinero en la menor can-
tidad posible de monedas. Por ejemplo si se tienen $ 1,35 dolares (135 centavos) puede
descomponerse de la siguiente forma:
1 Moneda de un dolar
1 Moneda de 25 centavos
1 Moneda de 10 centavos
3 monedas en total
Pero tambien puede descomponerse de la siguiente forma:
1 Monedas de un dolar
3 Moneda de 10 centavos
1 Moneda de 5 centavos
5 monedas en total.
Hay muchas formas de descomponer este monto en monedas cada una de ellas es una so-
luci on posible al problema (cromosoma) y tiene un valor de aptitud asociado, que debera de-
pender de la cantidad de monedas totales de ese cromosoma. Cuantas menos monedas se
necesiten mas apta sera la soluci on ya que lo que se busca es lograr la menor cantidad de
monedas posibles.
Cada cromosoma tendra 6 genes. Los genes en este problema son n umeros enteros que
representan la cantidad de monedas de cada tipo.
Moneda de 1 dolar (100 centavos)
Moneda de 50 centavos
Moneda de 25 centavos
Moneda de 10 centavos
Moneda de 5 centavos
Moneda de 1 centavo
14
H. Implementaci on de ejemplo
Para poder implementar una solucion a este problema utilizando jgap es necesario indi-
carle al framework una serie de par ametros y codicar la funcion de aptitud.
Para este caso la clase principal se llamara CambioMinimo y la funci on aptitud se codi-
car a en la clase CambioMinimoFuncionAptitud.
En primer lugar se debe modelar el problema, es decir denir como se compone cada
gen de los cromosomas (soluciones posibles). Para este problema puntual cada gen sera un
n umero entero y representar a la cantidad de un tipo de moneda de ese cromosoma. Por lo
tanto cada cromosoma tendr a 6 genes Ejemplo: Ver Tabla 1.
Tabla 1: Ejemplo monedas mnimas
Cantidad de monedas de 1 dolar 3
Cantidad de monedas de 50 centavos 0
Cantidad de monedas de 25 centavos 0
Cantidad de monedas de 10 centavos 2
Cantidad de monedas de 5 centavos 0
Cantidad de monedas de 1 centavo 3
Este cromosoma sumara 323 centavos en 8 monedas.
Una vez denido el modelo se puede comenzar a codicar la soluci on.
A continuacion se explica a grandes rasgos como se implemento el ejemplo de aplicaci on
y que clases y funciones principales se utilizaron. Pero para mas detalle se encuentra en el
anexo 4 en donde se explica el c odigo fuente instruccion por instrucci on.
Primero se debe crear una conguracion con valores predeterminados que
luego se iran modicando
Conf i gur at i on conf = new Def aul t Conf i gur at i on ( ) ;
Luego se le indica que el mejor elemento siempre pase a la proxima generaci on
conf . s e t Pr e s e r vFi t t e s t I ndi vi dua l ( true ) ;
Se crea la funci on de aptitud que mas adelante se explicara y se setea en la
conguraci on
Fi t nes s Funct i on myFunc = new CambioMinimoFuncionAptitud ( Monto ) ;
conf . s e t Fi t nes s Func t i on (myFunc ) ;
15
Tambien se debe crear un cromosoma de ejemplo para que el framework co-
nozca su estructura
Gene [ ] sampleGenes = new Gene [ 6 ] ;
sampleGenes [ 0 ] = new IntegerGene ( conf , 0 , Math . round ( CambioMinimoFu
nci onApti tud .MAXMONTO / 100) ) ; // Moneda 1 dol ar
sampleGenes [ 1 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 50 cent avos
sampleGenes [ 2 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 25 cent avos
sampleGenes [ 3 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 10 cent avos
sampleGenes [ 4 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 5 cent avos
sampleGenes [ 5 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 1 cent avos
IChromosome sampleChromosome = new Chromosome ( conf , sampleGenes ) ;
conf . setSampleChromosome ( sampleChromosome ) ;
Es importante tener en cuenta los valores maximos 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 congurar el tama no que tendra la poblacion (Cantidad de cromo-
somas de una generacion)
conf . s e t Popul at i onSi z e ( 200) ;
Para poder evolucionar se necesita una poblaci on inicial. El framework permi-
te cargarla de un xml pero lo mejor en este caso es indicarle que genere una
poblacion inicial aleatoria.
Pobl aci on = Genotype . randomI ni ti al Genotype ( conf ) ;
El metodo evolve evoluciona una generacion. Se lo llama una cierta cantidad de
veces con un loop para que realice cierta cantidad de evoluciones.
Pobl aci on . evol ve ( ) ;
El metodo guardar poblacion creado para este manual guarda todos los datos de
la poblaci on en un xml llamado PoblacionCaminoMinimo.xml para demostrar
como trabaja el Framework con las poblaciones y los xml. Para mas detalle ver
el codigo fuente del anexo 1.
guardarPobl aci on ( Pobl aci on ) ;
De esta forma se obtiene el cromosoma mas apto de la poblaci on
IChromosome cromosomaMasApto = Pobl aci on . getFi ttestChromosome ( ) ;
16
Funcion Aptitud
La clase que implementara la funcion aptitud debe heredar de FitnessFunction
y redenir el metodo
public double eval uat e ( IChromosome cromosoma )
Este metodo le permite al framework determinar que cromosoma es mas apto
que otro. El valor devuelto debe ser un double positivo.
Por defecto, se entiende que un valor mas alto devuelto corresponde a un
cromosoma mas 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.
17
Bibliografa
[1] Veloso G. and Arce R. Algoritmos Geneticos JGAP , Facultad de Ingeniera-
Aplicaciones Informaticas,2009.
18
I. Anexos
1 . Anexo I: Codigo Fuente Cambio Mnimo [1]
/
To change t h i s t empl at e , choose Tool s | Templ ates
and open t he t empl at e i n t he e di t or .
/
package pr ac t i c a1 ;
/

@compil ado l u i s
/
import j ava . i o . Fi l e ;
import org . j gap . Chromosome ;
import org . j gap . Conf i gur at i on ;
import org . j gap . Fi t nes s Funct i on ;
import org . j gap . Gene ;
import org . j gap . Genotype ;
import org . j gap . IChromosome ;
import org . j gap . data . DataTreeBui l der ;
import org . j gap . data . I DataCreators ;
import org . j gap . i mpl . Def aul t Conf i gur at i on ;
import org . j gap . i mpl . IntegerGene ;
import org . j gap . xml . XMLDocumentBuilder ;
import org . j gap . xml . XMLManager ;
import org . w3c . dom. Document ;
/
En e s t e ej empl o se muestra como r e s o l v e r un probl ema c l a s i c o de al gor i t mos
g e ne t i c os ut i l i z a nd o e l framework JGAP. El probl ema c ons i s t e en l og r ar j unt ar
1
9
e l monto de di nero i ngres ado a l a apl i c ac i on por parametro con l a menor
cant i dad de monedas p o s i b l e s . Para r e s o l v e r e l probl ema nos basamos en l a
moneda de l a Republ i ca Argent i na ( Se adapt o para t r a b a j a r l o en Euros
aumentando ) l a moneda de 2 euros , cambiando l a de 25 por 20 y agregando l a de
2 cent i mos Moneda de 1 euro ( e q ui v al e a 100 cent i mos ) Moneda de 50 Centimos
Moneda de 20 Centimos Moneda de 10 Centimos Moneda de 5 Centimos Moneda de 2
Centimos Moneda de 1 Centimo

@author Gabri el Vel oso


@author Ruben Arce
@coauthor ChuquihuancaVi cente , LeonardoRaf ael .
@coauthor Saqui cel aCel i , YesicaNor el l y .
@since 1. 0
/
public cl ass CambioMinimo {
/
The t o t a l number of t i mes we l l l e t t he popul at i on e v ol v e .
/
private stati c f i nal i nt MAX EVOLUCIONES PERMITIDAS = 2200;
/
Cal cul a ut i l i z a nd o al gor i t mos g e ne t i c os l a s ol uc i on al probl ema y l a
imprime por pant al l a

@param Monto Monto que se desea descomponer en l a menor cant i dad de


monedas p o s i b l e s
@throws Except i on

@author Gabri el Vel oso


@author Ruben Arce
@since 1. 0
2
0
/
public stati c void cal cul arCambi oMi ni mo ( i nt Monto) throws Excepti on {
// Se crea una conf i gur aci on con v al or e s predet ermi nados .
//
Conf i gur at i on conf = new Def aul t Conf i gur at i on ( ) ;
// Se i ndi ca en l a conf i gur aci on que e l el ement o mas apt o si empre pase a
// l a proxima generaci on
//
conf . s e t Pr e s e r vFi t t e s t I ndi vi dua l ( true ) ;
// Se Crea l a f unci on de apt i t ud y se s e t e a en l a conf i gur aci on
//
Fi t nes s Funct i on myFunc = new CambioMinimoFuncionAptitud ( Monto ) ;
conf . s e t Fi t nes s Func t i on (myFunc ) ;
// Ahora se debe i ndi c ar a l a conf i gur aci on como seran l o s cromosomas : en
// e s t e caso t endran 8 genes ( uno para cada t i po de moneda) con un v al or
// ent ero ( cant i dad de monedas de ese t i po ) .
// Se debe crear un cromosoma de ej empl o y c ar g ar l o en l a conf i gur aci on
// Cada gen t endra un v al or maximo y minimo que debe s e t e ar s e .
//
Gene [ ] sampleGenes = new Gene [ 6 ] ;
sampleGenes [ 0 ] = new IntegerGene ( conf , 0 ,
Math . round ( CambioMinimoFuncionAptitud .MAXMONTO/100) ) ; // Moneda 1 dol ar
sampleGenes [ 1 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 50 cent avos
sampleGenes [ 2 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 25 cent avos
sampleGenes [ 3 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 10 cent avos
sampleGenes [ 4 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 5 cent avos
sampleGenes [ 5 ] = new IntegerGene ( conf , 0 , 10) ; // Moneda 1 cent avos
2
1
IChromosome sampleChromosome = new Chromosome ( conf , sampleGenes ) ;
conf . setSampleChromosome ( sampleChromosome ) ;
// Por ul t i mo se debe i ndi c ar e l tamanio de l a pobl aci on en l a
// conf i gur aci on
//
conf . s e t Popul at i onSi z e ( 200) ;
Genotype Pobl aci on ;
// El framework permi t e obt ener l a pobl aci on i n i c i a l de ar chi vos xml
// pero para e s t e caso p a r t i c ul a r r e s ul t a mejor crear una pobl aci on
// al e at or i a , para e l l o se u t i l i z a e l metodo randomIni t i al Genot ype que
// devuel ve l a pobl aci on random creada
Pobl aci on = Genotype . randomI ni ti al Genotype ( conf ) ;
// La Pobl aci on debe evol uci onar para obt ener r e s ul t ados mas apt os
//
long TiempoComienzo = System . cur r ent Ti meMi l l i s ( ) ;
for ( i nt i = 0; i < MAX EVOLUCIONES PERMITIDAS; i ++) {
Pobl aci on . evol ve ( ) ;
}
long TiempoFin = System . cur r ent Ti meMi l l i s ( ) ;
System . out . pr i nt l n ( Tiempo t o t a l de evol uci on : + ( TiempoFin TiempoComienzo ) + ms ) ;
guardarPobl aci on ( Pobl aci on ) ;
// Una vez que l a pobl aci on evol uci ono es neces ar i o obt ener e l cromosoma
// mas apt o para most rarl o como s ol uc i on al probl ema pl ant eado para e l l o
// se u t i l i z a e l metodo get Fi t t est Chromosome
IChromosome cromosomaMasApto = Pobl aci on . getFi ttestChromosome ( ) ;
System . out . pr i nt l n ( El cromosoma mas apto encontrado t i e ne un val or de apt i t ud de :
+ cromosomaMasApto . get Fi t nes s Val ue ( ) ) ;
System . out . pr i nt l n ( Y e s t a formado por l a s i g ui e nt e di s t r i buc i o n de monedas : ) ;
2
2
System . out . pr i nt l n ( \t + CambioMinimoFuncionAptitud . getNumeroDeComendasDeGen(
cromosomaMasApto , 0) + Moneda 1 dol ar ) ;
System . out . pr i nt l n ( \t + CambioMinimoFuncionAptitud . getNumeroDeComendasDeGen(
cromosomaMasApto , 1) + Moneda 50 centavos ) ;
System . out . pr i nt l n ( \t + CambioMinimoFuncionAptitud . getNumeroDeComendasDeGen(
cromosomaMasApto , 2) + Moneda 25 centavos ) ;
System . out . pr i nt l n ( \t + CambioMinimoFuncionAptitud . getNumeroDeComendasDeGen(
cromosomaMasApto , 3) + Moneda 10 centavos ) ;
System . out . pr i nt l n ( \t + CambioMinimoFuncionAptitud . getNumeroDeComendasDeGen(
cromosomaMasApto , 4) + Moneda 5 centavos ) ;
System . out . pr i nt l n ( \t + CambioMinimoFuncionAptitud . getNumeroDeComendasDeGen(
cromosomaMasApto , 5) + Moneda 1 centavo ) ;
System . out . pr i nt l n ( Para un t o t a l de +
CambioMinimoFuncionAptitud . montoCambioMoneda( cromosomaMasApto) + centavos en
+ CambioMinimoFuncionAptitud . getNumeroTotalMonedas ( cromosomaMasApto) + monedas . ) ;
}
/
Metodo p r i nc i p a l : Reci be e l monto en di nero por parametro para det ermi nar
l a cant i dad minima de monedas neces ar i as para f ormarl o

@param args Monto de di nero


@throws Except i on

@author Gabri el Vel oso


@author Ruben Arce
@since 1. 0
/
public stati c void main( St r i ng [ ] ar gs ) throws Excepti on {
i nt amount = 323;
try {
//amount = I nt e g e r . par s eI nt ( args [ 0 ] ) ;
2
3
} catch ( NumberFormatException e ) {
System . out . pr i nt l n ( El ( Monto de di ner o ) debe s e r un numero ent er o val i do ) ;
System . e xi t ( 1 ) ;
}
i f ( amount < 1 | | amount >= CambioMinimoFuncionAptitud .MAXMONTO) {
System . out . pr i nt l n ( El monto de di ner o debe e s t ar ent r e 1 y +
( CambioMinimoFuncionAptitud .MAXMONTO 1) + . ) ;
} el se {
cal cul arCambi oMi ni mo ( amount ) ;
}
}
//
// Est e metodo permi t e guardar en un xml l a ul t i ma pobl aci on c al c ul ada
//
public stati c void guardarPobl aci on ( Genotype Pobl aci on ) throws Excepti on {
DataTreeBui l der bui l de r = DataTreeBui l der . ge t I ns t anc e ( ) ;
I DataCreators doc2 = bui l de r . representGenotypeAsDocument ( Pobl aci on ) ;
// cr eat e XML document from generat ed t r e e
XMLDocumentBuilder docbui l der = new XMLDocumentBuilder ( ) ;
Document xmlDoc = ( Document ) docbui l der . buildDocument ( doc2 ) ;
XMLManager . wr i t e Fi l e ( xmlDoc , new Fi l e ( PoblacionCambioMinimo . xml ) ) ;
}
}
2
4
2 . Anexo II: Ejemplo de Ejecuciones Y Resultados
Para $3.23 centavos
Tiempo t o t a l de evol uci on : 8221 ms
El cromosoma mas apto encontrado t i e ne un val or de apt i t ud de : 992. 0
Y e s t a formado por l a s i g ui e nt e di s t r i buc i o n de monedas :
3 Moneda 1 dol ar
0 Moneda 50 centavos
0 Moneda 25 centavos
2 Moneda 10 centavos
0 Moneda 5 centavos
3 Moneda 1 centavo
Para un t o t a l de 323 centavos en 8 monedas .
Para $5.92 centavos
Tiempo t o t a l de evol uci on : 10909 ms
El cromosoma mas apto encontrado t i e ne un val or de apt i t ud de : 989. 0
Y e s t a formado por l a s i g ui e nt e di s t r i buc i o n de monedas :
5 Moneda 1 dol ar
1 Moneda 50 centavos
1 Moneda 25 centavos
1 Moneda 10 centavos
1 Moneda 5 centavos
2 Moneda 1 centavo
Para un t o t a l de 592 centavos en 11 monedas .
Para $0.80 centavos
Tiempo t o t a l de evol uci on : 7300 ms
El cromosoma mas apto encontrado t i e ne un val or de apt i t ud de : 997. 0
Y e s t a formado por l a s i g ui e nt e di s t r i buc i o n de monedas :
0 Moneda 1 dol ar
1 Moneda 50 centavos
1 Moneda 25 centavos
0 Moneda 10 centavos
1 Moneda 5 centavos
0 Moneda 1 centavo
Para un t o t a l de 80 centavos en 3 monedas .
25
3 . Anexo III: Licencia JGAP
Este fragmento esta publicado en la p agina 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 WA-
RRANTY; 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 oer really a lot of unit tests which help
assure a very high probability for a correct piece of software!
26
4 . Anexo IV: Licencia
Actualizacion del manual de JGAP adaptado a la moneda de Dolar. by
Chuquihuanca-Vicente,Leonardo-Rafael and Saquicela-Celi,Yesica-Norelly, is licensed Under a
Creative Commons Attribution- NonCommercial-ShareAlike 4.0 Ecuador.
27