SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
1
“Predicción de los Cuatro Posibles Ganadores de la
Copa Mundial de Fútbol BRASIL 2014 a través de
Algoritmos Genéticos”
L. Bravo, K. Herrera, J. Martínez, H. Paz,
Resumen—A pocos días de aproximarse el mundial de fútbol
BRASIL 2014 y como aplicación de las técnicas de inteligencia
artificial, específicamente de los algoritmos genéticos, se ha
propuesto desarrollar una aplicación bajo el lenguaje de pro-
gramación Java, la cuál pretende pronosticar los cuatro posibles
equipos que pueden consagrarse como el campeón mundial de
Fútbol en base a distintos factores tales como el ranking de la
Federación Internacional de Fútbol Asociada (FIFA) , el grupo en
el que se encuentra ubicado, el número de copas obtenidas y los
últimos tres partidos jugados que tenga cada equipo clasificado.
Palabras Claves—Algoritmos genéticos, fútbol, optimización,
mundial, java, JGAP
I. INTRODUCCIÓN
Los Algoritmos Genéticos surgieron con la necesidad de
optimizar los procesos de búsqueda basada en la teoría de la
evolución planteada por Charles Darwin, siendo esta técnica
de inteligencia artificial una de las mas aceptadas para resolver
problemas de búsqueda. Los algoritmos genéticos emplean di-
ferentes criterios de selección que ayudan a que una población
evolucione de forma más optima para obtener resultados mas
exactos para un problema específico.
En el presente trabajo se pretende crear una aplicación ba-
sada en algoritmos genéticos que permita predecir los cuatro
equipos que pudieran obtener la copa mundial de fútbol. Para
alcanzar la solución al problema planteado se parte de un
conjunto inicial de individuos(Equipos), llamado población,
generado de manera aleatoria. Cada uno de estos individuos
representa una posible solución al problema y se adaptarán en
mayor medida tras el paso de cada generación a la solución
requerida.
II. ESTADO DEL ARTE
II-A. HISTORIA DE LOS ALGORITMOS GENÉTICOS
El desarrollo de los Algoritmos Genéticos(AGs) se debe a
gran medida a John Holland, investigador de la Universidad
de Michigan. A finales de la década de los 60 desarrolló
una técnica que imitaba en su funcionamiento a la selección
natural.
L. Bravo , Estudiante de la Universidad Nacional de Loja, Loja, Ecua-
dor, E-mail: lfbravoe@unl.edu.ec
K. Herrera,Estudiante de la Universidad Nacional de Loja, Loja, Ecua-
dor, E-mail: kkherrerap@unl.edu.ec
J. Martínez,Estudiante de la Universidad Nacional de Loja, Loja, Ecua-
dor, E-mail: jamartinezg@unl.edu.ec
H. Paz, Docente de la Universidad Nacional de Loja, Loja, Ecua-
dor, E-mail: hpaz@unl.edu.ec
Finales de los 59 y principios de los 60.- Algoritmos
Genéticos programados en computadoras por biólogos
evolutivos que buscaban explícitamente realizar modelos
de aspectos de la evolución natural.
En 1962, investigadores como G.E.P. Box, G.J. Fried-
man, W.W. Bledsoe y H.J. Bremermann habían desa-
rrollado independientemente algoritmos inspirados en la
evolución para optimización de funciones y aprendizaje
automático, pero sus trabajos generaron poca reacción.
En 1965 surgió un desarrollo más exitoso, cuando Ingo
Rechenberg, entonces de la Universidad Técnica de Ber-
lín, introdujo una técnica que llamó estrategia evolutiva.
En 1975 apareció el trabajo fundamental en el campo
de los algoritmos genéticos con la publicación del libro
“Adaptación en Sistemas Naturales y Artificiales” de
John Holland’.
A finales de 1980s la General Electric comenzó a vender
el primer producto de Algoritmo Genético para solucio-
nar problemas de procesos industriales.
En 1989 se creó el producto Evolver que fue el pri-
mer producto de Algoritmo Genético para Computadoras
personales.[1]
II-B. DEFINICIÓN DE ALGORITMOS GENÉTICOS
“Los Algoritmos Genéticos(AGs) son algoritmos de
búsqueda basados en la mecánica de la selección natural
y de la genética natural. Combinan la supervivencia del
más apto entre estructuras de secuencias con intercambio
de información estructurado, aunque aleatorizado, para
constituir así un algoritmo de búsqueda que tenga algo de las
genialidades de las búsquedas humanas”.
Un algoritmo genético consiste en una población de
soluciones codificadas de forma similar a cromosomas.
Cada uno de estos cromosomas tendrá asociado un ajuste
o valor de bondad que cuantifica su validez como solución
del problema. En función de este valor se le darán más o
menos oportunidades de reproducción. Además, con cierta
probabilidad se realizarán mutaciones de estos cromosomas.[1]
Cuando el Algoritmo Genético es implementado, se hace de
forma que involucre el siguiente ciclo:
Generación de una población inicial de manera aleatoria.
Evaluar el desempeño de todos los individuos de la
población, tomando en cuenta alguna función objetivo.
2
Crear una nueva población mediante la ejecución de
operaciones como el cruce y mutación sobre individuos
cuyo desempeño haya sido evaluado.
Descartar la población vieja e iterar usando la nueva,
hasta que el número de generaciones alcanza al criterio
de terminación.
Figura 1. Implementación de un Algoritmo Genético
II-C. CLASIFICACIÓN DE LOS ALGORITMOS GENÉTI-
COS
II-C1. Algoritmo Genético Simple: El Algoritmo
Genético Simple, también denominado Canónico, 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 cruzarán generando dos hijos, sobre cada uno de los
cuales actuará 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án parte de la
siguiente población.
II-C2. Algoritmos Genéticos de Estado Fijo: Utilizan el
esquema generacional de los mamíferos y otros animales
de vida larga,donde coexisten padres y sus descendientes,
En este modelo,no solo se deben seleccionar los dos
individuos a ser padres sino también cuales de la población
anterior serán eliminados para dar espacio a los descendientes.
II-C3. Algoritmos Genéticos Paralelos: Son aquellos
donde al evolucionar se recorren simultáneamente muchas
soluciones.cada una representada por un individuo de la
población.
II-C4. Modelo de Islas: Si se tiene una población de
individuos, esta se divide en subpoblaciones que evolucionan
independientemente como un Algoritmo Genético normal.
II-C5. Modelo Celular: Coloca cada individuo en una
matriz, dónde cada uno solo podrá reproducirse con los
individuos que tenga a su alrededor, escogiendo al azar o al
mejor adaptado.
II-D. ELEMENTOS DE LOS ALGORITMOS GENÉTICOS
II-D1. Individuo : Un individuo es un ser que caracteriza
su propia especie. El individuo es un cromosoma y es el
código de información sobre el cual opera el algoritmo. Cada
solución parcial del problema a optimizar está codificada en
forma de cadena o String en un alfabeto determinado, que
puede ser binario.
II-D2. Población : A un conjunto de individuos
(Cromosomas) se le denomina población. El método de
Algoritmos Genéticos consiste en ir obteniendo de forma
sucesiva distintas poblaciones. Por otra parte un Algoritmo
Genético trabaja con un conjunto de puntos representativos
de diferentes zonas del espacio de búsqueda y no con un solo
punto (como lo hace Hillclimbing).
II-D3. Función Fitness : La única restricción para usar
un algoritmo genético es que exista una función llamada
fitness, que le informe de cuan bueno es un individuo dado
en la solución deun problema. Esta función fitness o de
evaluación es el principal enlace entre el Algoritmo Genético
a un problema real, es la efectividad y eficiencia de la función
fitness que se tome, por lo tanto debe procurarse que la función
fitness sea similar. [2]
II-E. ESTRUCTURA DE LOS ALGORITMOS GENÉTICOS
II-E1. Tipos de Representación : Una representación
debe identificar las características constituyentes del conjunto
a estudiar, de forma que distintas representaciones dan lugar
a distintas perspectivas y por tanto distintas soluciones.
Tipos básicos de representaciones:
Representación binaria: Cada gen es un valor 1 ó 0.
Figura 2. Representación Binaria
3
Representación entera: Cada gen es un valor entero.
Figura 3. Representación Entera
Representación real: Cada gen es un valor real.
Figura 4. Representación Real
II-E2. Población Inicial : Una cuestión que se puede
plantear es la relacionada con el tamaño idóneo de la
población. Parece intuitivo que las poblaciones pequeñas
corren el riesgo de no cubrir adecuadamente el espacio
de búsqueda, mientras que el trabajar con poblaciones de
gran tamaño puede acarrear problemas relacionados con el
excesivo costo computacional.
II-E3. Función Objetivo : El resultado al cual se desea
llegar.
II-E4. Operador de Selección : El operador de
Selección es el encargado de transmitir y conservar aquellas
características de las soluciones que se consideran valiosas
a lo largo de las generaciones. El principal medio para que
la información útil se transmita es que aquellos individuos
mejor adaptados tengan más probabilidades de reproducirse.
Selección directa: Toma elementos de acuerdo a un
criterio objetivo, como son los x mejores,los x peores,
los del tipo el cuarto individuo a partir del último
escogido son empleados con mucha frecuencia cuando
se quieren seleccionar dos individuos distintos.
Selección aleatoria: Puede ser realizado por selección
equiprobable o selección estocástica.
Selección equiprobable: Todos tienen la misma
probabilidad de ser escogidos.
Selección estocástica: La probabilidad de que un
individuo sea escogido depende de una heurística.
• Selección por sorteo: Cada individuo de la
población tiene asignado un rango proporcional
oinversamente proporcional.
• Selección por escaños: Se divide el rango del
número aleatorio en un número predeterminado de
escaños.
• Selección por restos estocásticos: Igual que el
método de selección de escaños, sólo que los
escaños no asignados directamente.
Selección por Ruleta: Con este método la probabilidad
que tiene un individuo de reproducirse es proporcional
a su valor de función de evaluación, es decir, a su
adaptación. En este método se define un rango con las
características de la selección por sorteo. El número al
azar será un número aleatorio forzosamente menor que
el tamaño del rango. El elemento escogido será aquel
en cuyo rango esté el número resultante de sumar el
número aleatorio con el resultado total que sirvió para
escoger el elemento anterior.
Selección por Ranking: Desarrollado por Whitley(1989)
consiste en calcular las probabilidades de reproducción
atendiendo a la ordenación de la población por el valor
de adaptación en vez de atender simplemente a su valor
de adecuación. Estas probabilidades se pueden calcular
de diversas formas, aunque el método habitual es el
ranking lineal.
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.[3]
II-E5. Operador de Cruce : El operador de Cruce permite
realizar una exploración de toda la información almacenada
hasta el momento en la población y combinarla para crear
mejores individuos. Dentro de los métodos habituales
destacamos los siguientes:
Cruce de un punto: Es el método de cruce más
sencillo. Se selecciona una posición en las cadenas
de los progenitores, y se intercambian los genes a la
izquierda de esta posición.
4
Figura 5. Cruce por un punto
Cruce de n puntos: Es una generalización del método
anterior. Se seleccionan varias posiciones (n) en las
cadenas de los progenitores y se intercambian los genes
a ambos lados de estas posiciones.
Figura 6. Cruce por n puntos
Cruce Uniforme: Se realiza un test aleatorio para decidir
de cual de los progenitores se toma cada posición de la
cadena.[4]
Figura 7. Cruce uniforme
Cruces para permutación: Existe una familia de cruces
específicas para los problemas de permutación, siendo
algunos de ellos:
• Cruce de mapeamiento parcial: Toma una
subsecuencia del genoma del padre y procura
preservar el orden absoluto de los fenotipos - es
decir, orden y posición en el genoma- del resto del
genoma lo más parecido posible de la madre.
• Cruce de orden: Toma una subsecuencia del
genoma del padre y procura preservar el orden
relativo de los fenotipos del resto del genoma lo
más parecido posible de la madre.
II-E6. Operador de Mutación: La mutación se considera
un operador básico, que proporciona un pequeño elemento de
aleatoriedad en el entorno de los individuos de la población.
Si bien el operador de cruce es el responsable de efectuar la
búsqueda a lo largo del espacio de posibles soluciones, el
operador de mutación va ganando en importancia a medida
que la población de individuos va convergiendo. Existen
varias técnicas distintas de mutación. Algunas de éstas son:
Mutación de bit: Existe una única probabilidad de que
se produzca una mutación de algún bit. De producirse,
el algoritmo toma aleatoriamente un bit.
Mutación de gen: Igual que la mutación de bit,
solamente que, en vez de cambiar un bit, cambia un gen
completo.
Mutación multigen: Igual que la mutación de multibit,
solamente que, en vez de cambiar un conjunto de
bits, cambia un conjunto de genes. Puede sumar un
valor aleatorio, un valor constante, o introducir un gen
aleatorio nuevo.
II-F. ¿QUÉ PROBLEMAS PODEMOS RESOLVER CON
ALGORITMOS GENÉTICOS?
La aplicación más común de los AGs ha sido la solución
de problemas de optimización en donde han mostrado ser
eficientes y confiables.
Sin embargo, no todos los problemas pudieran ser apropiados
para la técnica y se recomienda en general tomar en cuenta
las siguientes características del mismo antes de usarla:
Su espacio de búsqueda o sus posibles soluciones debe
de estar delimitado dentro de un cierto rango.
Debe permitir la definición de una función de aptitud
que nos indique que tan buena o mala es cierta respuesta.
Las soluciones deben programarse de una forma
que resulte relativamente fácil de implementar en el
computador.[5]
II-G. ÁREA DE APLICACIÓN DE LOS ALGORITMOS GE-
NÉTICOS
II-G1. Optimización : Se trata de un campo especialmente
abonado para el uso de los AG, por las características
intrínsecas de estos problemas. No en vano fueron la fuente
de inspiración para los creadores de estos algoritmos. Los
AG se han utilizado en numerosas tareas de optimización,
incluyendo la optimización numérica, y los problemas de
optimización combinatoria.
II-G2. Programación automática : Los AG se han
empleado para desarrollar programas para tareas específicas,
y para diseñar otras estructuras computacionales tales como
el autómata celular, y las redes de clasificación.
5
II-G3. Aprendizaje máquina : Los AG se han utilizado
también en muchas de estas aplicaciones , tales como la
predicción del tiempo o la estructura de una proteína. Han
servido asimismo para desarrollar determinados aspectos
de sistemas particulares de aprendizaje, como puede ser el
de los pesos de una red neuronal, las reglas para sistemas
de clasificación de aprendizaje o sistemas de producción
simbólica y los sensores para los robots.
II-G4. Economía : En este caso, se ha hecho uso de estos
Algoritmos para modelar procesos de innovación, el desarrollo
de estrategias de puja, y la aparición de mercados económicos.
II-G5. Sistemas inmunes : Al momento de modelar
varios aspectos de los sistemas inmunes naturales, incluyendo
la mutación somática durante la vida de un individuo y el
descubrimiento de familias de genes múltiples en tiempo
evolutivo, ha resultado útil el empleo de esta técnica.
II-G6. Genética de poblaciones : En el estudio de
preguntas del tipo "¿ Bajo qué condiciones será viable
evolutivamente un gen para la recombinación?".
II-G7. Evolución y aprendizaje: Los AG se han utilizado
en el estudio de las relaciones entre el aprendizaje individual
y la evolución de la especie.
II-G8. Sistemas sociales: En el estudio de aspectos
evolutivos de los sistemas sociales, tales como la evolución
del comportamiento social en colonias de insectos, y la
evolución de la cooperación y la comunicación en sistemas
multiagentes.[6]
II-H. LIBRERÍA JGAP
Figura 8. Librería JGAP
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.
JGAP es software libre y se puede distribuir bajo la GNU
Lesser PublicLicense 2.1 o posterior. Las aplicaciones
comerciales que no publiquen sucódigo fuente deben
distribuirse bajo la Mozilla Public License.[7]
II-H1. Interfaces, Clases y Excepciones de la Librería
JGAP: JGAP nos proporciona las siguientes interfaces:
Figura 9. Interfaces de la librería JGAP
JGAP cuenta con las siguientes clases:
Figura 10. Clases de la librería JGAP
JGAP tiene las siguientes excepciones:
Figura 11. Excepciones de la librería JGAP
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
6
mencionadas. Así se adapta JGAP al problema específico que
se quiere solucionar.
II-H2. 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().
III. IMPLEMENTACIÓN
Código de la Clase TestEquipoFitness en la que definimos
a través de la utilización de algoritmos genéticos las caracte-
rístcas de que va a tener la solución:
%CODIGO DE LA CLASE TestEquipoFitness
package ec.unl.edu.ag;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import org.jgap.Chromosome;
import org.jgap.Configuration;
import org.jgap.DefaultFitnessEvaluator;
import org.jgap.Gene;
import org.jgap.Genotype;
import org.jgap.IChromosome;
import org.jgap.impl.DefaultConfiguration;
import org.jgap.impl.IntegerGene;
import org.jgap.impl.SwappingMutationOperator;
import ec.unl.edu.clases.Equipo;
import ec.unl.edu.operaciones.Operaciones;
public class TestEquipoFitness {
String respuesta = "";
String fitnessValor = "";
public String getRespuesta() {
return respuesta;
}
public void setRespuesta(
String respuesta) {
this.respuesta = respuesta;
}
private ArrayList<String> respuestaVista=
new ArrayList<String>();
public ArrayList<String> getRespuestaVista() {
return respuestaVista;
}
public void setRespuestaVista(
ArrayList<String> respuestaVista) {
this.respuestaVista = respuestaVista;
}
private Configuration configuracion;
private SwappingMutationOperator
operadorMutacion;
private EquipoFitnessFunction
equipoFitness = null;
public ArrayList<Equipo> equipos =
new ArrayList<Equipo>();
public List genes = new ArrayList();
public ArrayList<String> listaRespuesta =
new ArrayList<String>();
Operaciones operaciones = new Operaciones();
private static final int MAX_ALLOWED_EVOLUTIONS =
2000;
private Chromosome equipoCromosoma = null;
public void inicializar(String tipo)
throws Exception {
StringTokenizer st =
new StringTokenizer(tipo);
while (st.hasMoreElements()) {
String gen = st.nextToken();
genes.add(gen);
}
equipos = operaciones.recuperarEquipos();
configuracion = new DefaultConfiguration();
Configuration.resetProperty(
Configuration.PROPERTY_FITEVAL_INST);
configuracion.setFitnessEvaluator(
new DefaultFitnessEvaluator());
configuracion.getGeneticOperators().clear();
operadorMutacion =
new SwappingMutationOperator(configuracion);
configuracion.addGeneticOperator(operadorMutacion);
configuracion.setPreservFittestIndividual(true);
configuracion.setPopulationSize(1000);
configuracion.setKeepPopulationSizeConstant(false);
equipoFitness = new EquipoFitnessFunction(
equipos, genes);
configuracion.setFitnessFunction(equipoFitness);
Gene[] equiposGenes = new Gene[4];
equiposGenes[0] = new IntegerGene(
configuracion, 0,equipos.size()-1);
equiposGenes[1] = new IntegerGene(
configuracion, 0,equipos.size()-1);
equiposGenes[2] = new IntegerGene(
configuracion, 0,equipos.size()-1);
equiposGenes[3] = new IntegerGene(
configuracion, 0,equipos.size()-1);
equipoCromosoma = new Chromosome(
configuracion, equiposGenes);
equiposGenes[0].setAllele(0);
equiposGenes[1].setAllele(1);
equiposGenes[2].setAllele(2);
equiposGenes[3].setAllele(3);
7
configuracion.setSampleChromosome(
equipoCromosoma);
}
public void pruebaSeleccionarMejoresEquipos()
throws Exception {
equipos = operaciones.recuperarEquipos();
Genotype poblacion =
Genotype.randomInitialGenotype(
configuracion);
IChromosome mejorSolucionHastaAqui =
equipoCromosoma;
for (int i=0;i<MAX_ALLOWED_EVOLUTIONS;i++) {
// evolucionar poblacion
poblacion.evolve();
IChromosome candidatoAMejorSolucion =
poblacion.getFittestChromosome();
if (candidatoAMejorSolucion.getFitnessValue() >
mejorSolucionHastaAqui.getFitnessValue()) {
mejorSolucionHastaAqui =
candidatoAMejorSolucion;
}
}
this.setRespuestaVista(
retornarSolucionFinal(
mejorSolucionHastaAqui,equipos));
}
public ArrayList<String> retornarSolucionFinal(
IChromosome solution,
ArrayList<Equipo> equipos) {
fitnessValor =
String.valueOf(
solution.getFitnessValue());
for (int i=0;i<solution.size(); i++) {
int index =
(Integer) solution.getGene(i).getAllele();
Equipo equipo = (Equipo) equipos.get(index);
listaRespuesta.add(
equipo.getNombre().toString());
}
return listaRespuesta;
}
public String presentarRespuesta()
throws Exception {
equipos =
operaciones.recuperarEquipos();
Genotype poblacion =
Genotype.randomInitialGenotype(configuracion);
String salida = "";
IChromosome mejorSolucionHastaAqui =
equipoCromosoma;
for (int i=0; i<MAX_ALLOWED_EVOLUTIONS;i++){
// evolucionar poblacion
poblacion.evolve();
IChromosome candidatoAMejorSolucion =
poblacion.getFittestChromosome();
salida = salida
+ candidatoAMejorSolucion
+"n";
}
salida = salida
+ "n >>> Valor Fitness: "
+ fitnessValor;
return salida;
}
}
La clase EquipoFitnessFunction es la que trataremos las condi-
ciones de entrada que tendrá nuestro algoritmo: el número de
copa, el ranking en la FIFA y el resultado de sus tres últimos
partidos:
%CODIGO DE LA CLASE EquipoFitnessFunction
package ec.unl.edu.ag;
import java.util.ArrayList;
import java.util.List;
import org.jgap.FitnessFunction;
import org.jgap.IChromosome;
import org.jgap.impl.IntegerGene;
import ec.unl.edu.clases.Equipo;
public class EquipoFitnessFunction
extends FitnessFunction {
ArrayList<Equipo> equipos =
new ArrayList<Equipo>();
List genes =
new ArrayList();
public EquipoFitnessFunction(
ArrayList<Equipo> equipos,
List genes) {
this.equipos = equipos;
this.genes = genes;
}
@Override
protected double evaluate(
IChromosome icromosoma) {
double puntuacion = 0;
List dups = new ArrayList();
int malaSolucion = 1;
for(int i=0;i<icromosoma.size();i++) {
IntegerGene un_gen =
(IntegerGene) icromosoma.getGene(i);
int indice =
(Integer) icromosoma.getGene(i).getAllele();
8
if (dups.contains(indice)) {
malaSolucion = 0;
} else {
dups.add(indice);
}
Equipo equipo = equipos.get(indice);
double puntuacionGenes =
this.obtenerPuntuacionGenes(equipo);
if(puntuacionGenes == 0){
malaSolucion = 0;
}
double resultado1 =
equipo.getAntepenultimo_partido();
double resultado2 =
equipo.getPenultimo_partido();
double resultado3 =
equipo.getUltimo_partido();
puntuacion =
(puntuacion
+ resultado1
+ resultado2
+ resultado3
+ puntuacionGenes);
}
return (
puntuacion*malaSolucion);
}
private int obtenerPuntuacionGenes(
Equipo equipo) {
int _ranking=0;
int _partido_antepenultimo=0;
int _partido_penultimo=0;
int _partido_ultimo=0;
int total=0;
int numero_copas =
equipo.getNumero_copas();
int ranking_fifa =
equipo.getRanking();
int antepenultimo =
equipo.getAntepenultimo_partido();
int penultimo =
equipo.getPenultimo_partido();
int ultimo =
equipo.getUltimo_partido();
if (antepenultimo == 1) {
_partido_antepenultimo = 1;
}
if (antepenultimo == 0) {
_partido_antepenultimo = 0;
}
if (antepenultimo == -1) {
_partido_antepenultimo = -1;
}
if (penultimo == 1) {
_partido_penultimo = 1;
}
if (penultimo == 0) {
_partido_penultimo = 0;
}
if (penultimo == -1) {
_partido_penultimo = -1;
}
if (ultimo == 1) {
_partido_ultimo = 1;
}
if (ultimo == 0) {
_partido_ultimo = 0;
}
if (ultimo == -1) {
_partido_ultimo = -1;
}
if ((ranking_fifa >= 1)
&& (ranking_fifa <= 10)) {
_ranking = 12;
}
if ((ranking_fifa >= 11)
&& (ranking_fifa <= 20)) {
_ranking = 11;
}
if ((ranking_fifa >= 21)
&& (ranking_fifa <= 30)) {
_ranking = 10;
}
if ((ranking_fifa >= 31)
&& ((ranking_fifa) <= 40)) {
_ranking = 9;
}
if ((ranking_fifa >= 41)
&& (ranking_fifa <= 50)) {
_ranking = 8;
}
if ((ranking_fifa >= 51)
&& (ranking_fifa <= 60)) {
_ranking = 7;
}
if ((ranking_fifa >= 61)
&& (ranking_fifa <= 70)) {
_ranking = 6;
}
if ((ranking_fifa >= 71)
&& (ranking_fifa <= 80)) {
_ranking = 5;
}
if ((ranking_fifa >= 81)
&& (ranking_fifa <= 90)) {
_ranking = 4;
}
if ((ranking_fifa >= 91)
&& (ranking_fifa <= 100)) {
_ranking = 3;
}
if ((ranking_fifa >= 101)
&& (ranking_fifa <= 110)) {
_ranking = 2;
}
9
if ((ranking_fifa >= 111)) {
_ranking = 1;
}
total =
numero_copas
+ _ranking
+ _partido_antepenultimo
+ _partido_penultimo
+ _partido_ultimo;
return total;
}
}
Como se ha propuesto obtener los cuatro mejores candidatos
a ganar el Mundial tenemos, la clase en la cual se ejecuta el
algoritmo genético la cual es la siguiente:
/** Evento dentro del boton Obtener
* para ejecutar el Algoritmo
* Genetico
*/
btnObtener.addActionListener(
new ActionListener() {
public void actionPerformed(
ActionEvent arg0) {
/** llamado a la clase TestEquipoFitness
* para obtener los resultados
*/
TestEquipoFitness test =
new TestEquipoFitness();
try {
test.inicializar(" ");
test.pruebaSeleccionarMejoresEquipos();
String valorConsola =
test.presentarRespuesta();
txtAreaConsola.setText(valorConsola);
/** obtiene la lista de resultados
* y los presenta en los
* cuadros de texto
* correspondientes
*/
ArrayList<String> resultados =
test.getRespuestaVista();
txtEquipo1.setText(
resultados.get(0));
txtEquipo2.setText(
resultados.get(1));
txtEquipo3.setText(
resultados.get(2));
txtEquipo4.setText(
resultados.get(3));
Configuration.reset();
} catch (Exception e) {
e.printStackTrace();
}
}
});
IV. RESULTADOS
En esta figura 12 podemos observar de manera general
la aplicación:
Figura 12. Aplicación para el Mundial 2014 en base a AG
En la figura 13 podemos ver como es presentado un
seleccionado:
Figura 13. Presentación de un Equipo
En la figura 14 podemos ver como se puede ser
modificar a un seleccionado:
10
Figura 14. Modificación de un Equipo
En la figura 15 podemos ver cual es el resultado, luego
de la ejecución del AG:
Figura 15. Presentación de Resultado:Cuatro posibles equipos ganadores
El código de la aplicación estará disponible en la siguiente
dirección:
github.com/JhymerMartinez/AlgoritmosGeneticosMundial.git
V. CONCLUSIONES Y RECOMENDACIONES
Como podemos comprobar los algoritmos genéticos
sirven para problemas de optimización de recursos,
en este caso nos permite obtener los mejores equipos
candidatos a ganar el mundial.
El mejor resultado que podemos obtener, dependerá de
la ubicación que tenga el equipo en el ranking dentro
de la clasificación, el número de copas ganadas, así
como se pueden agregar otros factores que permitan
determinar con más exactitud el resultado.
La utilización de una librería como JGAP en nuestra
aplicación permite una mejor implementación de los
algoritmos genéticos en aplicaciones con lenguaje JAVA.
Los algoritmos genéticos utilizan una simulación de los
procesos genéticos que se realizan en los genomas del
ser humano, su implementación y uso es cada vez más
aceptada en la comunidad científica.
Es importante considerar la utilización de una librería de
algoritmos genéticos como JGAP, la cual nos permitirá
aplicar los conocimientos de algoritmos genéticos en la
programación utilizando lenguaje JAVA.
Este tipo de aplicaciones prácticas permiten mejorar la
comprensión de los conocimientos teóricos referentes a
la técnica de algoritmos genéticos.
REFERENCIAS
[1] HERNANDEZ. LYDY,LOPEZ. RICARDO,MENDIOLA.ROSA
Algoritmos Genéticos, Ingeniería Cibernética y en Sistemas
Computacionales, Universidad de la Salle: Bogotá, 2011.[En línea].
Available:http://www.maestrosilvestre.aprenderapensar.net/files/2011/05/02-
AG.doc.[Último acceso: 27 de Mayo 2014].
[2] RAMIREZ.CAMILO, Algoritmos Genéticos,, Bogotá, 2013.[En
línea]. Available:http://camilortte.blogspot.com/2013/04/algoritmos-
geneticos.html.[Último acceso: 27 de Mayo 2014].
[3] GIL.NATHYELEM, Algoritmos Genéticos,Universidad Nacional
de Colombia,2006. [En línea]. Available: http://www.trabajos-
pdf/algoritmos-geneticos/algoritmos-geneticos.pdf. [Último acceso:
27 de Mayo 2014].
[4] GESTAL. MARCOS, Introducción a los Algoritmos Ge-
néticos,Universidad de Coruña,2006.[En línea]. Available:
http://sabia.tic.udc.es/mgestal/cv/aaggtutorial/node14.html. [Último
acceso: 27 de Mayo 2014].
[5] Algoritmos Genéticos,[En línea]. Available:
http://www.sc.ehu.es/ccwbayes/docencia/mmcc/docs/temageneticos.pdf
[Último acceso: 27 de Mayo 2014].
[6] Algoritmos Genéticos,[En línea]. Availa-
ble:http://users.exa.unicen.edu.ar/ icompevol/filminasenpdf/tercera-
clase.pdf. [Último acceso: 27 de Mayo 2014].
[7] Package org.jgap,[En línea]. Availa-
ble:http://jwork.org/scavis/api/doc.php/ org/jgap/package-
summary.html[Último acceso: 27 de Mayo 2014].
11
Luis Bravo
Estudiante de la Carrera de Ingeniería en Sistemas de la
Universidad Nacional de Loja, Nivel Medio en Software Libre, Redes
y Mantenimiento, Provincia de Loja, Ciudad Loja, Ecuador, 2014.
Karla Herrera
Estudiante de la Carrera de Ingeniería en Sistemas de la
Universidad Nacional de Loja, Programador Senior en Java, Analista
de Sistemas nivel medio, Provincia de Loja, Ciudad Loja, Ecuador,
2014.
Jhymer Martínez
Estudiante de la Carrera de Ingeniería en Sistemas de la
Universidad Nacional de Loja, Programador Senior en Java, Analista
de Sistemas nivel medio,Provincia de Loja, Ecuador, 2014.

Más contenido relacionado

La actualidad más candente

5 herramienta aprendizaje algoritmos geneticos entorno matlab
5 herramienta aprendizaje algoritmos geneticos entorno matlab5 herramienta aprendizaje algoritmos geneticos entorno matlab
5 herramienta aprendizaje algoritmos geneticos entorno matlabMaje Gonzalez
 
Algoritmo genetico
Algoritmo geneticoAlgoritmo genetico
Algoritmo geneticoMarco Gámez
 
Trabajo+completo+de+inteligencia+algoritmo+genetico
Trabajo+completo+de+inteligencia+algoritmo+geneticoTrabajo+completo+de+inteligencia+algoritmo+genetico
Trabajo+completo+de+inteligencia+algoritmo+geneticoRufino meri?
 
Presentacion Proyecto
Presentacion ProyectoPresentacion Proyecto
Presentacion Proyectoamoebaz
 
10 DiseñO Con Algoritmos GenéTicos
10 DiseñO Con Algoritmos GenéTicos10 DiseñO Con Algoritmos GenéTicos
10 DiseñO Con Algoritmos GenéTicosESCOM
 
Algoritmo genetico
Algoritmo geneticoAlgoritmo genetico
Algoritmo geneticoRufino meri?
 
Utp i_ay_se_s10_algoritmo genéticos_
 Utp i_ay_se_s10_algoritmo genéticos_ Utp i_ay_se_s10_algoritmo genéticos_
Utp i_ay_se_s10_algoritmo genéticos_jcbenitezp
 
Algoritmos genéticos con matlab
Algoritmos genéticos con matlabAlgoritmos genéticos con matlab
Algoritmos genéticos con matlabUNIV OF PERU
 
Algoritmos Genéticos_Inteligencia Artificial
Algoritmos Genéticos_Inteligencia ArtificialAlgoritmos Genéticos_Inteligencia Artificial
Algoritmos Genéticos_Inteligencia ArtificialGabriela_Rodriguez
 

La actualidad más candente (12)

5 herramienta aprendizaje algoritmos geneticos entorno matlab
5 herramienta aprendizaje algoritmos geneticos entorno matlab5 herramienta aprendizaje algoritmos geneticos entorno matlab
5 herramienta aprendizaje algoritmos geneticos entorno matlab
 
Algoritmo genetico
Algoritmo geneticoAlgoritmo genetico
Algoritmo genetico
 
Trabajo+completo+de+inteligencia+algoritmo+genetico
Trabajo+completo+de+inteligencia+algoritmo+geneticoTrabajo+completo+de+inteligencia+algoritmo+genetico
Trabajo+completo+de+inteligencia+algoritmo+genetico
 
Presentacion Proyecto
Presentacion ProyectoPresentacion Proyecto
Presentacion Proyecto
 
Algoritmos genéticos 2 s lun 30 sep-13
Algoritmos genéticos 2 s lun 30 sep-13Algoritmos genéticos 2 s lun 30 sep-13
Algoritmos genéticos 2 s lun 30 sep-13
 
Resumen 2 Unidad
Resumen 2 UnidadResumen 2 Unidad
Resumen 2 Unidad
 
10 DiseñO Con Algoritmos GenéTicos
10 DiseñO Con Algoritmos GenéTicos10 DiseñO Con Algoritmos GenéTicos
10 DiseñO Con Algoritmos GenéTicos
 
Algoritmo Genetico
Algoritmo GeneticoAlgoritmo Genetico
Algoritmo Genetico
 
Algoritmo genetico
Algoritmo geneticoAlgoritmo genetico
Algoritmo genetico
 
Utp i_ay_se_s10_algoritmo genéticos_
 Utp i_ay_se_s10_algoritmo genéticos_ Utp i_ay_se_s10_algoritmo genéticos_
Utp i_ay_se_s10_algoritmo genéticos_
 
Algoritmos genéticos con matlab
Algoritmos genéticos con matlabAlgoritmos genéticos con matlab
Algoritmos genéticos con matlab
 
Algoritmos Genéticos_Inteligencia Artificial
Algoritmos Genéticos_Inteligencia ArtificialAlgoritmos Genéticos_Inteligencia Artificial
Algoritmos Genéticos_Inteligencia Artificial
 

Similar a Algotitmos geneticos mundial

Inteligencia Artificial Clase 5
Inteligencia Artificial Clase 5Inteligencia Artificial Clase 5
Inteligencia Artificial Clase 5UNEFA
 
Algoritmo Genético
Algoritmo GenéticoAlgoritmo Genético
Algoritmo Genéticoandreaac2014
 
Unl articulo cientifico-1
Unl articulo cientifico-1Unl articulo cientifico-1
Unl articulo cientifico-1andreaac2014
 
Programacion genetica
Programacion geneticaProgramacion genetica
Programacion geneticaj3nnn1
 
computacion evolutiva y computacion neuronal
computacion evolutiva y computacion neuronalcomputacion evolutiva y computacion neuronal
computacion evolutiva y computacion neuronalRenzo Marrufo Cabanillas
 
Algoritmos Geneticos - Teoria.pdf
Algoritmos Geneticos - Teoria.pdfAlgoritmos Geneticos - Teoria.pdf
Algoritmos Geneticos - Teoria.pdfCastañeda Samanamu
 
Algoritmos GenéTicos
Algoritmos GenéTicosAlgoritmos GenéTicos
Algoritmos GenéTicosESCOM
 
Trabajo algoritmo genetico uba
Trabajo algoritmo genetico uba Trabajo algoritmo genetico uba
Trabajo algoritmo genetico uba yucci2323
 
Artículo predicción mundial 2014 algoritmos geneticos
Artículo predicción mundial 2014   algoritmos geneticosArtículo predicción mundial 2014   algoritmos geneticos
Artículo predicción mundial 2014 algoritmos geneticosRichar León
 
