Академический Документы
Профессиональный Документы
Культура Документы
Renovables
INGENIERA EN SISTEMAS
Algoritmos Genticos
JGAP
POR:
DOCENTE:
LOJA -
2012
ECUADOR
ndice
Introduccin
Mtodos de Seleccin 10
Rueda de ruleta
10
11
Basado en el rango
11
Mtodo Estocstico
11
Mtodos de Reproduccin
Cruza Simple 12
12
Cruza Multipunto
12
Cruza binomial 12
Mutacin
13
Ejemplo de aplicacin: 15
12
Implementacin de ejemplo
Funcin Aptitud
16
19
Para 90 centavos
29
29
Para 87 Centavos
29
30
20
29
Bibliografa31
INTRODUCCIN
http://java.sun.com/javase/downloads/index.jsp
Se deben descargar las libreras de JGAP desde el sitio oficial hay un link a la ltima
versin. Hasta el da de hoy es la 3.5.
http://sourceforge.net/projects/jgap/files/jgap/
Una vez creado el proyecto se debe configurar el Build Path para incluir las libreras
de jgap. Haciendo clic derecho en el proyecto y seleccionando Set Configuratin ->
Customize
Una vez realizado esto ya se puede utilizar las libreras desde una clase
java de ese proyecto.
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.
MTODOS DE SELECCIN
Rueda de ruleta
Basado en el rango
Mtodo Estocstico
MTODOS DE REPRODUCCIN
Cruza Simple
XYX | XYYYX
YYX|YYXXY
XYX | YYXXY
YYX | XYYYX
Cruza Multipunto
X | YXX | Y | YY | X X | YXY | Y
| XX | X
Y | YXY | Y | XX | Y Y | YXX |
Y | YY | Y
Cruza binomial
Mutacin
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.
EJEMPLO DE APLICACIN:
1 Moneda de un dlar
1 Moneda de 25 centavos
1 Moneda de 10 centavos
3 monedas en total
27 Monedas de 5 centavos.
27 monedas en total.
Moneda de 50 centavos
Moneda de 25 centavos
Moneda de 10 centavos
Moneda de 5 centavos
Moneda de 1 centavo
IMPLEMENTACIN DE EJEMPLO
// la prxima generacin //
conf.setPreservFittestIndividual(true);
este caso tendran 6 genes (uno para cada tipo de moneda) con un // valor
configuracion
conf.setPopulationSize(200);
Poblacion = Genotype.randomInitialGenotype(conf);
Pobl acion,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. Para ms detalle ver el
cdigo fuente del anexo.
guardarPoblacion(Poblacion);
Funcin Aptitud
package practica1;
import java.io.File;
import org.w3c.dom.Document;
/**
@since 1.0
*/
/**
@param Monto
posibles
@throws Exception
@since 1.0
*/
-------------------------------------------------------------
la proxima generacion
// -------------------------------------------------------------
conf.setPreservFittestIndividual(true);
// --------------------------------------------------------------
configuracion
// ------------------------------------------------------------
pero para este caso particular resulta mejor crear una poblacion
Poblacion = Genotype.randomInitialGenotype(conf);
ms");
guardarPoblacion(Poblacion);
mas apto para mostrarlo como solucion al problema planteado para ello
+ cromosomaMasApto.getFitnessValue());
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 0) + "
Moneda 1 dolar");
System.out.println("\t" +
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 1) + "
Moneda 50 centavos");
System.out.println("\t" +
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 2) + "
Moneda 25 centavos");
System.out.println("\t" +
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 3) + "
Moneda 10 centavos");
System.out.println("\t" +
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 4) + "
Moneda 5 centavos");
System.out.println("\t" +
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 5) + "
Moneda 1 centavo");
/**
@param args
Monto de dinero
@throws Exception
@since 1.0
*/
public static void main(String[] args) throws Exception { int amount = 353;
try {
valido");
System.exit(1);
calcularCambioMinimo(amount);
// ---------------------------------------------------------------------
package practica1;
import org.jgap.*;
Maximo monto posible 1000 Centimos = 10 Euros public static final int MAX_MONTO =
1000;
una excepcion
" + MAX_MONTO
+ " centimos");
montoObjetivo = monto;
/**
@param cromosoma
El cromosoma a evaluar
*/
boolean evaluadorEstandard =
cromosoma.getConfiguration().getFitnessEvaluator().isFitter(2, 1);
} else {
if (diferenciaMonto != 0)
return MAX_CANT_MONEDAS;
if (evaluadorEstandard) {
menos apto )
} else {
/**
@param cromosoma
El cromosoma a evaluar
de ese cromosoma
*/
/**
@param cromosoma
El cromosoma a evaluar
@param numeroGen
cantidad
*/
cromosoma.getGene(numeroGen).getAllele();
return numMonedas.intValue();
/**
Calcula el total de monedas que tiene esa solucion. Este valor se utiliza
@param cromosoma
El cromosoma a evaluar
*/
return totalMonedas;
3 Moneda 1 dlar
1 Moneda 50 centavos
0 Moneda 25 centavos
0 Moneda 10 centavos
0 Moneda 5 centavos
3 Moneda 1 centavo
1 Moneda 1 dlar
1 Moneda 50 centavos
0 Moneda 25 centavos
0 Moneda 10 centavos
1 Moneda 5 centavos
0 Moneda 1 centavo
2 Moneda 1 dlar
0 Moneda 50 centavos
1 Moneda 25 centavos
3 Moneda 10 centavos
1 Moneda 5 centavos
3 Moneda 1 centavo
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. Inste|ad, 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!
Bibliografa: