You are on page 1of 7

Universidad Nacional del Santa

Asignatura: Inteligencia Artificial

PRCTICA N 02 DE INTELIGENCIA ARTIFICIAL


Introduccin a los algoritmos genticos: como implementar un algoritmo
gentico en JAVA
ndice de contenidos.

1. Qu son los algoritmos genticos?.


2. Antecedentes histricos.
3. Representacin.
4. Algoritmo.
5. Funcin de evaluacin y funcin de aptitud (fitness).
6. Operadores genticos.
7. Y cmo puedo implementar un algoritmo gentico en Java?.

1. Qu son los algoritmos genticos?.


Basados en modelos computacionales de la evolucin biolgica natural, los algoritmos genticos
pertenecen a la clase de los algoritmos evolutivos, junto con la programacin evolutiva, la evolucin
de estrategias y la programacin gentica.
Los algoritmos genticos (AGs) son mecanismos de bsqueda basados en las leyes de la seleccin
natural y de la gentica. Combinan la supervivencia de los individuos mejor adaptados junto con
operadores de bsqueda genticos como la mutacin y el cruce, de ah que sean comparables a una
bsqueda biolgica. Fueron desarrollados por John Holland y Rechemberg que crearon algoritmos
de optimizacin imitando los principios bsicos de de la naturaleza. Estos algoritmos se utilizan con
xito para gran variedad de problemas que no permiten una solucin eficiente a travs de la
aplicacin de tcnicas convencionales.
Tiene asimismo aplicaciones variadas en ingeniera, como es el diseo de piezas (turbinas, rotores,
etc.), diseo y control de redes, planificacin de tareas, sntesis de mecanismos, diseo de
tolerancias, etc. y aplicaciones en otros gremios como en sistemas de computacin paralelos
(paralelizacin automtica de programas secuenciales), qumica (optimizacin de procesos de
produccin, diseo tecnolgico y de instalaciones), negocios y comercio (modelizacin de sistemas
econmicos complejos, prediccin de mercados), medicina (anlisis de datos en medicina,
diagnstico automtico) o gestin (anlisis de datos en gestin, asistentes de gestin, sistemas
automticos de decisin).
Para la ingeniera, los algoritmos genticos y la programacin evolutiva en general presentan
oportunidades de plantearse problemas que no permiten una solucin eficiente a travs de la
aplicacin de tcnicas convencionales.

2. Antecedentes histricos.
Los algoritmos genticos tienen sus antecedentes en la biologa y comienzan con Charles
Darwin, que con su libro El origen de las especies por medio de la seleccin natural o la

Docente: Dra. Diana Cecilia Muoz Casanova

Universidad Nacional del Santa

Asignatura: Inteligencia Artificial

preservacin de las razas favorecidas en su lucha por la vida, nos habla sobre los principios de la
seleccin natural.
Los principios bsicos de los algoritmos genticos se derivan de las Leyes de la Vida Natural
descritos por Darwin:

Existe una poblacin de individuos con diferentes propiedades y habilidades. As mismo


existe una limitacin sobre el nmero de individuos que existen en una determinada
poblacin.
La naturaleza crea nuevos individuos con propiedades similares a los individuos existentes.
Los individuos ms prometedores se seleccionan ms a menudo para la reproduccin de
acuerdo con la seleccin natural.

Los algoritmos genticos imitan los principios de la vida descritos y los utilizan para propsitos de
optimizacin.
Una de las principales deficiencias del argumento de Darwin es que, a pesar de que la herencia
juega un papel preponderante en su teora, no ofrece una explicacin acerca de su funcionamiento.
Sin embargo, desde Mendel se conoce que la herencia se produce a travs del cdigo gentico
presente en las clulas reproductivas.

3. Representacin.
Todos los organismos vivos estn constituidos por clulas, y cada clula contiene
uno o ms cromosomas (cadenas de ADN), que le sirven como una especie de
plano al organismo. Un cromosoma puede ser conceptualmente dividido en genes
cada uno de los cuales codifica una protena. En trminos generales, se puede
decir que un gen se codifica como si fuera un rasgo, como puede serlo el color de
ojos. Cada gen se encuentra en una posicin particular del cromosoma, y est
formado por alelos.
Se supone que los individuos (posibles soluciones del problema), pueden representarse como un
conjunto de parmetros (que denominaremos genes), los cuales agrupados forman una ristra de
valores, a menudo referida como cromosoma. Debe existir una representacin de estos genes para
poder utilizarlos posteriormente en el algoritmo gentico y dotarles de unos valores. Se pueden
considerar tres tipos bsicos de representacin o codificacin de los genes:

Binaria: en ella se utiliza un vector cuya longitud es la del nmero de genes de cada
individuo y el valor que puede tomar cada elemento es un nmero binario.

Docente: Dra. Diana Cecilia Muoz Casanova

Universidad Nacional del Santa

Asignatura: Inteligencia Artificial

Entera: en ella se utiliza un vector cuya longitud es la del nmero de genes de cada individuo
y el valor que puede tomar cada elemento es un nmero entero.

Real: en ella se utiliza un vector cuya longitud es la del nmero de genes de cada individuo
y el valor que puede tomar cada elemento es un nmero real.

Un individuo es una solucin potencial al problema que se trata. Cada individuo contiene un
cromosoma. A un conjunto de individuos se le denomina poblacin. El fitness de un individuo es la
evaluacin de la funcin de evaluacin e indica qu tan bueno es el individuo (es decir, la solucin
al problema) con respecto a los dems.

4. Algoritmo.
Desarrollado por John H. Holland, el algoritmo gentico opera entonces a nivel de genotipo de las
soluciones mediante la siguiente secuencia:

1. Comenzar con una poblacin inicial, la cual puede ser generada de manera aleatoria.
2. Calcular el fitness (aptitud) de cada individuo.
3. Aplicar el operador de seleccin con base en el fitness de la poblacin.
4. Aplicar los operadores genticos de reproduccin, cruce y mutacin a la poblacin actual
para generar a la poblacin de la siguiente generacin.
5. Ir al paso 2 hasta que la condicin de parada se satisfaga.
6. Cuando se cumple la condicin de parada, se devuelve al mejor individuo encontrado
(bien el mejor de todas las generaciones, bien el mejor de la ltima generacin).

Al igual que en muchas otras heursticas, el comportamiento del algoritmo gentico es altamente
dependiente de los parmetros iniciales (tamao de la poblacin, porcentaje de cruce, porcentaje de
mutacin, nmero de generaciones, etc.), por lo que ser necesario ajustar esos parmetros para
tratar de mejorar la solucin para los objetivos del problema.
A cada iteracin de este proceso se le denomina una generacin. Un algoritmo gentico tpicamente
se itera de 50 a 500 o incluso ms generaciones. El conjunto entero de generaciones se denomina

Docente: Dra. Diana Cecilia Muoz Casanova

Universidad Nacional del Santa

Asignatura: Inteligencia Artificial

una ejecucin. Al final de una ejecucin existen a menudo uno o varios cromosomas altamente
adecuados en la poblacin, y que pueden ser elegidos como solucin al problema.
La funcin de evaluacin o de fitness de un problema es realmente la funcin que se desea
optimizar. Su diseo es junto con el del genotipo, una de las caractersticas ms importantes a la
hora de encontrar la mejor solucin a un problema.
Como se ha podido ver en el algoritmo, en cada generacin se selecciona a un conjunto de los
mejores individuos (paso 3) y se les modifica para generar la siguiente generacin mediante los
llamados operadores genticos (paso 4). Estos operadores son tres: reproduccin, cruce y mutacin.
El operador de cruce intenta simular la reproduccin sexual, de tal manera que los individuos
resultantes del cruce contendrn informacin de varios individuos. El operador de mutacin simula
la mutacin biolgica, de tal manera que los individuos mutados sern ligeramente diferentes de los
individuos originales. El operador de reproduccin simplemente copia sin modificacin un individuo
de una generacin a la siguiente. As en la siguiente generacin, algunos individuos simplemente
habrn sido copiados, y otros cruzados y/o mutados.

5. Funcin de evaluacin y funcin de aptitud (fitness).