computacion Evolutiva
computacion Evolutivacomputacion Evolutiva
computacion Evolutivaguest590a846
 

Similar a Algotitmos geneticos mundial (20)

Inteligencia Artificial Clase 5
Inteligencia Artificial Clase 5Inteligencia Artificial Clase 5
Inteligencia Artificial Clase 5
 
Algoritmo Genético
Algoritmo GenéticoAlgoritmo Genético
Algoritmo Genético
 
Unl articulo cientifico-1
Unl articulo cientifico-1Unl articulo cientifico-1
Unl articulo cientifico-1
 
A Geneticos
A GeneticosA Geneticos
A Geneticos
 
ALGORITMO GENETICO - II.pptx
ALGORITMO GENETICO - II.pptxALGORITMO GENETICO - II.pptx
ALGORITMO GENETICO - II.pptx
 
Jgap algritmos geneticosss
Jgap  algritmos geneticosssJgap  algritmos geneticosss
Jgap algritmos geneticosss
 
Programacion genetica
Programacion geneticaProgramacion genetica
Programacion genetica
 
computacion evolutiva y computacion neuronal
computacion evolutiva y computacion neuronalcomputacion evolutiva y computacion neuronal
computacion evolutiva y computacion neuronal
 
Algoritmos Geneticos - Teoria.pdf
Algoritmos Geneticos - Teoria.pdfAlgoritmos Geneticos - Teoria.pdf
Algoritmos Geneticos - Teoria.pdf
 
Algoritmos GenéTicos
Algoritmos GenéTicosAlgoritmos GenéTicos
Algoritmos GenéTicos
 
Trabajo algoritmo genetico uba
Trabajo algoritmo genetico uba Trabajo algoritmo genetico uba
Trabajo algoritmo genetico uba
 
Artículo predicción mundial 2014 algoritmos geneticos
Artículo predicción mundial 2014   algoritmos geneticosArtículo predicción mundial 2014   algoritmos geneticos
Artículo predicción mundial 2014 algoritmos geneticos
 
Resumen 2 Unidad
Resumen 2 UnidadResumen 2 Unidad
Resumen 2 Unidad
 
Resumen 2 Unidad
Resumen 2 UnidadResumen 2 Unidad
Resumen 2 Unidad
 
computacion Evolutiva
computacion Evolutivacomputacion Evolutiva
computacion Evolutiva
 
Resumen 2 Unidad
Resumen 2 UnidadResumen 2 Unidad
Resumen 2 Unidad
 
Resumen 2 Unidad
Resumen 2 UnidadResumen 2 Unidad
Resumen 2 Unidad
 
Resumen 2 Unidad
Resumen 2 UnidadResumen 2 Unidad
Resumen 2 Unidad
 
Resumen 2 Unidad
Resumen 2 UnidadResumen 2 Unidad
Resumen 2 Unidad
 
Resumen 2 Unidad
Resumen 2 UnidadResumen 2 Unidad
Resumen 2 Unidad
 

Último

Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdfTrabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdfChristianMOntiveros1
 
Semana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxSemana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxJulio Lovon
 
Presentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdfPresentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdffernandolozano90
 
INFORME de actividades para pago de servicio
INFORME de actividades para pago de servicioINFORME de actividades para pago de servicio
INFORME de actividades para pago de servicioNelsonSabinoTtitoMur1
 
Arquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheArquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheJuan Luis Menares
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoGualbertoLopez2
 
Cuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdfCuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdffredyflores58
 
Unidad 2 Métodos Numéricos. Solución de ecuaciones algebraicas.docx
Unidad 2 Métodos Numéricos. Solución de ecuaciones algebraicas.docxUnidad 2 Métodos Numéricos. Solución de ecuaciones algebraicas.docx
Unidad 2 Métodos Numéricos. Solución de ecuaciones algebraicas.docxAlanCarrascoDavila
 
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptxrorellanoq
 
Instrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdfInstrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdfElybe Hernandez
 
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptxESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptxholferpandiacondori
 
Practica_Calificada_03333333333333333.pdf
Practica_Calificada_03333333333333333.pdfPractica_Calificada_03333333333333333.pdf
Practica_Calificada_03333333333333333.pdffredyflores58
 
Métodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdfMétodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdfJuvenalriv
 
dokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptxdokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptxQualityAdviceService
 
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdfslideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdfWaldo Eber Melendez Garro
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalaciónQualityAdviceService
 
Auditoría de Sistemas de Gestión
Auditoría    de   Sistemas     de GestiónAuditoría    de   Sistemas     de Gestión
Auditoría de Sistemas de GestiónYanet Caldas
 
S01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfS01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfSalomeRunco
 
auditoria fiscalizacion inspecciones de seguridad
auditoria fiscalizacion inspecciones de seguridadauditoria fiscalizacion inspecciones de seguridad
auditoria fiscalizacion inspecciones de seguridadNELSON QUINTANA
 
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfrefrielectriccarlyz
 

Último (20)

Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdfTrabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
Trabajo practico N°14 - Despacho Economico de Cargas - Campus 2022.pdf
 
Semana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxSemana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptx
 
Presentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdfPresentación_ Marco general de las contrataciones públicas.pdf
Presentación_ Marco general de las contrataciones públicas.pdf
 
INFORME de actividades para pago de servicio
INFORME de actividades para pago de servicioINFORME de actividades para pago de servicio
INFORME de actividades para pago de servicio
 
Arquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo LimacheArquitecto cambio de uso de suelo Limache
Arquitecto cambio de uso de suelo Limache
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de Secado
 
Cuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdfCuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdf
 
Unidad 2 Métodos Numéricos. Solución de ecuaciones algebraicas.docx
Unidad 2 Métodos Numéricos. Solución de ecuaciones algebraicas.docxUnidad 2 Métodos Numéricos. Solución de ecuaciones algebraicas.docx
Unidad 2 Métodos Numéricos. Solución de ecuaciones algebraicas.docx
 
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
 
Instrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdfInstrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdf
 
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptxESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
ESTUDIO DE TRAFICO PARA EL DISEÑO DE TIPOS DE VIAS.pptx
 
Practica_Calificada_03333333333333333.pdf
Practica_Calificada_03333333333333333.pdfPractica_Calificada_03333333333333333.pdf
Practica_Calificada_03333333333333333.pdf
 
Métodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdfMétodos numéricos y aplicaciones - Izar Landeta.pdf
Métodos numéricos y aplicaciones - Izar Landeta.pdf
 
dokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptxdokumen.tips_311-determinacion-del-espacio-estatico.pptx
dokumen.tips_311-determinacion-del-espacio-estatico.pptx
 
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdfslideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalación
 
Auditoría de Sistemas de Gestión
Auditoría    de   Sistemas     de GestiónAuditoría    de   Sistemas     de Gestión
Auditoría de Sistemas de Gestión
 
S01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfS01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdf
 
auditoria fiscalizacion inspecciones de seguridad
auditoria fiscalizacion inspecciones de seguridadauditoria fiscalizacion inspecciones de seguridad
auditoria fiscalizacion inspecciones de seguridad
 
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdfUC Fundamentos de tuberías en equipos de refrigeración m.pdf
UC Fundamentos de tuberías en equipos de refrigeración m.pdf
 

Algotitmos geneticos mundial

  • 1. 1 “Predicción de los Cuatro Posibles Ganadores de la Copa Mundial de Fútbol BRASIL 2014 a través de Algoritmos Genéticos” L. Bravo, K. Herrera, J. Martínez, H. Paz, Resumen—A pocos días de aproximarse el mundial de fútbol BRASIL 2014 y como aplicación de las técnicas de inteligencia artificial, específicamente de los algoritmos genéticos, se ha propuesto desarrollar una aplicación bajo el lenguaje de pro- gramación Java, la cuál pretende pronosticar los cuatro posibles equipos que pueden consagrarse como el campeón mundial de Fútbol en base a distintos factores tales como el ranking de la Federación Internacional de Fútbol Asociada (FIFA) , el grupo en el que se encuentra ubicado, el número de copas obtenidas y los últimos tres partidos jugados que tenga cada equipo clasificado. Palabras Claves—Algoritmos genéticos, fútbol, optimización, mundial, java, JGAP I. INTRODUCCIÓN Los Algoritmos Genéticos surgieron con la necesidad de optimizar los procesos de búsqueda basada en la teoría de la evolución planteada por Charles Darwin, siendo esta técnica de inteligencia artificial una de las mas aceptadas para resolver problemas de búsqueda. Los algoritmos genéticos emplean di- ferentes criterios de selección que ayudan a que una población evolucione de forma más optima para obtener resultados mas exactos para un problema específico. En el presente trabajo se pretende crear una aplicación ba- sada en algoritmos genéticos que permita predecir los cuatro equipos que pudieran obtener la copa mundial de fútbol. Para alcanzar la solución al problema planteado se parte de un conjunto inicial de individuos(Equipos), llamado población, generado de manera aleatoria. Cada uno de estos individuos representa una posible solución al problema y se adaptarán en mayor medida tras el paso de cada generación a la solución requerida. II. ESTADO DEL ARTE II-A. HISTORIA DE LOS ALGORITMOS GENÉTICOS El desarrollo de los Algoritmos Genéticos(AGs) se debe a gran medida a John Holland, investigador de la Universidad de Michigan. A finales de la década de los 60 desarrolló una técnica que imitaba en su funcionamiento a la selección natural. L. Bravo , Estudiante de la Universidad Nacional de Loja, Loja, Ecua- dor, E-mail: lfbravoe@unl.edu.ec K. Herrera,Estudiante de la Universidad Nacional de Loja, Loja, Ecua- dor, E-mail: kkherrerap@unl.edu.ec J. Martínez,Estudiante de la Universidad Nacional de Loja, Loja, Ecua- dor, E-mail: jamartinezg@unl.edu.ec H. Paz, Docente de la Universidad Nacional de Loja, Loja, Ecua- dor, E-mail: hpaz@unl.edu.ec Finales de los 59 y principios de los 60.- Algoritmos Genéticos programados en computadoras por biólogos evolutivos que buscaban explícitamente realizar modelos de aspectos de la evolución natural. En 1962, investigadores como G.E.P. Box, G.J. Fried- man, W.W. Bledsoe y H.J. Bremermann habían desa- rrollado independientemente algoritmos inspirados en la evolución para optimización de funciones y aprendizaje automático, pero sus trabajos generaron poca reacción. En 1965 surgió un desarrollo más exitoso, cuando Ingo Rechenberg, entonces de la Universidad Técnica de Ber- lín, introdujo una técnica que llamó estrategia evolutiva. En 1975 apareció el trabajo fundamental en el campo de los algoritmos genéticos con la publicación del libro “Adaptación en Sistemas Naturales y Artificiales” de John Holland’. A finales de 1980s la General Electric comenzó a vender el primer producto de Algoritmo Genético para solucio- nar problemas de procesos industriales. En 1989 se creó el producto Evolver que fue el pri- mer producto de Algoritmo Genético para Computadoras personales.[1] II-B. DEFINICIÓN DE ALGORITMOS GENÉTICOS “Los Algoritmos Genéticos(AGs) son algoritmos de búsqueda basados en la mecánica de la selección natural y de la genética natural. Combinan la supervivencia del más apto entre estructuras de secuencias con intercambio de información estructurado, aunque aleatorizado, para constituir así un algoritmo de búsqueda que tenga algo de las genialidades de las búsquedas humanas”. Un algoritmo genético consiste en una población de soluciones codificadas de forma similar a cromosomas. Cada uno de estos cromosomas tendrá asociado un ajuste o valor de bondad que cuantifica su validez como solución del problema. En función de este valor se le darán más o menos oportunidades de reproducción. Además, con cierta probabilidad se realizarán mutaciones de estos cromosomas.[1] Cuando el Algoritmo Genético es implementado, se hace de forma que involucre el siguiente ciclo: Generación de una población inicial de manera aleatoria. Evaluar el desempeño de todos los individuos de la población, tomando en cuenta alguna función objetivo.
  • 2. 2 Crear una nueva población mediante la ejecución de operaciones como el cruce y mutación sobre individuos cuyo desempeño haya sido evaluado. Descartar la población vieja e iterar usando la nueva, hasta que el número de generaciones alcanza al criterio de terminación. Figura 1. Implementación de un Algoritmo Genético II-C. CLASIFICACIÓN DE LOS ALGORITMOS GENÉTI- COS II-C1. Algoritmo Genético Simple: El Algoritmo Genético Simple, también denominado Canónico, 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 cruzarán generando dos hijos, sobre cada uno de los cuales actuará 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án parte de la siguiente población. II-C2. Algoritmos Genéticos de Estado Fijo: Utilizan el esquema generacional de los mamíferos y otros animales de vida larga,donde coexisten padres y sus descendientes, En este modelo,no solo se deben seleccionar los dos individuos a ser padres sino también cuales de la población anterior serán eliminados para dar espacio a los descendientes. II-C3. Algoritmos Genéticos Paralelos: Son aquellos donde al evolucionar se recorren simultáneamente muchas soluciones.cada una representada por un individuo de la población. II-C4. Modelo de Islas: Si se tiene una población de individuos, esta se divide en subpoblaciones que evolucionan independientemente como un Algoritmo Genético normal. II-C5. Modelo Celular: Coloca cada individuo en una matriz, dónde cada uno solo podrá reproducirse con los individuos que tenga a su alrededor, escogiendo al azar o al mejor adaptado. II-D. ELEMENTOS DE LOS ALGORITMOS GENÉTICOS II-D1. Individuo : Un individuo es un ser que caracteriza su propia especie. El individuo es un cromosoma y es el código de información sobre el cual opera el algoritmo. Cada solución parcial del problema a optimizar está codificada en forma de cadena o String en un alfabeto determinado, que puede ser binario. II-D2. Población : A un conjunto de individuos (Cromosomas) se le denomina población. El método de Algoritmos Genéticos consiste en ir obteniendo de forma sucesiva distintas poblaciones. Por otra parte un Algoritmo Genético trabaja con un conjunto de puntos representativos de diferentes zonas del espacio de búsqueda y no con un solo punto (como lo hace Hillclimbing). II-D3. Función Fitness : La única restricción para usar un algoritmo genético es que exista una función llamada fitness, que le informe de cuan bueno es un individuo dado en la solución deun problema. Esta función fitness o de evaluación es el principal enlace entre el Algoritmo Genético a un problema real, es la efectividad y eficiencia de la función fitness que se tome, por lo tanto debe procurarse que la función fitness sea similar. [2] II-E. ESTRUCTURA DE LOS ALGORITMOS GENÉTICOS II-E1. Tipos de Representación : Una representación debe identificar las características constituyentes del conjunto a estudiar, de forma que distintas representaciones dan lugar a distintas perspectivas y por tanto distintas soluciones. Tipos básicos de representaciones: Representación binaria: Cada gen es un valor 1 ó 0. Figura 2. Representación Binaria
  • 3. 3 Representación entera: Cada gen es un valor entero. Figura 3. Representación Entera Representación real: Cada gen es un valor real. Figura 4. Representación Real II-E2. Población Inicial : Una cuestión que se puede plantear es la relacionada con el tamaño idóneo de la población. Parece intuitivo que las poblaciones pequeñas corren el riesgo de no cubrir adecuadamente el espacio de búsqueda, mientras que el trabajar con poblaciones de gran tamaño puede acarrear problemas relacionados con el excesivo costo computacional. II-E3. Función Objetivo : El resultado al cual se desea llegar. II-E4. Operador de Selección : El operador de Selección es el encargado de transmitir y conservar aquellas características de las soluciones que se consideran valiosas a lo largo de las generaciones. El principal medio para que la información útil se transmita es que aquellos individuos mejor adaptados tengan más probabilidades de reproducirse. Selección directa: Toma elementos de acuerdo a un criterio objetivo, como son los x mejores,los x peores, los del tipo el cuarto individuo a partir del último escogido son empleados con mucha frecuencia cuando se quieren seleccionar dos individuos distintos. Selección aleatoria: Puede ser realizado por selección equiprobable o selección estocástica. Selección equiprobable: Todos tienen la misma probabilidad de ser escogidos. Selección estocástica: La probabilidad de que un individuo sea escogido depende de una heurística. • Selección por sorteo: Cada individuo de la población tiene asignado un rango proporcional oinversamente proporcional. • Selección por escaños: Se divide el rango del número aleatorio en un número predeterminado de escaños. • Selección por restos estocásticos: Igual que el método de selección de escaños, sólo que los escaños no asignados directamente. Selección por Ruleta: Con este método la probabilidad que tiene un individuo de reproducirse es proporcional a su valor de función de evaluación, es decir, a su adaptación. En este método se define un rango con las características de la selección por sorteo. El número al azar será un número aleatorio forzosamente menor que el tamaño del rango. El elemento escogido será aquel en cuyo rango esté el número resultante de sumar el número aleatorio con el resultado total que sirvió para escoger el elemento anterior. Selección por Ranking: Desarrollado por Whitley(1989) consiste en calcular las probabilidades de reproducción atendiendo a la ordenación de la población por el valor de adaptación en vez de atender simplemente a su valor de adecuación. Estas probabilidades se pueden calcular de diversas formas, aunque el método habitual es el ranking lineal. 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.[3] II-E5. Operador de Cruce : El operador de Cruce permite realizar una exploración de toda la información almacenada hasta el momento en la población y combinarla para crear mejores individuos. Dentro de los métodos habituales destacamos los siguientes: Cruce de un punto: Es el método de cruce más sencillo. Se selecciona una posición en las cadenas de los progenitores, y se intercambian los genes a la izquierda de esta posición.
  • 4. 4 Figura 5. Cruce por un punto Cruce de n puntos: Es una generalización del método anterior. Se seleccionan varias posiciones (n) en las cadenas de los progenitores y se intercambian los genes a ambos lados de estas posiciones. Figura 6. Cruce por n puntos Cruce Uniforme: Se realiza un test aleatorio para decidir de cual de los progenitores se toma cada posición de la cadena.[4] Figura 7. Cruce uniforme Cruces para permutación: Existe una familia de cruces específicas para los problemas de permutación, siendo algunos de ellos: • Cruce de mapeamiento parcial: Toma una subsecuencia del genoma del padre y procura preservar el orden absoluto de los fenotipos - es decir, orden y posición en el genoma- del resto del genoma lo más parecido posible de la madre. • Cruce de orden: Toma una subsecuencia del genoma del padre y procura preservar el orden relativo de los fenotipos del resto del genoma lo más parecido posible de la madre. II-E6. Operador de Mutación: La mutación se considera un operador básico, que proporciona un pequeño elemento de aleatoriedad en el entorno de los individuos de la población. Si bien el operador de cruce es el responsable de efectuar la búsqueda a lo largo del espacio de posibles soluciones, el operador de mutación va ganando en importancia a medida que la población de individuos va convergiendo. Existen varias técnicas distintas de mutación. Algunas de éstas son: Mutación de bit: Existe una única probabilidad de que se produzca una mutación de algún bit. De producirse, el algoritmo toma aleatoriamente un bit. Mutación de gen: Igual que la mutación de bit, solamente que, en vez de cambiar un bit, cambia un gen completo. Mutación multigen: Igual que la mutación de multibit, solamente que, en vez de cambiar un conjunto de bits, cambia un conjunto de genes. Puede sumar un valor aleatorio, un valor constante, o introducir un gen aleatorio nuevo. II-F. ¿QUÉ PROBLEMAS PODEMOS RESOLVER CON ALGORITMOS GENÉTICOS? La aplicación más común de los AGs ha sido la solución de problemas de optimización en donde han mostrado ser eficientes y confiables. Sin embargo, no todos los problemas pudieran ser apropiados para la técnica y se recomienda en general tomar en cuenta las siguientes características del mismo antes de usarla: Su espacio de búsqueda o sus posibles soluciones debe de estar delimitado dentro de un cierto rango. Debe permitir la definición de una función de aptitud que nos indique que tan buena o mala es cierta respuesta. Las soluciones deben programarse de una forma que resulte relativamente fácil de implementar en el computador.[5] II-G. ÁREA DE APLICACIÓN DE LOS ALGORITMOS GE- NÉTICOS II-G1. Optimización : Se trata de un campo especialmente abonado para el uso de los AG, por las características intrínsecas de estos problemas. No en vano fueron la fuente de inspiración para los creadores de estos algoritmos. Los AG se han utilizado en numerosas tareas de optimización, incluyendo la optimización numérica, y los problemas de optimización combinatoria. II-G2. Programación automática : Los AG se han empleado para desarrollar programas para tareas específicas, y para diseñar otras estructuras computacionales tales como el autómata celular, y las redes de clasificación.
  • 5. 5 II-G3. Aprendizaje máquina : Los AG se han utilizado también en muchas de estas aplicaciones , tales como la predicción del tiempo o la estructura de una proteína. Han servido asimismo para desarrollar determinados aspectos de sistemas particulares de aprendizaje, como puede ser el de los pesos de una red neuronal, las reglas para sistemas de clasificación de aprendizaje o sistemas de producción simbólica y los sensores para los robots. II-G4. Economía : En este caso, se ha hecho uso de estos Algoritmos para modelar procesos de innovación, el desarrollo de estrategias de puja, y la aparición de mercados económicos. II-G5. Sistemas inmunes : Al momento de modelar varios aspectos de los sistemas inmunes naturales, incluyendo la mutación somática durante la vida de un individuo y el descubrimiento de familias de genes múltiples en tiempo evolutivo, ha resultado útil el empleo de esta técnica. II-G6. Genética de poblaciones : En el estudio de preguntas del tipo "¿ Bajo qué condiciones será viable evolutivamente un gen para la recombinación?". II-G7. Evolución y aprendizaje: Los AG se han utilizado en el estudio de las relaciones entre el aprendizaje individual y la evolución de la especie. II-G8. Sistemas sociales: En el estudio de aspectos evolutivos de los sistemas sociales, tales como la evolución del comportamiento social en colonias de insectos, y la evolución de la cooperación y la comunicación en sistemas multiagentes.[6] II-H. LIBRERÍA JGAP Figura 8. Librería JGAP 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. JGAP es software libre y se puede distribuir bajo la GNU Lesser PublicLicense 2.1 o posterior. Las aplicaciones comerciales que no publiquen sucódigo fuente deben distribuirse bajo la Mozilla Public License.[7] II-H1. Interfaces, Clases y Excepciones de la Librería JGAP: JGAP nos proporciona las siguientes interfaces: Figura 9. Interfaces de la librería JGAP JGAP cuenta con las siguientes clases: Figura 10. Clases de la librería JGAP JGAP tiene las siguientes excepciones: Figura 11. Excepciones de la librería JGAP 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
  • 6. 6 mencionadas. Así se adapta JGAP al problema específico que se quiere solucionar. II-H2. 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(). III. IMPLEMENTACIÓN Código de la Clase TestEquipoFitness en la que definimos a través de la utilización de algoritmos genéticos las caracte- rístcas de que va a tener la solución: %CODIGO DE LA CLASE TestEquipoFitness package ec.unl.edu.ag; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import org.jgap.Chromosome; import org.jgap.Configuration; import org.jgap.DefaultFitnessEvaluator; import org.jgap.Gene; import org.jgap.Genotype; import org.jgap.IChromosome; import org.jgap.impl.DefaultConfiguration; import org.jgap.impl.IntegerGene; import org.jgap.impl.SwappingMutationOperator; import ec.unl.edu.clases.Equipo; import ec.unl.edu.operaciones.Operaciones; public class TestEquipoFitness { String respuesta = ""; String fitnessValor = ""; public String getRespuesta() { return respuesta; } public void setRespuesta( String respuesta) { this.respuesta = respuesta; } private ArrayList<String> respuestaVista= new ArrayList<String>(); public ArrayList<String> getRespuestaVista() { return respuestaVista; } public void setRespuestaVista( ArrayList<String> respuestaVista) { this.respuestaVista = respuestaVista; } private Configuration configuracion; private SwappingMutationOperator operadorMutacion; private EquipoFitnessFunction equipoFitness = null; public ArrayList<Equipo> equipos = new ArrayList<Equipo>(); public List genes = new ArrayList(); public ArrayList<String> listaRespuesta = new ArrayList<String>(); Operaciones operaciones = new Operaciones(); private static final int MAX_ALLOWED_EVOLUTIONS = 2000; private Chromosome equipoCromosoma = null; public void inicializar(String tipo) throws Exception { StringTokenizer st = new StringTokenizer(tipo); while (st.hasMoreElements()) { String gen = st.nextToken(); genes.add(gen); } equipos = operaciones.recuperarEquipos(); configuracion = new DefaultConfiguration(); Configuration.resetProperty( Configuration.PROPERTY_FITEVAL_INST); configuracion.setFitnessEvaluator( new DefaultFitnessEvaluator()); configuracion.getGeneticOperators().clear(); operadorMutacion = new SwappingMutationOperator(configuracion); configuracion.addGeneticOperator(operadorMutacion); configuracion.setPreservFittestIndividual(true); configuracion.setPopulationSize(1000); configuracion.setKeepPopulationSizeConstant(false); equipoFitness = new EquipoFitnessFunction( equipos, genes); configuracion.setFitnessFunction(equipoFitness); Gene[] equiposGenes = new Gene[4]; equiposGenes[0] = new IntegerGene( configuracion, 0,equipos.size()-1); equiposGenes[1] = new IntegerGene( configuracion, 0,equipos.size()-1); equiposGenes[2] = new IntegerGene( configuracion, 0,equipos.size()-1); equiposGenes[3] = new IntegerGene( configuracion, 0,equipos.size()-1); equipoCromosoma = new Chromosome( configuracion, equiposGenes); equiposGenes[0].setAllele(0); equiposGenes[1].setAllele(1); equiposGenes[2].setAllele(2); equiposGenes[3].setAllele(3);
  • 7. 7 configuracion.setSampleChromosome( equipoCromosoma); } public void pruebaSeleccionarMejoresEquipos() throws Exception { equipos = operaciones.recuperarEquipos(); Genotype poblacion = Genotype.randomInitialGenotype( configuracion); IChromosome mejorSolucionHastaAqui = equipoCromosoma; for (int i=0;i<MAX_ALLOWED_EVOLUTIONS;i++) { // evolucionar poblacion poblacion.evolve(); IChromosome candidatoAMejorSolucion = poblacion.getFittestChromosome(); if (candidatoAMejorSolucion.getFitnessValue() > mejorSolucionHastaAqui.getFitnessValue()) { mejorSolucionHastaAqui = candidatoAMejorSolucion; } } this.setRespuestaVista( retornarSolucionFinal( mejorSolucionHastaAqui,equipos)); } public ArrayList<String> retornarSolucionFinal( IChromosome solution, ArrayList<Equipo> equipos) { fitnessValor = String.valueOf( solution.getFitnessValue()); for (int i=0;i<solution.size(); i++) { int index = (Integer) solution.getGene(i).getAllele(); Equipo equipo = (Equipo) equipos.get(index); listaRespuesta.add( equipo.getNombre().toString()); } return listaRespuesta; } public String presentarRespuesta() throws Exception { equipos = operaciones.recuperarEquipos(); Genotype poblacion = Genotype.randomInitialGenotype(configuracion); String salida = ""; IChromosome mejorSolucionHastaAqui = equipoCromosoma; for (int i=0; i<MAX_ALLOWED_EVOLUTIONS;i++){ // evolucionar poblacion poblacion.evolve(); IChromosome candidatoAMejorSolucion = poblacion.getFittestChromosome(); salida = salida + candidatoAMejorSolucion +"n"; } salida = salida + "n >>> Valor Fitness: " + fitnessValor; return salida; } } La clase EquipoFitnessFunction es la que trataremos las condi- ciones de entrada que tendrá nuestro algoritmo: el número de copa, el ranking en la FIFA y el resultado de sus tres últimos partidos: %CODIGO DE LA CLASE EquipoFitnessFunction package ec.unl.edu.ag; import java.util.ArrayList; import java.util.List; import org.jgap.FitnessFunction; import org.jgap.IChromosome; import org.jgap.impl.IntegerGene; import ec.unl.edu.clases.Equipo; public class EquipoFitnessFunction extends FitnessFunction { ArrayList<Equipo> equipos = new ArrayList<Equipo>(); List genes = new ArrayList(); public EquipoFitnessFunction( ArrayList<Equipo> equipos, List genes) { this.equipos = equipos; this.genes = genes; } @Override protected double evaluate( IChromosome icromosoma) { double puntuacion = 0; List dups = new ArrayList(); int malaSolucion = 1; for(int i=0;i<icromosoma.size();i++) { IntegerGene un_gen = (IntegerGene) icromosoma.getGene(i); int indice = (Integer) icromosoma.getGene(i).getAllele();
  • 8. 8 if (dups.contains(indice)) { malaSolucion = 0; } else { dups.add(indice); } Equipo equipo = equipos.get(indice); double puntuacionGenes = this.obtenerPuntuacionGenes(equipo); if(puntuacionGenes == 0){ malaSolucion = 0; } double resultado1 = equipo.getAntepenultimo_partido(); double resultado2 = equipo.getPenultimo_partido(); double resultado3 = equipo.getUltimo_partido(); puntuacion = (puntuacion + resultado1 + resultado2 + resultado3 + puntuacionGenes); } return ( puntuacion*malaSolucion); } private int obtenerPuntuacionGenes( Equipo equipo) { int _ranking=0; int _partido_antepenultimo=0; int _partido_penultimo=0; int _partido_ultimo=0; int total=0; int numero_copas = equipo.getNumero_copas(); int ranking_fifa = equipo.getRanking(); int antepenultimo = equipo.getAntepenultimo_partido(); int penultimo = equipo.getPenultimo_partido(); int ultimo = equipo.getUltimo_partido(); if (antepenultimo == 1) { _partido_antepenultimo = 1; } if (antepenultimo == 0) { _partido_antepenultimo = 0; } if (antepenultimo == -1) { _partido_antepenultimo = -1; } if (penultimo == 1) { _partido_penultimo = 1; } if (penultimo == 0) { _partido_penultimo = 0; } if (penultimo == -1) { _partido_penultimo = -1; } if (ultimo == 1) { _partido_ultimo = 1; } if (ultimo == 0) { _partido_ultimo = 0; } if (ultimo == -1) { _partido_ultimo = -1; } if ((ranking_fifa >= 1) && (ranking_fifa <= 10)) { _ranking = 12; } if ((ranking_fifa >= 11) && (ranking_fifa <= 20)) { _ranking = 11; } if ((ranking_fifa >= 21) && (ranking_fifa <= 30)) { _ranking = 10; } if ((ranking_fifa >= 31) && ((ranking_fifa) <= 40)) { _ranking = 9; } if ((ranking_fifa >= 41) && (ranking_fifa <= 50)) { _ranking = 8; } if ((ranking_fifa >= 51) && (ranking_fifa <= 60)) { _ranking = 7; } if ((ranking_fifa >= 61) && (ranking_fifa <= 70)) { _ranking = 6; } if ((ranking_fifa >= 71) && (ranking_fifa <= 80)) { _ranking = 5; } if ((ranking_fifa >= 81) && (ranking_fifa <= 90)) { _ranking = 4; } if ((ranking_fifa >= 91) && (ranking_fifa <= 100)) { _ranking = 3; } if ((ranking_fifa >= 101) && (ranking_fifa <= 110)) { _ranking = 2; }
  • 9. 9 if ((ranking_fifa >= 111)) { _ranking = 1; } total = numero_copas + _ranking + _partido_antepenultimo + _partido_penultimo + _partido_ultimo; return total; } } Como se ha propuesto obtener los cuatro mejores candidatos a ganar el Mundial tenemos, la clase en la cual se ejecuta el algoritmo genético la cual es la siguiente: /** Evento dentro del boton Obtener * para ejecutar el Algoritmo * Genetico */ btnObtener.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent arg0) { /** llamado a la clase TestEquipoFitness * para obtener los resultados */ TestEquipoFitness test = new TestEquipoFitness(); try { test.inicializar(" "); test.pruebaSeleccionarMejoresEquipos(); String valorConsola = test.presentarRespuesta(); txtAreaConsola.setText(valorConsola); /** obtiene la lista de resultados * y los presenta en los * cuadros de texto * correspondientes */ ArrayList<String> resultados = test.getRespuestaVista(); txtEquipo1.setText( resultados.get(0)); txtEquipo2.setText( resultados.get(1)); txtEquipo3.setText( resultados.get(2)); txtEquipo4.setText( resultados.get(3)); Configuration.reset(); } catch (Exception e) { e.printStackTrace(); } } }); IV. RESULTADOS En esta figura 12 podemos observar de manera general la aplicación: Figura 12. Aplicación para el Mundial 2014 en base a AG En la figura 13 podemos ver como es presentado un seleccionado: Figura 13. Presentación de un Equipo En la figura 14 podemos ver como se puede ser modificar a un seleccionado:
  • 10. 10 Figura 14. Modificación de un Equipo En la figura 15 podemos ver cual es el resultado, luego de la ejecución del AG: Figura 15. Presentación de Resultado:Cuatro posibles equipos ganadores El código de la aplicación estará disponible en la siguiente dirección: github.com/JhymerMartinez/AlgoritmosGeneticosMundial.git V. CONCLUSIONES Y RECOMENDACIONES Como podemos comprobar los algoritmos genéticos sirven para problemas de optimización de recursos, en este caso nos permite obtener los mejores equipos candidatos a ganar el mundial. El mejor resultado que podemos obtener, dependerá de la ubicación que tenga el equipo en el ranking dentro de la clasificación, el número de copas ganadas, así como se pueden agregar otros factores que permitan determinar con más exactitud el resultado. La utilización de una librería como JGAP en nuestra aplicación permite una mejor implementación de los algoritmos genéticos en aplicaciones con lenguaje JAVA. Los algoritmos genéticos utilizan una simulación de los procesos genéticos que se realizan en los genomas del ser humano, su implementación y uso es cada vez más aceptada en la comunidad científica. Es importante considerar la utilización de una librería de algoritmos genéticos como JGAP, la cual nos permitirá aplicar los conocimientos de algoritmos genéticos en la programación utilizando lenguaje JAVA. Este tipo de aplicaciones prácticas permiten mejorar la comprensión de los conocimientos teóricos referentes a la técnica de algoritmos genéticos. REFERENCIAS [1] HERNANDEZ. LYDY,LOPEZ. RICARDO,MENDIOLA.ROSA Algoritmos Genéticos, Ingeniería Cibernética y en Sistemas Computacionales, Universidad de la Salle: Bogotá, 2011.[En línea]. Available:http://www.maestrosilvestre.aprenderapensar.net/files/2011/05/02- AG.doc.[Último acceso: 27 de Mayo 2014]. [2] RAMIREZ.CAMILO, Algoritmos Genéticos,, Bogotá, 2013.[En línea]. Available:http://camilortte.blogspot.com/2013/04/algoritmos- geneticos.html.[Último acceso: 27 de Mayo 2014]. [3] GIL.NATHYELEM, Algoritmos Genéticos,Universidad Nacional de Colombia,2006. [En línea]. Available: http://www.trabajos- pdf/algoritmos-geneticos/algoritmos-geneticos.pdf. [Último acceso: 27 de Mayo 2014]. [4] GESTAL. MARCOS, Introducción a los Algoritmos Ge- néticos,Universidad de Coruña,2006.[En línea]. Available: http://sabia.tic.udc.es/mgestal/cv/aaggtutorial/node14.html. [Último acceso: 27 de Mayo 2014]. [5] Algoritmos Genéticos,[En línea]. Available: http://www.sc.ehu.es/ccwbayes/docencia/mmcc/docs/temageneticos.pdf [Último acceso: 27 de Mayo 2014]. [6] Algoritmos Genéticos,[En línea]. Availa- ble:http://users.exa.unicen.edu.ar/ icompevol/filminasenpdf/tercera- clase.pdf. [Último acceso: 27 de Mayo 2014]. [7] Package org.jgap,[En línea]. Availa- ble:http://jwork.org/scavis/api/doc.php/ org/jgap/package- summary.html[Último acceso: 27 de Mayo 2014].
  • 11. 11 Luis Bravo Estudiante de la Carrera de Ingeniería en Sistemas de la Universidad Nacional de Loja, Nivel Medio en Software Libre, Redes y Mantenimiento, Provincia de Loja, Ciudad Loja, Ecuador, 2014. Karla Herrera Estudiante de la Carrera de Ingeniería en Sistemas de la Universidad Nacional de Loja, Programador Senior en Java, Analista de Sistemas nivel medio, Provincia de Loja, Ciudad Loja, Ecuador, 2014. Jhymer Martínez Estudiante de la Carrera de Ingeniería en Sistemas de la Universidad Nacional de Loja, Programador Senior en Java, Analista de Sistemas nivel medio,Provincia de Loja, Ecuador, 2014.