La funcin de evaluacin generalmente es la funcin objetivo, es decir, es lo que se quiere llegar a
optimizar (ej: nmero de aciertos, nmero de movimientos, etc.). Es necesario decodificar la solucin
presente en el cromosoma para evaluarla.
La funcin de aptitud (fitness) es la que permite valorar la aptitud de los individuos y debe tomar
siempre valores positivos.
Ambas funciones suelen ser iguales, pero puede ser que la funcin objetivo sea muy compleja, tome
valores negativos, o no proporcione un valor numrico y, por lo tanto, sea necesario definir una
funcin de aptitud diferente.
En un algoritmo gentico la informacin ha de codificarse para poder trabajar adecuadamente con
ella. Cmo hemos visto, existen numerosos sistemas de codificacin, aunque nosotros utilizaremos
la codificacin real.
Una vez definido el sistema de codificacin a emplear se ver cmo actan los operadores bsicos
de seleccin, cruce y mutacin sobre este cdigo.

6. Operadores genticos.
En su forma ms simple, un algoritmo gentico consta de los siguientes operadores genticos:
seleccin, reproduccin, cruce (crossover) y mutacin.
Seleccin
El proceso de seleccin sirve para escoger a los individuos de la poblacin mejor adaptados, para
que acten de progenitores de la siguiente generacin. En la naturaleza existen varios factores que
intervienen para que un individuo pueda tener descendencia. El primero de todos es que consiga
sobrevivir, ya sea porque no es devorado por depredadores, o porque sea capaz de procurarse

Docente: Dra. Diana Cecilia Muoz Casanova

Universidad Nacional del Santa

Asignatura: Inteligencia Artificial

alimento. Lo segundo es que encuentre pareja para reproducirse. El ltimo factor es que la
combinacin de ambos individuos sea apta para crear un nuevo individuo.
Sin embargo, en la realidad es posible que el mejor individuo no pueda reproducirse, pero otro
individuo de peor calidad pueda conseguirlo. Aunque este hecho es menos probable, sigue siendo
posible.
En los algoritmos genticos, la seleccin es un conjunto de reglas que sirven para elegir a los
progenitores de la siguiente generacin. Estos progenitores se reproducirn (cruzamiento gentico)
y generarn descendencia.
Un sistema muy utilizado en los algoritmos genticos es la seleccin por torneo. Este sistema
consiste en escoger aleatoriamente de la poblacin un cierto nmero de individuos. De esos
individuos se escoge el mejor de todos para ser el padre. Para escoger la madre se repite el proceso:
se escoge aleatoriamente a un nmero de individuos de la poblacin y se elige al individuo con mejor
calidad. Este sistema garantiza un mnimo de diversidad, ya que no siempre se elegir al mejor
individuo de la poblacin para tener descendencia. Pero, por el contrario, existen grandes
posibilidades de que ste tenga descendencia, ya que si es escogido en algn torneo, ser el
vencedor.
Reproduccin
En este contexto, se entender por reproduccin la clonacin de un individuo. Es decir, un individuo
pasar a la siguiente generacin sin modificacin. De esta manera, la reproduccin es un operador
gentico que se contrapone al cruce y la mutacin, puesto que estos ltimos modifican los individuos
que pasan a la siguiente generacin. El objetivo de la reproduccin es mantener en la siguiente
generacin a individuos con fitness alta de la presente generacin.
Relacionado con el concepto de reproduccin est el de elitismo, el cual mantiene a los mejores
individuos de una generacin a la siguiente, para que no se pierda su informacin.
Cruce
Durante esta fase se cruzan o mezclan los individuos seleccionados en la fase anterior. Es decir, los
genes de los dos padres se mezclan entre s para dar lugar a los diferentes hijos. Existen diversos
mtodos de cruce, pero los ms utilizados son los siguientes:

Cruce basado en un punto: los dos individuos seleccionados para jugar el papel de padres,
son recombinados por medio de la seleccin de un punto de corte, para posteriormente
intercambiar las secciones que se encuentran a la derecha de dicho punto. Es decir, los
genes del padre1 a la izquierda del punto de corte forman parte del hijo1 y los situados a la
derecha formaran parte del hijo2, mientras que con el padre2 suceder lo contrario.
Cruce punto a punto: este tipo de cruce es similar al anterior pero realizndose para cada
gen de los padres. Por tanto, en este cruce los genes pares del padre1 formarn parte del
hijo1 y los genes impares formarn parte del hijo2, mientras que para el padre2 suceder lo
contrario.
Cruce multipunto: en este tipo de cruce se selecciona aleatoriamente la cantidad de puntos
que se van a utilizar para el cruce. De esta forma, y de manera anloga al anterior cruce, se
irn intercambiando los genes para formar los dos nuevos hijos.
Cruces especficos de codificaciones no binarias: Para este tipo de codificacin se pueden
definir, adems de los anteriores, otros tipos de operadores de cruce:
o Media: el gen de la descendencia toma el valor medio de los genes de los padres.
Tiene la desventaja de que nicamente se genera un descendiente en el cruce de
dos padres.

Docente: Dra. Diana Cecilia Muoz Casanova

Universidad Nacional del Santa


o
o

Asignatura: Inteligencia Artificial

Media geomtrica: cada gen de la descendencia toma como valor la raz cuadrada
del producto de los genes de los padres. Presenta el problema aadido de qu signo
dar al resultado si los padres tienen signos diferentes.
Extensin: se toma la diferencia existente entre los genes situados en las mismas
posiciones de los padres y se suma el valor ms alto o se resta del valor ms bajo.
Solventa el problema de generar un nico descendiente.

Mutacin
La mutacin se considera un operador bsico, que proporciona un pequeo elemento de
aleatoriedad en los individuos de la poblacin. Si bien se admite que el operador de cruce es el
responsable de efectuar la bsqueda a lo largo del espacio de posibles soluciones, el operador de
mutacin es el responsable del aumento o reduccin del espacio de bsqueda dentro del algoritmo
gentico y del fomento de la variabilidad gentica de los individuos de la poblacin. Existen varios
mtodos para aplicar la mutacin a los individuos de una poblacin, pero el ms comnmente
utilizado es el de mutar un porcentaje de los genes totales de la poblacin.
Este porcentaje de genes a mutar se puede seleccionar de dos maneras, de forma fija, especificando
el mismo porcentaje de mutacin a todas las generaciones del algoritmo gentico y de forma variable,
es decir, modificando el porcentaje de mutacin de una generacin a otra, por ejemplo reducindolo.
De esta manera, se consigue hacer una bsqueda ms amplia y global al principio e ir reducindola
en las siguientes generaciones.
Con otro tipo de codificaciones (por ejemplo codificacin real) existen otras opciones de mutacin,
aplicadas con una probabilidad generalmente pequea:

Mutacin al azar: Modifica el valor de un gen asignando con un nuevo valor que se
encuentra dentro de un determinado rango. El nuevo valor es independiente del valor previo
del gen.
Mutacin gaussiana: Dado un cromosoma p con un gen seleccionado para la mutacin i,
se le aplica una distribucin normal N de media pi y desviacin estndar s (parmetro).
Alternativamente se puede disminuir el valor de s a medida que aumenta el nmero de
generaciones.

7. Y cmo puedo implementar un algoritmo gentico en Java?.

Para la implementacin de algoritmos genticos, disponemos de un framework para Java


llamado JGAP (Java Genetic Algorithms Package)
JGAP proporciona los mtodos y mecanismos bsicos para implementarlo. Fue diseado
para que fuera muy fcil de usar, siendo altamente modular y configurable, llegando a ser
realmente fcil crear incluso nuevos y personalizados operadores genticos.
Se distribuye bajo licencia GPL. En su pgina web podemos encontrar gran variedad de
ejemplos de uso y documentacin.
A continuacin mostramos el diagrama de clases implementado en JGAP:

Docente: Dra. Diana Cecilia Muoz Casanova

Universidad Nacional del Santa

Asignatura: Inteligencia Artificial

Como se puede apreciar, ya estn implementados la mayora de operadores de los que


hemos hablado anteriormente (cruce, seleccin, etc) y los tipos de genes ms comunes. De
todas formas, siempre podrs crear los operadores y tipos de gen que necesites.
El framework JGAP se encarga de ejecutar los operadores en cada ejecucin, devolviendo
el individuo con mayor Fitness (permitindonos incluso obtener cualquier individuo de la
poblacin en cualquier ejecucin).
En la siguiente direccin, podis ver lo fcil que sera implementar un algoritmo gentico
desde cero.
http://jgap.sourceforge.net/doc/tutorial.html
TAREA:
IMPLEMENTAR UN PROGRAMA DE CAMBIO MNIMO DE MONEDAS-USANDO
ALGORITMOS GENETICOS EN JAVA, USANDO LIBRERA JGAP.

Docente: Dra. Diana Cecilia Muoz Casanova

You might also like