Post on 13-Jul-2022
UNIVERSIDAD DE LOS ANDES
Facultad de Ingeniería
Departamento de Ingeniería de Sistemas y Computación
Análisis de Estado del Arte en Algoritmos Genéticos
Trabajo de Grado
Para aspirar al título de
Ingeniero de Sistemas
Wolfgand Enrique Kook C.
Asesor Rafael García
ISC-2003-2-18
Santafé de Bogotá, Mayo de 2004
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 2
Agradezco a mi madre, quien me dio el primer impulso, y me ha
acompañado todo el camino; A Inghe, Kathy y Krys, a J, a Ricardo, a
Natalia y a Sandra, quienes marcaron los momentos de mayores
dificultades y cambios en mi vida: No saben todo lo que aprendí gracias a
ustedes; A Carlos, a Hugo, más hermanos que amigos, que me han
acompañado durante todo el camino, a veces incluso llevándome sobre
sus hombros; A las niñas más hermosas que conozco, por dentro y por
fuera –Ángela con su mordacidad, Bibi con su veleidad, Cucú con su
luminosidad, Eileen con su complicidad, Fica con su confiabilidad, Gina
con su espontaneidad, Natis con su afabilidad, Vicky con su
hiperactividad, y en especial Ginita, quien siempre ha estado allí, y que en
tantas ocasiones me ha servido de apoyo y de paño de lágrimas –; A
Diego Ramírez y a Jaime Gutiérrez, que siempre estuvieron pendientes de
“cómo iba”, y listos a darme un empujoncito, o un jalón de orejas; A Diana
K, a Pam, a Rosa y a Sonia, de quienes a mi pesar el tiempo y la distancia
me han separado tanto; A la gente de IBM, en especial a Patty por confiar
en mí, y a Jayson porque siempre pude contar con él; A Mónica, a Maru, a
Daniel, a Franky, a Gino, a Himura, a Jaguar, a Santiago y al Abogado; A
Rafael por su paciencia y su ayuda, y a Mauricio y a Isabel, que superaron
la tortura de permanecer sin computador mientras yo adelantaba este
proyecto.
-Wolfgand Enrique Kook C.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 3
1. Introducción
Una gran cantidad de ciencias –
incluyendo la Física, la Biología, la
Economía y la Sociología –, han tenido
a lo largo de su historia que lidiar con
problemas de optimización.
El desarrollo del cálculo diferencial
ayudó en gran parte al desarrollo de
éstas ciencias, al proporcionar un
método relativamente sencillo para
hallar éstos óptimos, en la forma de
puntos extremos –máximos y mínimos –de una función.
El método diferencial, sin embargo, suele tener algunas importantes fallas al
intentar abarcar algunos problemas del mundo real. En breve, la realidad no
suele acomodarse a valores tan perfectamente diferenciables como aquellos
con los que se acostumbra a trabajar en el trabajo teórico. En estos casos,
históricamente, se ha recurrido a atajos en la resolución del problema que por
lo general tienden a simplificarlo, como el reemplazo de procedimientos infinitos
por procedimientos finitos, y el de problemas no lineales por problemas lineales
relativamente cercanos al original [25].
Sin embargo, en los últimos años los estudiosos de la Inteligencia Artificial han
desviado su mirada para asimilar los procedimientos utilizados por la
Naturaleza para resolver sus problemas de optimización, como son el
aprendizaje, la percepción, el raciocinio, la evolución y la adaptación.
Adaptando estos procedimientos a modelos computacionales, éstos estudiosos
han logrado desarrollar poderosas herramientas como son las Redes
Neuronales, que pretenden ser una analogía del funcionamiento del cerebro
Figura 1.1
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 4
humano, la Lógica Difusa, basada en los procesos lingüísticos, y los Sistemas
Expertos, que emulan los procesos comunes de inferencia [11]; Todas las
cuales se agrupan bajo el término de Computación Natural o Computación
Suave [38].
Dentro de este orden de idea, han aparecido otros métodos para resolver
algunos problemas complejos a través de las teorías de la evolución
Darwinianas de Selección Natural [11], que dicen que el gran número de
diseños y soluciones complejas hallado en la naturaleza responde a cientos de
años de evolución [43]; que en lugar de examinar una función que puede no
existir o no ser diferenciable, barren en forma semi-aleatoria el dominio de
búsqueda en búsqueda de un valor óptimo. Un subconjunto de estos métodos
son los llamados Algoritmos Genéticos [42].
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 5
2. Objetivos
El presente documento pretende hacer una introducción breve pero profunda al
tema de los algoritmos genéticos, con el fin de convertirse en material de apoyo
y consulta para cualquier investigación posterior en el tema. En particular, se
pretende hacer una profundización en los siguientes temas:
• Historia de los algoritmos genéticos, con el fin de investigar las
motivaciones históricas que dieron lugar a su aparición.
• Teoría biológica de la evolución que es la base de los algoritmos genéticos.
• Proceso de implantación de un algoritmo genético para la resolución de un
problema en particular.
• Teoría matemática que sustenta el correcto funcionamiento del algoritmo
genético, y la convergencia del mismo a una solución óptima.
• Estudio del tipo de problemas que son más susceptibles de ser resueltos a
través de algoritmos genéticos, y de aquellos que son específicamente
difíciles de resolver por ésta técnica.
• Estado del arte a Junio de 2004.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 6
3. Antecedentes Históricos
3.1. Evolución, Selección y Herencia
Hasta mediados del siglo XIX, las teorías predominantes para la explicación de
la diversidad de las especies eran la creacionista y la de la generación
espontánea, según la cual algunos seres –en particular aquellos que
podríamos clasificar como “alimañas” –eran generados espontáneamente a
partir de ciertos componentes, que curiosamente terminaban por ser
precisamente aquellos que servían a la criatura de alimento [40].
Sin embargo, en el Siglo XVIII, un grupo de pensadores encabezados por
Pierre de Maupertuis, Erasmus Darwin y Jean Baptiste de Lamarck
comenzaron a poner en duda el origen divino de las especies terrestres,
postulando (Al igual que ciertos pensadores en la Grecia Antigua), que las
diversas especies eran generadas por otras especies a través de un
mecanismo de evolución, por el cual los órganos que eran utilizados
habitualmente durante la vida de una criatura eran reforzados en sus hijos, y
los que no eran usados se atrofiaban en las futuras generaciones. Estas ideas
se hicieron habituales entre los círculos intelectuales, en particular entre los
geólogos, durante la primera mitad del siglo XIX, aunque siempre en forma
vaga y sin explicar el mecanismo por el cual tales modificaciones eran posibles
[51].
Pero fue Charles Darwin –nieto de
Erasmus –quien, a partir de los
descubrimientos de Alfred Russel
Wallace y de sus propias
observaciones, realizadas durante sus
viajes alrededor del mundo a bordo
del barco de reconocimiento HMS
Figura 3.1
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 7
Beagle [51], publicó en 1859 su libro “El Origen de las Especies”, que plantea la
evolución –no la creación divina –como razón de la diversidad de las especies
que abundan sobre la tierra. Bajo las leyes de la evolución planteadas por
Wallace y Darwin, la existencia de un individuo comienza a ser determinada por
su capacidad de adaptarse a los rigores del medio en el que debe sobrevivir
(“Supervivencia del más Fuerte” [18]). Sólo los mejores, los más aptos, son los
elegidos para sobrevivir. Desde el punto de vista científico, esto es un claro
ejemplo de optimización [47].
Las teorías de Darwin, que revolucionaron al mundo de aquella época y
generaron controversias científicas y religiosas que perduran hasta nuestros
días, planteaban sin embargo dificultades derivadas del cruce –en el que se
perdía la ganancia en aptitud en la información genética de cada generación –
que no fueron resueltas hasta 1865, cuando Gregorio Mendel [28] realizó sus
descubrimientos en genética que en 1900, al ser descubiertas sus anotaciones
y combinadas con las teorías del Darwinismo puro, darían lugar al Neo-
Darwinismo [31], postulado por R. A. Fisher, J. B. S. Haldane y Sewall Wright
en los años 20 [51]. Por aquella misma época, el científico estadounidense
Thomas Hunt Morgan, junto con tres de sus alumnos, ayudó a establecer la
teoría cromosómica de la herencia [51].
Durante la segunda guerra mundial se hacen grandes avances en genética
(Término acuñado en 1906 por William Bateson): En 1940, George Wells
Beadle y Edward Laurie Tatum lograron determinar que los genes son de
naturaleza química, y en 1944, el bacteriólogo canadiense Theodore Avery
demuestra que los ácidos nucléicos (ADN y ARN) son las principales moléculas
en la codificación de información genética. Después, en 1953, James Dewey
Watson y Francis Harry Compton Crick descifran el modelo de la estructura del
ADN que es usada hasta nuestros días.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 8
En 1960, el genetista japonés Motoo Kimura propone su Teoría Neutral, la cual
reza que la mayor parte de las variaciones genéticas de una población no son
lo suficientemente radicales como para impulsar los mecanismos de selección
natural. Esta teoría, erróneamente llamada “Anti-Darwiniana”, será de
particular interés para nosotros más adelante; Finalmente, en Junio de 2000,
un grupo de científicos encabezados por Francis Collins logra trazar el 90% del
mapa genético del ser humano.
3.2. La Computación Evolutiva
En 1960, Ingo Rechenberg, en su libro “Estrategias Evolutivas”, propone la idea
de computación evolutiva, que no es llevada a término hasta 1975, cuando
John Holland, profesor de la Universidad de Michigan, publica su artículo
“Adaptación en Sistemas Naturales y Artificiales”, fruto de 10 años de
investigación en busca de un incremento en el entendimiento de los procesos
de la evolución, y de un diseño de sistemas artificiales que pudieran emular los
procesos evolutivos naturales. El trabajo de Holland, iniciado a principios de
los 60s a raíz de la lectura de “La teoría genética de la selección natural”
[39,42], de R. A. Fisher y logrado gracias a la ayuda de sus alumnos del curso
“Teoría de Sistemas Adaptativos”, plantea la posibilidad de utilizar los principios
de la evolución al desarrollo de soluciones óptimas para un problema particular
[42], con el uso de la teoría de Patrones, que había presentado en 1960 ante la
Western Joint Computer Conference (WJCC) [27]: Bargley [62] acuña en 1967
el término Algoritmo Genético para designar el proceso de obtención de estas
soluciones, que emula el seguido por la naturaleza para hallar los individuos
(soluciones) más aptos para adaptarse a un medio particular (el problema) [47].
Unos 15 años después, David Goldberg conoce a Holland y se convierte en su
estudiante. Golberg –un ingeniero industrial que trabajaba en diseño de
pipelines –fue uno de los pioneros en la aplicación de algoritmos genéticos a
problemas industriales [39], con lo cual se inició una rápida expansión en la
aplicación de algoritmos genéticos a una gran cantidad de problemas
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 9
diferentes, como la optimización de estructuras moleculares, la resolución de
equilibrio en teoría de juegos, la creación automática de diseños óptimos, etc.
[12]
Finalmente, en 1992, John Koza expande la idea de los algoritmos genéticos
para generar programas diseñados específicamente para resolver tareas
específicas a través de un proceso evolutivo. Este proceso es llamado
Programación Evolutiva [38].
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 10
4. Un Poco de Genética
A lo largo de la historia ha sido siempre motivo de sorpresa y admiración, para
la mayoría de las personas, la gran diversidad de la vida, la increíble perfección
con la que están dotados los organismos vivos para sobrevivir y multiplicarse, y
la desconcertante complejidad y especialización de estos organismos para
adaptarse al medio en el cual se desenvuelven [51]. Basta una mirada a
nuestro alrededor para darnos cuenta que la Naturaleza se encuentra llena de
diseños y soluciones complejas y sorprendentes, que permiten a los pájaros
volar, a las plantas tomar su energía de la luz solar y a algunas bacterias
soportar niveles increíbles de radiación [43].
La explicación para estos fenómenos biológicos no se dio, sin embargo, hasta
1859, cuando Charles Darwin publicó su libro “El Origen de las Especies”.
Para Darwin, la diversidad de la vida es consecuencia de un complicado y lento
proceso de adaptación gradual de los organismos a un ambiente
constantemente cambiante, y a veces hostil; Un proceso que es generalmente
denominado evolución [51].
4.1. La Selección Natural
La teoría evolucionista de Darwin se basa principalmente en el concepto de
selección natural; que no es más que una interacción entre los caracteres
emergentes de un individuo (fenotipos) y el ambiente que lo rodea [63]. Esta
interacción crea una ventaja –o desventaja –comparativa para éste,
incrementando o disminuyendo asimismo su probabilidad de supervivencia.
En general, se ha visto que los efectos ambientales conducen a un grado
variable de éxito o adaptación de individuos en una población de organismos
con características, o rasgos, diferentes. Cuando estos rasgos son heredables,
y no simplemente producto de adaptaciones morfológicas de un individuo
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 11
particular, las características que potencian el nivel de adaptación tienden a
hacerse más frecuentes en cada generación. En palabras de Darwin:
“Como nacen muchos mas individuos de una especie que los que
posiblemente pueden sobrevivir, habrá entre ellos una recurrencia
frecuente a la lucha por la existencia, que permite que cualquier ser,
aunque varíe poco en cualquier manera que le sea beneficioso, bajo
condiciones de vida complejas y a veces cambiantes, tendrá una mejor
chance de supervivencia y, por lo tanto, será naturalmente seleccionado.
Dado el fuerte principio de la herencia, cualquier variedad seleccionada
tenderá a propagarse en su forma nueva y modificada” [63]
En otras palabras, los recursos económicos disponibles en un hábitat particular
(Alimento, espacio, número de miembros del sexo opuesto, etc.) son limitados1,
y la gran mayoría de las especies producen mucha más descendencia de la
que realmente es capaz de sobrevivir, lo cual genera una alta dosis de
competencia entre los diferentes individuos. Sin embargo, estos organismos
difieren en su habilidad para sobrevivir a causa de diminutas variaciones en sus
caracteres emergentes (fenotipos), que los hacen imperceptiblemente mejor o
peor adaptados a su ambiente [63]. Este nivel de adaptación fue descrito por
Darwin en términos de aptitud [45].
Ante diferentes niveles de adaptación, algunos individuos adquieren una
ventaja comparativa ante los demás de su especie, que les permite llegar a la
edad necesaria para la reproducción. Así, los individuos capaces de sobrevivir
logran propagar sus genotipos, con lo cual se incrementa –en forma
desproporcionada, pero proporcional a la aptitud de cada individuo –la
frecuencia de las características que potencian la supervivencia y la
1 Es de anotar que una de las mayorges influencias de Darwin en su teoría evolucionista fue la
lectura del libro “Un Ensayo sobre el Principio de la Población” de Thomas Malthus [51]
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 12
reproducción. Al final de cada ciclo reproductivo, entonces, las características
favorables se han propagado en forma, dejando a la población en un nuevo
estado de adaptación que contribuye de nuevo a la competitividad, de la cual
pueden lentamente surgir nuevas variaciones, con lo cual el ciclo se repite, una
y otra vez [43].
Ejemplo 4.1
Las bacterias son seres unicelulares, capaces de reproducirse rápidamente y
sujetas a numerosos cambios. Muchas de ellas son parásitos, por lo cual a lo
largo de los años se han producido un sinnúmero de antibióticos que permitan
al cuerpo humano combatirlas y exterminarlas, o al menos mantenerlas bajo
control. Sin embargo, su diversidad genética permite a algunas de ellas
sobrevivan a éstos antibióticos y, gracias a su rapidez de reproducción,
multiplicarse en millones de veces en cuestión de días, propagando con ello su
resistencia a toda la población. Así, el uso globalizado de antibióticos termina
redundado en la generación de bacterias altamente resistentes.
"Cuando se usan antibióticos, hay una presión selectiva para que se dé una
resistencia. Una presión que se suma a sí misma. Así, más y más organismos
desarrollan resistencia a más y más medicamentos"
-Joe Cranston, Ph.D., Director del Departamento de Políticas y Estándares en
Medicamentos de la Asociación Médica Americana en Chicago [43].
La selección natural actúa de modo positivo o negativo, según el rasgo
favorezca la aptitud reproductiva del individuo que lo porta, o la perjudique. En
el segundo caso, la tendencia del rasgo será a la marginación o a la
desaparición. Existen multitud de casos en que un rasgo puede ser beneficioso
al individuo cuando lo ostenta sólo una serie de individuos en la población, pero
se convierte en perjudicial si lo ostentan todos. De este modo, la propia
selección se encarga de mantenerlo en las proporciones adecuadas para que
no sea lesivo a la población, pero sin extinguirlo del todo; Asimismo no todos
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 13
los rasgos de un ser vivo son
necesariamente objeto de
selección: Existen rasgos neutros, que
pueden verse en ocasiones
seleccionados simplemente por
encontrarse acompañados de
otros rasgos que sí son sometidos a la
acción de la selección [51].
Al depender del medio, la selección
puede darse en forma diferente cuando
las poblaciones sobre las que actúa
se desarrollan en distintos
ambientes, produciendo
individuos especializados a su ambiente
particular que, no obstante ser
descendientes de un antepasado
común, pueden diferir mucho en sus
características específicas. Es lo
que sucede con los pinzones de las
islas Galápagos, observados por Darwin. Al parecer, dentro del
archipiélago, cada una de las islas constituyó un ambiente
particular para un grupo de estas aves, que a lo largo de los años, lo llevó a
generar adaptaciones completamente diferentes de las de sus vecinos.
Es de anotar que la selección natural actúa sobre una diversidad de
características ya existente, reflejo de la diversidad genética. Así, por selección
natural no se pueden crear órganos o estructuras nuevas, sino que se favorece
a los individuos que poseen características diferencialmente beneficiosas, a
partir de las cuales puede continuar actuando la selección de modo progresivo
para exacerbar el rasgo en cuestión. Así, por ejemplo, la trompa de los
Figura 4.1
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 14
elefantes no tuvo las dimensiones actuales desde un primer momento, sino que
a partir de un esbozo de probóscide, fue objeto de selección natural a lo largo
de las generaciones, en función de las ventajas adaptativas por ella
propiciadas. En éste sentido, podemos señalar dos tipos de selección natural:
Aquella que mantiene aquellas adaptaciones que resultan favorables en un
entorno estable (selección estabilizadora), y aquella que favorece adaptaciones
en la dirección adecuada cuando se presentan cambios ambientales (selección
direccional). Este tipo de cambios producen en primera instancia drásticas
disminuciones en el nivel de población, que son generalmente seguidos por
una rápida adaptación, o por la extinción [63].
4.1.1. Selección Artificial y Selección Sexual
Uno de los puntos fuertes de la teoría de Darwin, que le daba una mayor
credibilidad, y uno de los que éste más recalcó, fue la explicación del refuerzo
de las características deseables en el proceso de cruce –también llamado
selección artificial –, en el que el encargado del proceso de selección no es el
ambiente, sino una persona que se encarga de dar mayores oportunidades de
reproducirse a aquellos ejemplares que presentan las características que
desea reforzar. Curiosamente, el cruce funcionó durante milenios sin que
nadie se preguntara cómo funcionaba.
De una forma similar, tanto Darwin como Wallace describieron lo que Darwin
bautizó “selección sexual”, por la cual ciertas características, algunas de las
cuales –como la cola del pavo real –podrían parecer completamente inútiles, y
hasta estorbosas, a los ojos de la selección natural clásica. Sin embargo, por
alguna razón sobre la cual los evolucionistas no han logrado ponerse de
acuerdo (Darwin argüía que se trataba simplemente de un capricho, mientras
Wallace insistía que era una manifestación visible de alguna otra característica
que de otra manera no sería evidente), las hembras de ciertas especies tienden
a elegir a los machos que presentan éstas características sobre los que no la
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 15
muestran, logrando con ello la perpetuación de caracteres que, de otra forma,
no prosperarían.
La teoría de la Selección Natural propuesta por Darwin tenía algunos aspectos
teóricos de la misma –en particular, la carencia de una explicación lógica de los
mecanismos que hacían que las adaptaciones favorables fueran hereditarias,
ya que si, como se creía, los descendientes siempre tienen carácter y
apariencia intermedia de los de sus padres, esto implica que con cada
generación la diversidad genética se divide a la mitad, lo cual contradice por
completo toda la teoría de Darwin –encontraron gran debate entre la
comunidad científica de la época. No fue hasta el redescubrimiento de los
escritos de Mendel en genética que se superaron los obstáculos que
planteaban las teorías de Darwin, dando lugar a una base teórica que apoya la
teoría de Darwin desde el nivel celular [51].
4.2. Cromosomas, Genes y el ADN
La célula es la mínima unidad capaz
de actuar de forma autónoma en un
organismo. Todos los organismos
vivos están compuestos de células, y
en general se acepta que ningún
organismo es un ser vivo si no está
compuesto de al menos una célula.
Todas las células –sin importar el
organismo que constituyan –tienen a
su vez una estructura similar: Una
membrana (La membrana
plasmática), que encierra un material de aspecto gelatinoso, rico en agua,
llamado citoplasma. Al interior del citoplasma se encuentran numerosas
estructuras pequeñas, que por lo general encierra en los organismos
superiores un cuerpo prominente denominado núcleo. Cada núcleo contiene
Figura 4.2
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 16
cierto número de diminutos organelos filamentosos llamados cromosomas.
Ciertos organismos simples, como las algas verde-azuladas y las bacterias,
carecen de un núcleo delimitado, pero poseen sin embargo un citoplasma con
uno o más cromosomas.
Estos cromosomas varían en forma y tamaño y, por lo general –sobre todo en
los organismos superiores, como los animales y las plantas –, se presentan en
parejas (Células diploides). Los miembros de cada pareja, llamados
cromosomas homólogos, tienen un estrecho parecido entre sí. La mayoría de
las células del cuerpo humano contienen 23 pares de cromosomas, en tanto
que la mayor parte de las células de la mosca del vinagre o de la fruta,
Drosophila, contienen cuatro pares, y la bacteria Escherichia coli tiene un
cromosoma único en forma de anillo. El conjunto completo de los cromosomas
de una especie constituye su “genoma” [45].
4.2.1. El ADN
El ADN –ácido desoxirribonucléico –, constituye la "columna vertebral" de un
cromosoma, y el principal codificador de material genético. El ADN es una
molécula continua, alargada, simple y delgada, compuesta de sub-unidades
muy pequeñas que se conocen como nucleótidos, dispuestas a lo largo de dos
cadenas, o filamentos, alargadas, que se enrollan para formar una hélice doble.
Cada uno de los nucleótidos está formado por un azúcar de cinco carbonos,
ácido fosfórico y una base nitrogenada. En general, en cada cadena de ADN
existen cuatro tipos diferentes de bases —adenina, guanina, citosina y timina
—. La mejor forma para visualizar el ADN es pensar en una larga escalera de
caracol en la que moléculas de fosfato e hidratos de carbono se alternan para
conformar la estructura, y las bases nitrogenadas, unidas a ésta a través de
moléculas de azúcar, constituyen los escalones.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 17
A lo largo de la doble hélice, cada
una de las bases se encuentra
unida por un enlace de hidrógeno a
una base complementaria
localizada en la cadena opuesta.
La adenina siempre se encuentra
vinculada con la timina, y la
guanina con la citosina. A los
lados de la cadena se encuentra
una serie de moléculas más
pequeñas (grupos laterales) de
cuatro tipos diferentes, que facilitan
la duplicación del ADN y la síntesis
de proteínas.
El ADN es la principal molécula
capaz de autorreplicarse. Para
hacer una copia nueva e idéntica de la molécula de ADN, las dos cadenas se
extienden y se separan por sus bases (cuyos enlaces son bastante débiles).
Gracias a la presencia en la célula de más nucleótidos, se pueden unir a cada
cadena separada bases complementarias nuevas, formando con ello dos
hélices dobles que, gracias a la complementariedad de las bases nitrogenadas,
serán completamente idénticos. Así, si la secuencia de bases que existía en
una cadena era AGATC, la nueva contendría la secuencia complementaria (O
imagen especular) TCTAG. Como finalmente cada cromosoma no es más que
una larga molécula de ADN, una copia de éste estilo finalmente dará lugar a
dos cromosomas idénticos.
Es a causa de los complejos mecanismos de replicación del ADN, que se cree
que esta compleja molécula no pudo haber estado presente durante el origen
de la vida, ya que para ello se habría requerido de estructuras muy
Figura 4.3
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 18
especializadas que no pudieron existir antes del inicio de la propia evolución.
El ADN ha sido descrito como una molécula de alta tecnología que apareció
con toda probabilidad algún tiempo después del origen de la vida. Tal vez la
molécula con la que está emparentada, el ácido ribonucleico (ARN), que aún
desempeña varias funciones vitales en las células vivas, fue la molécula
autorreplicativa original.
A lo largo de la cadena de ADN se encuentran dispuestos los genes, o
unidades de herencia: Pequeñas partículas de material genético, no
necesariamente contiguo, que determinan la presencia o ausencia de una
característica determinada, o de un grupo de características, dependiendo de la
secuencia en la que se encuentren las diferentes bases. Dentro de un
cromosoma, cada gen ocupa una posición, o locus, específico, que determina
la característica que éste codifica. Cada gen puede tener diferentes
posibilidades, o alelos, y cada cromosoma puede contener un sinnúmero de
genes. El genoma humano, por ejemplo, contiene entre 30,000 y 40,000 genes
[45].
El ADN ejerce sus efectos a través de las moléculas a las que da origen,
principalmente de las moléculas de ARN, que no son más que copias de ADN
en las que la base
timina es
reemplazada por el
uracilo, e
indirectamente –A
través del ARN –,
de las proteínas,
que vienen siendo a
la vez los ladrillos y
las herramientas en
la construcción de los Figura 4.4
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 19
seres vivos. Estas proteínas se encuentran a su vez formadas por
polipéptidos: Cadenas de unidades (Aminoácidos) que son determinadas por
las bases presentes en cada uno de los genes [51].
4.2.2. Decodificación
Para obtener una cadena de polipéptidos, el ADN es desenrollado, y sus dos
cadenas separadas en una porción de su longitud. Una de ellas es utilizada
para formar ARN mensajero, o ARNm, con la ayuda de una enzima
denominada ARN polimerasa. El proceso, denominado trascripción, es similar
al de la duplicación de ADN, pero se diferencia de éste en que cada timina es
reemplazada por un uracilo. Una vez formado el ARNm, éste se separa del
ADN, y se inserta en una estructura denominada ribosoma, que consta de
pequeñas cadenas de ARN y de una proteína que las encapsula; Una cadena
de ARN puede ser encapsulado en una cadena completa de ribosomas, a lo
que se da el nombre de polirribosoma o polisoma.
Al interior de cada ribosoma, cada tripleta (O conjunto de tres bases
nitrogenadas) es equiparada a una porción de ARN de transferencia, o ARNt:
una tripleta de ARN que complementa –a través de sus bases, en la misma
Figura 4.6
Figura 4.5
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 20
forma en que sucede al
interior de la molécula de
ADN –la tripleta de
ARNm, que reconoce y
se adhiere a esta
secuencia (o codón).
Cada tripleta de ARNt
(anticodón) atrae, por su
extremo opuesto, un
aminoácido específico –
Existen en total 20 tipos
diferentes de
aminoácido, que se distribuyen entre las 64 (43) posibilidades presentes en una
tripleta de cuatro bases diferentes –; Así, por ejemplo, las secuencias UUA,
UUG, CUU, CUA, CUC y CUG determinan la leucina, mientras que AGU y AGC
determinan la serina, y la UGG el triptófano. La mayor parte de los
aminoácidos están determinados de manera unívoca por sus dos primeras
bases, siendo el tercero indiferente o designando un aminoácido de una familia
próxima.
A medida que estos aminoácidos se unen en forma secuencial a las partículas
de ARNt convocadas por el ARNm, se forman enlaces químicos entre ellos, lo
que forma una cadena de aminoácidos o, en otras palabras, un polipéptido.
Tres secuencias de ARNm (La UAG, la UAA y la UGA) no determinan ningún
aminoácido en particular, sirviendo en su lugar como mecanismo de parada en
la síntesis de polipéptidos. Los polipéptidos se unen a otros polipéptidos para
formar proteínas, que irán a constituir la estructura del organismo, o
constituirán enzimas, encargadas de favorecer una reacción química en
particular. Así, una pequeña variación en una cadena de ADN puede producir
cambios radicales en la estructura o la química de un organismo [51].
Figura 4.6
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 21
4.2.3. Morfogénesis
En los últimos años, se ha logrado un amplio conocimiento acerca del proceso
de decodificación del ADN y de formación de las proteínas. Sin embargo, el
porqué de las variaciones que sufren los organismos en respuesta a ciertas
circunstancias del medio, o la manera en que un cigoto simple puede dar lugar
a todos los tejidos y órganos diferentes que constituyen un organismo
complejo, son aún temas de debate: Si bien en los diferentes órganos y tejidos
la mayoría de las células contienen conjuntos de genes idénticos, también es
cierto que en ellos se encuentran presentes proteínas distintas. Parece ser,
por tanto, que en células diferentes –en tejidos diferentes, en particular –
algunos genes se encuentran activos y otros no. Parte de la explicación del
desarrollo de un organismo complejo debe basarse, por tanto, en cómo se
activan o se desactivan los genes en una forma específica.
Las bases de nucleótidos de ADN que codifican la estructura de los ARN y las
proteínas no son los únicos componentes de los genes: Otros grupos de bases
se encuentran adyacentes a las secuencias codificadoras, afectando la
cantidad y disposición de los productos de los genes. En organismos
superiores (Animales y Plantas, en particular), las secuencias no codificadoras
suelen superar en diez o más a las codificadoras (En el ser humano, el 99% de
cada gen es no codificador). Durante la trascripción, estas secuencias, o
intrones, son copiadas al ARN, para luego ser eliminadas de la cadena por
enzimas especiales que se encargan de “depurar” el ARNm. Asimismo, se han
encontrado secuencias repetidas de código genético, que no siempre es
utilizado en la codificación de polipéptidos. Las funciones de estas regiones
son muy poco conocidas, aunque probablemente constituyan algún tipo de
mecanismo de redundancia que permita asegurar la transmisión y verificar la
validez del código genético, o un mecanismo de control de los mecanismos de
decodificación.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 22
El proceso de activación de los genes en los organismos superiores aún no
está claro; Se sabe bastante, sin embargo, acerca de este proceso en las
bacterias: Junto a cada gen bacteriano existe un segmento de ADN conocido
como promotor, al cual se adhiere la ARN polimerasa para iniciar la
transcripción. Entre el promotor y el gen existe con frecuencia otro segmento
de ADN que recibe el nombre de operador, al cual puede adherirse otra
proteína, comúnmente llamada el represor. Cuando el represor se une al
operador, detiene el desplazamiento de la ARN polimerasa a lo largo del
cromosoma, y por tanto la producción de ARNm; por lo tanto, el gen se
desactiva. Sin embargo, la presencia en la célula de cierta sustancia química
provoca la separación del represor, reactivando el gen. Otras sustancias
pueden afectar al grado de actividad del gen al alterar la capacidad de la ARN
polimerasa de unirse al promotor. Este complejo sistema no parece existir en
organismos más complejos, aunque es muy posible que cada gen tenga su
propio sistema individual de promotores y represores, y que los intrones y las
secuencias repetidas desempeñen también algún papel en este proceso [51].
4.2.4. Mutaciones
A pesar que la replicación del ADN es muy precisa, no es del todo perfecta, y
algunas veces se producen errores, que reciben el nombre de mutaciones y
generalmente son producidas por la presencia de radiaciones, altas
temperaturas, ciertos compuestos químicos o de ciertos alelos específicos de
algunos genes, conocidos como genes mutadores, que pueden producir
defectos en los mecanismos de replicación. En estos casos, el nuevo ADN
puede contener uno o más nucleótidos modificados en cualquier parte de su
estructura.
Cuando se produce una mutación en la secuencia de nucleótidos que codifica
un polipéptido particular, éste puede dar lugar a una alteración –probablemente
minúscula, pero no por ello irrelevante –en la secuencia de aminoácidos de la
cadena polipeptídica. Esta modificación puede causar una seria alteración en
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 23
las propiedades de la proteína resultante (Los polipéptidos que distinguen la
hemoglobina normal de la hemoglobina de las células falciformes, cuya
presencia causa un tipo especial de anemia que suele ser letal, difieren, por
ejemplo, en sólo un aminoácido). Ya que las proteínas sintetizadas por un
organismo suelen servir para labores muy específicas, estas mutaciones
suelen en la mayoría de los casos ser perjudiciales para los organismos que las
portan, si bien en algunos casos particulares pueden generar alteraciones
beneficiosas.
Otro tipo, más severo, de mutaciones, ocurre cuando se gana –o se pierde –
por completo un nucleótido, o cuando se altera la forma o el número de los
cromosomas. Una parte de un cromosoma se puede separar, invertir, y volver
a unir, por ejemplo (inversión), unirse a otro cromosoma o a otra parte del
mismo (traslocación). Algunas veces se pierde un fragmento de un cromosoma
que forma parte de una pareja de homólogos, y éste es adquirido por el otro.
En éste caso se dice que uno presenta una deleción o deficiencia, y el otro una
duplicación. La inversión y la traslocación pueden a veces sobrepasarse, si
bien tienden a generar errores durante el cruce sexual; La duplicación, sin
embargo, suele ser letal [51].
4.3. Reproducción Sexual
En los organismos sexuados, todas las células que componen el organismo
derivan de divisiones sucesivas de una única célula, el cigoto. Durante el
proceso de división, denominado mitosis –cada cromosoma se divide en dos
fragmentos iguales, y cada uno emigra hacia un extremo opuesto de la célula,
a través de una matriz de microtúbulos. Tras la división celular, a cada una de
las dos células resultantes corresponde el mismo número de cromosomas y
genes de la célula original, por lo que cada célula originada a través de este
proceso hereda en forma exacta el material genético de la célula original. Así,
en un organismo superior, a menos que se produzca una mutación, todas las
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 24
células contienen el mismo material genético presente originalmente en el
cigoto.
Los cigotos, por su parte, son formados por la unión de dos células especiales,
denominadas gametos o células sexuales –el óvulo y el espermatozoide, en el
caso de los animales –, provenientes cada una de uno de los organismos
padres. Estos gametos son formados a través de un proceso especial de
división de las células terminales, denominado meiosis, cuya principal
diferencia con la mitosis radica en que cada nueva célula recibe solamente uno
de los dos cromosomas de cada par de homólogos de la célula original (Es
decir, es haploide). Así, cuando los gametos se unen durante la fecundación,
la nueva célula hereda la mitad del material genético de cada una de las
células madre, dando lugar a un organismo completamente diferente. Cuando
se produce una mutación durante la formación de los gametos, ésta será
trasmitida a las generaciones posteriores.
La unión de los gametos combina dos conjuntos de genes, uno de cada
progenitor. Cada locus, por tanto, está representado por dos genes, uno
procedente de la madre y otro del padre. Cada copia se localiza en la misma
posición sobre cada uno de los cromosomas pares del cigoto. Cuando las dos
copias son idénticas se dice que el individuo es homocigótico para aquel gen
particular, lo cual por lo general se traduce en que la característica emergente
representada por ese gen es equivalente a la presente en ambos padres.
Cuando las copias son diferentes, por otra parte –es decir, cuando cada
progenitor ha aportado una forma, o alelo, distinto, del mismo gen –, se dice
que el individuo es heterocigótico para dicho gen. En este caso, a pesar que
ambos alelos se encuentren contenidos en el material genético de un individuo,
si uno de ellos es dominante (Es decir, si predomina sobre el otro), sólo se
manifiesta éste. Sin embargo, como demostró Mendel, cuando los
descendientes son heterocigóticos, los genes recesivos pueden volver a
manifestarse en generaciones posteriores.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 25
Rara vez la acción de los genes es cuestión de un gen aislado que controla un
solo caracter. Con frecuencia un gen puede controlar más de un caracter, y un
caracter puede depender de muchos genes. Por ejemplo, es necesaria la
presencia de dos genes dominantes diferentes para producir el pigmento
violeta en las flores de la planta del guisante de olor. Estas plantas, cuando
son homocigóticas para alguno o ambos de los alelos recesivos implicados en
el caracter del color, producen flores blancas. Así, en algunos casos, los
efectos de un gen pueden depender de los otros genes presentes [51].
Ejemplo 4.2
La capacidad de una persona para pigmentar la piel, el cabello y los ojos,
depende de la presencia de un alelo particular (A), mientras que la ausencia de
esta capacidad, denominada albinismo, es consecuencia de otro alelo (a) del
mismo gen (por consenso, los alelos se designan siempre por una única letra;
el alelo dominante se representa con una letra mayúscula y el recesivo con una
minúscula). Los efectos de A son dominantes; los de a, recesivos. Por lo tanto,
los individuos heterocigóticos (Aa), así como los homocigóticos (AA), para el
alelo responsable de la producción de pigmento, tienen una pigmentación
normal. Las personas homocigóticas para el alelo que da lugar a una ausencia
de pigmentación (aa) son albinas.
Figura 4.8
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 26
Cada hijo de una pareja en la que ambos son heterocigóticos (Aa) tiene un
25% de probabilidades de ser homocigótico AA, un 50% de ser heterocigótico
Aa, y un 25% de ser homocigótico aa. Sólo los individuos que son aa serán
albinos. Observamos que cada hijo tiene una posibilidad entre cuatro de ser
albino, pero al tratarse de una probabilidad, no es exacto decir que en una
familia heterocigótica, una cuarta parte de los niños estarán afectados. Ambos
alelos estarán presentes en el material genético del descendiente
heterocigótico, quien originará gametos que contendrán uno u otro alelo.
Éste no es siempre el caso cuando un alelo es dominante y el otro recesivo: El
dondiego de noche puede tener flores de color rojo, blanco o rosa. Las plantas
con flores rojas pueden tener dos copias del alelo R para el color rojo de las
flores, y, por lo tanto, son homocigóticas RR. Las plantas con flores blancas
tienen dos copias del alelo r para el color blanco de las flores, y son
homocigóticas rr. Las plantas con una copia de cada alelo, heterocigóticas Rr,
son rosas, es decir, una mezcla de colores producida por los dos alelos (Este
fenómeno es conocido como codominancia) [51].
En suma, el genotipo representa la información sobre la cual se construye un
organismo; Una especie de “programa” codificado en porciones infinitesimales
de ADN. El fenotipo es la manifestación física de éste genotipo–lo que el
Figura 4.7
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 27
usuario ve, para seguir con nuestra analogía –, que es transcrita a partir de
éste a través de un proceso conocido como morfogénesis u ontogenia.
Los caracteres que se expresan como variaciones en cantidad o extensión,
como el peso, la talla o el grado de pigmentación, suelen depender de muchos
genes, así como de las influencias del medio. Con frecuencia, los efectos de
genes distintos parecen ser aditivos: Es decir, parece que cada gen produce un
pequeño incremento o descenso independiente de los otros genes [51].
Ejemplo 4.3
La altura de una planta puede estar determinada por una serie de cuatro
genes: A, B, C y D. Supongamos que cuando su genotipo es aabbccdd, la
planta alcanza una altura media de 25 cm, y que cada sustitución por un par de
alelos dominantes aumenta la altura media en unos 10 centímetros. En el caso
de una planta que es AABBccdd su altura será de 45 cm, y en aquella que es
AABBCCDD será de 65 centímetros.
En la realidad los resultados no suelen ser tan regulares. Genes diferentes
pueden contribuir de forma distinta a la medida total, y ciertos genes pueden
interactuar, de modo que la aportación de uno depende de la presencia de otro.
La herencia de características cuantitativas que dependen de varios genes se
denomina herencia poligénica. La combinación de influencias genéticas y del
medio se conoce como herencia multifactorial [51].
Un caso especial
de la
reproducción
sexual sucede
con los llamados
cromosomas
sexuales, que
Figura 4.9
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 28
pueden ser X o Y. A pesar que el cromosoma Y, de longitud aproximada de un
tercio de la del X, carece de información genética; su presencia o ausencia
determina el sexo de los descendientes (Las hembras son XX, los machos XY).
Como el gen X es el único que aporta información genética, todos sus genes
son, de alguna manera, dominantes en los varones, lo cual determina una gran
cantidad de características que se encuentran, como se suele decir, ligadas al
sexo.
Dado nuestro tema de discusión, podría llegar a pensarse que la frecuencia
relativa de ciertos alelos en una población determinada varía radicalmente con
el tiempo, favoreciendo rápidamente a aquellas características que dan
ventajas infinitesimales. Sin embargo, esto está lejos de la verdad. Se ha
demostrado [51] que éstas frecuencias –llamadas también frecuencias génicas
–son casi invariantes a lo largo del tiempo, mientras los procesos de selección
natural y de mutación –que, como se ha dicho actúan muy esporádicamente –
no contribuyan a modificarlas. Esto, sin embargo, contribuye a que la
diversidad genética permanezca, y no se disuelva rápidamente con el tiempo.
En éste ámbito, la evolución puede describirse como el proceso responsable de
la variación de las frecuencias génicas.
Uno de los puntos cruciales para la generación de mutaciones que puedan
llegar a trasmitirse de forma hereditaria es durante la meiosis. Una de las
mutaciones más comunes es una falla en la separación de una pareja de
cromosomas homólogos, que genera gametos –y, por tanto, cigotos –con
cromosomas extra (trisómicos o polisómicos), o con cromosomas faltantes
(monosómicos), ambas mutaciones degeneran en graves incapacidades (El
síndrome de Down, por ejemplo, es causado por una trisomía en el cromosoma
21). Sin embargo, cuando el conjunto completo de cromosomas tiene
problemas en separarse, se produce lo que se llama una poliploidía, que es el
único proceso conocido hasta el momento de crear nuevas especies en una
sola generación. La poliploidía suele ser fatal en la mayoría de los organismos,
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 29
pero en ciertas especies hermafroditas pueden dar lugar a individuos viables y
fértiles, que suelen ser incluso más robustos que sus antecesores diploides.
En general, los genes que contienen mutaciones suelen ser recesivos: Sus
características no se manifiestan a menos que dos de ellos coincidan para dar
lugar a una situación homocigótica. Esto suele ser más probable en la
reproducción consanguínea, por lo que las enfermedades hereditarias suelen
ser más frecuentes en hijos de padres con relación familiar. En los últimos
años, el uso de ciertas herramientas tecnológicas, como los rayos X, los
compuestos radioactivos y ciertos compuestos químicos han dado lugar a un
gran incremento en la tasa de mutaciones [27].
4.3.1. Recombinación de Caracteres
Uno de los principios planteados por Mendel es el de la independencia en la
herencia de diferentes caracteres. Según él, cada característica observable es
heredada en forma independiente de las otras. Como demostró Thomas Hunt
Morgan, esto es cierto sólo cuando estas características se encuentran
codificadas en cromosomas diferentes. Cuando los genes se encuentran sobre
un mismo cromosoma, éstos se heredan como una unidad aislada mientras el
cromosoma se mantenga intacto. Se dice entonces que los genes heredados
de ésta forma se encuentran de alguna manera ligados.
Este ligamiento, sin embargo, no siempre es completo: Las combinaciones de
características de cada progenitor pueden terminar reorganizándose entre sus
descendientes. Durante la meiosis, una pareja de cromosomas análogos
puede intercambiar material durante lo que se llama recombinación o
sobrecruzamiento, en cierto modo un tipo de “unión de los cromosomas”. Este
sobrecruzamiento se produce más o menos al azar a lo largo de los
cromosomas, de modo que la frecuencia de recombinación entre dos genes
depende de la distancia que los separe en el cromosoma –Será más frecuente
en cuanto más alejados se encuentren los genes –. En el descendiente que
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 30
procede de los gametos, el sobrecruzamiento se manifiesta en la forma de
nuevas combinaciones de caracteres visibles. Cuanto mayor sea el
sobrecruzamiento, más elevado será el porcentaje de descendientes que
muestran las nuevas combinaciones.
Esta recombinación de alelos puede tener lugar sin que se produzcan
intercambios recíprocos entre los cromosomas. En apariencia, cuando existen
dos versiones distintas del mismo gen (en un individuo heterocigótico), una de
ellas puede ser corregida para equipararse a la otra, a través de un proceso
denominado conversión genética, que puede tener lugar en cualquier dirección
(Un alelo recesivo puede ser modificado por uno dominante, pero el proceso
puede también darse a la inversa) [51].
4.4 Evolución
Así pues, a un nivel básico, la evolución parte del proceso de reproducción,
mediante la combinación de los cromosomas de los progenitores en sus hijos, y
–Según la teoría de Richard Dawkins (El gen egoísta) [29] –tiene lugar en los
cromosomas, no en los individuos que estos generan. A través de la selección
natural, el medio ambiente elige los cromosomas con "buenas estructuras",
permitiendo a los individuos que éstas generan reproducirse más a menudo
que los demás [37]. A medida que transcurre el tiempo, la suma de los
cambios imperceptibles en el genoma de una población, causados
principalmente por cruces y mutaciones, va transformando lentamente unas
especies en otras [45].
El proceso de evolución es, entonces, consecutivo, interminable y altamente
aleatorio; Determinado por el nivel de adaptación de un individuo particular al
medio ambiente en el cual se desarrolla, y no por su ventaja absoluta sobre los
otros. En éste sentido, no hay un objetivo o un estado final para el proceso de
evolución: Cada nuevo cambio en el medio ambiente puede dar lugar a nuevos
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 31
cambios poblacionales, lo cual hace de la selección natural un proceso
interminable [45].
La teoría neutra de Kimura, por la cual gran parte de las mutaciones no tienen
efectos reales en el momento de la morfogénesis –intercambiando bases
nitrogenadas que tienen el mismo significado a la hora de producir
aminoácidos, o generando cadenas de polipéptidos que finalmente no crean
diferencias apreciables en las proteínas que conforman –, ha generado una
gran controversia en el ámbito de la genética que aún no se ha logrado salvar
del todo. Sin embargo, proporciona una gran herramienta en el cálculo de los
períodos de existencia de los antepasados comunes de cualquier par de
especies.
Es importante para nuestra futura exploración de los algoritmos genéticos, en
particular cuando queramos modelar los procesos evolutivos como Cadenas de
Markov, añadir el hecho de que el proceso de evolución no tiene memoria, en
el sentido en que en la formación de cromosomas únicamente se considera la
información del período anterior [37].
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 32
5. El Algoritmo Genético
5.1 Introducción
Muchos interesantes problemas computacionales pueden ser vistos como
problemas de búsqueda u optimización; Es decir, problemas en los que la
solución consiste en buscar la mejor solución dentro de un conjunto de
soluciones posibles [29] o, en otras palabras, un x’ tal que bajo una función
dada F(x), F(x’) sea el máximo (O el mínimo, en algunos casos) de la función
para el conjunto de búsqueda.
Históricamente, la mayoría de algoritmos de búsqueda en un espacio n-
dimensional de gran tamaño en que una búsqueda exhaustiva resultaría
impráctica [45], se han resuelto por métodos basados en los algoritmos de
escalada o hill climbing [6,3] que, a su vez, requieren para su implantación de
métodos de cálculo de gradientes [9], con el fin de determinar los caminos de
mayor o menor inclinación2; Estos métodos, si bien son usualmente bastante
eficientes [29], pueden presentar graves problemas –e incluso fallar
miserablemente –cuando se presentan múltiples máximos (O mínimos)
relativos [58].
Ejemplo 5.1
Halle el máximo global de la función:
[ ]2)sin()sin()1()1(16),( ynxnyyxxyxf ππ−−=
En el espacio de búsqueda [0,1]2:
2 En cálculo diferencial, los puntos óptimos (Máximos o mínimos) se encuentran encontrando
los puntos en que la inclinación tiende a ser 0.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 33
Como vemos en la gráfica, un método de escalada funciona perfectamente
para el caso en que n = 1. Sin embargo, cuando n = 9, puede ser
extremadamente difícil para el algoritmo encontrar un máximo global [58]. En
algunos casos, incluso, la función de búsqueda es tan irregular que el mejor
método de búsqueda para hallar un máximo o mínimo global es un muestreo
aleatorio exhaustivo [27].
Los algoritmos genéticos surgen como una forma no estándar de solución de
problemas estándar de optimización [58], que pueden estar tan definidos como
el problema de nuestro ejemplo (Encontrar el máximo de una función en un
intervalo dado), o ser tan difusos como la evolución misma [30]; Para ello, se
aplican los métodos ya presentes en la evolución –que ya sabemos que
funcionan, siendo nosotros mismos prueba de su eficiencia [45] –, evadiendo
con ello las técnicas de cálculo de gradientes. En palabras de Holland [37]:
"Se pueden encontrar soluciones aproximadas a problemas de gran
complejidad computacional mediante un proceso de ‘evolución simulada’".
Figura 5.1
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 34
Los algoritmos genéticos son, entonces, parte de lo que ha sido llamado
comúnmente “computación biológicamente inspirada”, una ramificación del
área de Inteligencia Artificial o neuroinformática que parte del conocimiento de
los procesos biológicos para crear procesos computacionales que los emulen.
Un área del conocimiento que no debe ser confundida, sin embargo, con la
bioinformática, que es la rama de la computación que se aplica a los procesos
biológicos [45].
Es importante tener en cuenta que, dado el hecho de que los algoritmos
genéticos se inspiran en los procesos de evolución y selección natural, la
heurística [58] de un algoritmo genético tiene lugar en conjuntos, o poblaciones,
de hipótesis, que actúan en concierto para hallar una solución óptima al
problema en forma conjunta; no en hipótesis separadas que son optimizadas
en forma individual [52,30]. Esto proporciona, entonces, un paralelismo innato
que permite navegar un enorme espacio de búsqueda en busca de
combinaciones óptimas [56] en forma eficiente y en un período de tiempo
relativamente corto.
5.2. El Algoritmo Genético
Como hemos mencionado, un algoritmo genético emula los procesos naturales
de selección natural y evolución; Para realizar una implementación de un
algoritmo genético, entonces, debemos encontrar un modelo computacional
apropiado que nos permita modelar de alguna manera los procesos genéticos
que fueron descritos en el capítulo anterior.
Como ya hemos dicho, la información genética de cualquier organismo viviente
se encuentra codificada en sus cromosomas; En el caso de los algoritmos
genéticos, cada uno de los valores posibles en estos “cromosomas” debe
codificar una hipótesis de la solución, o un punto en nuestro espacio de
búsqueda [53,50], que en el contexto del algoritmo serán a su vez llamados
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 35
“individuos” [54]: En nuestro ejemplo anterior, cada individuo representaría la
hipótesis de que la función dada, evaluada sobre un par ordenado (x, y),
constituyera el máximo global de ésta en el intervalo dado.
Para codificar adecuadamente este individuo, requeriríamos de la información
necesaria para ubicar inequívocamente éste par ordenado; Información que, en
nuestro ejemplo, se encuentra en los valores x e y que lo constituyen; La
representación, probablemente binaria, de cada uno de estos valores,
constituiría uno de los genes indivisibles de nuestro individuo, con la
concatenación de éstas representaciones constituyéndose en un cromosoma
[6], en la que la ubicación de cada gen constituiría su locus, y sus diferentes
valores posibles serían sus alelos.
Esta codificación de la información es una de las principales diferencias entre
los algoritmos tradicionales de optimización y un algoritmo genético [3]; Es,
asimismo, una de sus principales fortalezas: Siempre que se encuentre un
método apropiado de codificar la información –y un adecuado mecanismo de
evaluación de las hipótesis, como veremos más adelante –casi cualquier
problema podrá ser resuelto a través de un procedimiento virtualmente idéntico,
sin necesidad de un conocimiento específico del problema en particular [30,50].
Al igual que en los procesos de selección natural, un algoritmo genético no
actúa sobre individuos particulares, sino sobre conjuntos de individuos
(poblaciones). Bajo éste contexto, el nivel de adaptación al medio de cada uno
de los individuos estaría representado por la cercanía que este presentara a lo
que sería una solución óptima del problema en cuestión. Este nivel de
adaptación, medido en términos de aptitud, es dado por una función de aptitud
F(x), que es única para cada implementación de un algoritmo genético [8]. En
el caso de nuestro ejemplo, una función de aptitud apropiada sería,
simplemente, la función a optimizar, evaluada para el par (x, y) dado por el
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 36
cromosoma en cuestión. En otros casos, sin embargo, ésta función puede no
ser tan fácilmente discernible.
Una vez se tiene una población inicial (típicamente escogida al azar, aunque se
pueden utilizar ciertos métodos heurísticos para generar una población inicial
específicamente “buena”), ésta es transformada a través de una serie de
operadores genéticos, que no son más que versiones artificiales de los
procesos de selección, cruce y mutación, en una nueva generación de
hipótesis que, se supone, se encontrarán más cerca de la solución del
problema en cuestión que sus progenitores. El proceso se repite entonces
continuamente hasta lograr cierto objetivo predeterminado, dado bien por el
número de iteraciones, por cierto nivel de aptitud esperado [29], o por el grado
de convergencia de la población, que generalmente es medido en distancia
promedio de Hamming3 [35], o deriva genética [19].
La idea del algoritmo genético se basa en la suposición de que la solución
correcta existe, y es susceptible de ser encontrada mediante una cierta
combinación de los genes que constituyen a la población inicial [42]. En éste
sentido, el algoritmo no es una búsqueda secuencial de un individuo en
particular, sino de una serie de “bloques de construcción” que permitan mejorar
cada vez más los individuos existentes [27]. Si el algoritmo está bien diseñado,
es muy probable que la población converja a una solución aproximada –o
exacta, en el límite infinitesimal – [6]. Esta suposición no es correcta el 100%
de las veces, y hay casos en que la generación de una solución óptima no está
garantizada; el desafío es, entonces, encontrar un proceso genético que
maximice las posibilidades de obtener ésta solución [52].
3 La distancia de Hamming representa la diferencia entre dos cromosomas, es decir, el número
de símbolos que deben ser alterados (0 a 1 o viceversa, en nuestro caso) para convertir a uno
en el otro. Para mayor información, ver capítulo 11.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 37
Como hemos podido ver, la principal diferencia entre los procesos naturales de
evolución y los algoritmos genéticos reside en la presencia o ausencia de un
objetivo final: A diferencia de la evolución, donde nunca hay un objetivo
específico diferente a la adaptación a un ambiente, en un algoritmo genético el
objetivo está ligado al problema que se desea resolver y es, por tanto, el
indicador de que este proceso ha llegado a su fin [45].
Sin embargo, como en su mayor parte un algoritmo genético no es más que
una metáfora de un proceso biológico real, en éste trabajo nos referiremos a
muchas de las características de éste en términos utilizados tradicionalmente
en biología, como es común en la bibliografía relativa al tema. A continuación
presentamos un paralelo de términos biológicos y su significado en el contexto
de algoritmos genéticos:
Biología Algoritmos Genéticos
Individuo Parámetros que representan una posible solución al
problema.
Cromosoma Representación codificada de un individuo.
Gen Representación codificada de un parámetro particular.
Locus Posición de cada gen dentro del cromosoma.
Alelo Valor posible para un parámetro o característica codificado.
Genotipo Estructura interna de un cromosoma.
Fenotipo Manifestación o propiedades en la decodificación del
genotipo.
Población Conjunto de Individuos.
Generación Población en un ciclo determinado.
Aptitud Función a optimizar evaluada para un individuo.
Cruce, Mutación Operadores de Búsqueda.
Selección
Natural
Selección de soluciones de mayor aptitud.
Tabla 5.2 - Paralelo de Términos [11,31,54]
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 38
Un algoritmo genético es, en suma, un método sistemático [62] de optimización
y aprendizaje gradual [38,56] en paralelo [54], inspirado en los mecanismos
evolutivos de genética, adaptación y selección natural [45,6,56], que
“evoluciona” un conjunto de hipótesis a un problema dado, hasta hallar una
solución plausible al mismo [30].
5.2.1. Componentes de un Algoritmo Genético
Antes de implementar cualquier algoritmo genético es fundamental tener en
cuenta los siguientes elementos [12,56,58,11]:
• El problema que se desea resolver, que determinará a su vez el modelo de
codificación y la función de aptitud.
• Un modelo de codificación, o representación cromosómica, a través del cual
se indica la forma en que se almacena la información en el genoma. Este
modelo es crítico para el éxito del algoritmo.
• El tamaño de la población, que determinará en gran medida la complejidad
y eficiencia del algoritmo, así como un criterio de selección de la población
inicial.
• Una función de evaluación de la adaptación de los cromosomas, o función
de aptitud, que se encuentra en gran medida determinada por el problema
que se desea resolver.
• Un mecanismo de selección de los individuos para ser cruzados, que debe
estar en función de la aptitud.
• Una serie de operadores genéticos, que definan las reglas para obtener
nuevos individuos a raíz de los existentes, a saber:
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 39
o Cruce: Cómo se realizará la recombinación de caracteres.
o Mutación: Cómo y en qué medida se añadirá aleatoriedad al
algoritmo.
o Otros operadores (Muerte, Aborto, Envejecimiento, etc.)
• Un criterio de reemplazo de los individuos de una generación por individuos
de una nueva generación. En particular:
o Una serie de reglas para el tratamiento de individuos no factibles.
o Decisiones en cuanto al reemplazo total o parcial de las
generaciones anteriores con los nuevos individuos.
• Un criterio de parada, que determina los parámetros con los cuales se dará
por finalizada la búsqueda (Número de iteraciones, aptitud mínima, etc.).
• Otros parámetros: Cualquier otro criterio que sea necesario para llevar a
cabo la implantación.
5.3. El Proceso
En un algoritmo genético
encontramos dos
operaciones
fundamentales: La
selección de aquellos
individuos mejor adaptados
a la solución óptima del
problema en cuestión, para
su reproducción; y el cruce
de estos individuos para Figura 5.3
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 40
obtener una nueva población. Estas dos operaciones son repetidas
continuamente un cierto número de veces, o hasta hallar un individuo con un
nivel de costo aceptable (Criterio de Parada).
El proceso de selección de individuos se fundamenta, como hemos visto, en
una evaluación de los mismos, dada por la función de aptitud escogida. Esta
función constituye el único enlace entre el proceso de solución del problema en
cuestión y el problema en sí (En un algoritmo genético tradicional no se trata de
“forzar” la solución a través de los operadores), y por tanto, debe ser escogida
meticulosamente: Una función de aptitud equivocada puede impedir la
convergencia de la solución, resultando generalmente en una estabilidad
conocida como deriva genética, o resultar en una solución que, minimizando la
función de costo, no es una solución óptima para el problema en cuestión. De
la misma manera, unos criterios de selección o cruce equivocados pueden
arruinar la consistencia interna de los individuos resultantes, arruinando por
completo la solución.
Como apoyo a estas operaciones fundamentales, suelen presentarse otras
que, si bien no alteran el principio fundamental del algoritmo genético, pueden
ayudar a mejorar su rendimiento con su presencia. Tal vez la más común de
estas operaciones sea la mutación, que consiste en una pequeña modificación
aleatoria del código genético de un individuo. Las mutaciones, aunque no del
todo necesarias, pueden aumentar la velocidad de convergencia del algoritmo,
dando lugar a cromosomas más cercanos –y, por tanto, aceptables –o lejanos
–desechables –al valor de costo (o aptitud) esperado. Algunos ejemplos de
otras operaciones no fundamentales serán tratados en el capítulo 14.
En la estructura básica de un algoritmo genético, una vez se ha escogido un
método apropiado de codificación y se selecciona al azar una población, se
evalúa cada uno de los miembros de la misma y se verifica si se ha cumplido el
criterio de parada. De no ser éste encontrado, se prosigue en forma secuencial
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 41
con las operaciones de selección, cruce y mutación (y cualquier otra operación
no fundamental que sea implementada), para retornar luego al estado de
evaluación, y proseguir con el ciclo hasta que se cumpla el criterio de parada.
Una vez esto se logra, el individuo de mayor aptitud de la población resultante
es generalmente tomado como una solución aceptable para el problema en
cuestión.
BEGIN
i,t := 0,0
Población := Generación Aleatoria
FOR Tamaño(Población)
Aptitud[43] := Evaluación(Población[43])
i := i + 1;
END FOR
REPEAT
/* Nueva Generación */
i := 0
FOR Tamaño(Población) / 2 DO
/* Basado en su aptitud: */
Padre[0] := Selección (Población)
Padre[1] := Selección (Población)
Población[43] := Cruce (Padre[0], Padre[1], 0)
Población[i + 1] := Cruce (Padre[0], Padre[1], 1)
t := t + 1
Mutación (Población[43])
Mutación (Población[i + 1])
Aptitud[43] := Evaluación (Población[43])
Aptitud[43] := Evaluación (Población[i + 1])
i := i + 2
END FOR
UNTIL Criterio de Parada
END
Seudocódigo aproximado de un Algoritmo Genético [6,3,56]
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 42
5.4. Características
El método que siguen los algoritmos genéticos es muy diferente al de los
problemas clásicos de optimización [42]. En particular, en comparación con
otros procedimientos, se caracterizan por ser [47,62]:
• Estocásticos: Las transformaciones dadas para el proceso de búsqueda de
la solución y el paso de una generación a otra son probabilísticas, no
determinísticas [3]. Debido a la cierta aleatoriedad asociada a éste proceso
(En particular, en la selección de parejas para cruce y en las mutaciones),
es muy posible llegar a respuestas diferentes –aunque posiblemente igual
de válidas –en diferentes ejecuciones [58].
• De Búsqueda múltiple: El proceso es realizado simultáneamente en un
conjunto de cromosomas, lo cual permite que no se llegue a una solución
única, sino posiblemente a varias –con un costo similar –en un período
relativamente corto de tiempo; Incrementando con ello la probabilidad de
hallazgo de múltiples soluciones diferentes.
• Exploratorios: De todos los algoritmos estocásticos, los algoritmos genéticos
son los que realizan una mayor exploración al subespacio de posibles
soluciones.
• Independientes de los Parámetros Iniciales: La convergencia del algoritmo
es relativamente independiente de la población inicial, a menos que ésta
sea realmente degenerada. Esto es particularmente cierto en poblaciones
relativamente grandes, escogidas de forma aleatoria.
• Robustez Paramétrica: El éxito del algoritmo depende de la codificación de
los parámetros; No de los parámetros en sí. Si la representación de los
datos y las operaciones de cruce y selección han sido bien escogidas, es
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 43
muy difícil que el algoritmo no converja. Esto es particularmente bueno
para problemas muy complejos, en los que no existen criterios para escoger
una población inicial en particular: Si el algoritmo está bien diseñado,
convergerá más o menos rápidamente a una solución relativamente
aceptable.
• Paralelismo intrínseco: Independientemente de su implementación, los
algoritmos genéticos exploran el espacio en forma paralela.
• Independencia del Problema: El algoritmo genético no está ligado con el
problema particular. Esto hace al algoritmo bastante robusto, por ser útil
para cualquier problema, pero a la vez débil, por no estar especializado en
ninguno [39,9]. Se han implementado técnicas de conocimiento de dominio
que hacen del algoritmo un mecanismo mucho más especializado [5], si
bien algunos teóricos argumentan que violan los principios básicos del
algoritmo genético. Estas técnicas serán exploradas con detalle en el
siguiente capítulo.
5.5. ¿Cuándo usar un Algoritmo Genético?
Es importante enunciar que gran parte de la eficacia de los algoritmos
genéticos depende de la interdependencia de los diferentes parámetros sobre
los cuales se realiza la búsqueda: Para parámetros completamente
independientes, es mucho más económico realizar una evaluación y
consecuente optimización de cada parámetro por separado, para lograr con
ello un óptimo global. Asimismo, en problemas con parámetros completamente
interdependientes no es posible encontrar soluciones globales a raíz de
soluciones parciales. Los algoritmos genéticos tienen, entonces, su máxima
aplicabilidad en el intermedio de estos dos extremos, es decir, en problemas
para los que los diferentes parámetros tienen simplemente una dependencia
parcial [29].
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 44
De la misma manera, la practicidad del algoritmo genético depende
enormemente del tamaño del espacio de búsqueda. No es práctico, por
ejemplo, implementar un algoritmo genético en espacios relativamente
pequeños y fácilmente enumerables, en los que un mecanismo de búsqueda
por enumeración sería bastante más práctico. En espacios de búsqueda
continuos con un solo pico son mucho más eficientes los métodos de búsqueda
basados en gradientes.
Los algoritmos genéticos, sin embargo, han mostrado poseer grandes ventajas
para resolver problemas NP-completos [20] (Esto es, problemas que pueden
ser resueltos en un tiempo polinomial no determinístico [48]) mediante la
búsqueda en espacios especialmente grandes, no lineales [11], o con una gran
cantidad de dimensiones, en los que el número de soluciones viables es
escasa [9] y que, por tanto, no pueden ser explorados en forma exhaustiva [45],
cuyo rango es conocido [50] y que presentan una cierta consistencia interna
que permite la obtención de soluciones globales a raíz de soluciones parciales;
Espacios como los que resultan de funciones ruidosas y multimodales [18],
como las funciones de DeJong [45].
Funciones de DeJong
Se consideran como funciones de DeJong todas las funciones del tipo:
∑ += n kiik Gaussixxf
1)1,0()(
Esta serie de características hace a los algoritmos genéticos especialmente
eficientes para la solución de problemas complejos de optimización, que
cuentan con varios parámetros susceptibles de ser combinados de manera
específica para hallar una solución óptima: Problemas con muchas
restricciones o condiciones difíciles de modelar matemáticamente, o que
presentan complejas interdependencias en sus parámetros [11]. En particular,
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 45
ciertos problemas –como la asignación de canales en redes celulares de radio
[45,49] –no pueden ser resueltos sin la ayuda de algoritmos genéticos.
Los algoritmos genéticos han sido utilizados en toda una serie de aplicaciones,
como son:
• Diseño de componentes electrónicos.
• Diseño de sistemas de control (En robots, por ejemplo) [54,3,49,50].
• Diseño de lentes para oftalmología [31].
• Diseño paramétrico de aeronaves [3].
• Generación de Gramáticas (Regulares, libres de contexto, etc.) [50].
• Motores de Búsqueda Web.
• Optimización de Consultas en Bases de Datos [50].
• Reconocimiento de Patrones (Imágenes, Voz [49], etc.) [50].
• Simulación de Producción [18].
• Síntesis Farmacéutica.
Y se han utilizado exitosamente para la resolución de problemas para los que
no se conocía previamente solución alguna [50]; se ha reportado que hasta el
2001 el uso de Algoritmos Genéticos fue responsable del registro de al menos
15 patentes para nuevos inventos alrededor del mundo.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 46
Antes de implementar un Algoritmo Genético para la resolución de un
problema, es necesario tener en cuenta que los algoritmos genéticos
consumen una cantidad excesivamente alta de recursos computacionales. En
el curso de un algoritmo genético se suelen realizar por lo general al menos
100,000 evaluaciones, antes de dar con una solución final [29].
5.6. ¿Porqué Funcionan?
Debido a la naturaleza aleatoria de los algoritmos genéticos y a que los
mecanismos de codificación de los diferentes problemas son elegidos por el
usuario, no existe una teoría concluyente que permita describir con precisión su
comportamiento; En particular, no es posible demostrar que para un tipo de
problema siempre se convergerá a una población cercana al óptimo en un
número fijo de iteraciones. Basados en esto, y en una serie de demostraciones
matemáticas, algunos teóricos han argumentado que los algoritmos genéticos
no incorporan correctitud, consistencia, certeza, orden o justificabilidad [58].
Sin embargo, como veremos a lo largo del presente trabajo, es evidente que
los algoritmos genéticos no solo son utilizados en toda una gama de
aplicaciones, sino también que efectivamente resuelven los problemas para los
cuales son diseñados; Es posible justificar con argumentos matemáticos –como
el teorema de los esquemas desarrollado por Holland en sus primeras
investigaciones [42], que será expuesto a lo largo de los capítulos siguientes –
por qué los algoritmos genéticos, en la práctica, funcionan [3].
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 47
6. Codificación
La codificación del algoritmo genético es un proceso que consiste en hallar,
para cada una de las posibles soluciones, una representación computacional
que la determine –y sea determinada por ella –de forma única, que permita una
rápida evaluación de la función de costo y una fácil ejecución de los diferentes
operadores genéticos. “Cada cromosoma debe de alguna manera incluir
información completa y suficiente para representar la hipótesis que lo define”
[38]. En suma, durante el proceso de codificación, se aplica sobre cada uno de
los conjuntos de parámetros (x1, x2,…, xn) que constituyen un punto dentro del
espacio de búsqueda una función C(x1, x2,…, xn): Rn → B* que lo transforma en
una representación binaria de sí misma.
La forma más común de codificar un conjunto de parámetros consiste en hallar
una serie de características puntuales que una solución dada pueda tener
(Representadas como 1) o no tener (Representadas por 0) [46], y codificar así
cada una de las características de nuestras hipótesis como un uno o un cero,
generando con ello cadenas binarias de igual longitud [58]. Algunas veces,
estas características pueden tener estados intermedios (alelos) o requerir que
una serie de condiciones se cumplan antes de que éstas sean exhibidas, por lo
cual se requiere algunas veces de más de un bit para cada una. Así, cada una
de las características es codificada en un gen; y el conjunto de estos genes
determina un cromosoma.
Otra forma común de representar una solución es tomar cada uno de sus
parámetros y representar sus posibles valores como una cadena binaria,
usando tantos bits como sean necesarios para abarcar el rango completo de
valores posibles [28]. Por ejemplo, si lo que queremos optimizar es una función
de 3 números entre 0 y 1000, podemos representar cada número como una
cadena de 10 bits (Para valores entre 0 y 1023); Con lo cual podremos
representar los valores posibles como una cadena de 30 bits, que
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 48
representarían la concatenación de las representaciones de cada uno de los
parámetros [9]. Bajo ésta representación, cada porción de cadena de 10 bits
sería un gen. En general, se recomienda utilizar algoritmos genéticos cuando
los cromosomas son de al menos 30 bits. Un tamaño menor sería fácilmente
susceptible de ser enumerado, y resuelto más fácilmente por otro método [9].
El proceso de codificación supone, entonces, una transformación lineal del
espacio de búsqueda: Asumiendo que la interacción entre parámetros es no
lineal, el tamaño del espacio de búsqueda queda determinado por el número de
bits usados en la codificación. Bajo este contexto, una cadena de bits de
tamaño L define, entonces, un espacio de búsqueda representado por un
hipercubo de tamaño 2L [9], en el cual se realiza la búsqueda efectiva.
La representación binaria a ser utilizada depende enormemente del problema a
ser resuelto [38] y, en muchos casos, la forma en que ésta es codificada –el
orden de los genes dentro del cromosoma [6], la representación binaria de
cada gen, etc. –puede influir enormemente en el desempeño del algoritmo. De
hecho, para muchos teóricos, una codificación apropiada es quizás el factor
más importante del desempeño de un Algoritmo Genético [6].
6.1. Código de Grey
Una recomendación común a la hora de representar números enteros como
cromosomas es la utilización del llamado Código de Grey, un ordenamiento de
2n números binarios en forma tal que para cada número decimal, la diferencia
entre su representación y aquella de su predecesor o de su sucesor sea solo
de un bit.
Este tipo de codificación es generalmente utilizado en codificadores mecánicos
en los que un cambio leve de posición solo afecta un bit, lo cual lo hace
especialmente práctico en algoritmos genéticos. Bajo una codificación binaria
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 49
tradicional, cualquier pequeño cambio en un algoritmo genético podría
modificar de forma inesperada el valor almacenado en un cromosoma.
El código de Grey se puede utilizar para crear representaciones “circulares”, en
las que el cambio de un bit en el último valor posible genera el primero. Un
código de Grey de L bits es, en éste sentido, una representación binaria de un
ciclo Hamiltoniano sobre un hipercubo de L dimensiones. Bajo ésta suposición,
podemos ver que la forma de codificar sobre 4 o más bits bajo un código de
Grey no es única, lo cual permite que se produzcan permutaciones o
inversiones de bits [7].
6.1.1 Códigos de Grey
Se puede implantar un código de Grey de L bits mediante un procedimiento
sencillo, siguiendo los pasos enunciados a continuación [7]:
• Partir de un código de Grey de L-1 bits (Obviamente, el único código de
Grey posible para 1 bit es {“0”, “1”})
• Las 2L-1 primeras representaciones corresponden a las cadenas del
código de Grey de L-1 bits, cada una de ellas precedida de un cero.
• Las 2L-1 representaciones siguientes corresponden a las cadenas del
código de Grey de L-1 bits, con sus términos invertidos, y cada una de
ellas precedida de un uno (después de la inversión de términos).
6.3. La Implicación Doble
A la hora de codificar el genoma hemos de intentar establecer una relación
biyectiva entre los posibles valores del genoma y el espacio de soluciones
válidas, de acuerdo con las restricciones del problema. Esto nos va a permitir
que el algoritmo pueda generar todas las soluciones posibles –es decir, que
pueda recorrer todo el espacio de soluciones sin pasar por alto alguna región
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 50
del espacio –, así como que se restrinja a un espacio de soluciones válidas
[47].
Esta biyectividad nos permitirá asimismo obtener una función inversa C-1(b): B*
→ Rn, a la que llamaremos función de decodificación, que nos permitirá obtener
los parámetros adecuados una vez obtengamos una solución aceptable [54].
Esta biyectividad, sin embargo, no es siempre posible en la práctica, y aunque
debemos buscarla a toda costa, también debemos buscar la forma de
contrarrestar su carencia. Para ello, tenemos dos métodos: El primero es
ampliar el espacio de soluciones válidas, y dar mucho más peso, mediante la
función de aptitud, a los cromosomas válidos, o crear ciertas restricciones de
búsqueda específicas para el problema. La segunda es implementar un
sistema de abortos naturales que estudie la viabilidad del feto, y lo mate sin
permitirle cruzarse con otros si no es aceptable, de la misma forma en que lo
hace la naturaleza con sus individuos durante los primeros meses del
embarazo4.
La principal ventaja de la biyectividad es la posibilidad de, una vez obtenida la
solución en su forma de representación, poder traducir ésta unívocamente a la
solución del problema planteado inicialmente. Es por ello que decimos que a
cada cromosoma va asociado un fenotipo.
6.4. Espacios Continuos
Teóricamente, una codificación apropiada debería permitir la representación de
cualquier punto del espacio de búsqueda [43]. Sin embargo, esto no siempre
es posible: En particular, cuando el espacio de búsqueda es continuo, el
proceso de codificación –que es por lo general bastante sencillo, y robusto,
4 Una alternativa para éste método sería alterar el cromosoma inválido mediante una técnica de
mutación, en espera de llevarlo de vuelta al espacio de búsqueda válido.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 51
cuando las variables están definidas en un conjunto de valores discretos –se
hace muy complicado.
El problema parte de nuestra representación binaria –en realidad, parte de la
representación binaria utilizada en la gran mayoría de los computadores de hoy
en día –. Al ser un alfabeto bastante limitado, el código binario no nos permite
la representación de números reales, a menos que hagamos algún tipo de
concesiones sobre el significado de los diferentes bits (Los primeros 10 bits
representan la parte entera de un número, mientras que los siguientes 10
representan una fracción decimal, por ejemplo). En este caso, entonces, el
problema es qué tipo de concesiones debemos hacer para llegar a una
representación satisfactoria de nuestro espacio de búsqueda.
Esto, obviamente requiere de un grado bastante mayor de análisis previo de
nuestro espacio de búsqueda, ya que necesitaremos discretizar el conjunto
hasta un grado lo suficientemente fino como para cubrir una gran proporción de
las posibles soluciones (De lo contrario se corre el riesgo de ignorar una gran
cantidad de hipótesis válidas, que puede incluso incluír el óptimo que estamos
buscando), y lo suficientemente grueso como para no sacrificar el rendimiento.
Es posible, incluso, realizar una serie de iteraciones del algoritmo que vayan
“afinando” cada vez más el espacio de búsqueda, incrementando
secuencialmente la precisión de las hipótesis hasta encontrar una solución
aceptable.
La solución ya ha sido, por suerte, pensada desde hace ya bastante tiempo:
Los computadores modernos cuentan con toda una gama de representaciones
de números flotantes de simple o doble precisión que probablemente el lector
inquieto querrá investigar, si se encuentra interesado en “importarlas” a su
representación cromosómica.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 52
Otras posibles soluciones para éste problema podrían residir en el operador de
cruce, o en la utilización de otro tipo de algoritmo evolutivo, como un algoritmo
mimético o uno híbrido [47].
6.5. Espacios Discretos Limitados
De la misma manera, un gen que sólo puede tomar un cierto número de
valores discretos puede generar cierto número de dificultades; Sobre todo
cuando se utiliza una representación binaria, y el número de valores posibles
no es múltiplo de 2 y es necesaria, por tanto, una representación binaria que
permita un número de posibilidades mayor a la necesaria. En éste caso,
algunos de los códigos binarios serían redundantes, y no podríamos garantizar
que nuestros operadores genéticos (Cruce, Mutación, etc.) no nos llevaran a
generar individuos inválidos.
Tomemos como ejemplo un parámetro que sólo puede tomar valores entre 1 y
10. La representación más lógica para éste gen sería una cadena de 4 bits,
que nos permitiría registrar un rango de 16 diferentes posibilidades. Esto, sin
embargo, nos dejaría con 6 códigos completamente inútiles, que no tendrían
significado alguno para la función de aptitud. La pregunta es, entonces ¿Qué
hacer con ellos?
Teóricamente, tenemos tres opciones:
1. Descartar los alelos inválidos, como ilegales, cada vez que se presenten.
2. Asignar una baja aptitud a los alelos inválidos.
3. Interpretar cada uno de los códigos inválidos como un código válido.
Nuestras primeras dos posibilidades, si bien no completamente equivalentes,
tienen efectos bastante similares, dando a los individuos portadores de genes
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 53
inválidos una alta probabilidad de ser eliminados rápidamente de la población.
Esto, sin embargo, conlleva el riesgo de dar a cromosomas que, con la
excepción de ese único gen, son bastante buenos, una gran probabilidad de
ser descartados. En éste sentido, nuestra última opción parece bastante mejor
en términos de desempeño.
Esta reinterpretación de alelos implica cambiar cada valor inválido a uno válido.
Esto puede realizarse inmediatamente, cambiando el cromosoma
automáticamente cada vez que se presenta un código inválido, o en los
procesos de evaluación y decodificación, tratando ambos patrones como si
fueran idénticos. En cualquiera de los casos, el número de modificaciones que
deben hacerse al algoritmo genético básico son relativamente pocas.
Este proceso, sin embargo, tiene algunas desventajas, la más importante de
las cuales reside en la equivalencia misma de valores de los diferentes alelos.
Esto implica que algunos de los posibles valores serán representados por más
de un código, mientras la mayoría son representados por uno solo, lo cual
disminuye en parte la diversidad genética, favoreciendo algunos valores sobre
otros. De forma similar, disminuye efectivamente la tasa de mutación, ya que
en muchos casos el cambio de aquellos bits que conducirían a estados
inválidos, generalmente serían reasignados a valores idénticos a aquellos en
los que se hallaba el gen antes del cambio, dejando con ello el valor fenotípico
del gen completamente inalterado.
Una forma de evitar estos problemas consiste en implementar un esquema
aleatorio de reasignación de valores, en el cual cada uno de los valores
inválidos es reemplazado por uno de los valores válidos, elegido al azar. Esto
evita el problema de que algunos alelos tengan un mayor “peso” que otros,
pero genera a la vez una problemática pérdida de información genética, cada
vez que uno de los genes es reasignado, lo cual puede redundar en que el
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 54
algoritmo genético se convierta en una simple búsqueda aleatoria, sobre todo
cuando muchos otros parámetros dependen del parámetro discreto [5].
Otra posibilidad es realizar la reasignación del valor inválido teniendo en cuenta
la información genética de los padres. En éste caso, cada vez que un cruce
diera lugar a un código inválido, éste sería reasignado eligiendo para cada uno
de los descendientes el valor de ese gen en uno de sus padres, que puede ser
elegido por su mayor aptitud, aleatoriamente o estocásticamente, dando a cada
uno de los padres una probabilidad de ser elegido basada en su aptitud.
Las limitaciones que presentan los alfabetos binarios para describir éste tipo de
espacios es una de las motivaciones de aquellos que discuten la
implementación de alfabetos alternativos para la representación de algoritmos
genéticos para descartar los algoritmos genéticos con alfabeto binario como un
formato eficiente de resolución de problemas [14].
6.6. Alfabetos Alternativos
En un principio, la codificación de los Algoritmos Genéticos fue siempre llevada
a cabo a través de largas cadenas en un alfabeto binario, fácilmente
manipulables con operadores genéticos relativamente sencillos de implementar
[11]. Sin embargo, como se ha visto en los últimos años [37], en los que
algunos investigadores han buscado una representación un poco más “natural”
de los individuos (En algunos casos porque el problema mismo requería de un
alfabeto más rico [11]) [38], la representación binaria, si bien es la más
comúnmente utilizada [6], es también bastante más “pesada” para muchos
problemas [50], toma un mayor tiempo de evaluación [14], y no es muy natural.
Por suerte, no es la única posibilidad.
Es común encontrar genomas en base 4, que pretenden modelar fielmente la
estructura del ADN biológico, así como genomas modelados en cadenas en
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 55
base 10, que constituyen una forma más natural para un ser humano de
abordar un problema en particular [58].
Los seguidores de los alfabetos alternativos para algoritmos genéticos
generalmente presentan diferentes ventajas en el uso de éstos alfabetos, entre
las cuales se encuentran [14]:
• Su alto nivel hace mucho más natural para el ser humano su uso en la
resolución de problemas, así como su posterior interpretación.
• Requieren de un menor nivel de abstracción en su representación, y
constan de un número mucho menor de datos unitarios (Las cadenas
binarias deben ser de una longitud mucho mayor que cadenas de
alfabetos simbólicos de mayor cardinalidad para contener un espacio de
datos de igual volumen; Es más corto, por ejemplo, tener un 100 en
base 10 que tener un 1100100 binario); Por tanto, su evaluación es
mucho más rápida.
• Al ser elaborados “a la medida” del problema en cuestión, las
representaciones con alfabetos alternativos no dan lugar a cromosomas
con información inválida o fuera del espacio de búsqueda.
• Al contar con un mayor número de alelos, cada gen del cromosoma
tiene la posibilidad de explorar una porción mucho mayor del espacio de
búsqueda con un menor número de transformaciones.
Estas asunciones, sin embargo, van en contravía del teorema de los esquemas
de Holland, por el cual la codificación óptima para cualquier problema a ser
resuelto con algoritmos genéticos debe tener un alfabeto de cardinalidad 2 [39],
como veremos más adelante; Por otro lado, el algoritmo genético de alfabeto
binario tiene ciertas ventajas:
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 56
• Independencia del problema: Si bien, para cada problema debe
encontrarse un método de codificación, no es necesario reinventar los
operadores de selección, cruce y mutación cada vez que se implementa.
• Facilidad de los Operadores: Los operadores genéticos no son
solamente reutilizables cuando se trabaja un alfabeto binario; Son
también, con la excepción de la evaluación, más fáciles de implementar
computacionalmente: Es mucho más fácil transformar 0s en 1s y
viceversa que implementar complejas transformaciones de unos
símbolos en otros a través de cruces y mutaciones.
• Velocidad de Evaluación: Si bien las cadenas son más largas y se
encuentran a una mayor distancia de la representación real de la
información que contienen, también es cierto que cada uno de los
valores que contienen es mucho más rápidamente interpretado a la hora
de evaluar su aptitud.
Así, tradicionalmente, el trabajo en el campo de los algoritmos genéticos se ha
realizado con alfabetos de cardinalidad 2, y a lo largo del presente trabajo nos
concentraremos en estos en nuestras explicaciones.
6.7. Cromosomas de Tamaño Variable
En algunos casos, el número de parámetros que componen el algoritmo
genético no está definido, lo cual puede implicar que se requiera de un número
variable de genes en la codificación. En estos casos, la dificultad para
determinar el número óptimo de variables se hace parte del problema, y por
tanto debe ser un parámetro más a la hora de codificar las posibles hipótesis.
En este caso, generalmente, se fija un número máximo de variables dentro del
cromosoma, y se hace que el número de variables codificado en él sea una
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 57
variable más. Otra técnica común es la de implantar cromosomas de longitud
variable, lo cual, si bien más “natural”, requerirá de operadores genéticos
capaces de modificar la longitud de los cromosomas [39].
6.8. Diploidía
Como vimos en nuestra discusión inicial acerca de los principios biológicos de
evolución y de genética, las formas de vida más avanzadas suelen ser
diploides; Esto es, sus células suelen contener dos grupos de genes para cada
una de las características a ser sintetizadas, en lugar de uno solo. Esto les
permite tener una especie de “copia de seguridad” de algunas características
que si bien no son completamente beneficiosas bajo las condiciones
ambientales del momento, si les permiten adaptarse rápidamente cuando estas
condiciones cambian en forma abrupta.
Como hemos visto, la mayor parte del estudio de los Algoritmos Genéticos se
concentra en individuos haploides –es decir, en individuos que constan de un
solo cromosoma que contiene por sí solo toda la información genética –. Sin
embargo, siendo todo el estudio de estos algoritmos una metáfora de una serie
de procesos biológicos, sería interesante considerar las ventajas y las
desventajas de mantener individuos diploides en nuestras poblaciones.
En general, el tener dos genes para cada uno de los parámetros de un
problema en particular permite a cada uno de los individuos contar con una
reserva de información que "recuerde" una solución alternativa al problema en
cuestión. Bajo éste esquema, uno de los genes (Aquel que representa la mejor
solución al problema) se constituiría como “dominante”, mientras el otro
permanecería “recesivo”, y aún cuando algunos individuos contaran con
material genético potencialmente perjudicial, éste sería susceptible de ser
perpetuado en la siguiente generación, en particular cuando el material
genético complementario es de muy alta aptitud.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 58
Si bien a primera vista este esquema de información extra puede parecer
agregar poco valor a nuestro algoritmo, la perspectiva cambia cuando tenemos
en cuenta que en algunos casos nuestro medio ambiente, representado por la
función de aptitud, puede variar con el tiempo. Ante ésta perspectiva, podemos
intuir que cuando una población de individuos haploides ha convergido en su
mayor parte hacia un punto en específico, cualquier cambio en el método de
evaluación causaría un gran retraso en el algoritmo: El paso de un punto de
convergencia a una nueva exploración del espacio de búsqueda a través de
procesos de mutación, y de allí a un nuevo punto de convergencia podría tomar
una gran cantidad de generaciones, lo cual afectaría enormemente el
desempeño.
Sin embargo, cuando se dispone de material genético extra –en particular, de
una cantidad mayor de alelos, como en el caso de los individuos diploides –,
estos cambios pueden ser balanceados rápidamente por un cambio abrupto en
la dominancia de ciertos genes; lo cual permitiría que el paso de la
convergencia a la reexploración fuese casi inmediato.
Los individuos diploides son particularmente útiles en aplicaciones en las que el
sistema puede cambiar entre dos estados alternativamente. Sin embargo,
representan una gran cantidad de información extra, ya que cada individuo
contiene no solo dos cromosomas, sino también información respectiva a la
dominancia de cada uno de sus genes.
La cuestión de la diploidía, si bien se ha tratado teóricamente [5], parece no
haber sido explorada experimentalmente de forma satisfactoria.
6.9. Esquemas
Para explicar cómo y porqué funciona un algoritmo genético es necesario
introducir un concepto básico: el esquema o patrón, definido como un
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 59
subconjunto del espacio de búsqueda que presenta cierto grado de similitud
entre sus elementos [41] o, en términos de Holland [56]:
"Una plantilla de similitud que describe un subconjunto de
cadenas con similitudes en ciertas posiciones".
Para representar un esquema, es necesario añadir el signo de indiferencia (#) a
la cadena de bits que representa los cromosomas de nuestros individuos, lo
cual aumenta asimismo nuestro alfabeto en un caracter. Cada patrón está
entonces representado como una cadena del nuevo alfabeto, donde el caracter
# es un comodín [30,59] que representa indiferencia entre los valores restantes
del alfabeto original. Así, asumiendo que nuestros cromosomas son cadenas
de unos y ceros, cada esquema h será una de las cadenas en el alfabeto (0, 1,
#) [3].
En general, para cualquier población de cromosomas de longitud L
representadas por un alfabeto de cardinalidad K –que determina KL
cromosomas diferentes posibles –, el número de patrones posibles es (K+1)L
[3]. Así, si bien sobre alfabetos de diferente cardinalidad K1<K2 se pueden
definir cromosomas con la misma capacidad de información variando la
longitud de los mismos ( 2121 :21 LLKK LL >= ), la cantidad de esquemas que se
pueden definir sobre el alfabeto de menor cardinalidad es mucho mayor que los
que pueden ser definidos sobre el alfabeto de cardinalidad mayor
( 21 )1()1( 21LL KK +>+ ). Sobre esta base, Holland argumentó [50] que el
alfabeto óptimo para la codificación de un algoritmo genético tiene cardinalidad
2.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 60
Como podemos ver, cada uno de los esquemas definidos sobre un espacio de
búsqueda dado define un hiperplano, subconjunto de este, que contiene a
todos los cromosomas que comparten sus posiciones fijas –esto es, aquellas
posiciones diferentes de ‘#’ –. Se dice entonces que un cromosoma b
pertenece al esquema h si [27]:
iii hbhLii =→≠•≤<∀ '#'0
Ejemplo 6.1:
Para una población cuyos individuos están representados por cadenas binarias
de longitud 3, el esquema h1 = “###” representaría a todos los individuos de la
población. De igual forma el esquema h2 = “10#” representaría indistintamente
al individuo (100) y al individuo (101) [41].
Como podemos ver, para un espacio de búsqueda determinado, el conjunto de
los esquemas posibles no representa el total de los subconjuntos posibles de
Figura 6.1
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 61
hipótesis. El conteo simple nos muestra, por ejemplo, que mientras un
cromosoma binario de tamaño L puede tener 2L configuraciones diferentes, y
por tanto L22 subconjuntos posibles, el número de esquemas posibles es
solamente 3L 5[52,30].
##1## 0#1## 0##0#
00000 X
00100 X X X
00110 X X
01001 X X
11111 X Tabla 6.1: Interrelación entre Cromosomas y Esquemas
Un esquema de la longitud de un cromosoma representa una familia de
cromosomas. Así, por ejemplo, el esquema h = “0011##10”, corresponde a la
familia de cromosomas {“00110010”, “00110110”, “00111010”, “00111110”} [3].
En éste sentido, los esquemas representan el grado de parecido o similitud
entre los individuos de una misma población [41]. En general, cualquier
conjunto de n cromosomas está representado a lo sumo por nKL esquemas
[3,57]. Cada población es caracterizada por los diferentes esquemas que en
ella puedan encontrarse [8].
Al mismo tiempo, sin embargo, la relación funciona a la inversa: Una serie de
cromosomas con características comunes puede definir uno o más esquemas
que son evaluados simultáneamente. Así, por ejemplo, sobre el par {“1011”,
“1101”}, se encuentran definidos los esquemas {“1###”, “###1”, “1##1”}. En
particular, sobre cada uno de los individuos de una población se evalúan
5 Donde 3 es el número de caracteres posibles (‘0’, ‘1’ ó ‘#’), y la exponente representa las
diferentes combinaciones de los mismos.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 62
simultáneamente KL esquemas diferentes [57]. Este fenómeno es el llamado
“paralelismo implícito” de los algoritmos genéticos [38].
Es debido a éste paralelismo implícito, según el razonamiento de Antonisse,
que al evaluar empíricamente el desempeño de algoritmos genéticos con
cadenas de alfabeto binario y decimal, se puede comprobar que estas últimas
funcionan mejor en la práctica, contrario a las predicciones de Holland. Según
él [38,5], si bien un alfabeto de mayor cardinalidad contiene un menor número
de esquemas, al evaluar cada uno de los individuos se evalúan implícitamente
muchos más esquemas que en uno de cardinalidad mayor.
Según Holland, los individuos de mayor aptitud son representados por "buenos
esquemas" –esto es, por esquemas que reflejan un patrón por el cual los
individuos que representan tienden a tener una aptitud superior –para el
problema en particular [3,30]. Se espera entonces, que la estructura de los
diferentes esquemas nos diga algo de los individuos que los representan; En
particular, se espera que individuos que se acercan al máximo estén
representados por esquemas similares [52].
En éste sentido, lo que realmente procesa un algoritmo genético son los
esquemas, antes que los individuos: Al evolucionar la población inicial,
generación tras generación, los esquemas más aptos son pasados de una
generación a otra, incrementando la probabilidad de encontrar mejores
soluciones, mientras que los esquemas menos aptos tenderán a desaparecer
[41].
Ejemplo 6.2:
Supongamos que estamos tratando de optimizar la función f(x)=x2 mediante un
algoritmo genético, empleando para ello individuos con cromosomas de 10 bits
que suponen una representación binaria del número real que representan.
Bajo ésta representación, nos parece lógico que los individuos pertenecientes
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 63
al esquema h1 = “1#########” tendrán en promedio una mayor aptitud a
aquellos que son instancia del esquema h0 = “0#########” [30].
Bajo ésta teoría, una buena solución a un problema está constituida por unos
buenos patrones, o "bloques de construcción", al igual que una buena máquina
está hecha por buenas piezas. Para hallar la solución óptima a un problema,
se requiere encontrar éstos buenos bloques y unirlos unos a otros a partir de
técnicas de cruce, seleccionando los mejores cada vez para ir incrementando
la cantidad de buenos bloques, hasta llegar –potencialmente, en el infinito –a
encontrar la solución perfecta para el problema en cuestión [42].
6.9.1. Orden y Longitud Característica de un Esquema
Una vez definido el concepto de esquema, se hace importante en nuestro
estudio definir los conceptos de orden y longitud característica del mismo, de
los cuales depende la aptitud de los esquemas para el problema en particular,
como veremos al realizar nuestro análisis del rendimiento de los algoritmos
genéticos [41]:
• Orden o Especificidad [11]: El orden de un esquema s se define como el
número de locus definidos [57], o posiciones fijas (Esto es, diferentes de "#") al
interior de un esquema [56], y es representado como o(h). Por ejemplo, para el
esquema s = “##10#0#”, o(h) = 3.
∑≠
='#':
1)(ii hh
ho
• Longitud característica: La longitud característica de un esquema s se define
como la máxima distancia medida en número de posiciones entre la primera y
la última posición fijas de los dos extremos, al interior del mismo, y es
representada como l(h). Por ejemplo, para el esquema s del ejemplo anterior
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 64
(h = “##10#0#”), la distancia característica (La distancia entre el primer uno y el
último cero), l(h), es 3. Es decir, si:
( )[ ]#'#' ≠∧<•¬∃∧≠•∃ ki hikkhi ,
y
( )[ ]#'#' ≠∧>•¬∃∧≠•∃ kj hjkkhj ,
Entonces,
ijhl −=)(
Holland demostró, como veremos en los siguientes capítulos, que los buenos
esquemas tienen una probabilidad exponencial de reproducción [3,56], y que
los esquemas más aptos son aquellos que presentan bajo orden y corta
longitud característica, ya que al aplicar sobre ellos los operadores de cruce y
mutación es más difícil destruirlos [41].
6.10. Consideraciones Finales
Como vemos, no hay una única forma de abordar el problema de la
codificación, y no hay –asimismo –una única forma de codificar un conjunto
dado de parámetros [38,6]: Una buena codificación puede hacer la
programación y resolución muy sencillas, y acelerar enormemente la velocidad
de convergencia del algoritmo. Sin embargo, la elección de una codificación
fija presenta una gran dificultad para el usuario que no conoce el espacio de
búsqueda lo suficiente para predecir su evolución a lo largo del tiempo.
La codificación no puede ser un proceso separado de los demás; Es importante
tener en cuenta los mecanismos de evaluación, cruce y mutación, y el
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 65
problema a resolver, con el fin de optimizar el desempeño del algoritmo:
Cuando se sabe a priori que ciertos esquemas serán bastante significativos en
la resolución de un problema en particular, y se utiliza cruce básico de un punto
(Ver capítulo 9: Cruce), por ejemplo, es mejor tener éstos esquemas
localizados al principio o al final del cromosoma, evitando con ello que a la hora
del cruce un buen esquema sea destruido [15].
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 66
7. Evaluación
Una vez se ha elegido la forma de codificar el conjunto de posibles soluciones,
es necesario hallar algún criterio que determine el valor, o aptitud, de las
mismas; Es decir, una medida de la utilidad que presenta el punto del espacio
de búsqueda que cada una de ellas representa para resolver el problema en
cuestión [9,30]. Este valor es determinado por la función de aptitud.
7.1. La Función de Aptitud
La Función de Aptitud, también conocida como Función de Adaptación,
Función de Evaluación o Función Objetivo, es una función F(b): ℬ* → ℛ que,
dado un cromosoma, retorna la aptitud asociada a éste [9], basado en un
criterio “real” de evaluación del cromosoma, que –a diferencia de la mayor
parte de los pasos del algoritmo (cruce, mutación, etc.) [58] –depende por
completo del problema en cuestión. De hecho, como ya lo hemos visto, una
vez se realiza la codificación, la función de aptitud es el único enlace entre el
problema a ser resuelto y el proceso de resolución del mismo [6,58].
Al serlo, la evaluación se convierte no sólo en uno de los puntos críticos del
algoritmo genético –el más importante de ellos, después de la codificación
[9,6], según algunos autores –sino también el operador genético más
dependiente del dominio de búsqueda [53]. De hecho, es común incluso que
una misma serie de técnicas de mutación y de cruce puedan ser aplicadas a
problemas diferentes, siempre y cuando se apliquen criterios específicos de
codificación y evaluación para cada problema [21].
De manera similar, la función de aptitud depende por completo del esquema de
codificación que se haya implantado sobre la población. La función de aptitud
debe ser fácilmente calculable a partir de la representación elegida [3], ya que
de lo contrario se requeriría realizar en cada ciclo del algoritmo, y para cada
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 67
uno de los individuos, un proceso bastante costoso, en tiempo y en recursos
computacionales, de decodificación, con el fin de obtener su aptitud [39].
En el caso particular de la búsqueda de máximos o mínimos globales de una
función en particular, la función de aptitud constituye específicamente la función
a optimizar.
Aunque en éste trabajo en general trataremos los algoritmos genéticos como
un método para encontrar los máximos globales de la función objetivo, es
importante mencionar que un algoritmo genético es igualmente eficiente en la
búsqueda de mínimos globales; Sólo hay que recordar que lo que se busca,
entonces, es la menor aptitud posible, que nuestro esquema de selección
favorecerá a los individuos de menor aptitud, y que llegaremos, probablemente,
a nuestro criterio de parada, cuando alcancemos un cierto nivel de aptitud
inferior a un máximo predeterminado.
7.2. Paisaje de Aptitud
El espacio definido como el producto cruz del espacio de búsqueda y la función
de aptitud de un algoritmo genético es llamado paisaje de búsqueda o paisaje
de aptitud, como analogía al paisaje determinado por el relieve que crean los
diferentes niveles de aptitud sobre el hiperplano formado por los diferentes
puntos del espacio de búsqueda.
Es importante tener en cuenta que, dependiendo de la función en particular, se
puede presentar toda una gama de paisajes de búsqueda diferentes: Unos
relativamente planos, otros con un máximo global único, otros con máximos y
mínimos locales diferentes, o incluso de la misma aptitud. Es posible, incluso,
un paisaje bastante irregular, con máximos y mínimos locales distribuidos
desigualmente a lo largo del espacio de búsqueda [30].
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 68
Holland [38] demostró que los algoritmos genéticos no son la solución óptima
en problemas en los que el paisaje de búsqueda es relativamente convexo –
esto es, uniformemente ascendente hacia el máximo global –o plano –cuando
no hay diferencias apreciables en la aptitud (Ver Rango de Aptitud y
Escalamiento).
7.3. La Aptitud
Ejemplo 7.1
Supongamos un problema codificado en cadenas de ocho bits, y llamemos pn a
la posición n en la cadena (0 ≤ n ≤ 7). Supongamos también que nuestra
función de adaptación está dada por:
76543210 267435 pppppppp +−++−+−
Para los siguientes cromosomas, tendremos las aptitudes listadas a
continuación:
0 – 0 + 0 – 0 + 0 + 0 – 0 + 0 = 0
0 – 3 + 0 – 7 + 0 + 1 – 0 + 1 = -8
0 – 0 + 4 – 7 + 0 + 0 – 2 + 1 = -4
5 – 3 + 0 – 0 + 6 + 1 – 0 + 0 = 9
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 69
5 – 0 + 4 – 0 + 6 + 0 – 1 + 0 = 14
5 – 3 + 4 – 7 + 6 + 1 – 2 + 1 = 5
El quinto cromosoma, con la mayor aptitud (14), tendría la mayor probabilidad
de reproducirse, seguido del cuarto (9) y el último (5). El segundo y el tercer
cromosomas, con las más bajas aptitudes (-8 y -4, respectivamente), tendrían
por su parte una probabilidad casi nula de reproducirse, y ante ciertos criterios
de selección, probablemente serían eliminados
La aptitud de los diferentes individuos de una población será el criterio para la
selección de los más aptos para la reproducción, siguiendo con nuestra
metáfora de los procesos biológicos [45,6]; Se desea que aquellos individuos
que presenten una mayor eficiencia fenotípica [9] –representada en el algoritmo
como una aptitud más aproximada al máximo buscado –tengan una mayor
probabilidad para cruzarse con otros, lo cual se logra condicionando ésta
probabilidad a su aptitud [47].
Algunas veces, la aptitud no es un valor único, sino una serie de valores
(Cuando se busca una serie de objetivos [8], antes que un objetivo único). Sin
embargo, para evaluarlo basta que estos valores constituyan un orden parcial
[39]; Es decir, que al tomar cada par de individuos se pueda determinar
unívocamente cuál de los dos es mejor, y que ésta relación sea transitiva:
( ) ( ) ( ) ( )[ ]bfafbfaf <∧>¬
y,
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 70
( ) ( ) ( ) ( ) ( ) ( )cfafcfbfbfaf >→>∧>
7.4. Rango de Aptitud y Escalamiento
Como podemos ver, no hay tal cosa como un nivel de aptitud mínimo o máximo
para un algoritmo genético. En realidad, el rango de aptitudes depende
enormemente del método de codificación y de evaluación elegidos. Así como
puede ser enormemente amplio, puede también ser bastante llano. Ambos
extremos traen problemas al algoritmo [6]:
Cuando el rango de aptitud es muy grande, puede presentarse una
convergencia prematura del algoritmo genético, a medida que los individuos de
aptitud relativamente alta –amplificada por el amplio margen que los separa de
los demás individuos –comienzan a dominar rápidamente el pool genético,
obligando a la población a converger en máximos locales.
Del mismo modo, un rango de aptitud muy pequeño puede conllevar a una
deriva genética, causada por la falta de una presión de selección: Al ser todos
los valores comparativamente similares, el algoritmo no tiende a ningún punto
en particular del espacio. Es posible que converja, tras una gran cantidad de
generaciones, pero es poco probable que converja a un máximo global, ya que,
finalmente, éste es muy similar al promedio.
Estos problemas son también comunes cuando el rango de aptitud no es tan
extremo; En particular, cuando surgen superindividuos con aptitudes muy por
encima del promedio que lleven a la población a converger rápidamente a su
código genético, eliminando la diversidad, o cuando, después de varias
iteraciones, las diferencias en la aptitud de los individuos se ven ampliamente
reducidas [42].
Una solución bastante más común a estos problemas es aplicar una serie de
transformaciones a la función de adaptación, que normalicen los valores
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 71
resultantes, o bien disminuyendo las diferencias en aptitud para disminuir los
privilegios de la elite, o bien aumentándolas para favorecer los criterios de
selección. Estas son [39,42,6]:
• Escalamiento Básico: A la aptitud de cada uno de los individuos resultantes
se le resta la aptitud del peor. Esto generalmente tiene el efecto de
incrementar la aptitud porcentual de la elite, si bien tiene el problema de
hacerse casi obsoleto cuando se presentan aptitudes extremas (Máximos o
mínimos muy alejados del promedio). Este problema puede ser resuelto,
sin embargo, cuando se fijan aptitudes máximas y mínimas.
• Escalamiento por Ventanas: Equivalente al anterior, si bien el valor restado
de la aptitud de cada uno de los individuos es el menor valor de la
generación pasada (O la antepasada, o de la primera generación, o de una
generación dada en el pasado). Tiene el mismo problema del escalamiento
básico, y se debe tener en cuenta que un nivel mínimo de aptitud no puede
ser usado como criterio de parada.
• Escalamiento Exponencial: La aptitud real de cada gen es la raíz cuadrada
del resultado de la función de costo, más un valor dado. Esta
transformación tiene el efecto de normalizar los resultados.
• Escalamiento Sigma: En esta estrategia, el valor esperado del número de
individuos en la población intermedia es función de su aptitud, de la aptitud
media de la población y de su desviación estándar. Un ejemplo de
escalamiento sigma [50]:
( )⎪⎭
⎪⎬⎫
⎪⎩
⎪⎨⎧
=
≠−
+=0)(,1
0)(,)(2
)()(1
P
PP
PfbfbE
i
i
σ
σσ
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 72
• Transformación Lineal: Para cada gen, su aptitud se calcula como el
resultado de la función de costo (x), multiplicada por un valor dado, más otro
valor (c = ax + b). En éste caso, el resultado depende en gran parte de los
valores elegidos para a y b.
• Normalización Lineal: Dados n genes, se organiza el resultado de su
función de costo de tal manera que al menor valor se le da la primera
posición, al segundo menor la segunda, etc., dejando al mejor valor en la
posición n. La aptitud de cada gen será, entonces, la posición que ocupa
en éste arreglo. A pesar de su aparente sencillez, éste método de
evaluación ha sido probado como el más poderoso método de escalamiento
de aptitud de aquellos mencionados en este capítulo.
En algunos casos, se utilizan técnicas de escalamiento que “aplanan” el paisaje
de aptitud en las primeras iteraciones, previniendo con ello una convergencia
prematura, pero que van ampliando el rango de aptitud conforme avanza el
algoritmo, con lo cual logran contrastar de alguna manera la rápida tasa de
convergencia del mismo.
7.5. Consideraciones Finales
El nivel de aptitud promedio, definido como la suma de las aptitudes de todos
los individuos de una generación, dividida entre el número de individuos de la
misma, representa una medida de la convergencia del algoritmo [6]. En un
algoritmo genético bien diseñado, se espera que la aptitud promedio aumente
en forma logarítmica con el número de iteraciones (Para mayor información, ver
capítulo 13).
En cada ciclo del algoritmo genético, cada uno de los cromosomas debe ser
evaluado. Este es uno de los pasos en que se hace evidente, y necesario, el
alto nivel de paralelismo intrínseco a los algoritmos genéticos [58]. De no ser
así, ésta evaluación podría tomar un tiempo proporcional al tamaño de la
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 73
población [53] que, dependiendo del tamaño de la misma, podría ser
inaceptable. Por esto es importante tener en cuenta que la evaluación de
cualquier cromosoma es y debe ser completamente independiente de la
evaluación de cualquier otro [9].
Por otro lado, la comparación de los diferentes individuos unos con otros previa
a la selección puede disminuir en gran parte este paralelismo, creando un
cuello de botella que estancaría todo el algoritmo. Una buena forma de
disminuir el impacto de este problema, y de añadir un poco de diversidad
genética, es realizar esta comparación individuos únicamente entre “vecinos”;
Es decir, aquellos otros individuos que se encuentran de alguna u otra forma
“cercanos” a él [39].
La función de aptitud no siempre es única, y puede variar con el tiempo, de la
misma forma en que lo hace la naturaleza, o variar entre una serie de estados
[5].
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 74
8. Selección
De acuerdo a las teorías Darwinianas de evolución, sólo los mejores individuos,
aquellos que se encuentran más adaptados a su medio ambiente, sobreviven
para dar descendencia [38]. Del mismo modo, en un algoritmo genético, una
vez se ha determinado la aptitud de cada individuo, se realiza una selección de
los mismos [53], con el fin de restringir el espacio de búsqueda [29] a los
individuos más promisorios –es decir, con preferencia, a aquellos de mayor
aptitud [59].
Esto se realiza generalmente a través de un proceso en dos etapas: Primero se
escogen de la población inicial Pn, de tamaño n, m individuos (m≤n) que
conformarán una suerte de “población intermedia” (Pi), que será la encargada
de generar la población de descendientes Pn+1 [3]. Esta parte del proceso
desecha automáticamente a todos los individuos que no son escogidos.
El segundo paso es, entonces, seleccionar un número p de individuos (p≤m),
de entre aquellos elegidos en el paso anterior, que serán escogidos como los
padres de la siguiente generación [3].
La selección es, entonces, una función S(P): (ℬ*)n→(ℬ*)m (m≤n) que a partir de
una población inicial selecciona una población intermedia de individuos que
serán los padres de la siguiente generación.
No siempre estos dos pasos se encuentran bien diferenciados, y es bastante
común que en una misma operación sobre el conjunto de individuos se escojan
inmediatamente los padres de la siguiente generación, desechando
automáticamente aquellos que no fueron escogidos.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 75
8.1. Desecho de Individuos no Aptos
Para la primera parte del proceso de selección se suele implementar un
proceso simple de selección conocido como selección simple o selección
directa [3,56], en el cual de la población P0 de tamaño n, se escogen
simplemente los m individuos de mayor aptitud para conformar con ellos la
población intermedia Pi. Esto, sin embargo, puede ser contraproducente,
dependiendo sobre todo de la magnitud de m: Como en la naturaleza, es
importante dar a las hipótesis débiles una oportunidad de sobrevivir, ya que
pueden estar a sólo unos pasos de ser buenas soluciones [43].
Al otro extremo de la balanza encontramos la selección aleatoria [3,56], en la
que los m individuos de la población intermedia son elegidos aleatoriamente de
entre los n individuos de la población inicial. Evidentemente, ésta tampoco es
una solución óptima, al no incluir ninguna información de aptitud en el proceso
de selección.
El método más recomendado –y más utilizado a nivel global –es, entonces, un
punto intermedio entre estos dos extremos: La Selección Estocástica [3], en la
que la probabilidad de ser seleccionado para cada uno de los individuos
depende proporcionalmente de su aptitud [6,45]. Uno de los métodos más
comunes de selección estocástica es la llamada “ruleta” o “rueda de la fortuna”,
que será estudiada en mayor profundidad más adelante.
En general, para que el algoritmo no pierda en eficiencia al llevar
constantemente consigo la carga inútil de individuos de aptitud
extremadamente baja, suele implementarse una suerte de “presión de
selección” [58] sobre los individuos, que permite descartar aquellos de
aptitudes particularmente bajas, a través de un método relativamente sencillo
de implementar:
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 76
Sea P0 {b1, b2, … , bn} una población de n individuos, y f(b) una función de
aptitud definida sobre el dominio de búsqueda de P0. Así:
∑=
=n
iibfPF
10 )()(
Representa la aptitud total de la población. De la misma manera, sean α ∈ R
un número elegido al azar en el dominio R[0, F(P0)], y j ∈ N un número natural
tal que:
α≥∑=
j
iibf
1)(
La población Pi debe estar formada de todos los individuos tales que:
)()(1: 0 jkkik bfbfPbPbnkNk >∧∈→∈•≤<∀
Desechando con esto a todos los individuos de aptitud inferior del conjunto P0
[58].
Una vez se han elegido los miembros de la
población intermedia, se procede a elegir a los
padres de la siguiente generación. Para ello, hay
dos métodos ampliamente utilizados, que
veremos a continuación:
8.2. La Rueda de la Fortuna
Como ya hemos mencionado, la manera óptima
de realizar el proceso de selección de los
individuos es a través de un proceso estocástico
Figura 8.1
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 77
en el cual la probabilidad de selección de cada uno de los individuos es
determinado por la aptitud de cada uno [53], en relación a la de el total de la
población [3], dando con ello mayores posibilidades de supervivencia a los
individuos más fuertes [6,8].
Generalmente, la probabilidad de que un cromosoma sea elegido para el cruce
es directamente proporcional a la razón entre su aptitud y la aptitud total o, en
otros términos, para el cromosoma bi de aptitud f(bi), su probabilidad de cruce
es [11,9,3]:
∑=
= n
jj
ii
bf
bfp
1
)(
)( ,
o, lo que es lo mismo,
)()(
0PFbfp i
i =
La probabilidad de cruce de cada individuo es, entonces, definida en función de
la aptitud de los demás individuos de la población [9]. En caso de problemas
en que se desea encontrar un mínimo, la probabilidad de cruce cambia un poco
[3,5]:
[ ]∑=
−
−= n
jj
ii
bf
bfp
1
)(1
)(1 ,
o,
)()(1
0PFnbfp i
i −−
=
Una técnica común para seleccionar individuos para su posterior cruce es la
llamada “ruleta” o “rueda de la fortuna” [38,45,54,6,8,59,55], también conocida
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 78
como reproducción proporcionada o selección proporcional a la aptitud [28],
que se implementa a través de un proceso similar al descrito anteriormente
para la presión de selección:
Sea P0 {b1, b2, … , bn} una población de n individuos, y pi la probabilidad de
cruce del individuo bi, definida como:
∑=
= n
jj
ii
bf
bfp
1)(
)(
Así, por reglas de probabilidad:
10: ≤≤•∀ ipNi
y,
∑=
=n
iip
11
Sea α ∈ R un número elegido al azar en el dominio R[0, 1], y j ∈ N un número
natural tal que:
α≥∑=
j
iip
1
Entonces, el individuo bj es elegido como padre para la siguiente generación.
El proceso de selección se repite, con reemplazo (Es decir, un individuo de alta
aptitud puede procrear múltiples veces en un solo ciclo) [9,53], hasta que hay
un número de padres igual a n [38,45,54,6,8,59,55].
Este procedimiento es seguido por algunos investigadores de forma un tanto
diferente –eligiendo un número al azar entre 0 y la aptitud total, y eligiendo el
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 79
individuo cuya aptitud, sumada a la de todos sus antecesores, sea igual o
superior al número elegido –. El método aquí presentado es matemáticamente
equivalente a éste, y se aproxima más a las leyes de la probabilidad que ya
han sido ampliamente tratadas por una diversidad de autores y nos permitirán
un estudio más profundo de este proceso en capítulos posteriores.
Este procedimiento de selección presenta la más alta tasa de convergencia [8],
lo cual puede ser una ventaja, pero puede conllevar a una rápida pérdida de
diversidad –y por tanto, a una convergencia prematura –cuando en los
primeros pasos del algoritmo se presentan individuos especialmente fuertes
que dominen la población [28]. Es por ello que se recomienda utilizar técnicas
de normalización de aptitud cuando se utiliza este método, para eliminar la alta
sensibilidad a aptitud que éste presenta [33].
El nombre de éste método deriva de la analogía que presenta a una ruleta o
rueda de la fortuna, en la que cada uno de los individuos está representada por
una porción pi de su circunferencia (Esto es, por una circunferencia de πpi
radianes, en forma similar a las gráficas pie que son utilizadas comúnmente
para presentar resultados estadísticos), que es girada una y otra vez para
seleccionar a cada uno de los individuos a ser cruzados [11,9].
8.3. Selección por Torneo
Una alternativa para el método de rueda de la fortuna que presenta al mismo
tiempo una menor tasa de convergencia y una mayor estabilidad es el método
de selección por torneo [9,28,6], que se basa en la idea de eliminar los
individuos menos aptos por competición directa [28].
El procedimiento, mucho más simple que el de la rueda de la fortuna, comienza
por una preselección de un grupo pequeño de individuos de la población inicial
P0, que son elegidos en forma completamente aleatoria. Se pueden realizar
torneos entre grupos de diverso tamaño, e incluso se puede variar el número a
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 80
medida que el algoritmo avanza (Un torneo entre un grupo mayor de individuos
implica un nivel mayor de convergencia, por tanto se recomienda comenzar con
un número relativamente pequeño de individuos, para prevenir una
convergencia prematura, e ir incrementando el número a medida que el
algoritmo avanza); Los individuos, sin embargo, son generalmente elegidos en
parejas, y bajo éste supuesto continuaremos nuestro análisis.
Una vez se han elegido los dos individuos (ba y bb), estos entran en
competencia, que de nuevo puede ser directa (Torneo Binario), seleccionando
siempre el de mayor aptitud de los dos, aleatoria, eligiendo al azar
indistintamente uno de los dos, o estocástica, seleccionando uno de los dos
con una probabilidad dada por:
)()()(
ba
aa bfbf
bfp
+=
y
aba
bb p
bfbfbf
p −=+
= 1)()(
)(
Como podemos ver, el método de la ruleta de la fortuna no es más que un
torneo estocástico en el que participan simultáneamente todos los individuos de
la población [9,28,6,29].
8.4. Elitismo
Se denomina Elitismo a la serie de privilegios que reciben determinados
elementos con un nivel de adaptación especialmente bueno –inmortalidad,
mayor probabilidad de reproducirse, etc. –. En particular, a la posibilidad que
tienen éstos (Generalmente, sólo el mejor, o los mejores dos individuos de una
población) de ser copiados sin modificación alguna a la siguiente generación
[56,58,55]; un mecanismo frecuentemente implementado para evitar la pérdida
de los cromosomas más promisorios durante el proceso de generación de
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 81
descendencia, en implementaciones que no tienen otro mecanismo de
almacenamiento de soluciones particularmente buenas [38].
Aunque a primera vista parece un tratamiento deseable para ciertos individuos,
e incluso se ha demostrado experimentalmente que en muchos casos
incrementa el rendimiento del algoritmo genético [56,55], el elitismo puede
convertirse en una decisión peligrosa, sobre todo en las fases iniciales del
algoritmo, ya que puede rápidamente producir que una elite de superindividuos
que domine por completo el pool genético del problema, eliminando con ello la
diversidad genética, e impidiendo la convergencia del mismo, o llevándolo a
una convergencia prematura [29].
Una solución para este problema es el escalamiento gradual de la función de
aptitud desde las primeras fases del algoritmo –en las que las diferencias entre
la elite y el “pueblo” deberían ser menores –hasta las fases finales, en la que
superescalar la función de aptitud evita un bloqueo de su convergencia [47];
Otra, un poco más sencilla, es la reducción gradual de la aptitud del
cromosoma con cada nueva generación.
8.5. Efectos sobre un Esquema
Como dijimos en capítulos anteriores, un algoritmo genético no opera tanto
sobre cromosomas como sobre esquemas. Teniendo esto en cuenta, y
habiendo analizado a profundidad los efectos de la selección sobre un
cromosoma, se nos hará interesante analizar asimismo los efectos de la
selección sobre un esquema, que no solo nos permitirán comenzar a
comprender la importancia de los esquemas y nos darán una idea del proceso
seguido por el algoritmo genético, sino que también nos permitirán darle una
base matemática a nuestros argumentos.
Sea p una población de n individuos de longitud L para una generación dada de
un algoritmo genético, sea f(x) la función de aptitud que se desea optimizar, y
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 82
pc y pm las tasas, respectivamente, de cruce y de mutación definidas para el
algoritmo; Sea h un esquema particular tal que:
hbpbNi ii ∈•∈∃ :
Llamemos:
∑∩∈
=phbi
phm 1),(
es el número de instancias del esquema s en la población p,
∑=
=n
iibf
npf
1)(1)(
es la aptitud promedio de la población, y
∑∩∈
=phb
ii
bfphm
phu )(),(
1),()
la aptitud media del esquema. Como hemos visto, la probabilidad de selección
de un individuo dado x es:
)()(
pFbf
p ii =
o, lo que es lo mismo,
)()(
pfnbf
p ii =
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 83
Entonces, la probabilidad de seleccionar cualquiera de las instancias de s
sería:
∑∑∩∈∩∈
==phb
iphb
is
ii
bfpfnpfn
bfp )()(
1)()(
Entonces, bajo nuestras definiciones anteriores:
),()(),( phm
pfnphups
)=
Después de t selecciones, entonces, tenemos [8,28,30,33]:
[ ] ),()(),(),( 1 t
t
tt phm
pfphuphmE
)=+
Esta simple ecuación, que es la base del teorema de los esquemas de Holland,
nos dice que el número de instancias de un esquema en particular aumentará o
disminuirá de forma proporcional a la razón entre la aptitud media del esquema
y la del total de la población (Aptitud relativa [28] del esquema) [11,27]. Esta
conclusión constituye el llamado teorema fundamental de los algoritmos
genéticos:
"Esquemas cortos y de orden bajo tienden a proliferar o
desaparecer en las generaciones siguientes de acuerdo con la
aptitud media6".
6 El porqué nos referimos específicamente a esquemas cortos y de bajo orden
será explicado en capítulos posteriores, al referirnos a los efectos del cruce y la
mutación sobre los algoritmos genéticos.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 84
Ahora bien, si tenemos que la aptitud media del esquema es función de la
aptitud promedio de la población:
)()(),( pfcpfphu +=) ,
Donde c es una constante, tenemos:
[ ] ),()(
)()(),( 1 t
t
ttt phm
pfpfcpf
phmE+
=+ ,
o, lo que es lo mismo,
[ ] )1)(,(),( 1 cphmphmE tt +=+
Sumando el efecto de varias generaciones sobre la población, no nos será
difícil inducir bajo esta suposición que un esquema especialmente apto
incrementará su participación dentro de la población en forma exponencial
[3,56,30,55], al tiempo que un esquema de baja aptitud disminuirá su
participación de la misma forma [11]:
[ ] tt cphmphmE )1)(,(),( 0 +=
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 85
9. El Cruce (Crossover)
El operador de cruce, o de reproducción, es el encargado de realizar una
recombinación del material genético de los individuos de la población inicial [56]
para producir nuevos individuos [31]. Es, en suma, una función C(b1,b2, Pc):
ℬ*×ℬ*×ℛ[0,1]→ ℬ*×ℬ*, que a partir de un par de cromosomas y una
probabilidad de cruce Pc genera un nuevo par que es una recombinación de los
bits de ambos, y que supone un mecanismo para calcular el genoma de la
nueva generación [53], a partir del genoma de sus padres [41], que por lo
general son dos individuos de la generación anterior (Aunque pueden ser más,
como en el operador Orgía de Eiben et al. [39]), elegidos a través de las
técnicas de selección antes descritas. Una vez se produce el cruce, los padres
son reemplazados por sus descendientes. De hecho, a menos que se hayan
implementado mecanismos de elitismo, la generación anterior es desechada
por completo una vez se ejecuta la reproducción [6].
En cada ciclo de un algoritmo genético, un operador de cruce genera, mediante
la recombinación de pares de individuos de la población actual, una nueva
generación del mismo número de elementos (Generalmente, cada pareja de
padres produce una pareja de hijos [28,6]). Como ha de suponerse, de manera
análoga a lo que sucede en la naturaleza, cada uno de los individuos
resultantes de la reproducción presenta una serie de características que no son
más que la combinación de las características de sus padres [6,41]. En cierta
manera, el cruce no es más que una analogía de la reproducción sexual de
individuos haploides (Excepto, obviamente, en el caso en que se haya
realizado una codificación de los individuos como diploides)
En términos matemáticos, el cruce es análogo a una transición de estado-
espacio en una búsqueda de estado-espacio [53], es decir, un mecanismo que
permite extender la búsqueda a todas las diferentes combinaciones de alelos
existentes dentro de los cromosomas presentes en la población actual. Por
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 86
ello, y para contar con un amplio rango de posibilidades que permita al
algoritmo moverse suavemente sobre el espacio de búsqueda (Lo cual puede
ser difícil de garantizar si no se conocen previamente las características de
éste espacio, como suele ser el caso) [43], se requiere de una cierta diversidad
genética (Que los genes de los diferentes individuos presenten un número lo
suficientemente diverso de alelos diferentes) para que la reproducción sea
realmente un mecanismo de búsqueda eficaz. Este proceso de búsqueda
sobre una población restringida recombinando el material genético existente
[31] recibe el nombre de explotación [45].
El operador de cruce es fuertemente responsable de las propiedades del
algoritmo genético, determinando en gran medida la evolución de la población
[47]. Al elegirlo se busca, lógicamente, que las características favorables de
los individuos de una generación sean perpetuadas en la siguiente, y que las
características desfavorables sean desechadas. Aunque no se busca forzar la
solución a través de la reproducción –de hecho, por lo general, el operador de
cruce no tiene conocimiento alguno del problema que se está resolviendo –, sí
se deben tener en cuenta estos objetivos al escoger su mecanismo de
implementación; Es tanta la influencia del operador de cruce en este tipo de
algoritmos que no se considera un algoritmo genético si no cuenta con uno
[39].
Si bien el mecanismo de reproducción está casi por completo desvinculado del
problema, sí se encuentra completamente ligado a los mecanismos de
codificación. En particular, se debe tener en cuenta que el operador de cruce
escogido debe siempre producir genotipos válidos para el problema en cuestión
[43]. Experimentalmente se ha demostrado que existe una dependencia mutua
entre los mecanismos de codificación y de reproducción que puede incrementar
enormemente el desempeño del algoritmo genético cuando estos son elegidos
en forma correcta (O perjudicarlo, cuando se eligen los mecanismos
equivocados).
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 87
Ante este tipo de aseveraciones, podría pensarse que en todos los algoritmos
genéticos todos los pares de padres escogidos son cruzados en cada ciclo.
Sin embargo, esto no siempre es cierto, y en algunos algoritmos se presenta
una cierta posibilidad de que los padres sean copiados sin modificación alguna
en la siguiente generación [9,45,6]: Para cada algoritmo hay una probabilidad
de cruce pc [54], que puede estar predeterminada para todo el algoritmo [58], o
puede variar con el tiempo, o dependiendo del nivel de convergencia del
algoritmo (En cuyo caso hay discusión entre incrementar la tasa de cruce a
medida que el algoritmo converge, para aumentar gradualmente la explotación
del material genético que se ha ido encontrando, y que se sabe produce
individuos de alta aptitud; o disminuirla, con el fin de potenciar la acción de la
mutación para introducir nuevo material genético cuando el algoritmo se ha
estancado) [5]. La mayor parte de los autores recomiendan una tasa de cruce
relativamente alta, y en la práctica, en la mayor parte de los algoritmos
genéticos, se utiliza una probabilidad entre 0,6 y 1 [9,38,45,6,41].
Aunque puede sonar extraño en la analogía genética, sobre todo al considerar
los tabús asociados al cruce consanguíneo en la raza humana, en un algoritmo
genético no existe restricción alguna para el cruce de descendientes de los
mismos padres: Esta técnica de selección, llamada comúnmente inbreeding al
ser utilizada, por ejemplo, en la cría de ganado, tiende a potenciar ciertas
características sobre otras, lo cual puede ser incluso favorable. Se debe tener
en cuenta, sin embargo, que no sólo se potencian las características
favorables, y si se utiliza con demasiada frecuencia, el algoritmo corre el riesgo
de estancarse en máximos locales [39].
La idea del operador de cruce es, entonces, perpetuar las características
favorables de los individuos de alta aptitud, manteniendo al mismo tiempo la
diversidad genética de la población [41]. En general, requerimos de un
operador de cruce tal que la aptitud de sus descendiente sea al menos en parte
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 88
función de la de sus padres (Problema que puede no ser fácil de hallar, y
puede incluso no existir), y que dependa del grado de suavidad de la función de
aptitud. De nuevo, es crítico el mantener un cierto nivel de paralelismo del
algoritmo, con el fin de no disminuir su desempeño a causa de cuellos de
botella [58].
9.1. Técnicas de cruce
Se denominan técnicas de cruce (o de recombinación) a las diferentes formas
de calcular el genoma de los nuevos individuos a partir del genoma de sus
padres (Al mencionar las diferentes técnicas de cruce nos referiremos al primer
padre como padre, y al segundo como madre, con el fin de diferenciarlos
unívocamente).
Existen gran cantidad de técnicas de cruce. Las técnicas básicas son [47]:
9.1.1. Cruce Básico o de un Punto
Se selecciona un punto de la cadena, que puede estar predeterminado, aunque
es más común elegirlo al azar. Para el primer hijo, la parte anterior a este
punto es copiada del genoma del padre y la parte posterior es copiada de la
madre. Para el segundo hijo, la parte anterior es copiada de la madre, y la
parte posterior del padre [38,6,3,41].
Figura 9.1
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 89
Figura 14.3 (pg 187) Reemplazo.La técnica básica de cruce es bastante fácil de
implementar; No es muy útil, sin embargo, cuando el cromosoma se compone
de un número relativamente grande de genes, caso en el cual los genes que
ocupan las posiciones extremas dentro de la cadena tienen una posibilidad
bastante menor que aquellos que se encuentran en posiciones intermedias de
ser recombinados en busca de un gen óptimo.
Nótese que bajo ésta técnica, suponiendo que los descendientes reemplazan a
sus progenitores, la distancia de Hamming de cada par de cromosomas no es
modificada por el cruce, ya que los diferentes alelos pasan sin ser modificados
a los genes de uno o de otro descendiente. En general, la distancia promedio
de Hamming de una población no es modificada por un cruce de un punto. Lo
mismo es cierto para el cruce de dos puntos, el multipunto y el uniforme [35].
9.1.2. Cruce de Dos Puntos
Similar al anterior, con la diferencia de que se escogen dos puntos de cruce. El
genoma del primer hijo es una combinación de la parte inicial del genoma del
padre, la porción central de la madre, y la porción final del padre, siendo el
segundo hijo una combinación de las porciones restantes del genoma de
ambos padres.
El cruce de dos puntos tiene la ventaja sobre el cruce básico de aliviar el
problema de la separación de las porciones inicial y final de cada cromosoma
con probabilidad 1, que supone una limitación en la exploración del espacio de
búsqueda, y puede echar a perder cromosomas razonablemente buenos
[38,6,3].
En algunos casos, durante el cruce, los cromosomas son "doblados" en forma
circular al unir sus extremos antes de la división en dos puntos, lo cual permite
que el cruce se realice sobre cualquier parte de su material genético, y no
solamente que se separe la porción central de los extremos [45].
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 90
9.1.3. Cruce Multipunto
Puede pensarse que de forma
similar al cruce de un punto o de
dos puntos, se pueden realizar
cruces sobre un mayor número
de puntos sin mayor dificultad.
Sin embargo, esto no es
recomendado: Se ha analizado
empíricamente el uso de un
mayor número de puntos de cruce y se ha encontrado que el rendimiento de
los algoritmos se degrada; La razón parece radicar en que si se intercambia
una mayor cantidad de subcadenas, las características positivas de los
cromosomas tienden a perderse [3].
Una subdivisión del cruce multipunto es el llamado cruce segmentado, en la
que se recorren secuencialmente los genomas de padre y madre, copiando el
material genético de cada uno en uno de sus hijos. Sin embargo, para cada
uno de los bits (O genes [39]), existe una probabilidad predeterminada pcs de
que en ese punto se realice un cruce, invirtiendo las fuentes del material
genético de cada uno de los descendientes.
9.1.4. Cruce Uniforme
En el cruce uniforme se elige bien sea un gen del padre o uno de la madre para
cada uno de los genes del hijo. Esto generalmente se realiza mediante la
implementación de una máscara de cruce que bien puede estar
predeterminada o ser generada aleatoriamente. Esta máscara es una cadena
binaria de unos y ceros de la misma longitud de los cromosomas, en la que
cada uno o cero implica la copia del material genético correspondiente de uno
de los padres, para cada uno de sus descendientes [28,38,6,8].
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 91
Bajo esta concepción, podemos argüir que un cruce de un punto no es más
que un caso especial del cruce uniforme en el que todos los unos se
encuentran hacia el extremo inicial de la máscara de cruce, que en un cruce de
dos puntos todos los unos se encuentran en los extremos, etc [28,8]. Sin
embargo, para algunos autores [49], el cruce uniforme no es más que un cruce
multipunto donde el número de puntos usado es L.
Dependiendo del esquema de codificación, las técnicas más simples de cruce
tienen una alta probabilidad de producir hijos inválidos para el problema en
cuestión. El cruce uniforme, sin embargo, puede ser fácilmente modificado
para evadir éste problema [6]
Es importante tener en cuenta que la densidad de los bits determina qué
cantidad de material es tomado de cada padre, y que, en cruces uniformes
aleatorios, el número de puntos de cruce –si bien no es fijo –tenderá a ser
aproximado la mitad de la longitud del cromosoma. El cruce uniforme, si bien
suele mostrar un mayor rendimiento en la mayor parte de los problemas, no es
recomendado para problemas en los que, por ejemplo, la adaptación es función
de los pares de genes colaterales, ya que éstos pares tendrían una alta
probabilidad de ser separados al momento del cruce.
De ser seleccionada al azar, debe tenerse en cuenta que cada bit a lo largo de
la máscara debe tener una probabilidad pcu de ser un cero, y una probabilidad
1-pcu de ser un uno.
Sea pc la probabilidad de cruce elegida para el algoritmo genético.
Por reglas de probabilidad:
( )Lcuc pp −=− 11
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 92
Donde L es la longitud del cromosoma (Esto es: Para que no se realice un
cruce en un par de cromosomas dado, no se debe realizar el cruce en ningún
punto a lo largo de estos cromosomas).
Resolviendo la ecuación para obtener pp, obtenemos:
( )10, <<+−
= ccc
ccu p
pLpLpp
o, reemplazando qc = 1-pc:
( )10, <<+
= ccc
ccu p
pLqpp
Es la probabilidad requerida para que se produzca un cruce uniforme en
cualquier punto dado del cromosoma.
9.1.5. Cruce Aritmético-Lógico
Otra manera de realizar el cruce es mediante el uso de operaciones aritméticas
o lógicas, como la suma, o el AND lógico. Este tipo de cruces es generalmente
utilizado en problemas muy especializados, en los que se posee un cierto
conocimiento de dominio y, por tanto, se puede forzar un poco la solución
mediante el operador de cruce, limitando con ello la universalidad del mismo,
pero haciéndolo más eficiente para el problema en cuestión [38].
En general, el cruce aritmético-lógico tiende a producir descendientes de
acuerdo a las siguientes ecuaciones:
mp gaagg )1(1 −+= ,
y
pm gaagg )1(2 −+= ,
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 93
Donde gp y gm son genes correspondientes de los cromosomas cruzados, g1 y
g2 los genes correspondientes sus descendientes, calculados a partir de estos,
y a es un factor de peso aleatorio elegido al azar en el intervalo [0,1].
Una especialización del cruce aritmético-lógico, tal como ha sido descrito, es el
cruce heurístico, en el cual el factor de proporción a no es elegido al azar, sino
de acuerdo a la aptitud proporcional de cada uno de los cromosomas, esto es:
)()()(
mp
p
bfbfbf
a+
= ,
Donde bp y bm son los cromosomas a ser cruzados [60].
El cruce uniforme puede ser optimizado a través de un proceso generalizado
que actúa sobre la totalidad de los cromosomas a ser cruzados en lugar de
sobre cada uno de los bits que los componen, utilizando operaciones
aritmético-lógicas para generar los descendientes del cruce [49]:
Sean bp, bm los cromosomas a ser cruzados. Se define como el mínimo a nivel
de bits del par (bp, bm):
mpmp bbbbmm ∧== ),(
Y como su máximo a nivel de bits:
mpmp bbbbMM ∨== ),(
Fácilmente, se puede demostrar:
ii MmLii ≤•≤<∀ 0
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 94
Definamos, asimismo, h(bp, bm) –el esquema de cruce para el par de
cromosomas –de la siguiente manera:
⎪⎭
⎪⎬
⎫
⎪⎩
⎪⎨
⎧
≠====
=
ii
ii
ii
mp
MmMmMm
bbh,#
1,10,0
),(
No es difícil comprobar que tanto bp como bm y todos los posibles
descendientes de los dos cromosomas bajo cualquiera de las técnicas
presentadas pertenecen al esquema de cruce. Es más, bp y bm constituyen
bajo h(bp, bm) un par complementario por esquema; Esto es, excepto por los
puntos fijos del esquema, que son compartidos por ambos cromosomas, cada
uno de los bits de la madre es la negación del bit equivalente del padre.
Ahora bien: definamos por R la máscara de cruce. A diferencia del cruce
uniforme normal, en el cruce uniforme optimizado los descendientes b1 y b2
contienen en cada uno de sus bits, respectivamente, R o ¬R; excepto en los
puntos fijos de la máscara de cruce, en la cual, lógicamente, contendrán ambos
el valor correspondiente al interior de esta máscara. Esto es:
iiii MmRb ∧∨= )(,1 , y
jjjj MmRb ∧∨¬= )(,2 ,
No es difícil demostrar que, en cualquier caso, b1,i y b2,i comparten el valor que
comparten mi y Mi, si ambos son iguales, pero equivalen respectivamente a Ri y
a ¬Ri, si mi y Mi son diferentes. Así, no sólo
MmRb ∧∨= )(1 , y
MmRb ∧∨¬= )(2
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 95
pertenecen al esquema de cruce, sino que también son complementarios por
esquema bajo h(bp, bm).
9.1.7. Cruces para Permutación
Existe una familia de cruces específicos para ciertos problemas de
permutación, en los que el nivel de aptitud depende no sólo de los diferentes
genes, sino también de la posición de los mismos al interior del cromosoma.
Entre estas técnicas especialidades de cruce encontramos:
• Mapeo 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 similar posible a 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.
• Cruce de ciclo: Tomamos el primer gen del genoma del padre,
poniendolo en la primera posición del hijo, y el primer gen del genoma
de la madre, poniendolo dentro del genoma del hijo en la posición que
ocupe en el genoma del padre. El fenotipo que está en la posición que
ocupa el gen del genoma del padre igual al primer gen del genoma de la
madre se va a colocar en la posición que ocupe en el genoma del padre,
y así hasta rellenar el genoma del hijo.
Es una buena idea que, tanto la codificación como la técnica de cruce, se
hagan de manera que las características favorables sean fácilmente heredadas
o, al menos, que las desfavorables no se propaguen fácilmente. Se
recomienda asimismo elegir una técnica de cruce acorde a las características
del problema en particular: Es una práctica común el definir técnicas
específicas de cruce para la resolución de problemas particulares [3].
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 96
9.2. Variaciones
No en todos los casos el operador de cruce presenta todas las características
que hemos mencionado anteriormente, y en muchos casos se realizan
variaciones que suelen ser desarrolladas específicamente para cierto tipo de
problemas.
9.2.1. Reemplazo Parcial
Como ya hemos visto, no en todos los casos los padres son reemplazados por
sus descendientes; Esto puede deberse a la probabilidad de cruce, a un
mecanismo de preselección, en el cual los descendientes reemplazan a sus
padres si y solo si su nivel de aptitud supera a la de estos, o a la implantación
de un mecanismo de manutención del mejor padre, en la cual tras el cruce,
sólo el descendiente de mayor aptitud reemplaza a uno de sus padres: El de
menor aptitud de los dos [23].
De forma similar, se ha sugerido la introducción de técnicas de conocimiento de
dominio que permitan restringir la presencia de cromosomas de aptitud
obviamente baja, o incluso que violen los invariantes del problema, en el
momento mismo de su creación. En casos extremos, tras calcular la aptitud
promedio de los individuos y, bajo la presunción (Bastante plausible, sobre todo
en las etapas iniciales del algoritmo, y cuando el tamaño de la población es lo
suficientemente amplio) de una distribución normal de aptitud con media µ igual
a la aptitud promedio y desviación estándar σ calculada a partir de la misma, se
impide el reemplazo de individuos por descendientes cuya aptitud no supere µ
+ σ. Se ha demostrado [4] que mientras en los algoritmos genéticos
tradicionales el crecimiento en la aptitud promedio de la población en cada
generación es de orden O(1), con éste método el crecimiento es de orden
O(√n)
Este tipo de estrategias incrementan teóricamente la eficiencia del algoritmo,
impidiendo que éste pierda tiempo en la evaluación de individuos de aptitud
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 97
obviamente baja [5], o logrando un avance particularmente amplio en la aptitud
promedio de la población en cada sucesiva generación [4]; Sin embargo, la
cantidad de evaluaciones previas puede dar lugar a que la ganancia teórica en
eficiencia sea compensada por un mayor número de cálculos.
9.2.2. Cruce de Estado Estable
De forma similar, es común la implementación de algoritmos genéticos de
estado estable, en los que en lugar de realizar el cruce sobre el total de la
población, se aplica sobre una pareja a la vez, reemplazando por los
descendientes del cruce no a sus padres, sino a los cromosomas de menor
aptitud, que pueden ser seleccionados en forma directa, o estocástica, con una
ruleta rusa ponderada por el inverso de la aptitud de cada individuo [6,56,55].
El estado estable, si bien disminuye el paralelismo intrínseco a la mayoría de
los algoritmos genéticos, favorece una rápida restricción de la población a los
mejores individuos, y puede presentar grandes ventajas sobre el algoritmo
genético básico en computadores que no presentan un gran nivel de
procesamiento paralelo.
9.2.3. Cruce Restringido
Otra variación del cruce es el llamado cruce restringido, en el que a dos padres
sólo les es permitido cruzarse si presentan cierto grado de similitud.
Obviamente, éste grado de similitud es completamente subjetivo, y puede ser
bastante difícil de calcular, ya que depende enormemente del criterio de
codificación y del criterio del diseñador.
El esquema cruce restringido favorece la especialización de la población en
pequeños grupos concentrados alrededor de máximos locales, o nichos
ecológicos, como son conocidos en éste contexto, bajo la idea de que al cruzar
dos padres del mismo nicho se incrementa la probabilidad de que sus
descendientes pertenezcan al mismo nicho. Esto favorece una exploración
más amplia del espacio de búsqueda, no en busca de un máximo global, sino
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 98
de todos los máximos locales posibles. De la misma forma, el cruce restringido
disminuye la formación de los llamados “letales”, descendientes de padres de
diferentes nichos que, al localizarse en el valle entre dos máximos locales del
paisaje de búsqueda, tienden a ser desechados rápidamente por su baja
aptitud, sin importar que la aptitud de sus padres sea relativamente alta [5].
Una variación del cruce restringido se utiliza para mantener diferentes
poblaciones de individuos, con el fin de mantener una gran variedad genética, o
explorar diferentes zonas del espacio de búsqueda en forma paralela. En
algunos casos, éstos procedimientos utilizan mecanismos basados en la
biología como la migración (Entendida en éste ámbito como el cruce de
individuos de diferentes poblaciones), en espera de saltos evolutivos [13]. Una
especialización de éste tipo de cruce utiliza poblaciones de individuos
probables e improbables, para las cuales la probabilidad de cruce en ambas
poblaciones, así como la probabilidad de migración, son diferentes y
completamente independientes [48].
9.2.4. Puntos de Cruce
Finalmente, algunos investigadores han sugerido que muy probablemente debe
haber posiciones dentro de los cromosomas sobre las cuales es mejor realizar
un cruce. Sin embargo, la información acerca de cuales pueden ser estos
puntos no siempre está disponible de forma previa a la ejecución del algoritmo.
Es por ello que en algunos casos se ha implementado una técnica de
aprendizaje en la cual la información de los puntos de cruce se hace parte del
cromosoma, siendo propagados a través del mismo algoritmo genético; Esto
permite al algoritmo discernir en cuales puntos es mejor realizar el cruce,
optimizando estos a medida que converje [5].
9.3. Efectos Sobre los Esquemas
Habiendo analizado ya los efectos del cruce sobre los cromosomas de una
población, se nos hace de nuevo necesario pasar a un nivel diferente –el nivel
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 99
de los esquemas –para proporcionar una base matemática más fuerte a
nuestros argumentos, y comprender un poco mejor como opera el cruce sobre
una población.
Asumamos que hemos escogido un cruce de un punto para nuestro algoritmo
genético. La probabilidad de que un esquema dado de longitud característica
l(h) sea destruido durante un cruce es [59,55]:
1)(
−=
Lhlpp cd
Esto es, la probabilidad de destrucción del esquema es igual a la probabilidad
de que se realice el cruce por la probabilidad de que éste cruce se realice en
una zona del esquema al interior de sus extremos fijos. Así, la probabilidad de
que el esquema sobreviva después de una mutación está dada por [30]:
1)(1
−−=
Lhlpp cs
Ejemplo 9.1
Definamos los siguientes 2 esquemas [55]:
Los puntos fijos al extremo del esquema 1 están separados por 3 posiciones;
por lo tanto, hay 3 posibilidades entre 24 (1/8) de que un cruce se produzca en
los puntos al interior de este. De la misma forma, el esquema 2 tiene una
Figura 9.3
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 100
longitud característica de 16, por lo cual la probabilidad de realizar un cruce en
su interior es de 16 entre 24 (1/3).
Al realizar el cruce, el esquema 1 es mantenido, mientras el esquema 2 se
destruye.
Ahora bien: Si los alelos presentes en las posiciones que definen el esquema
son equivalentes en los dos individuos, el esquema no es destruido, aún si el
cruce se da en los puntos interiores del esquema. Por otro lado, el cruce de
dos individuos que no presentan un esquema en particular puede dar lugar a la
formación de éste a raíz de los bloques de construcción que lo forman. Por
ello, en realidad, nuestra fórmula no es una igualdad estricta, estando mejor
definida como [11]:
1)(1
−−≥
Lhlpp cs
Donde el hecho de haber ignorado el efecto del cruce para crear nuevas
instancias del esquema implica que la parte derecha de la ecuación es
simplemente una cota inferior para la probabilidad buscada [30].
Agregando entonces el efecto del cruce sobre el teorema de los esquemas
definido en el capítulo anterior, y suponiendo que la selección y el cruce actúan
de forma independiente [55], tenemos [30,59]:
[ ] ⎟⎠⎞
⎜⎝⎛
−−≥+ 1
)(1),()(),(),( 1 L
hlpphmpfphuphmE ctt
tt
)
Figura 9.4
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 101
Como vemos, los esquemas con una pequeña longitud característica son
prácticamente insensibles al cruce, representando por ello bloques de
construcción compactos mucho más apropiados para una solución viable que
aquellos que presentan una longitud característica mayor. Para este tipo de
esquemas, su reproducción es prácticamente proporcional a su aptitud relativa
[55]. Por ello, se recomienda tener en cuenta durante la fase de codificación de
los genomas tratar de mantener genes que interactúan fuertemente
relativamente cerca dentro del cromosoma.
Cabe notar que, bajo esta teoría, los efectos del cruce sobre los esquemas no
son solamente casi imperceptibles en comparación a los efectos de la
selección; sino que son perjudiciales para esquemas particularmente buenos.
Al contemplar esta aparente contradicción, no podemos sino preguntarnos
¿Cuál es la ventaja del cruce para el algoritmo genético? Si bien el teorema de
los esquemas no nos proporciona ninguna pista al respecto, no será muy difícil
para el lector discernir los dos efectos principales del operador de cruce sobre
los esquemas, que le hacen especialmente ventajoso para el algoritmo
genético en general [27]:
• Primero, el operador de cruce no sirve solamente para destruir
esquemas, como ya mencionamos; Sino que también permite al algoritmo
crear nuevos esquemas a partir de la información genética almacenada en
los individuos combinados.
• Segundo, el operador de cruce sirve para combinar bloques de
construcción de aptitud especialmente buena que residen en padres
diferentes, consolidando individuos que incluyen las ventajas de los
esquemas de sus padres.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 102
10. Mutaciones
Una mutación es un suceso bastante poco común en la evolución de las
especies: Una pequeña alteración accidental del material genético, que sucede
aproximadamente en una de cada mil replicaciones. En la mayoría de los
casos las mutaciones son letales, pero en promedio contribuyen a la diversidad
genética de una especie [39]. Es por ésta razón que nos interesa implementar
ésta técnica en nuestro algoritmo como metáfora del proceso biológico [41].
En un algoritmo genético, se define como mutación a una función M(b, pm):
ℬ*×ℛ[0,1]→ℬ* que produce variación aleatoria de la información contenida en
el genoma original [31,38,29]; Habitualmente, en una población de n
cromosomas de longitud L, se define una probabilidad de mutación pm
predeterminada [54,6,56,29] –O, en algunos casos, dependiente del tiempo [58]
o del grado de convergencia del algoritmo –de que cada uno de los nL genes
sea invertido (Es decir: Convertido en 0 si era 1 o viceversa) [38,3,41]. En este
sentido, la probabilidad de que un cromosoma b sea transformado en otro b’ a
través de una operación de mutación es:
kL
mkmbb ppp −
→ −= )1('
Donde k es la distancia de Hamming entre los dos cromosomas [44].
10.1. El Porqué de las Mutaciones
Si bien Holland descubrió que un algoritmo genético puede seguirlo siendo sin
necesidad de incluir mutaciones [39], también es cierto que al elegir una
población al azar es posible que una combinación óptima de ésta no sea
necesariamente la solución óptima al problema [12]. Por ello, el uso de la
mutación es bastante común, lo cual es debido en gran parte a ciertas ventajas
que vienen implícitas con ella, a saber [47]:
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 103
• Mantenimiento de Diversidad: Durante el proceso de búsqueda del
algoritmo genético, la población tiende a converger rápidamente hacia
máximos locales o globales, lo cual puede con el tiempo anular la diversidad
genética que, como ya hemos visto, es crítica para su funcionamiento. La
mutación se implemente con el fin de disminuir éste efecto, manteniendo
una cierta variedad en la población a través de cambios aleatorios en su
material genético [31,28]
• Desbloqueo: Si en algún punto de su ejecución el algoritmo se bloquea en
un máximo local, o si aparece algún tipo de superindividuo que acabe con la
diversidad poblacional, una mutación puede agregar nuevos fenotipos,
permitiendo al proceso evolutivo seguir su curso natural [41]. Esto garantiza
que la búsqueda no se centrará en máximos locales [38].
• Aceleración de Saltos Evolutivos: Los saltos evolutivos –aparición repentina
de fenotipos especialmente valiosos (O, dicho de otra forma, salida de un
mínimo local) –son poco probables en un algoritmo genético puro para un
problema genérico. Las mutaciones permiten explorar nuevos subespacios
de soluciones que, de ser especialmente favorables en términos de
adaptación, producirán un salto evolutivo que se irá expandiendo de forma
exponencial al resto de la población.
• Enriquecimiento de la diversidad: En un caso más suave que el de una
población degenerada –cuando la población cuenta con una diversidad
genética pobre, por ejemplo –, la mutación es un mecanismo que permite la
emergencia de nuevas configuraciones genéticas, lo cual favorece la
posibilidad de encontrar la solución óptima al aumentar el rango de
búsqueda [12,43], y contribuye a la prevención de poblaciones
degeneradas. Este incremento en el rango de búsqueda es conocido como
exploración [45]. De manera óptima, ésta exploración debería traducirse en
un recorrido suave sobre el espacio de búsqueda; Esto, sin embargo, no es
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 104
fácil de garantizar si no se conocen las propiedades de éste espacio (Lo
cual es, comúnmente, el caso) [43].
• Prevención de probabilidades nulas: La mutación introduce al algoritmo
genético un cierto grado de búsqueda aleatoria en la vecindad de los puntos
representados por los individuos de la población existente, que se hace más
evidente a medida que ésta población converge a puntos específicos [28,5];
Con la implantación de la mutación, se elimina la posibilidad de que la
probabilidad de búsqueda de un punto en particular del espacio de
búsqueda sea nula [9]. Esto implica que sin importar la población inicial que
haya sido escogida, la mutación garantiza que la búsqueda será global [28].
• Recuperación de Alelos: La mutación permite recuperar alelos que se han
perdido inadvertidamente en el proceso del algoritmo a causa de otros
operadores genéticos [5].
A la mutación están asociadas, sin embargo, una serie de desventajas
implícitas en la inclusión de la mutación dentro del algoritmo genético. En
particular, las mutaciones pueden generar hipótesis especialmente malas, o
descartar hipótesis especialmente buenas, en un solo paso. De la misma
forma, bajo esquemas de codificación especialmente débiles, un operador de
mutación elegido a la ligera puede llevar a caer en genotipos inválidos [43].
La tasa de mutación es mucho más crítica para el Algoritmo Genético incluso
que la tasa de cruce [5]: Una tasa de mutación excesivamente alta, reduce el
algoritmo genético a una simple búsqueda aleatoria, y puede conducir a deriva
genética y a inestabilidad generacional, destruyendo soluciones prometedoras
ante la modificación de su código [43,41], por lo que se recomienda mantener
esta tasa a niveles muy bajos, similares a los presentes en la naturaleza (La
mayoría de la literatura al respecto recomienda tasas de mutación entre el
0.1% y 1% [38,45,6,3,41]) [39,9]. En algunos casos, ésta probabilidad depende
negativamente de la probabilidad de cruce, produciéndose una mutación
solamente en individuos que no fueron cruzados en la generación anterior [3].
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 105
Por otro lado, una tasa de mutación excesivamente baja o inexistente puede
contribuir a estancar el algoritmo en máximos locales, ignorando una gran parte
del espacio de búsqueda [43]. Una alternativa para evitar estos inconvenientes
consiste en implantar una tasa de mutación alta al inicio del algoritmo, para
aumentar la diversidad genética, y una disminución hacia el final del algoritmo,
para asegurar la convergencia.
En general, el operador de mutación se hace más productivo, y el operador
cruce menos productivo, a medida que la población converge: Cualquier
recombinación del material genético de una población con cierto grado de
convergencia alrededor de un máximo local comenzará a girar alrededor de tal
máximo; Sin embargo, una simple mutación puede llegar a enviar al algoritmo a
explorar a otras zonas completamente diferentes del espacio de búsqueda.
En algunos casos, se ha experimentado con tasas de mutación variable que
dependen del grado de convergencia del algoritmo genético. Sin embargo, es
mucho más común que la tasa de mutación sea disminuida a medida que éste
avanza, bajo la idea de que en los primeros pasos del algoritmo se debe tener
una tasa relativamente alta que permita al espacio de búsqueda inicial una
amplitud razonable, y en a medida que este avanza se debe disminuir esta tasa
para permitir la convergencia. Aunque no se ha demostrado matemáticamente
el efecto positivo de éste método sobre el desempeño, sí hay una gran
cantidad de evidencia empírica que demuestra sus bondades [5].
10.2. Técnicas de mutación
Como en el cruce, no existe una forma única de realizar la mutación, y si bien
ésta es más comúnmente implementada en la forma anteriormente
mencionada, conocida como mutación multibit (Cada uno de los bits de cada
uno de los individuos de la población tiene una probabilidad pm de ser invertido)
[28], existen una gran cantidad de variaciones a éste método conocidas
conjuntamente como técnicas de mutación. Algunas de éstas son [47]:
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 106
10.2.1. Mutación Unibit
Bajo ésta técnica de mutación, se escoge una probabilidad pmb a priori, que
corresponderá a la probabilidad de que para un cromosoma dado, uno
cualquiera de sus bits, seleccionado en forma aleatoria, sea reemplazado por
su complemento. Tomando como base la probabilidad pm anteriormente
definida, podemos ver que pmb se puede relacionar con ella:
Sea pm la probabilidad de mutación elegida para el algoritmo genético.
Grosso modo, podemos arriesgar la siguiente relación de equivalencia:
( )Lmmb pp −=− 11 ,
Donde L es la longitud del cromosoma (Esto es: Para que no se realice una
mutación en un cromosoma dado, no se debe realizar el cruce en ningún punto
a lo largo de este)7.
Resolviendo la ecuación para obtener pmb, obtenemos:
)10(,1
<<−+
= mmm
mmb p
pLpLp
p
o, reemplazando qm = 1-pm:
7 Como podrá comprobar el lector, ésta relación de equivalencia no es
completamente cierta, ya que mientras con la mutación unibit sólo se puede
modificar un bit de un cromosoma en cada ciclo del AG, con la mutación
multibit puede cambiar incluso todo el cromosoma. La equivalencia es,
entonces, planteada simplemente para el caso en que el cromosoma “cambie”,
sin importar cuantos de sus bits sean modificados.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 107
)10(, <<+
= mmm
mmb p
qLpLpp
Es la probabilidad requerida para que se produzca una mutación unibit en un
punto aleatorio del cromosoma.
10.2.2. Mutación por Genes
En muchos casos, sobre todo en aquellos en que las restricciones del problema
causan algún tipo de restricción de codificación que cause a la invalidez de
algunos códigos dentro del cromosoma, las técnicas de mutación no se
restringen simplemente a bits, sino que se aplican a genes enteros;
Modificándolos a través de la suma de un valor aleatorio, de un valor constante
(Conocido comúnmente como Creep [39]), o de el reemplazo del mismo por un
gen aleatorio completamente nuevo.
La mutación por genes puede ocurrir, como la mutación por bits, sobre
cualquier gen de cualquier cromosoma de la población con una probabilidad
pmg, o sobre un gen elegido en forma aleatoria de un cromosoma en particular,
que tiene una probabilidad pmgu de ser cambiado (La relación entre pmg y pmgu
es equivalente a la relación entre pm y pmb).
Supongamos un algoritmo genético para el cual los cromosomas de la
población están divididos en genes de tamaño fijo l. Sea pm la probabilidad de
mutación elegida para el algoritmo genético.
Por reglas de probabilidad tenemos:
( )lmmg pp −=− 11 ,
(Esto es: Para que no se realice una mutación en un gen dado, no se debe
realizar el cruce en ningún punto a lo largo de este)
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 108
Resolviendo la ecuación para obtener pmg, obtenemos:
)10(, <<+
= mmm
mmg p
pLqp
p
Es la probabilidad requerida para que se produzca una mutación en un gen
aleatorio de la población.
10.2.3. Mutaciones Epistáticas
En problemas con alta epistasis, o interacción entre genes, en los que es tan
importante el valor de cada uno de los genes como su posición dentro del
cromosoma [39,11], se suelen utilizar operadores de mutación especializados
que no modifican el material genético de por sí, sino la posición que el mismo
ocupa al interior del cromosoma. Entre otros operadores de éste tipo,
encontramos:
• Intercambio o Translación: Este operador toma dos genes del cromosoma
en forma aleatoria y los intercambia, bajo una probabilidad pmei, elegida a
priori (En éste caso, como en los otros casos de mutaciones epistáticas, la
probabilidad de mutación pmei es determinado en la misma forma en que
determinamos pmb para los cruces unibit).
• Reinserción: Bajo una probabilidad pmer elegida a priori, este operador toma
un gen en forma aleatoria y lo cambia de posición en el interior del
cromosoma, trasladando los demás genes una posición hacia la derecha
[39].
• Barajado: Bajo una probabilidad pmeb dada, éste operador escoge dos
genes en forma aleatoria, y redistribuye aleatoriamente los genes
comprendidos entre los dos.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 109
10.2.4. Método Alternativo de Mutación Multibit
Al igual que en la fase de cruce, algunos investigadores han buscado métodos
alternativos de mutación que operen sobre los cromosomas, en lugar de sobre
los bits, sin las limitaciones que implica una mutación unibit [49]:
Como sabemos, la mutación o no de un bit específico de un cromosoma
cualquiera puede ser visto como un experimento de Bernoulli con probabilidad
pm de éxito (mutación), y probabilidad qm=1–pm de fracaso. Ante esto,
podemos ver la mutación de una serie de bits como una distribución de
probabilidad binomial dada por:
km
kmm pp
kL
pLkb −−⎟⎟⎠
⎞⎜⎜⎝
⎛= 1)1(),;(
E, incluso, si L es lo suficientemente grande, p lo suficientemente pequeño, y
λ=np es de un valor intermedio, se puede aproximar esta distribución binomial
a través de una distribución de Poisson dada por:
);(!
),;( kLpek
pLkbk
m =≅ −λλ ,
Así, podemos aproximar el número de mutaciones que ocurren en un
cromosoma dado mediante una variable aleatoria v con distribución de Poisson
y, una vez escogida esta, escoger v veces uno de los bits del cromosoma al
azar para realizar la mutación sobre este.
10.4. Evolución Inocente
Si bien, como mencionábamos en nuestro capítulo anterior, se puede
considerar a un algoritmo genético sin implementar necesariamente un
mecanismo de mutación, siempre y cuando se implemente un mecanismo de
cruce; Esto no quiere decir que el inverso de ésta implementación –
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 110
implementar un mecanismo de mutación sin implementar un mecanismo de
cruce –no sea útil en la exploración de espacios de búsqueda, o que no sea
parte de la computación evolutiva. De hecho, en un gigantesco experimento
tendiente a determinar los parámetros óptimos para un algoritmo genético, un
grupo de investigadores (Schaffer et Al. [5]) logró demostrar que el operador de
cruce no es tan imprescindible como se pensaba en un comienzo.
El mecanismo que mencionamos, que se encuentra restringido a procesos de
Selección y Mutación, dejando de lado el Cruce, es comúnmente conocido
como Evolución Inocente8, y es modelado en base a la reproducción asexual
común en la naturaleza. A través de éste método se realiza una búsqueda
semialeatoria similar a los mecanismos de escalada, que puede a través de
una sencilla implementación resultar siendo bastante poderosa, encontrando
incluso mejores soluciones que las que son encontradas a través de un
algoritmo genético puro, si bien a una tasa bastante más lenta que cuando se
añade el operador de cruce.
La clave para el éxito de la evolución inocente es el uso de códigos de Grey
(Ver capítulo 6), que disminuye la distancia de Hamming entre cromosomas
con significados similares (Esto es, disminuye la diferencia genotípica en
cromosomas con similitud fenotípica [61]) [5].
10.5. Efectos Sobre los Esquemas
Para finalizar nuestra discusión sobre la mutación, analizaremos –como lo
hemos hecho con los operadores enunciados en capítulos anteriores –su
efecto sobre los esquemas, con el fin de incrementar nuestra comprensión de
los algoritmos genéticos y, a la vez, proporcionar una base matemática, al
mismo tiempo concluyendo y globalizando lo que Holland llamó el Teorema de
los Esquemas:
8 Naive Evolution
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 111
Asumamos que hemos escogido un mecanismo de mutación de un punto. La
probabilidad de que el esquema sea destruido por una mutación está dada por
[59,55]:
( ) )(1 somps pp −=
Esto es, para que el esquema no sea destruido, ninguno de los puntos fijos que
lo componen debe ser modificado. Para valores pequeños de pm, podemos
aproximar [59,55]:
mds psop )(1−≈
Así [8,28,33,59,55]:
[ ] )(1 )1(
1)(1),(
)(),(),( so
mctt
tt p
Lslppsm
pfpsupsmE −⎟
⎠⎞
⎜⎝⎛
−−≥+
)
O, cuando pm tiene un valor pequeño [59,55]:
[ ] ⎟⎠⎞
⎜⎝⎛ −
−−≥+ mct
t
tt pso
Lslppsm
pfpsupsmE )(
1)(1),(
)(),(),( 1
)
Donde, de nuevo no se ha tenido en cuenta el efecto de la mutación para crear
nuevas instancias del esquema en cuestión dentro de la población. Así, de
nuevo, tenemos que el valor esperado tal como se presenta es sólo una cota
inferior para el número de instancias del esquema en cuestión en un momento
dado [30]. Como vemos, los esquemas de menor orden representan bloques
de construcción mucho más susceptibles de ser elegidos que aquellos de
orden mayor [55].
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 112
10.6. Consideraciones Finales
Algunos teóricos [26] han considerado la viabilidad de aplicar el operador de
mutación tras el periodo de evaluación de los individuos pero antes del cruce
de los mismos, en forma similar a lo que ocurre a nivel de gametos en la
naturaleza, en la que mientras las mutaciones suelen presentarse a nivel de
gametos, afectando el desempeño de la descendencia, cada uno de los padres
demuestra su aptitud para adaptarse a su ambiente en forma completamente
independiente a éstas mutaciones.
En términos de los algoritmos, la mutación oculta o mutación paterna [26],
como suele llamarse, redunda en que, gracias a la mutación previa, el material
genético que bajo otras condiciones tendría probablemente una baja
probabilidad de ser seleccionado para reproducción, es seleccionado gracias a
la alta aptitud del material genético que dio lugar a éste. Esto proporciona
material genético mucho más rico e impide –en forma incluso superior a la
mutación habitual –la convergencia prematura, sin disminuir el rendimiento.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 113
11. Otros Parámetros
En los capítulos anteriores hemos dedicado la mayor parte del tiempo a
describir los operadores básicos bajo los que funciona un algoritmo genético.
Hemos dejado de lado, sin embargo, otra serie de parámetros que si bien no
son tan importantes como aquellos, aún son consideradas vitales para el buen
funcionamiento del algoritmo genético. Entre ellos tenemos:
11.1. Población Inicial
Una vez se han realizado todas las consideraciones previas a la puesta en
marcha del algoritmo genético –función de evaluación, métodos de selección,
de cruce y de mutación –llega el momento de ponerlo en funcionamiento, con
el fin de probar su eficacia. Para ello, obviamente, debemos partir de una
población inicial que, a través de las transformaciones que supone el algoritmo,
será transformada secuencialmente hasta que se pueda hallar una hipótesis
satisfactoria para el problema en cuestión.
La población inicial suele ser seleccionada de forma aleatoria en el total del
espacio de búsqueda [6]; Cuando esto sucede, la distancia promedio de
Hamming de la población inicial (En particular, cuando esta población consta
de un número suficientemente grande de cromosomas) puede ser aproximada
a través de una distribución de probabilidad normal con media L/2 y varianza
√L/2 [35]. En general, si la distancia promedio de Hamming de la población no
es cercana a L/2, es probable que nuestro algoritmo de generación aleatoria de
la población inicial sea erróneo [19].
Sin embargo, en los últimos años se han implementado una serie de
mecanismos heurísticos, aprovechando un cierto grado de conocimiento de
dominio para iniciar con una población inicial de una aptitud razonablemente
buena, en lugar de un conjunto aleatorio [37]. Como todos los métodos de
conocimiento de dominio, esta técnica restringe el algoritmo genético, atándolo
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 114
al espacio de búsqueda particular para el cual se genera la población, si bien al
mismo tiempo da una mayor eficiencia al algoritmo en ese espacio de
búsqueda [5].
Antes de inicializar el algoritmo, es importante tener en cuenta el tamaño que
va a tener la población [6]: Como regla básica, es importante tener en cuenta
que el tamaño de esta población debe ser directamente proporcional al tamaño
de los cromosomas, para asegurar la suficiente diversidad genética [39]. Un
buen tamaño para la población suele estar entre los 20 y los 30 individuos, si
bien para algunos problemas el óptimo se encuentra más entre los 50 y los
100.
11.2. Criterios de Parada
Una vez se han definido los parámetros que darán lugar a la puesta en marcha
del algoritmo genético, es de vital importancia elegir los parámetros que darán
lugar a su finalización.
Como ya hemos mencionado, a diferencia de la evolución natural, en los
algoritmos genéticos se suele tener una finalidad específica, que reside en la
resolución del problema en cuestión. Dadas las características de este
algoritmo, no podemos tener un criterio universal que nos indique de forma
unívoca que este problema ha sido resuelto9; Sin embargo, podemos suponer,
dadas las hipótesis discutidas a lo largo de este trabajo, que si la definición de
nuestros operadores (En particular los de codificación y evaluación) es la
correcta, nuestra población tenderá a converger a la solución a medida que el
número de generaciones aumenta.
9 Algo diferente ocurre, por ejemplo, en algoritmos basados en gradientes, en
los que se puede saber sin lugar a dudas que el algoritmo ha llegado a la
solución cuando el gradiente es perpendicular al hiperplano de búsqueda.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 115
Sobre esta hipótesis, los investigadores suelen definir sobre los algoritmos
genéticos una serie de criterios de parada, que indican las condiciones
necesarias para que se pueda asumir que el algoritmo ha llegado a un nivel
aceptable de precisión. Estos criterios de parada suelen estar dados por [6,8]:
• Número fijo de iteraciones, o de generaciones, del algoritmo: El algoritmo
genético se detiene después de un número dado m de ciclos. Este criterio,
si bien es el más comúnmente utilizado, puede no ser el más eficiente,
puesto que nada nos indica que bajo un número cualquiera de iteraciones,
por grande que éste sea, el algoritmo haya convergido. Se requiere, por
tanto, un análisis previo de las probabilidades de convergencia del algoritmo
genético, antes de aventurar un número al azar para el cual, después de
ese número de ciclos, el algoritmo se dará por terminado.
• Número de cromosomas nuevos: El algoritmo se detiene cuando se han
producido un número dado de descendientes d de la población original.
Matemáticamente similar al anterior (con d ≤ mn), presenta también los
mismos problemas que éste. Una variación de éste criterio es aceptar
como nuevos los cromosomas que no han aparecido antes en la población.
Si bien este criterio puede parecer un poco mejor, aún presenta las
dificultades mencionadas, añadiendo a ellas la necesidad de llevar un
historial de los cromosomas que ya han sido evaluados.
• Aptitud mínima del mejor individuo: El algoritmo se detiene cuando el
individuo de mayor aptitud de la población tiene una aptitud f(bi)>α, donde α
es un parámetro fijo determinado a priori. Es evidente que para
implementar éste tipo de criterio es necesario conocer previamente las
características del rango de aptitud del problema, lo cual no siempre es
posible –y en la mayoría de los casos es el hecho por el cual el algoritmo
genético es implementado, en primera instancia.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 116
• Una variación del método anterior podría escoger la aptitud mínima de
acuerdo a los resultados obtenidos en la primera generación. A priori, una
buena aproximación podría ser una regla de tres con la aptitud promedio y
la máxima obtenida, así:
)()()(
0
0 min
0+
+
=P
P
bff
Pfbf
,
Donde fmin es la aptitud mínima aceptable, y b+ es el cromosoma de mayor
aptitud de la población dada, con lo cual podemos aventurar,
[ ])(
)(
0
2
min0
Pf
bff P
+
=
Aunque el que la aptitud mínima aceptable sea a la aptitud máxima de la
primera generación como ésta es a la aptitud promedio de la misma parece
ser una solución bastante razonable, también es una que depende mucho
de las características del problema en cuestión; Con una fórmula tan simple
como esta es tan probable que nuestro resultado no sea realmente una
solución aceptable al problema como que nuestro algoritmo se quede
eternamente iterando en busca de una aptitud mínima que es incluso
superior a la de la solución real.
• Convergencia de aptitud: El algoritmo es detenido cuando la variación en
aptitud de una generación a otra –o la razón entre ésta variación y la aptitud
inicial –es lo suficientemente pequeña como para ser despreciable. Como
veremos en capítulos siguientes, es un criterio de parada que se acerca
mucho más a un óptimo; Sin embargo, dada la naturaleza estocástica del
algoritmo genético, nada impide que, sin haberse acercado siquiera a un
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 117
óptimo, éste produzca una variación mínima de aptitud, y se detenga
prematuramente sin haber hallado un óptimo.
• Convergencia total o parcial de la población: El algoritmo se detiene cuando
cierta proporción de la población (Su totalidad, o un porcentaje bastante
cercano al 100%) es equivalente. Si bien a primera vista pudiera parecer un
criterio de parada bastante mejor que los anteriores –como, en efecto, lo es
–, nada nos asegura que el algoritmo no se detenga en máximos parciales
de manera prematura, si bien esto será poco probable cuando se han
escogido adecuadamente los operadores genéticos.
11.2.1. Distancia de Hamming y Convergencia
Bajo el criterio de parada de convergencia total o parcial es necesario definir un
mecanismo para determinar el grado de convergencia de la población. Para
ello definimos la distancia de Hamming como la diferencia, bit a bit, entre dos
cromosomas, es decir [19]:
∑=
⊕=n
ibaba ibibbbH
1
][][),(
Donde b[27] es el valor del bit p del cromosoma b. Definimos, asimismo, la
agrupación como la distancia –en términos de distancia de Hamming –entre el
individuo de mayor aptitud de una población y todos los demás, medida como
el promedio de la distancia de Hamming entre cada uno de ellos y el individuo
de mayor aptitud. Así, cuando llamamos b* al individuo de aptitud máxima en
la población, podemos definir la agrupación como:
1
)*,()( 1
−=∑=
n
bbHPG
n
ii
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 118
De la misma forma, la deriva genética está dada por la distancia promedio
entre todos los individuos de la población, dada por [35]:
)1(
),()( 1
−=∑∑= ≠
nn
bbHPD
n
i ijji
Bajo el espacio definido por un cromosoma binario de tamaño L (Esto es, un
hipercubo de L dimensiones, en el cual cada uno de las dimensiones puede
tomar un valor de 0 o 1), la distancia promedio de Hamming entre cualquier
individuo (En particular, el individuo de mayor aptitud) y todos los demás
individuos posibles está dada por10 [35]:
122)(
1
−•
=−
L
LLbH
De la misma forma, la distancia promedio de Hamming entre todos los
individuos es:
122)(
1
−•
=−
L
LLPH
Así, tanto la deriva genética como la agrupación en el algoritmo genético
tendrían un valor promedio dado simplemente por el tamaño del cromosoma
(Que, para valores suficientemente grandes de L, se puede aproximar por L/2).
Así, sería fácil determinar un valor aceptable de convergencia, basado en la
convergencia promedio de una población cualquiera.
10 Se incluye ésta fórmula sin prueba por su simplicidad. No será para el lector
muy difícil comprobar empíricamente, o por inducción, su veracidad.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 119
Para un análisis más completo acerca de la convergencia de un algoritmo
genético, y los criterios matemáticos que la determinan, consultar el capítulo
13.
11.3. Criterios de Control
Como hemos podido ver a lo largo de los capítulos anteriores –y como veremos
en los posteriores –, el funcionamiento de los algoritmos genéticos depende en
gran parte de las decisiones tomadas a lo largo del proceso de implementación
de los diversos operadores. En particular, algunas de estas decisiones, que se
reflejan en un conjunto de parámetros conocidos conjuntamente como criterios
de control afectan enormemente el desempeño de los mismos en la resolución
de cualquier problema dado. Estos criterios de control son [3,46]:
• Tamaño de la población (n): Es evidente que para que un algoritmo genético
funcione es necesario cierto grado de diversidad genética, que debe
aumentar conforme aumenta la dimensionalidad del espacio de búsqueda;
Sin embargo, es importante tener en cuenta que un tamaño excesivamente
grande de población no incrementará la eficiencia del algoritmo –e incluso,
llegará a disminuirla, cuando este tamaño sea demasiado grande, sobre
todo cuando los procesos de evaluación y selección presentan cuellos de
botella –. En particular, la capacidad de procesamiento paralelo de la
máquina (O las máquinas) encargadas del algoritmo impone una cota
superior al número de individuos que pueden ser procesados
simultáneamente.
• Tasa de Cruce (Pc): Como hemos visto, una tasa excesivamente alta de
cruce presenta el riesgo de destruir un gran número de esquemas. Sin
embargo, una tasa excesivamente baja puede impedir la recombinación de
los bloques de construcción para la formación de individuos especialmente
favorables. En la literatura, se suele recomendar una tasa de cruce
relativamente alta (Superior al 50%)
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 120
• Tasa de Mutación (Pm): Como hemos analizado en capítulos anteriores, una
tasa de mutación excesivamente alta presenta el riesgo de destruir un gran
número de esquemas, convirtiendo a la búsqueda en una simple búsqueda
aleatoria. Sin embargo, hemos visto también las ventajas de la mutación en
la creación de nuevo material genético que permita explorar la totalidad del
espacio de búsqueda. Bajo estos criterios, la tasa de mutación que suele
ser utilizada en la práctica suele ser relativamente baja (inferior al 1%).
En algunos casos [49], se ha descrito al algoritmo genético como una tupla <K,
n, Pt, Pt+1, f, Op, Cp>, donde K es el tamaño del alfabeto utilizado, n el tamaño
de la población, Pt y Pt+1 las poblaciones en el tiempo t y t+1, respectivamente,
Op una serie de operadores genéticos y Cp una condición que se considera
como criterio de parada.
A su vez, el elemento Op suele estar representado como una tupla <S, C, M>,
donde S representa la función de Selección, C la de cruce y M la de mutación.
En algunos casos, sin embargo, Op puede tener una dimensionalidad mayor
(Cuando se implementan operadores genéticos diferentes a los ya
mencionados, como los que veremos en el próximo capítulo), o menor (En
casos como la del cruce sin mutación o la evolución inocente).
11.4. Nichos Ecológicos
En ocasiones se busca que un algoritmo genético realice una búsqueda
múltiple sobre todos los puntos de alta aptitud del espacio de búsqueda, en
lugar de concentrarse sobre un punto en particular. Esto es, que encuentre
todos los máximos locales –o una cierta cantidad de ellos –, en lugar de
concentrarse en un máximo global. Por desgracia, en los algoritmos genéticos
tradicionales la totalidad de la población tiende a converger eventualmente en
un pico único, incluso cuando hay más de un punto de máxima aptitud.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 121
Con el fin de superar este problema, y permitir la especiación –o
especialización de la población en diferentes nichos ecológicos, localizados
alrededor de los diferentes máximos locales en el paisaje de búsqueda –Se
han propuesto una serie de modificaciones a los algoritmos genéticos
tradicionales, a partir de los llamados operadores de nicho, todos ellos
metáforas de los mecanismos de especiación que dan lugar a los diferentes
nichos ecológicos presentes en la naturaleza.
El primero de estos operadores es la Preselección, que ayuda a mantener la
diversidad genética a través de un control que solamente permite a los
descendientes de un par de cromosomas reemplazar a estos si presentan un
cierto nivel de similitud a ellos. En este sentido, la manutención de la variedad
genética impide que la población converja a un único máximo. En una
variación de ésta técnica, similar a la selección por torneo, se seleccionan
aleatoriamente dos o tres individuos, reemplazando por el nuevo cromosoma
aquel de ellos que es más similar a éste. En otra variación, la selección del
cromosoma a ser reemplazado se realiza en función al inverso de la aptitud,
con lo cual los cromosomas de menor aptitud son reemplazados primero.
Otra forma de mantener la especialización es a través del cruce restringido,
mediante el cual se asegura que los cromosomas similares se crucen sólo con
cromosomas similares. Esto no solo asegura la división de la población en
diferentes nichos ecológicos, sino que también reduce enormemente la
formación de letales, como fue sugerido en el capítulo 9.
De la misma manera, se ha sugerido la formación de nichos ecológicos
manteniendo múltiples subpoblaciones en zonas diferentes del espacio de
búsqueda, con tasas intermedias de migración. Esto simula el aislamiento
geográfico presente en los fenómenos evolutivos de la vida real y presenta al
mismo tiempo una ventaja comparativa sobre la manutención de
subpoblaciones completamente aisladas –que, finalmente, corresponden
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 122
simplemente a una iteración del algoritmo genético en el cual se fuerza una
concentración alrededor de nichos específicos –, o poblaciones completamente
mezcladas. Este método es ideal cuando se cuenta con cierta capacidad de
procesamiento en paralelo, pero tiene el problema de que no se puede
asegurar que más de una de las poblaciones aisladas converjan a un mismo
nicho [39].
Esta técnica en particular es especialmente interesante cuando se cuenta con
cierto nivel de procesamiento paralelo, que permita mantener a las diferentes
subpoblaciones separadas en forma tanto física como lógica. Con ésta
variación, la migración consistiría simplemente en pasar algunos de los
individuos de la población de una unidad de procesamiento a otra [17].
Similarmente, se han implementado técnicas de aptitud compartida, en la que
la cantidad de individuos en un mismo nicho disminuye por igual la aptitud de
todos ellos. Esto obliga a los descendientes de algunos de estos individuos a
desplazarse, migrando hacia nuevas áreas de búsqueda, en busca de un
incremento en su aptitud. Una función de aptitud compartida basada en
distancia euclidiana implementa lo que se han llamado nichos hiperesféricos.
Como podemos ver, el desempeño de estos métodos depende enormemente
de qué entendemos por similitud entre dos cromosomas, ya que este concepto
de similitud define el radio de los nichos (La distancia máxima a la cual dos
individuos diferentes comienzan a ser considerados como parte del mismo
nicho); Aún no se ha realizado una investigación profunda del radio óptimo de
nicho para un algoritmo genético de búsqueda múltiple. Por otra parte, la
continua comparación de los diferentes individuos en busca de similitudes
puede redundar en un cuello de botella que disminuya enormemente la
eficiencia del algoritmo.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 123
Un grave problema de los métodos de nicho reside en que cuando hay
múltiples picos de aptitud similar a la del máximo global se hace muy probable
no hallar éste máximo, ya que los individuos se distribuyen en los diferentes
máximos locales.
Por último, es importante mencionar el método del nicho secuencial, en el cual
se realiza una iteración de un algoritmo genético, en el cual el resultado de
cada iteración define un máximo global que es suprimido en la siguiente. Esto
permite hallar secuencialmente una serie de máximos, sin caer en la posibilidad
de repeticiones, si bien significa al mismo un incremento enorme en tiempo de
procesamiento [5].
11.5. Probabilidades Adaptativas de Operadores
En la implantación de algunos algoritmos genéticos se suelen incorporar, en
adición a los parámetros mencionados anteriormente, ciertos mecanismos de
control adicional, con el fin de incrementar la eficiencia del algoritmo.
Uno de ellos es la inclusión dentro de la información del algoritmo de un cierto
“peso” para cada uno de los operadores genéticos utilizados, que depende en
su mayor parte de la aptitud de los individuos resultantes de su acción sobre la
población, y en un menor grado de una probabilidad previamente asignada que
disminuye a medida que avanzan las generaciones (La probabilidad –entre 0 y
1 –se eleva a la potencia del número de generaciones transcurridas desde su
última inserción [32]). Así, a cada ciclo, se seleccionan los diferentes
operadores no en forma secuencial, sino basados en un historial de aptitud
resultante que depende altamente del problema en cuestión, y que es
seleccionado de manera análoga a la selección de individuos para cruce.
La gran ventaja de este método es la eliminación de la necesidad de escoger
los operadores a priori: El algoritmo mismo se encarga de seleccionar los
mejores para el problema en cuestión. Por otra parte, la gran desventaja es la
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 124
sobreevaluación de operadores que tienden a escoger simplemente máximos
locales [5].
11.6. Tratamiento de Individuos Duplicados
Finalmente, una decisión que puede ser relevante para algunas
implementaciones de algoritmos genéticos es el tratamiento de los individuos
duplicados dentro de la población. Al enfrentarse a este problema, la decisión
del investigador puede ubicarse en alguno de los siguientes puntos [6]:
• Aceptar todos: El algoritmo genético no tiene ningún mecanismo de
control sobre los individuos duplicados; Simplemente genera en su
ejecución los individuos en la forma descrita en capítulos anteriores.
Esta decisión puede presentar el problema de crear poblaciones
degeneradas –es decir, poblaciones en las cuales una gran parte de los
individuos son equivalentes –, si bien bajo una serie de operadores
elegidos de forma apropiada la probabilidad de que esto suceda
disminuye enormemente.
• Rechazar todos: Con el fin de eliminar los problemas que se pueden
presentar ante la degeneración de las poblaciones, algunos
investigadores han optado por eliminar los individuos duplicados aún
antes de que estos reemplacen a sus progenitores. Esta decisión, si
bien mantiene la diversidad genética, limita la convergencia del
algoritmo.
• Aceptar hasta cierto límite: El punto intermedio entre los dos extremos
es la aceptación de cierto número de duplicados. Si bien ésta decisión
presenta las ventajas de ambos extremos y ninguna de sus desventajas,
la comparación de los individuos puede crear cuellos de botella que
disminuyan el rendimiento del algoritmo genético.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 125
12. Otros Operadores
En adición a los operadores básicos (Evaluación, Selección, Cruce y Mutación),
un algoritmo genético puede incluir un sinnúmero de operadores secundarios
que, si bien no son tan importantes en la implementación de un algoritmo
genético en general, pueden ser bastante útiles en la resolución de problemas
particulares. Entre ellos encontramos:
12.1. Aborto
En ciertos casos se requiere eliminar rápidamente los atributos menos
deseables de la población –Esto es, antes incluso de darles una oportunidad de
reproducción –; Uno de los métodos para lograr esta “muerte prematura”, es
implementando un sistema de abortos, que puede estar basada en [39]:
• Restricción del Rango de Aptitud: Todos los individuos que no lleguen a un
cierto nivel de aptitud dado (Generalmente proporcional al rango de aptitud
presente en la población actual), son desechados.
• Proporción: Cierta proporción de la población (Los m individuos de menor
aptitud, donde m < n) es desechada.
• Métodos Estocásticos: En adición al proceso de selección normal en cada
ciclo, se hace una “selección inversa”, que elige a los individuos de menor
aptitud por los métodos ya vistos (Dependiendo del inverso de la aptitud de
los diferentes individuos), y los descarta de la población actual.
A los individuos abortados generalmente se les asigna una aptitud de 0, que
nulifica la probabilidad de ser escogidos para reproducción [9]. En otros casos,
sin embargo, los individuos son desechados inmediatamente, a menudo siendo
reemplazados por otros, que bien pueden ser [39]:
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 126
• Abuelos: Los individuos de mayor aptitud de la generación anterior
reemplazan a los abortados. Este criterio tiene el problema potencial de
estancar el algoritmo en máximos locales y eliminar la diversidad.
• Generaciones intermedias: Se selecciona aleatoriamente un subconjunto de
individuos de la población actual, y se cruzan aquellos de mayor aptitud.
Los resultados de estos cruces reemplazan a los desechados.
• Reduplicación: Una serie de individuos es duplicada para reemplazar a los
eliminados, basada ya sea en aptitud o aleatoriamente.
12.2. Normalización
En algunos casos, en adición a los operadores ya descritos, es relevante
implantar un operador de normalización que, en lugar de desechar los
individuos no deseables –que carecen de sentido o de interés –, los normalice
eliminando sólo las características no deseables de un recién nacido y
reemplazándolas por otras que lo ubiquen dentro de un conjunto de hipótesis
con características deseables [47,3].
Uno de los operadores de normalización más comunes es la reinterpretación
de los códigos inválidos, que ya analizamos al referirnos al proceso de
codificación de espacios discretos limitados, en el capítulo 7.
12.3. Añadir, Eliminar
Cuando hablábamos de codificación, mencionábamos la posibilidad de requerir
de cromosomas de longitud variable. Ante esta posibilidad, es lógico que
requiramos de operadores para añadir o eliminar genes de cromosomas
existentes.
Cuando trabajamos con cromosomas de longitud variable debemos tener en
cuenta que cualquier operador de cruce sólo trabajará en un número de bits
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 127
correspondiente al tamaño del menor de los cromosomas [39], y tomar
decisiones en cuando al excedente del cromosoma mayor. No será muy difícil
discernir que tenemos las siguientes opciones:
• Herencia Total: El excedente es replicado en ambos hijos por completo. No
es muy recomendable cuando la inclusión de ciertos genes puede ser
perjudicial al cromosoma.
• Herencia Parcial: Cada gen del excedente tiene una probabilidad php de ser
incluido en el código genético de cada descendiente.
• Herencia Repartida: Cada gen del excedente (o la totalidad del mismo)
tendrá una probabilidad phr de ir a uno o a otro hijo.
• Desecho del excedente: El excedente es simplemente desechado. No es
muy recomendable cuando la inclusión de ciertos genes puede ser
beneficioso para el cromosoma.
12.4. Intercambio, Reinserción, Barajado
En algoritmos genéticos de alta epistasis, en los que no sólo es importante el
valor de los diferentes genes sino también la posición de los mismos dentro del
cromosoma, es importante crear un mecanismo que nos permita evaluar las
diferentes combinaciones de genes al interior del cromosoma. Estos
mecanismos, que ya hemos mencionado en el capítulo anterior como
mecanismos especializados de mutación para éste tipo de algoritmos, son el
Intercambio, la Reinserción y el Barajado.
Como es lógico, el propósito de estos operadores es el intercambio de los
diferentes genes dentro del cromosoma, con el fin de dar lugar a nuevas
configuraciones de genes que, con suerte, darán lugar a individuos de mayor
aptitud y, de la misma manera, mayor potencial evolutivo. Sin embargo, para
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 128
implantarlo, es necesario tener en cuenta que se requiere de algún tipo de
identificación de los genes, a través de etiquetas, por ejemplo, para no permitir
pérdidas de información y que.
Las bondades de este tipo de operadores en un algoritmo genético aún no han
sido positivamente evaluadas, y aunque muchos investigadores los han usado
en algún momento, pocos la han justificado, o han cuantificado su contribución:
Si bien su implementación incrementa enormemente el espacio de búsqueda,
también es cierto que no disminuye la epistasis, ni es especialmente de ayuda
en problemas en que las relaciones de los genes no permiten un ordenamiento
lineal simple. De la misma manera, ha de tenerse en cuenta que ciertos tipos
de cruce y de mutación, como el cruce uniforme bit a bit, o la mutación multibit,
anulan por completo el efecto que estos operadores pueden tener sobre los
diferentes individuos.
Finalmente, hay que tener en cuenta que un algoritmo genético que
implementa éste tipo de operadores se encuentra concentrado no sólo en la
búsqueda de “buenos” genes, sino también en la de ordenamientos óptimos de
los mismos, un problema mucho más difícil que puede sin lugar a dudas afectar
enormemente el rendimiento [5].
12.5. Reducción
Un operador especial propuesto por Corcovan y Wainwright [15] es el de
reducción, que, después de determinar el nivel de convergencia de cada uno
de los genes del cromosoma y determinar cuales han convergido
completamente (Ver “Distancia de Hamming y Convergencia”, Capítulo 11),
toma estos genes y los separa del resto, reduciendo efectivamente el
cromosoma para proseguir la búsqueda con lo que resta del mismo.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 129
Así, mientras el algoritmo va separando los genes óptimos ya encontrado,
prosigue la búsqueda en un espacio reducido (Esto es, sobre cromosomas de
tamaño reducido), que no es más como un subespacio de mayor aptitud del
espacio original, impidiendo a la mutación crear nuevas configuraciones que
alejen al algoritmo de los máximos ya encontrados.
12.6. Otros Operadores Comunes
En adición a los operadores ya mencionados, existen otros, que pueden ser
aplicados a ciertos problemas específicos, como son [62]:
• Duplicación o Clonación: Duplica cromosomas de buena aptitud.
• Inversión: Cambia 1s por 0s y viceversa.
• Reversión: Cambia un cromosoma por sí mismo ordenado de atrás para
adelante.
• Anulación o Pavlov: Anula (Convierte en 0) algunos bits del cromosoma.
Figura 12.1
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 130
13. Análisis de Convergencia
Tras haber realizado un concienzudo análisis acerca de los algoritmos
genéticos, de sus partes y de sus procedimientos, es probable que aún nos
quede una serie de preguntas en el aire: ¿Qué tan eficientes son los algoritmos
genéticos en la resolución de problemas? ¿Verdaderamente resuelven éstos
problemas, o tan sólo hallan una aproximación a la solución? Si hallan, como
efectivamente deberían, la solución al problema en cuestión, ¿Cuánto tardan
en hacerlo? Y finalmente, ¿Qué criterios de parada deben elegirse para
garantizar esta terminación?
A lo largo del siguiente capítulo ahondaremos un poco más en la teoría
matemática que rodea a los algoritmos genéticos, y que permite asegurar –o
rechazar –la hipótesis de convergencia de la población a una hipótesis única
que corresponde a la solución del problema planteado, tras una cierta cantidad
de iteraciones.
13.1. Incremento de Aptitud
Como ya hemos mencionado al momento de mencionar la decisión de elegir un
criterio de parada apropiado para un algoritmo genético en específico, el
problema de predecir qué tan rápido convergerá un algoritmo genético a una
solución aceptable de un problema en particular no es nada sencillo, lo cual es
debido en gran parte a la naturaleza probabilística de éste tipo de algoritmos.
A causa de ésta misma naturaleza probabilística, sin embargo, podemos
aventurar modelos matemáticos que nos permitan aproximarnos a una
descripción del comportamiento de un algoritmo genético.
Antes de analizar estos modelos, sin embargo, debemos detenernos a hacer
una reflexión acerca de qué es lo que pretendemos demostrar. Sabemos que
un algoritmo genético ejecuta repetitivamente una serie de pasos; Nuestro
primer objetivo es, entonces, demostrar que al ejecutar estos pasos, el
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 131
algoritmo “avanza” hacia la solución. En nuestro caso, basta con afirmar que la
aptitud promedio de cada nueva generación es como mínimo equivalente a la
de la generación anterior:
)()( 1 tt PfPf ≥+ ,
Para ello, asumamos que en una población cualquiera Pt, la aptitud de los
individuos que la componen se encuentra distribuida en forma normal con una
media f(Pt) igual a la aptitud promedio de la población, y con una desviación
estándar igual a σ, es decir:
∑∈
=ti Pb
ibfn
)(1µ
Si consideramos una selección proporcional a la aptitud de cada individuo, e
ignoramos los efectos del cruce y de la mutación, tenemos que en la siguiente
generación la aptitud promedio estará dada por la sumatoria de las aptitudes de
todos los individuos que pertenecen a ella, ponderada por la probabilidad de
selección de cada uno, que está dada por la razón entre su aptitud y la aptitud
promedio de la generación anterior:
∑∈
=′ti Pb
ii
bfbf
n µµ
)()(1 ,
ó
[ ]∑∈
=′ti Pb
ibfn
2)(1µ
µ ,
Lo cual, restando µ de µ’, equivale a:
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 132
[ ]∑ ∑∈ ∈
−=−′ti tiPb Pb
ii bfn
bfn
)(1)(1 2
µµµ ,
ó, mejor,
[ ]∑∈
−=∆ti Pb
ii bfbfn
µµ
µ )()(1 ,
Bajo la fórmula enunciada, no es difícil demostrar que ésta diferencia en la
aptitud promedio es no negativa si la aptitud promedio de la generación Pt es
positiva, ya que los cromosomas con las mayores aptitudes obtendrán una
ponderación positiva que las escalará, mientras que las aptitudes menores se
verán disminuidas, y restadas del total; Esto demuestra que nuestra aptitud
promedio va aumentando con cada nueva generación y que, por tanto, nuestro
algoritmo se acerca cada vez más a la solución.
13.2. Hallazgo del Óptimo
Una vez demostrado que el ciclo del algoritmo genético avanza hacia su
terminación, es importante demostrar que llega en algún momento de su
ejecución a la solución del problema; es decir, que para algún número –aún
indefinido –de generaciones (t), el cromosoma óptimo b* se encuentra en la
población Pt, o:
tPbNt ∈•∃ *: ,
Donde b* es el cromosoma que equivale al punto óptimo en el espacio de
búsqueda (O al conjunto de los cromosomas óptimos, en caso de que haya
más de uno, con lo cual evitamos la pérdida de generalidad; En este caso el
símbolo de pertenencia debe ser reemplazado por el de subconjunto [24]).
Para demostrar esto, sin embargo, será necesario primero ver el algoritmo
genético de una forma completamente diferente:
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 133
13.2.1. Algoritmos Genéticos como Cadenas de Markov
Algunos autores (Encabezados por Nix y Vose [2]) se han dado a la tarea de
modelar los algoritmos genéticos a través de cadenas de Markov homogéneas
de tiempo discreto, con el espacio de estados siendo equivalente al conjunto de
las posibles poblaciones que pueden presentarse a lo largo de la ejecución del
algoritmo. Esto es, para un algoritmo con n individuos de longitud L sobre un
alfabeto K,
⎟⎟⎠
⎞⎜⎜⎝
⎛
−−+
=1
1L
L
KKn
N
Donde N es el número de poblaciones posibles. Cada una de estas posibles
poblaciones es descrita a través de una matriz de incidencia Z (N×r) donde las
filas representan cada una de las poblaciones, y las columnas los diferentes
cromosomas susceptibles de ser representados con el alfabeto en cuestión;
Así, cada una de las posiciones (i,b) define la cantidad de veces que el
individuo b es representado en la población i.
Individuo Estado
00 01 10 11
P1 0 0 0 2
P2 0 0 1 1
P3 0 0 2 0
P4 0 1 0 1
P5 0 1 1 0
P6 0 2 0 0
P7 1 0 0 1
P8 1 0 1 0
P9 1 1 0 0
P10 2 0 0 0
Tabla 13.1: Matriz Z para K=2, L=2 y n=2
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 134
13.2.1.1. Cadenas de Markov
Una cadena de Markov describe una trayectoria probabilística [10] sobre un
espacio finito S (El conjunto de poblaciones posibles, en nuestro caso), en la
cual la probabilidad pi,j de realizar una transición de un estado si ∈ S en un
instante t a un estado sj ∈ S en un instante t+1 –también llamada probabilidad
de transición –depende únicamente del estado actual si (Que en el caso de los
Algoritmos Genéticos representa la probabilidad de pasar de una población Pi a
una población Pj en una generación). Una cadena de Markov para la cual ésta
probabilidad de transición no depende tampoco del instante t es llamada
cadena de Markov homogénea [44].
Las diferentes probabilidades de transición de una cadena de Markov pueden
ser recolectadas en una matriz de transición Q, una matriz de probabilidades –
o matriz estocástica11 [10] –de dimensiones n×n, que determina la probabilidad
de transición entre dos estados; es decir, la probabilidad condicional de que en
una sola transición la variable aleatoria tome cada uno de los valores posibles
del espacio de estados (Representados como las columnas de la matriz), dado
un estado inicial (Representado en las filas). Como matriz de probabilidad, la
matriz Q cumple las siguientes propiedades [44]:
1000:, , ≤≤•≤<∧≤<∀ jiQnjniNji ,
y
∑=
=•≤<∀n
ijiQnjNj
1, 10:
11 Una matriz de probabilidades es una matriz que cumple las propiedades que
serán descritas más adelante.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 135
Una vez se conoce la matriz de transiciones que representa una cadena de
Markov, y asumiendo que las probabilidades de estas transiciones permanecen
invariantes con el tiempo, se puede deducir la probabilidad condicional del paso
de un estado i a otro j en un número de pasos t (Que no necesariamente debe
ser igual a uno) mediante la fórmula:
t
jiQtjip ,),( =→
La Matriz Qt –esto es, la matriz que representa el producto de la matriz Q por
ella misma, t veces –no es más que la matriz de transición de t pasos, que
representa entonces la probabilidad de que, t transiciones después, la variable
aleatoria tome el valor de la columna j, dado que en un principio se encontraba
en el valor de la fila i [16] (Que, en nuestro caso representa la probabilidad de
llegar a la población Pj tras t generaciones, a partir de una población Pi).
Nótese que cualquier potencia de una matriz estocástica es, por fuerza, una
matriz estocástica [10,44].
De la misma manera, dada una distribución de probabilidades iniciales (O de
probabilidades de iniciar con cada una de las posibles poblaciones, en el caso
de los Algoritmos Genéticos) en la forma de un vector a0, la distribución de
probabilidad de los diferentes estados tras t pasos está dada por:
t
t Qaa 0=
Así, una cadena de Markov de tiempo discreto finita y homogénea se encuentra
definida completamente por el par (a0, Q) [44]. Además de las mencionadas,
una cadena de Markov tiene una gran cantidad de propiedades que permiten
predecir su comportamiento, algunas de las cuales derivan de la naturaleza de
la matriz de transición como una matriz de probabilidades, como lo veremos
más adelante, y otras tantas que ya han sido estudiadas extensivamente por
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 136
una gran cantidad de autores y que sólo serán tratadas en el presente trabajo
cuando sea necesario para describir el problema en cuestión.
Para nuestro algoritmo genético, las transformaciones definidas sobre el
espacio de búsqueda dependen enormemente de los operadores genéticos
que estemos utilizando. Podemos hacer, sin embargo, una aproximación a la
matriz de transición de la cadena de Markov que modela el proceso de nuestro
algoritmo genético, dividiendo la transición de un estado a otro en las sub-
transiciones que la componen, es decir, la transición de selección, la transición
de cruce y la transición de mutación [2,10,14]:
mcs QQQQ ××= ;
Así, tenemos:
∏=
==N
k
kjzs
s NjikjZ
ikpnjiQ
0
),(
..1,,)!,(
)(!),( ,
donde,
)()(),(
)(),(
)(),()(
1
iFkfkiZ
lfliZ
kfkiZikp N
l
s ==
∑=
,
Es la probabilidad de que el individuo k de la población i sea seleccionado para
la siguiente generación. De manera similar:
⎪⎪⎩
⎪⎪⎨
⎧
≠
=+−=
jiiNjiNp
jiiNjiNpp
jiQ
c
cc
c
ccc
c
,)(),(
,)(),()1(
),( ,
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 137
donde Nc(i) representa el número total de poblaciones diferentes alcanzables
desde la población i a través del operador de cruce, y Nc(i,j) representa la
porción de éstas poblaciones que son equivalentes a la población j.
Finalmente:
)(
)(),(
* *
iN
bapjiQ
m
Pa Pbm
mi j
∑∑∈ ∈
→
= ,
donde Pi* es el conjunto de todas las posibles poblaciones alcanzables desde i
a través del operador de mutación, y Pj* es el conjunto de todas las posibles
poblaciones que a través del operador mutación pueden dar lugar a la
población j; Nm(i) es el número total de poblaciones alcanzables desde i a
través del operador de mutación, y pm(a→b) es la probabilidad de que un
individuo a sea transformado por mutación en un individuo b, dada por:
),(),()1()( baH
mbaHL
mm ppbap −−=→
Cada Qi,j es, entonces, una medida de qué tan posible es que una población Pi
sea transformada en Pj en una transición. En particular, si la tasa de mutación
es diferente de 0, Qi,j será también diferente de 0 para todo (i, j) –como ya
vimos en el capítulo dedicado a la mutación, si la tasa de mutación es diferente
de 0, existe una probabilidad no nula de que un individuo dado pueda
convertirse en cualquier otro del espacio de búsqueda –; Así, con una tasa de
mutación diferente de 0, cualquier población es susceptible de ser
transformada en cualquier otra con una probabilidad, por pequeña que ésta
sea, diferente de 0.
Una cadena de Markov para la cual todas las entradas de su matriz de
transición son diferentes de cero es denominada Cadena de Markov Ergódica;
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 138
Existe un teorema por el cual toda cadena ergódica es susceptible de entrar en
el límite ( ∞→t ) a un estado estable para el cual:
)(lim)(lim0: 1 ittitt PPpPPpNiNi =≡=•≤<∀ +∞→∞→ ,
Esto significa –en nuestro caso –, que ante un número potencialmente infinito
de generaciones, cada nuevo ciclo del algoritmo genético no causará variación
alguna en las probabilidades de obtener una población dada,
independientemente de la población inicial. Así, ya que tenemos una
probabilidad no nula de obtener cualquiera de las poblaciones posibles,
tenemos asimismo una probabilidad no nula de obtener cualquiera de los
individuos posibles dentro de estas poblaciones –esto es, en suma, todas las
configuraciones posibles para un cromosoma –.
Así, suponiendo que existe un cromosoma b* que supera en aptitud a todos los
demás cromosomas (O que, al menos, no existe otro cromosoma que le supere
en aptitud), la probabilidad de encontrar éste cromosoma en un número infinito
de iteraciones de un algoritmo genético con una probabilidad de mutación Pm≠0
es 1.
Este resultado puede no ser completamente satisfactorio, en particular porque
por lo general no estamos dispuestos a esperar un tiempo infinito para obtener
la solución a un problema. Sin embargo, podemos aliviar las repercusiones
prácticas de éste problema siendo un poco menos ambiciosos, y sacrificando
exactitud por eficiencia, dejando de lado la búsqueda de la respuesta exacta
para dar un cierto margen de error εb a nuestros cálculos, con lo cual sólo
requeriríamos hallar una población Pt para la cual:
biti bfbfPbNi ε≤−•∈∃ )(*)(:
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 139
Este planteamiento puede parecer mucho más fácil de alcanzar; Sin embargo,
no es del todo práctico a la hora de implantar, o de demostrar, sobre todo si
tenemos en cuenta que, como es lógico, no tenemos idea previa de cual es el
punto óptimo b* que estamos buscando –Si lo supiéramos, no habría caso en
realizar la búsqueda –, y por tanto nos es casi imposible conocer a priori cual
es su aptitud (Si bien en algunos casos es posible predecir aproximaciones).
13.2.1.2. Comportamiento en un tiempo t
Asumamos que escogemos una población para nuestro algoritmo genético en
forma aleatoria. Dado que debemos escoger n individuos de los KL posibles,
cada uno de ellos tendrá una probabilidad K-L de ser escogido. Así, es claro
que para definir la probabilidad de que la población inicial sea una población
específica Pi, requerimos de una distribución multinomial de probabilidad:
[ ]nL
Kiiii K
zzznPPp
L
−
−
==1,1,0,
0 !!!)(L
Bajo esta distribución, podemos asegurar que después de un número t de
ciclos del algoritmo genético, la probabilidad de que éste contenga cada una de
las poblaciones posibles está dada por:
∑=
===N
i
tjiijt QPPpPPp
1,0 )()(
Esta probabilidad no tiene necesariamente que restringirse a un estado; Puede
incluir un conjunto completo de estados que presenten una característica de
interés (Por ejemplo, en nuestro caso, todas las poblaciones en las cuales se
encuentra el cromosoma óptimo b*, o todas las poblaciones para las cuales la
aptitud promedio supera cierto valor mínimo predeterminado). Así, para un
conjunto J de poblaciones posibles, la probabilidad de que en un tiempo t el
algoritmo se encuentre en alguna de estas poblaciones es [10]:
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 140
∑∑∑∈ ∈∈
====∈JP IP
tjii
JPjtt
j ij
QPPpPPpJPp ,0 )()()(
De la misma manera, con la ayuda de las leyes de la probabilidad, podemos
hacer un acercamiento al valor de una función de interés f (Como puede ser,
por ejemplo, la aptitud promedio de la población) a partir de la probabilidad de
los diferentes estados de la cadena; Así [10]:
[ ] ∑ ==j
jjtt PfPPpfE )()(
13.3. Tiempo de Espera
A lo largo de nuestra discusión acerca de la convergencia de algoritmos
genéticos hemos dejado de lado una importante pregunta, que nos concierne
especialmente dado que el criterio de parada más comúnmente usado es el del
número de ciclos: ¿Cuántas iteraciones (t*) del algoritmo genético son
necesarias para asegurar con cierta probabilidad (δ) que el algoritmo ha
convergido a una solución aceptable (O, posiblemente, a b*)?
Una respuesta a esta pregunta viene del estudio, precisamente, de las cadenas
de Markov. Una observación detallada de la matriz Q que la define nos puede
revelar muchos datos en cuanto a los tiempos medios de primer paso para un
estado en particular (O un conjunto de estados, como ya vimos); Es decir, la
cantidad de tiempo –estimado en número de transiciones –que toma en
promedio al proceso llegar a un estado Pj, dado que en un principio se
encuentra en un estado Pi. Para ello, denominemos a este tiempo ti,j, y
consideremos que la probabilidad de pasar de Pi a Pj en un solo paso es de Qi,j.
Sin embargo, existe toda una serie de posibilidades de que de la población Pi
se pase a otra población arbitraria Pk (k≠j) de donde, de nuevo, hay una cierta
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 141
probabilidad de llegar a Pj en un cierto número de pasos. Así, sumando todos
estos factores, obtenemos la siguiente serie de ecuaciones simultáneas:
∑≠
++=jk
jkkijiji tQQt )1( ,,,,
De la misma manera, para conjuntos de poblaciones, tenemos:
∑ ∑∈ ∉
++=Jj Jk
jkkijiJi tQQt )1( ,,,,
Al resolver esta serie de ecuaciones, obtenemos (Nos concentraremos en un
conjunto de poblaciones, si bien el resultado es equivalente para una sola
población):
∑ ∑∈ ∉
=+==Ji Ji
jiiix tPPpPPpJt ,00 )(0)()( ,
Donde tx, el tiempo esperado, está dado por la posibilidad de que el óptimo sea
encontrado en el estado inicial (Y por tanto, en 0 iteraciones del algoritmo
genético), o que se tengan que realizar un cierto número de transiciones para
llegar a él. Como se puede ver, el primer término puede ser descartado,
reduciendo nuestra ecuación a [10]:
∑∉
==Ji
jiix tPPpJt ,0 )()(
Ejemplo 13.3.1
Consideremos las dos siguientes, sencillas, matrices de transición para
cadenas de Markov:
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 142
Y asumamos que el estado J es, en ambos casos, un estado que aglomera
todas aquellas poblaciones que contienen la solución del problema en cuestión.
Podemos argumentar que la probabilidad de encontrarse en el estado Pj en un
instante t es, para cualquiera de los dos algoritmos:
∑ ===S
tjssjt QPPpPPp ,0 )()( .
Asumamos también que las probabilidades iniciales están repartidas
indistintamente entre los dos estados. Así, nuestra probabilidad p(P0=Ps) = 0,5,
y nuestra ecuación queda reducida a:
∑==S
tjsjt QPPp ,5,0)( ;
De manera similar, al notar que la matriz Qt es, sin importar la potencia a la que
sea elevada, una matriz de probabilidad, nos es evidente que la suma de los
valores en sus filas será siempre 1. Así,
5,0)( == jt PPp
Así, en un momento dado, tenemos una probabilidad del 50% de encontrarnos
en cualquier estado en cualquiera de los dos algoritmos genéticos.
Por otro lado, si calculamos el tiempo medio de espera para llegar al estado J,
tenemos resultados bastante diferentes. Calculemos el tiempo medio del
primer paso para el estado J en la matriz Q1:
Figura 13.2
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 143
)1)(5,0(5,0 ,, JIJI tt ++= ,
lo cual nos produce un resultado de 2, y un EWT de 1. Un cálculo similar sobre
Q2 nos retorna un EWT de 2. Esto se debe básicamente a la baja probabilidad
que presenta Q2, en relación a Q1 para el paso del estado I al estado J; Si bien
es igualmente probable que ambos procesos inicien en uno u otro estado, es
mucho más fácil para un algoritmo genético que comience en I pasar a J bajo
Q1 que bajo Q2.
Es de notar que cuando existe elitismo, la probabilidad de pasar de un estado
que no contiene un óptimo a otro que sí lo contiene aumenta a causa de la
tendencia a retener los mejores resultados en cada iteración [44]. El número
de pasos para llegar a éste estado, por tanto, disminuye.
13.3.1. Definiendo una Cota
El método presentado para calcular el número esperado de iteraciones para
hallar el máximo puede darnos una luz en cuanto al tiempo que puede tomar el
desarrollo del algoritmo. No nos permite, sin embargo, tomar muchas
decisiones: El que se espere encontrar el máximo después de tx iteraciones no
nos asegura que efectivamente se encontrará, y la naturaleza probabilística del
algoritmo puede darnos una mala sorpresa a la hora de fijar un número de
iteraciones para dar la parada del algoritmo.
Es por ello que algunos investigadores [24] se han mostrado interesados no en
encontrar un tiempo promedio en el que se espera que se halla encontrado el
óptimo b*, sino un número de iteraciones en el que se puede asegurar, al
menos con cierto margen de probabilidad (δ), que se ha encontrado éste
óptimo. Para ello definiremos la función Int+(x) : ℛ →ℤ como el mínimo entero
que es mayor o igual a x, y dividiremos el problema en dos partes:
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 144
13.3.1.1. Probabilidades de Mutación Bajas
Primero asumamos que la probabilidad de mutación cumple con la siguiente
desigualdad:
11
−≥−
Kp µ
Esto es,
Kpm
11−≤
Ahora, dado un cromosoma bp tal que:
ybbH p =*),( ,
La probabilidad de que bp sea convertido tras una mutación en b* está dada
por:
L
myL
mym K
pKpp ⎟
⎠⎞
⎜⎝⎛
−≥⎟
⎠⎞
⎜⎝⎛
−−
−
11)1( ,
Entonces, la probabilidad de que no mute es a lo sumo:
L
m
Kp
⎟⎠⎞
⎜⎝⎛
−−
11
Que no depende en absoluto de y, y por tanto puede ser generalizada para
todos los cromosomas de la población. Así, teniendo en cuenta que en cada
generación se realiza n mutaciones independientes, y que tras t iteraciones el
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 145
número total de mutaciones es nt, podemos aventurar una cota inferior para pt*,
definida ésta como la probabilidad de obtener el óptimo tras t iteraciones de un
algoritmo genético:
ntL
mt K
pp ⎟
⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
−−−≥
111* ,
Sin importar lo que suceda en las fases de cruce y selección, ya que éstas
simplemente concentran el espacio de búsqueda a ciertos puntos y recombinan
el material existente, por lo que en términos de nuestra ecuación lo único que
hacen es aumentar pt*, sin modificar nuestra cota inferior.
Ahora, introduzcamos nuestra probabilidad base –la probabilidad con la que
podemos asegurar que hemos encontrado nuestro óptimo después de t1
iteraciones –supongamos:
δ≥•∃ *:11 tpNt ,
Así, tenemos:
1
111
ntLm
Kp
⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
−−−≤δ ,
Que puede ser reescrito:
⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
−−
−≥
Lm
Kpn
t
11ln
)1ln(1
δ .
Así, podemos afirmar que, bajo esta afirmación:
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 146
⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢
⎣
⎡
⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
−−
−= +
Lm
Kpn
Intt
11ln
)1ln(* δ
En ésta ecuación, t* representa el número de iteraciones necesarias para que
podemos asegurar que, con probabilidad δ, el cromosoma óptimo b* ya ha sido
encontrado (Lógicamente, para asegurar que aún permanezca en la población,
deberíamos considerar el implementar un enfoque elitista para nuestro
algoritmo). Como vemos, este término no es sólo mucho más exacto, sino
también mucho más fácil de calcular que nuestro tx calculado en el numeral
anterior.
13.3.1.2. Probabilidades de Mutación Altas
Ahora, asumamos que:
11
−≤−
Kp
p mm
Esto es,
Kpm
11−≥ ;
Ahora bien, esto nos implica una variabilidad mucho mayor en el momento de
la mutación, que puede no solo dar lugar al cromosoma óptimo sino que
también puede destruirlo si ya se ha encontrado a través del cruce. Por ello,
tendremos que dividir, de nuevo, nuestro problema en dos casos.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 147
El primer caso es aquel en que ninguno de los cromosomas después de un
cruce es equivalente a b*. Asumamos que las distancias de Hamming de cada
uno de los cromosomas al óptimo son, respectivamente, y1 y y2. Para cada uno
de los dos, su probabilidad de mutación a b* en un solo paso es:
⎟⎠⎞
⎜⎝⎛
−−≥⎟
⎠⎞
⎜⎝⎛
−− −
−
1)1(
1)1( 1
Kpp
Kpp mL
m
yLmy
m
i
i ,
Don de i puede tomar los valores 1 o 2 para representar a cada uno de los
cromosomas. Así, la probabilidad de que ninguna de las cadenas del par mute
al óptimo es, a lo sumo:
2
1
1)1(1 ⎟
⎠⎞
⎜⎝⎛
−−− −
Kpp mL
m .
Por otro lado, puede darse el caso en que exactamente un miembro del par
equivale al cromosoma óptimo (No consideramos el caso en que ambos
correspondieran a b*, porque para ello, b* ya debería existir en la generación
anterior). Para que esto sea cierto, el cromosoma óptimo debió haber sido
encontrado a través del cruce.
Supongamos que los dos miembros del par provienen del cruce de dos
cadenas cuyas respectivas distancias de Hamming a la cadena óptima son z1 y
z2, sin importar el tipo de cruce o la probabilidad del mismo. Como tras el
cruce, la distancia de Hamming de una de las cadenas al óptimo es 0, la de la
otra debe ser forzosamente igual a z1 + z2 – L ≤ L – 2. Así, la probabilidad de
que tras la mutación ninguno de los pares sea igual a b* es:
⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
−−−−−≤⎟
⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
−−−−− −
−−−+
22
22
1)1(1))1(1(
1)1(1))1(1(
21
21
Kppp
Kppp mL
mL
m
zzLmLzz
mL
m,
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 148
y como
2
122
2
1)1(1
1)1(
1)1(
21
21⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
−−−≤⎟
⎠⎞
⎜⎝⎛
−−≤⎟
⎠⎞
⎜⎝⎛
−− −
−−−+−
Kp
pKp
pKp
p mLm
zzLmLzz
mmL
m .
En cualquiera de los dos casos, tenemos que la probabilidad 1 – pt* de que tras
t iteraciones el óptimo no haya sido visto cumple con:
nt
mLmt K
ppp ⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
−−−≤− −
1)1(1*1 1 ,
con lo que, siguiendo un proceso similar al que seguimos para las
probabilidades bajas de mutación, obtenemos:
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎠⎞
⎜⎝⎛
−−−
−=
−
+
1)1(1ln
)1ln(*1
Kppn
InttmL
m
δ ;
Así, finalmente, con el fin de dar una cota inferior definitiva que nos sirva en
ambos casos, podemos aventurar, con absoluta certeza, que [24]:
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
⎟⎟
⎠
⎞
⎜⎜
⎝
⎛
⎥⎥⎦
⎤
⎢⎢⎣
⎡⎟⎠⎞
⎜⎝⎛
−−⎟
⎠⎞
⎜⎝⎛
−−
−=
−
+
1)1(,
1min1ln
)1ln(*1
Kp
pKp
n
InttmL
m
Lm
δ
Es más, asumiendo tasas de mutación pequeñas (Como es lo habitual), y
tomando las aproximaciones ln(1+x) ≈ x para valores pequeños de x, e Int+[56]
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 149
≈ x para valores grandes de x, tenemos que nuestra cota máxima para el
tiempo de espera en nuestro algoritmo genético es [24]:
( ) ( )Lm
L
npKt δ−−
=1ln1*
Greenhalgh y Marshall (2000) no sólo enunciaron el teorema expuesto
anteriormente, sino que también demostraron que no existe una cota superior
para el tiempo de convergencia de un algoritmo genético que sea menor a la
expuesta. Bajo ésta cota, asimismo, mostraron, basándose en estudios
anteriores, que la tasa de mutación que minimiza esta cota se encuentra en la
frontera:
KKpm
1−= ,
que la cota disminuye ante valores mayores de n, y que es más eficiente utilizar
alfabetos binarios, si bien se pueden obtener resultados similares a los
obtenidos con éstos, con tasas mayores de mutación.
13.4. Resultados Empíricos
13.4.1. Comportamiento de la Aptitud Promedio
En la práctica, cuando los individuos de la población inicial son distribuidos
aleatoriamente, el algoritmo genético suele comenzar con una aptitud promedio
relativamente baja, que se incrementa rápidamente a medida que el algoritmo
avanza y los individuos de las diferentes generaciones comienzan a
aglomerarse alrededor de áreas de mayor aptitud. A medida que estos
individuos comienzan a congregarse en un menor número de óptimos locales y
a desechar algunos que no permiten un mayor incremento de aptitud, en las
siguientes fases del algoritmo, la aptitud global continúa incrementándose, de
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 150
forma más lentamente cada vez, hasta que se normaliza [14], lo cual evidencia
la llegada al estado estable que mencionábamos en nuestra discusión sobre
cadenas de Markov [12].
Esto puede ser bastante lógico si damos de nuevo un vistazo a la fórmula que
obtuvimos para el incremento de aptitud:
[ ]∑∈
+ −=−ti Pb
tiit
tt bfbfn
µµ
µµ )()(11 .
Ya es claro que, obviando la tasa de mutación, tenemos que en cada nueva
generación se produce un incremento de aptitud, como ya fue mostrado
anteriormente; De la misma forma, también es fácil notar que a medida que se
produce éste incremento en la aptitud nuestro µt se hace mayor, disminuyendo
asimismo la resta f(bi) – µt; con lo cual el incremento de aptitud se hace menor
con cada generación. Aproximando éste efecto en forma infinitesimal, no nos
será difícil notar que la ecuación tiene una forma logarítmica, con lo cual
tampoco nos será difícil predecir la aptitud f(b*) del cromosoma óptimo, para lo
Figura 13.3
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 151
cual solamente requeriríamos tomar el límite de la función agregada en el
infinito.
Bajo éste resultado, podemos aventurar como posibles criterios alternativos de
parada del algoritmo genético el hallazgo de una aptitud igual o superior a
cierta proporción de ésta f(b*) calculada a priori:
*)(min bcff = , para c cercanos a, pero menores que, 1,
o el punto en que el incremento de aptitud se haga menor que un ε infinitesimal
determinado a priori por el usuario, tal que el algoritmo se detenga cuando:
εµµ ≤−+ tt 1
13.4.2. Distancia de Hamming
De forma similar a la función de aptitud, la distancia promedio de Hamming,
tanto en el grado de convergencia como en el grado de agrupación, suele
iniciar en un valor relativamente predecible –que suele ser cercano a L/2
cuando la población se elige aleatoriamente, como se vio en capítulos
anteriores –, que disminuye rápidamente a medida que la población se agrupa
alrededor de un individuo de alta aptitud, y vuelve a incrementarse cuando la
población vuelve a explorar el espacio de búsqueda [19]. Eventualmente, la
función converge hacia un valor mínimo (Diferente de 0 a menos que el
algoritmo permita una pérdida total de la diversidad genética), con las
diferentes oscilaciones afectando cada vez menos el resultado final.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 152
Figura 13.4
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 153
14. Implementación de un Algoritmo Genético en Java
Después de haber analizado a lo largo de los capítulos anteriores los diferentes
elementos que componen un Algoritmo Genético, llega la hora de crear una
propuesta para su implementación. Para ello, y con el fin de mantener la
implementación del algoritmo en la forma más sencilla posible, nos
concentraremos en los paradigmas de la programación orientada por objetos y,
en particular, en el lenguaje de programación JAVA (Aunque bajo los
parámetros señalados a continuación, no debe ser muy difícil trasladar la
implementación a cualquier otro lenguaje de programación orientado por
objetos).
En el capítulo siguiente nos centraremos en el análisis y el diseño de una
aplicación que permita explorar los temas tratados a lo largo de éste
documento, así como en una serie de pautas para que la implementación de la
misma sea mejor y más eficiente. Esta implementación la dejamos, sin
embargo, en manos del lector, esperando que a continuación encuentre todos
los elementos necesarios para llevar a cabo su labor.
El diseño planteado en este capítulo pretende específicamente ser sencillo y
fácil de usar, así como aplicable a una gran gama de problemas. Para el lector
curioso, sin embargo, recomendamos referirse al proyecto JGAP (Java Genetic
Algorithm Project, cuya base en Internet puede encontrarse en la dirección
http://jgap.soulforge.net), de una completitud asombrosa –si bien bastante
diferente a la propuesta presentada a continuación –, que puede ver con
buenos ojos cualquier aporte del lector.
14.1. Análisis de Requerimientos
Para adentrarnos en lo que un proyecto como el que queremos realizar
necesitaría, tenemos primero que hacer un análisis de lo que pretendemos –y
no pretendemos –alcanzar. Para ello comenzaremos por plantear el alcance
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 154
del problema, para luego centrarnos en lo que queremos implementar, que
describiremos paso a paso a continuación.
14.1.1. Planteamiento General y Dominio del Problema
Nuestra implementación pretende ser sencilla, por un lado, si bien por otro lado
pretende mostrar las diferentes variaciones presentadas a lo largo de éste
trabajo. Se pretende entonces mantener la simplicidad, pero hacer que una
gran parte de las características del algoritmo sea configurable. Para ello,
entonces, haremos una revisión de cada uno de los pasos del algoritmo, para
determinar su alcance:
14.1.1.1. Codificación
La mayor parte de las implementaciones de algoritmos genéticos disponibles
en la red (ver JGAP) divide los cromosomas en genes, que pueden ser
implementados como bits, enteros, cadenas de caracteres, reales, etc. En este
caso, sin embargo, nos centraremos en los cromosomas que, al igual que los
desarrollados por los pioneros en la investigación en éste campo, tendrán un
alfabeto binario; No porque sea lo más eficiente –como hemos visto a lo largo
de los capítulos anteriores, puede o no serlo, dependiendo de la interpretación
–, sino porque es mucho más fácilmente adaptable a cualquier problema en
particular.
Esto nos lleva a un nuevo punto: Queremos que nuestro algoritmo sea capaz
de resolver más de un problema, y que no se centre simplemente en dar
soluciones aproximadas a un único problema general que depende de una
serie de parámetros particulares, o que deje la implementación de la función de
aptitud en manos del usuario (Quien no debería tener que saber de
programación). Así, no podemos trabajar con un criterio único de optimización,
sino que debemos ser capaces de modificar éste criterio en cualquier
momento, para una nueva ejecución.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 155
Para garantizar esto, debemos contar con una función de aptitud editable, que
nos permita adaptar nuestro algoritmo genético general a nuestro problema
particular de optimización; Con esto, si bien dejamos la cuestión de la
codificación en manos del usuario, sí le damos herramientas para que pueda
adaptar el algoritmo base al problema que quiere resolver, en la forma que le
parezca más apropiada. Recordemos que uno de los puntos más importantes
de un algoritmo genético es la codificación del problema en cuestión.
En principio, ignoraremos ciertos elementos alternativos como la diploidía y los
cromosomas de tamaño variable. La incorporación de éstos elementos, así
como el uso de alfabetos alternativos, tendrían importantes repercusiones en la
implementación de la clase Chromosome; en particular en sus métodos de
cruce, de evaluación, y la forma de ingresar la función de aptitud.
14.1.2. Evaluación
Al igual que la función de evaluación, el método de escalamiento de aptitud
debe ser susceptible de ser elegido entre las diferentes opciones mencionadas
en el capítulo 7 (Es decir: Escalamiento base, por ventanas, Exponencial,
Sigma, Transformación Lineal Normalización Lineal)
14.1.3. Selección
La selección debe poder hacerse por torneo o por rueda de la fortuna, según
los deseos del usuario; quien también debe tener la potestad de determinar la
cantidad de participantes del torneo en caso que elija esta opción. La decisión
de si se implementa o no elitismo también queda en manos del usuario.
14.1.4. Cruce
Como en el caso de la evaluación y la selección, en el cruce se deben poder
configurar una cierta serie de parámetros. En particular, debe ser posible
escoger entre el cruce normal con reemplazo total, con reemplazo parcial, y el
cruce de estado estable. Con el fin de mantener sencillo el proceso de
implementación, se ha optado por no incluir el cruce restringido en éste
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 156
modelo. Por otro lado, el usuario debe estar en capacidad de escoger la
probabilidad de cruce, que es uno de los parámetros principales de un
algoritmo genético, como ya lo hemos visto en capítulos anteriores.
14.1.5. Mutación
Como la probabilidad de cruce, la probabilidad de mutación debe poder ser
escogida por el usuario, quien debe poder incluso fijarla en 0 si desea un
algoritmo evolutivo sin mutación. De forma similar, el usuario debe poder
escoger restringirse a la mutación y dejar el cruce de lado, optando por una
solución de evolución inocente como se mostró en el capítulo correspondiente.
En todo caso, con el fin de optimizar el algoritmo y simplificar la
implementación, la única técnica de mutación que se empleará será la
mutación multibit.
14.1.6. Otros Parámetros
Otros criterios que deben ser susceptibles de configuración por parte del
usuario (Y que son claves para el desarrollo del algoritmo) son el tamaño de la
población, y el criterio de parada, que debe ser elegido de una lista que
enuncia todas las posibilidades mencionadas en el capítulo 12: Número de
Generaciones, número de cromosomas nuevos, aptitud mínima del cromosoma
de mayor aptitud, o nivel de convergencia, medido en porcentaje de
equivalencia de la población, o distancia promedio de hamming entre los
diferentes individuos.
14.1.2. Usuarios
Sólo se requerirá de la aplicación el reconocimiento de un tipo de usuario, que
estará encargado de todo el proceso de configuración y ejecución del
algoritmo.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 157
14.1.3. Casos de Uso
Dentro de aquello que el usuario debe
estar en capacidad de hacer, encontramos
sólo tres puntos realmente importantes, si
bien uno de los cuales (la inicialización)
puede ser dividido en un sinnúmero de
pequeños casos de uso cuya inclusión en
éste punto es irrelevante. A la izquierda se
presenta un diagrama simple de casos de
uso en el que, como vemos, la idea es bastante sencilla. A continuación
haremos una breve descripción de cada uno de estos casos de uso.
Identificador: JGFw-IUC Nombre: Inicialización
Descripción:
El Usuario elige todos los parámetros bajo los cuales se ejecutará el algoritmo
genético.
Actores: Usuario Frecuencia: Una vez por ejecución.
Objetivo:
Inicializar las variables para la ejecución del Algoritmo genético.
Condiciones:
PRE: Todas las variables del algoritmo genético se encuentran en valores pre-
determinados.
POST: Las variables del algoritmo genético que el usuario haya elegido han
cambiado a los valores determinados por éste.
Figura 14.1
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 158
Flujo de Eventos:
Flujo Básico:
• El usuario elige el tamaño de la población (Por defecto: 30)
• El usuario elige un método de escalamiento de aptitud (Por defecto: Sin
escalamiento)
• El usuario elige un método de Selección (Por defecto: Rueda de la
Fortuna)
• El usuario elige si desea o no permitir el elitismo (Por defecto: No)
• El usuario elige la probabilidad de cruce (Por defecto: 0.9)
• El usuario elige la probabilidad de mutación (Por defecto: 0.1)
• El usuario elige una técnica de cruce (Por defecto: Básico)
• El usuario elige un modo de reemplazo (Por defecto: Reemplazo total)
• El usuario elige un criterio de parada (Por defecto: 30 generaciones)
• Para cada paso, los valores son almacenados en memoria.
Flujos Alternativos:
• El usuario sigue estos pasos en desorden.
• El usuario no realiza uno de estos pasos, en cuyo caso permanece el
valor por defecto.
Requerimientos Especiales:
Validación de Datos:
• El tamaño de la población debe ser mayor a 10 y menor a 100.
• Las probabilidades de cruce y mutación deben estar entre 0 y 1.
• Las demás variables deben encontrarse dentro de las opciones dadas.
Identificador: JGFw-CUC Nombre: Codificación
Descripción:
El Usuario especifica la función de aptitud.
Actores: Usuario Frecuencia: Una vez por ejecución.
Objetivo:
Especificar la función de aptitud con la que serán evaluados los cromosomas.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 159
Condiciones:
PRE: TRUE.
POST: Se ha almacenado la función de aptitud.
Flujo de Eventos:
Flujo Básico:
• El usuario ingresa la función de aptitud.
• La función es almacenada para su uso posterior.
Requerimientos Especiales:
Validación de Datos:
• La función de aptitud debe seguir ciertas normas gramaticales (Ver
Consideraciones Especiales, más adelante).
Identificador: JGFw-EUC Nombre: Ejecución
Descripción:
Ejecución del Algoritmo.
Actores: Usuario Frecuencia: Una vez por ejecución.
Objetivo:
Obtener el resultado del algoritmo genético.
Condiciones:
PRE: La función de aptitud se encuentra especificada.
POST: El programa retorna la solución del problema, de acuerdo a la
especificación dada por el usuario en la especificación.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 160
Flujo de Eventos:
Flujo Básico:
• El programa crea una población, en forma aleatoria.
• Cada cromosoma calcula su aptitud.
• Mientras no se ha cumplido el criterio de parada especificado:
o Se seleccionan los cromosomas padres.
o Los cromosomas padres son cruzados.
o Los cromosomas resultantes son mutados.
o De acuerdo a los criterios de reemplazo, los cromosomas hijos
reemplazan a sus padres.
o Los cromosomas son evaluados.
Requerimientos Especiales:
Ninguno.
14.1.4. Requerimientos
14.1.4.1. Funcionales
Una vez mencionados los casos de uso, debemos dividirlos en sus partes para
determinar lo que debe –y no debe –hacer el sistema. Así, dividimos los casos
de uso en:
• Inicialización:
o Configuración Base:
Ingresar Tamaño de la Población.
Ingresar Criterio de Parada.
o Evaluación:
Elegir Método de Escalamiento de Aptitud.
o Selección:
Elegir Método de Selección.
Seleccionar Modo Elitista.
o Cruce:
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 161
Elegir Probabilidad de Cruce
Elegir Técnica de Cruce
Elegir Método de Reemplazo
o Mutación:
Elegir Probabilidad de Mutación.
• Codificación:
Ingresar Función de Aptitud.
• Ejecución:
o Evaluar.
o Escalar Población.
o Seleccionar.
o Cruzar.
o Mutar.
Identificador: JGFw-IBR1 (PS) Nombre: Ingresar Tamaño de Población
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
Crítico: Sí
Prioridad de
Desarrollo:
2
Actores:
Usuario
Documentos de visualización Asociados:
Entrada: Entero Salida: Ninguna
Descripción:
PRE: Se ha ingresado el tamaño de la población, como un número entero.
POS: Se han almacenado los cambios en memoria.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Verificación del ingreso correcto de los datos.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 162
Identificador: JGFw-IBR2 (SC) Nombre: Ingresar Criterio de Parada
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
Crítico: Sí
Prioridad de
Desarrollo:
2
Actores:
Usuario
Documentos de visualización Asociados:
Entrada: Entero, y un número que
puede ser entero o doble
dependiendo de éste
Salida: Ninguna
Descripción:
PRE: Se ha ingresado el criterio de parada (0 – Número de Generaciones, 1 –
Número de Cromosomas nuevos explorados, 2 – Aptitud Mínima, 3 – Porcentaje de
Convergencia, 4 – Distancia Promedio de Hamming, 5 – Aptitud Mínima
Proporcional a la primera generación, 6 – Incremento de Aptitud), y un número
entero o doble que especifica el valor dado para el criterio especificado.
POS: Se han almacenado los cambios en memoria.
Manejo de Situaciones Anormales:
• Se ha especificado un número de generaciones inferior a 1.
• Se ha especificado un número de cromosomas inferior al tamaño de la
población.
• Se ha especificado una aptitud mínima negativa.
• Se ha especificado un porcentaje de convergencia menor a 0 o mayor a 100
• Se ha especificado una distancia promedio de hamming inferior a 0 o
superior al tamaño de los cromosomas.
En cualquiera de estos casos, se indicará el error y se solicitará de nuevo la
información.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 163
Criterios de Aceptación:
Verificación del ingreso correcto de los datos.
Identificador: JGFw-IQR Nombre: Elegir Método de Escalamiento de
Aptitud
Tipo: Opcional Requerimiento que lo
Utiliza o Especializa:
Crítico: No
Prioridad de
Desarrollo:
3
Actores:
Usuario
Documentos de visualización Asociados:
Entrada: Opción (Índice entero).
Opcional: Dos números flotantes de
precisión doble.
Salida: Ninguna
Descripción:
PRE: Se ha escogido un método de escalamiento de una lista. La opción escogida
es un número entero entre 0 y 6 (1 – Básico, 2 – Por ventanas, 3 – Exponencial, 4 –
Sigma, 5 – Transformación Lineal, 6 – Normalización Lineal, 7 - Ninguno). En caso
de haber escogido Escalamiento Exponencial o Transformación Lineal, también se
han ingresado los datos necesarios para los cálculos (uno o dos números flotantes,
respectivamente)
POS: Se han almacenado los cambios en memoria.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Ninguno.
Identificador: JGFw-ISR1 (SM) Nombre: Elegir Método de Selección
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 164
Tipo: Opcional Requerimiento que lo
Utiliza o Especializa:
Crítico: No
Prioridad de
Desarrollo:
3
Actores:
Usuario
Documentos de visualización Asociados:
Entrada: Opción (Booleana).
Opcional: Un número entero.
Salida: Ninguna.
Descripción:
PRE: Se ha escogido un método de selección, como un índice booleano que indica
si se realizará o no la selección por torneo. En caso afirmativo, también se ha
ingresado el número de participantes por cada torneo; En caso negativo, se aplicará
la rueda de la fortuna.
POS: Se han almacenado los cambios en memoria.
Manejo de Situaciones Anormales:
Si se ha escogido una selección por torneo con un número de candidatos mayor al
tamaño de la población menos uno, se informará del error, y se solicitarán de nuevo
los datos.
Criterios de Aceptación:
El número de candidatos, si se eligió selección por torneo, es menor en uno al
tamaño de la población.
Identificador: JGFw-ISR2 (ES) Nombre: Seleccionar Modo Elitista
Tipo: Opcional Requerimiento que lo Utiliza o Especializa:
Crítico: No
Prioridad de
Desarrollo:
3
Actores:
Usuario
Documentos de visualización Asociados:
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 165
Entrada: Opción (Booleana). Salida: Ninguna.
Descripción:
PRE: Se ha escogido un método de selección, como un índice booleano que indica
si existirá o no elitismo en el proceso del algoritmo.
POS: Se han almacenado los cambios en memoria.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Ninguno.
Identificador: JGFw-ICR1 (CP) Nombre: Elegir Probabilidad de Cruce
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
Crítico: Sí
Prioridad de
Desarrollo:
2
Actores:
Usuario
Documentos de visualización Asociados:
Entrada: Un número flotante de
precisión doble.
Salida: Ninguna.
Descripción:
PRE: Se ha escogido una probabilidad de cruce, que es ingresado al sistema como
un número flotante entre 0 y 1.
POS: Se han almacenado los cambios en memoria.
Manejo de Situaciones Anormales:
Si se ha elegido un número menor a 0 o mayor a 1, el sistema informa del error y
pide el reingreso de los datos.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 166
Criterios de Aceptación:
El número de entrada está entre 0 y 1.
Identificador: JGFw-ICR2 (CT) Nombre: Elegir Técnica de Cruce
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
Crítico: Sí
Prioridad de
Desarrollo:
2
Actores:
Usuario
Documentos de visualización Asociados:
Entrada: Opción (Booleana).
Opcional: Un número entero.
Salida: Ninguna.
Descripción:
PRE: Se ha escogido un método de selección, como un índice booleano que indica
si se realizará o no un cruce por puntos. En caso afirmativo, también se ha
ingresado el número de puntos en que se realizará el cruce; En caso negativo, se
aplicará la rueda de la fortuna.
POS: Se han almacenado los cambios en memoria.
Manejo de Situaciones Anormales:
Si se ha escogido un número de puntos mayor al tamaño del cromosoma menos
uno, se informará del error y se solicitarán de nuevo los datos.
Criterios de Aceptación:
El número de puntos elegido es menor en uno al tamaño del cromosoma.
Identificador: JGFw-ICR3 (RM) Nombre: Elegir Método de Reemplazo
Tipo: Opcional Requerimiento que lo
Utiliza o Especializa:
Crítico: No
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 167
Prioridad de
Desarrollo:
3
Actores:
Usuario
Documentos de visualización
Asociados:
Entrada: Opción (Entero). Salida: Ninguna.
Descripción:
PRE: Se ha escogido un método de selección de una lista. La opción escogida es
un número entero entre 0 y 2 (0 – Reemplazo Total, 1 – Estado Estable, 2 –
Reemplazo Parcial)
POS: Se han almacenado los cambios en memoria.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Ninguno.
Identificador: JGFw-IMR Nombre: Elegir Probabilidad de Mutación
Tipo: Necesario Requerimiento que lo
Utiliza o Especializa:
Crítico: Sí
Prioridad de
Desarrollo:
2
Actores:
Usuario
Documentos de visualización Asociados:
Entrada: Un número flotante de
doble precisión.
Salida: Ninguna.
Descripción:
PRE: Se ha escogido una probabilidad de mutación, que es ingresada al sistema
como un número flotante entre 0 y 1.
POS: Se han almacenado los cambios en memoria.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 168
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Ninguno.
Identificador: JGFw-CR Nombre: Ingresar Función de Aptitud
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
Crítico: Sí
Prioridad de
Desarrollo:
1
Actores:
Usuario
Documentos de visualización Asociados:
Entrada: Fórmula (Cadena de
Caracteres)
Salida: Resultado de Éxito o no-Éxito
Descripción:
PRE: Se ha ingresado una función en forma de una cadena de caracteres
POS: La función ha sido almacenada para su uso posterior.
Manejo de Situaciones Anormales:
El formato de la función no es entendible para la máquina: Se solicita de nuevo el
ingreso de la función, dejando como base lo anteriormente ingresado por el usuario.
Criterios de Aceptación:
Verificación del ingreso correcto de los datos.
Identificador: JGFw-EBR Nombre: Ejecutar
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
Crítico: Sí
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 169
Prioridad de
Desarrollo:
1
Actores:
Usuario
Documentos de visualización
Asociados:
Entrada: Ninguno Salida: Parámetros óptimos para el
problema en cuestión, que constituyen la
solución presentada por el algoritmo
genético.
Descripción:
PRE: Se ha inicializado el algoritmo genético (Es decir, se ha ingresado la función
de aptitud; Los demás parámetros han sido modificados o se encuentran en valores
por defecto).
POS: Se han ejecutado el algoritmo genético.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Ninguno.
Identificador: JGFw-EQR1 (EE) Nombre: Evaluar
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
JGFw-EBR, JGFw-ESR
Crítico: Sí
Prioridad de
Desarrollo:
1
Actores:
Sistema
Documentos de visualización Asociados:
Entrada: Individuo, Función de
Aptitud.
Salida: Aptitud del Individuo (Número
flotante de precisión doble)
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 170
Descripción:
PRE: El individuo es un cromosoma de la población, la función de aptitud es válida.
POS: El sistema retorna la aptitud del individuo, de acuerdo a la función de aptitud
dada.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Ninguno.
Identificador: JGFw-EQR2
(QS)
Nombre: Escalar Población
Tipo: Opcional Requerimiento que lo Utiliza o Especializa:
JGFw-EBR
Crítico: No
Prioridad de
Desarrollo:
3
Actores:
Sistema
Documentos de visualización Asociados:
Entrada: Población de Individuos,
Método de Escalamiento (Entero).
Salida: Población de Individuos
Descripción:
PRE: La población es válida. El Método de escalamiento es un entero entre 0 y 6.
POS: La aptitud de cada uno de los individuos de la población ha sido modificada
según el método de escalamiento escogido.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 171
Criterios de Aceptación:
Ninguno.
Identificador: JGFw-ESR Nombre: Seleccionar
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
JGFw-EBR, JGFw-ECR
Crítico: Sí
Prioridad de
Desarrollo:
1
Actores:
Sistema
Documentos de visualización Asociados:
Entrada: Población de Individuos,
método de selección.
Salida: Individuo.
Descripción:
PRE: La población de individuos es válida. El método de selección es un índice
booleano y, alternativamente, un entero (ver requerimiento JGFW-SIM).
POS: El individuo es un miembro de la población, elegido estocásticamente según
su aptitud, o por torneo.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Ninguno.
Identificador: JGFw-ECR Nombre: Cruzar
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
JGFw-EBR
Crítico: Sí
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 172
Prioridad de
Desarrollo:
1
Actores:
Sistema
Documentos de visualización
Asociados:
Entrada: Dos individuos, una
probabilidad de cruce, una técnica de
cruce.
Salida: Ninguna
Descripción:
PRE: Los individuos son cromosomas válidos, la probabilidad de cruce es un
número flotante de doble precisión, la técnica de cruce está compuesta por un
índice booleano y, opcionalmente, dos enteros (ver requerimiento JGFw-CIT)
POS: Se han almacenado los cambios en memoria.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Ninguno.
Identificador: JGFw-EMR Nombre: Mutar
Tipo: Necesario Requerimiento que lo Utiliza o Especializa:
JGFw-EBR
Crítico: Sí
Prioridad de
Desarrollo:
1
Actores:
Sistema
Documentos de visualización Asociados:
Entrada: Un cromosoma, una
probabilidad de mutación p (Número
flotante de doble precisión), un
tamaño de la población n (Entero).
Salida: Ninguna.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 173
Descripción:
PRE: La probabilidad de mutación es un número flotante entre 0 y 1.
POS: Se ha modificado el cromosoma, cambiando k bits según una Variable
Aleatoria de Poisson con media np.
Manejo de Situaciones Anormales:
No hay situaciones anormales.
Criterios de Aceptación:
Ninguno.
14.1.4.2. No Funcionales
No se harán asunciones acerca de la interfaz, del software o hardware,
ambientales, físicas, etc. De hecho, sólo se tendrán los siguientes
requerimientos no funcionales:
• El sistema cuenta con una Máquina Virtual de Java (U, opcionalmente,
con un ambiente de ejecución de programas del lenguaje de
programación que el desarrollador escoja).
• El sistema cuenta con una interfaz que le permita al usuario interactuar
con el programa.
• El usuario tiene unos conocimientos matemáticos básicos que le
permiten diseñar la función de aptitud a partir de unos principios
sencillos, y se encuentra familiarizado con la gramática para el ingreso
de funciones del programa (Como quiera que esta sea implementada.
Ver Consideraciones Adicionales, más adelante).
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 174
14.2. Diseño de Aplicación
Una vez teniendo en claro lo que se desea alcanzar en la etapa de desarrollo,
debemos proceder a analizar cómo cumplir éstos requerimientos. Para ello,
proponemos el siguiente diseño básico.
14.2.1. Diseño Estático
Como un primer paso, debemos hacer un diseño preliminar de las clases, y
cómo éstas van a estar distribuidas en la aplicación; Es decir, cómo van a ser
las dependencias,
14.2.1.1. Diagrama de Clases
El diagrama que se muestra a continuación no pretende ser completo ni
detallado; Sólo pretende dar al lector una idea de la estructura que tendría la
aplicación. Las clases que se muestran en el diagrama son las siguientes:
• GA: La clase fachada para el framework de Algoritmos Genéticos,
contiene todos los métodos susceptibles de ser invocados por el usuario
a través de la interfaz.
• Environment: Contiene todas las opciones de configuración del algoritmo
genético, como son probabilidad de cruce, de mutación, implementación
de elitismo, función de aptitud, método de escalamiento, de selección,
de reemplazo y criterio de parada.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 175
• Population: Contiene la población de la generación actual.
• Nest: Clase utilitaria que proporciona un “nido” en el cual se producirá el
cruce de los cromosomas.
• Chromosome: Cada uno de los cromosomas de la población.
De forma similar, se indica una serie de interfaces, que especifican las
opciones de configuración y pueden ser implementadas de diferentes maneras:
• ReplacementMethod (Método de Reemplazo): Algunas de sus
implementaciones pueden ser TotalReplacement (La nueva generación
reemplaza completamente a la generación anterior), PartialReplacement
(El miembro de mayor aptitud de cada cruce reemplaza al padre de
Figura 14.2
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 176
menor aptitud) o StableState (Los nuevos miembros reemplazan a los
cromosomas de menor aptitud de la población).
• ScalingMethod determina el método de escalamiento de aptitud, que
puede ser, entre otros, BasicScaling (Escalamiento básico), Windowing
(Por ventanas), ExponentialScaling (Escalamiento exponencial),
SigmaScaling (Escalamiento sigma), LinearTransformation
(Transformación lineal) o LinearNormalization (Normalización lineal).
Para mayor información sobre métodos de escalamiento, consulte el
capítulo 7.
• Selector determina el método de selección de cromosomas de una
población. El desarrollador puede escoger entre TournamentSelector
(Selección por torneo), FortuneWheelSelector (Rueda de la Fortuna), o
alguno de su predilección. Para más información sobre métodos de
selección, consulte el capítulo 8.
• StopCriterium señala el criterio de parada del algoritmo genético. Entre
otras implementaciones, el desarrollador puede escoger entre
NumberOfIterations (Número de iteraciones), NumberOfChromosomes
(Número de cromosomas), MinimumFitness (Aptitud Mínima),
ConvergenceRate (Tasa de convergencia), HammingDistance (Distancia
de Hamming), ProportionalFitness (Aptitud en proporción a la primera
generación), FitnessIncrement (Incremento en aptitud). Para más
información sobre criterios de parada, consulte los capítulos 11 y 13.
• Evaluator determina la función de evaluación de aptitud que rige el
algoritmo genético.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 177
14.2.1.2. Diseño Detallado de Clases
Después de haber mostrado los diagramas de interdependencia de las clases
que componen el framework de algoritmos genéticos, demos una ojeada a su
estructura interna, y a los atributos y métodos más importantes que contienen:
GA
Environment environment
Population population
int getCrossoverPoints ()
double getCrossoverProbability ()
Evaluator getEvaluator ()
double getMutationProbability ()
boolean getPointCrossover ()
int getPopulationSize ()
ReplacementMethod getReplacementMethod ()
ScalingMethod getScalingMethod ()
Selector getSelector ()
StopCriterium getStopCriterium () boolean isElitist ()
Chromosome run ()
void setCrossoverPoints (int cp)
void setCrossoverProbability (double p)
void setElitistMode (boolean e)
void setEvaluator (Evaluator e)
void setMutationProbability (double p)
void setPointCrossover (boolean pc)
void setPopulationSize (int n)
void setReplacementMethod (ReplacementMethod rm)
void setScalingMethod (ScalingMethod sm)
void setSelector (Selector s)
void setStopCriterium (StopCriterium sc)
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 178
La clase GA es la fachada del algoritmo genético, y por tanto contiene todos los
métodos de configuración y de verificación del mismo. Obviamente, el método
más importante de la clase es el método run, que inicia el proceso iterativo que
es en sí el algoritmo genético.
Population
Chromosome [] chromosomes
int chromosomeSize
int currentGeneration
double [] fitnesses
int size
boolean checkStopCriterium (StopCriterium sc)
void evaluate (Evaluator e)
Chromosome getChromosome (int i)
Chromosome [] getChromosomes ()
int getChromosomeSize ()
int getCurrentGeneration ()
double getFitness (int i)
double [] getFitnesses ()
int getSize ()
void mutate (double probability)
void replace (Nest n, ReplacementMethod rm)
void scaleFitnesses (ScalingMethod sm)
void setChromosome (int i, Chromosome c)
void setChromosomes (Chromosome [] c)
void setFitnesses (double [] fitnesses)
Chromosome select (Selector s)
void setChromosomeSize (int l)
void setSize (int n)
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 179
La clase Population implementa la población, y por es por tanto poco más que
una contenedora de cromosomas. Sin embargo, es a través suyo que la lógica
del algoritmo genético se comunica con cada uno de los cromosomas que
contiene. Es de anotar que la población conoce la aptitud de cada uno de sus
cromosomas, con el fin de no alterar su información ante escalamientos de
aptitud y otros métodos similares.
Environment
int crossoverPoints
double crossoverProbability
boolean elitist
Evaluator evaluator
double mutationProbability
Nest [] nests
boolean pointCrossover
ReplacementMethod replacementMethod
ScalingMethod scalingMethod
Selector selector
StopCriterium stopCriterium
void cross ()
int getCrossoverPoints ()
double getCrossoverProbability ()
Evaluator getEvaluator ()
double getMutationProbability ()
Nest getNest (int i)
Nest [] getNests ()
boolean getPointCrossover ()
ReplacementMethod getReplacementMethod ()
ScalingMethod getScalingMethod ()
Selector getSelector ()
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 180
StopCriterium getStopCriterium ()
boolean isElitist ()
void select (Population p)
void setCrossoverPoints (int cp)
void setCrossoverProbability (double p)
void setElitistMode (boolean e)
void setEvaluator (Evaluator e)
void setMutationProbability (double p)
void setPointCrossover (boolean pc)
void setReplacementMethod (ReplacementMethod rm)
void setScalingMethod (ScalingMethod sm)
void setSelector (Selector s)
void setStopCriterium (StopCriterium sc)
La clase Environment no solo contiene todas y cada una de las opciones de
configuración del algoritmo genético, sino que también da un espacio para el
cruce de los cromosomas, en forma de los nidos.
Chromosome
double fitness
double evaluate (Evaluator e)
BitSet getBitSet ()
double getFitness ()
double mutate (double probability)
double mutate (int points)
BitSet setBitSet (BitSet bs)
Bajo nuestra propuesta, un cromosoma no es más que una secuencia de bits
susceptible de ser evaluada, cruzada y mutada; Por cuestiones de simplicidad,
y de ahorro de memoria, sugerimos implantarlo a través de un BitSet. El lector
inquieto podrá interesarse en plantear soluciones diferentes para la
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 181
implantación de un cromosoma, como pueden ser, por ejemplo, los
cromosomas compuestos de Genes (Otra clase), que podrían ser enteros,
dobles, cadenas, etc. Sugerimos, asimismo, implementar la mutación a través
de una variable aleatoria de Poisson, como fue presentada en el capítulo 10;
Bajo éste parámetro, el método de mutación requeriría solamente del número
de puntos en que se produce ésta mutación.
Nest
Chromosome father
int fatherIndex
Chromosome mother
int motherIndex
void cross ()
BitSet generateMask ()
int getFatherIndex ()
Chromosome getFirstChild ()
int getMotherIndex ()
Chromosome getSecondChild ()
void insertFather (Chromosome c, int index)
void insertMother (Chromosome c, int index)
Un nido es simplemente un espacio para el cruce de cromosomas, y lo único
que sabe hacer es cruzar dos cromosomas, a partir de una máscara aleatoria
determinada por las características del problema en cuestión (Uniforme o por
puntos).
Evaluator
double evaluate (Chromosome c)
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 182
Las clases que implementen la interfaz Evaluator deben ser capaces de
implementar el método evaluate que, dado un cromosoma, retorna un número
flotante de doble precisión que indica su aptitud para el problema en cuestión.
Más adelante trataremos en profundidad los problemas que plantea la
existencia de ésta interfaz.
ReplacementMethod
void replace (Nest n, Population p)
La interfaz ReplacementMethod contiene únicamente el método replace que,
dado un par de cromosomas (En un nido), y una población, inserta los primeros
en ésta otra de acuerdo a unos parámetros predeterminados, que dependen de
la implementación en sí. Hacia el final de éste capítulo se enuncia una
implementación de la clase ReplacementMethod para el reemplazo total.
ScalingMethod
void scale (Population p)
La interfaz ScalingMethod contiene el método scale, que opera sobre una
población, escalando el vector de aptitudes de acuerdo a su implementación
específica. Al final de éste capítulo se enunciará una implementación de la
clase ScalingMethod para la normalización lineal.
Selector
Chromosome select (Population p)
Las clases que implementen la interfaz Selector deben implementar el método
select que, dada una población, retorna un cromosoma elegido en forma
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 183
heurística de acuerdo a la implementación particular. Más adelante se
enunciará una implementación de Selector para el método de selección de la
Rueda de la Fortuna.
StopCriterium
boolean check (Population p)
La interfaz StopCriterium contiene el método check, que debe ser
implementado por el lector, y que retorna un indicador de si se ha cumplido el
criterio de parada especificado, dada una población. Hacia el final de éste
capítulo se enunciará una implementación de StopCriterium para una parada
por número de iteraciones.
14.2.2. Diseño Dinámico
Para continuar con el diseño, es necesario examinar la secuencia de ejecución
de cada uno de los procesos del algoritmo. Algunos de éstos, descritos ya en
la parte de requerimientos funcionales, deberían ser bastante intuitivos para el
programador; Por ello nos concentraremos solamente en aquellos procesos
que son claves para el éxito del algoritmo y que presentan algún tipo de
dificultad conceptual, como son:
14.2.2.1. Evaluación
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 184
El proceso de evaluación de los cromosomas es relativamente simple: Cada
uno de los miembros de la población es evaluado de acuerdo a los parámetros
definidos en la clase que implementa la interfaz Evaluator, que es requerida por
la clase controladora y enviada a cada uno de los cromosomas para su
autoevaluación.
Ahora, la dificultad reside en la implementación de ésta interfaz, pero esta
dificultad será tratada más adelante.
14.2.1.2. Selección
Figura 14.3
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 185
El proceso de selección es un poco más complicado, ya que se deben crear
una serie de “nidos” en los cuales debe insertarse una copia de los
cromosomas insertados. Para ello, se envía a la clase Environment una
referencia a la población, que será pasada a su vez a la clase que implementa
la interfaz Selector, cuyo método “select” retornará un cromosoma de la
población actual, que será insertado en cada uno de los nidos como padre o
madre.
14.2.1.2. Cruce
Figura 14.4
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 186
Una vez los cromosomas se encuentran en los nidos, cada uno de estos nidos
se encargará del cruce, generando una máscara aleatoria dependiendo del tipo
de cruce, y aplicándola al material genético de sus cromosomas a través del
cruce aritmético-lógico que definimos en el capítulo 9, que nos permite
implementar todas las posibles formas de cruce, de una forma bastante más
eficiente de lo que resultaría de otra forma.
14.2.1.2. Reemplazo
Figura 14.5
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 187
El reemplazo es un poco más complejo, ya que depende de tres factores (Los
resultados del cruce, la población actual, y el método de reemplazo definido por
el usuario), y la interacción presentada puede no ser muy intuitiva: La idea es,
como primer punto, obtener el método de reemplazo, para luego enviarlo, junto
con cada uno de los nidos, a la población. La población invocará a su vez el
método replace de la clase que implementa la interfaz replacementMethod, con
lo cual, si éste método se encuentra bien implementado, la población debería
ser modificada según el método de reemplazo escogido por el usuario.
14.2.1.2. Mutación
Figura 14.6
Figura 14.7
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 188
La mutación es, de nuevo, bastante sencilla… Una vez se ha determinado la
probabilidad de mutación, ésta es pasada a cada uno de los cromosomas, para
que realice los procesos de mutación a su interior.
14.3. Sugerencias de Implementación
A continuación presentamos, como modelos para su desarrollo, una serie de
sugerencias para implantar algunas de las interfaces presentadas en éste
capítulo. Algunas de ellas asumen que los cromosomas se encuentran
implementados como una extensión de la clase BitSet.
14.3.1. Clase TotalReplacement
El Reemplazo Total es el método de reemplazo más común, y por tanto es el
que hemos escogido para ser implementado. La idea básica es que los dos
hijos obtenidos tras un cruce son reinsertados a la población en las posiciones
que originalmente pertenecían a sus padres, así:
Class TotalReplacement implements ReplacementMethod {
void replace (Nest n, Population p) {
p.setChromosome (n.getFatherIndex(), n.getFirstChild());
p.setChromosome (n.getMotherIndex(), n.getSecondChild());
}
}
14.3.2. Clase LinearNormalization
La normalización lineal ha sido escogida no porque sea más común que los
otros métodos de escalamiento, sino porque, en la práctica, resulta ser muy
eficiente. A continuación se muestra una implementación relativamente
sencilla, que puede ser optimizada por el lector:
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 189
Class LinearNormalization implements ScalingMethod {
private double [] order;
private int populationSize;
public static LinearNormalization (int n) {
this.order = new int [200];
this.populationSize = n;
}
public void scale (Population p) {
this.sort (p.getFitnesses());
p.setFitnesses (this.order);
}
public void sort (double [] fitnesses) {
boolean [] check = new boolean [200];
double current, base;
int index;
current = Double.MAX_VALUE;
for (int i = 0; i < this.populationSize; i++) {
check [ i ] = false;
}
for (i = 0; i < this.populationSize; i++) {
for (int j = 0; j < this.populationSize; i++) {
if (fitnesses[18] < current && !check[18] ) {
index = j;
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 190
current = fitnesses [18];
}
}
this.order[index] = new Integer(i).doubleValue();
check [index] = true;
}
}
}
El centro de la Clase se encuentra en el método sort, cuya única función es
crear un arreglo de flotantes de doble precisión que indican el orden de aptitud
de los diferentes cromosomas al interior de la población. Así, al cromosoma de
menor valor se le asigna el valor 1, al segundo 2, etc. Este es, precisamente,
el método que el lector puede estar en condición de optimizar, utilizando un
algoritmo de ordenamiento más eficiente que el presentado (Que pretende ser
claro, antes que eficiente).
Una vez obtenidos estos valores de orden, estos son reinsertados como
aptitudes de los cromosomas respectivos en la población.
14.3.3. Clase WheelOfFortune
La Rueda de la Fortuna ha sido implementada, igualmente, por su frecuencia
de uso, y en este caso se ha pretendido hacerla tan eficiente como
demostrativa.
Class WheelOfFortune implements Selector {
private double [] cumulativeFitness;
private int currentGeneration;
private int populationSize;
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 191
public static WheelOfFortune (int n) {
this.cumulativeFitness = new int [200];
this.currentGeneration = 0;
this.populationSize = n;
}
public Chromosome select (Population p) {
Random r = new Random ();
int wheelIndex;
double wheelResult;
if (this.currentGeneration < p.getCurrentGeneration()) {
this.currentGeneration++;
this.resetCumulativeFitness(p.getFitnesses());
}
wheelResult = r.nextDouble() * this.getUpperBound();
wheelIndex = this.getIndex(wheelResult);
return p.getChromosome(wheelIndex);
}
public void resetCumulativeFitness(double [] base) {
double cumulative = 0;
for (int i = 0; i < this.populationSize; i++) {
cumulative = cumulative + base[43];
this.cumulativeFitness[43] = cumulative;
}
}
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 192
public int getIndex (double fitness) {
for (int i = 0; i < this.populationSize; i++) {
if (this.cumulativeFitness[43] < fitness) {
return i;
}
}
}
public double getUpperBound () {
return this.cumulativeFitness[this.populationSize - 1];
}
}
La clase cuenta con un arreglo de aptitud acumulativa que es actualizada cada
nueva generación (ver método select); Cada vez que el método select es
llamado, éste verifica si se encuentra en la misma generación, y en caso
negativo, la actualiza; Luego, crea un índice aleatorio, basado en la sumatoria
de las probabilidades, para luego buscar, y retornar, el cromosoma
correspondiente.
14.3.4. Clase NumberOfIterations
De nuevo, la clase que implementa el criterio de parada por número de
iteraciones es implementada, porque como criterio de parada es el más
frecuentemente utilizado, y porque todo nuestro estudio de convergencia se
enfocó en él. La clase NumberOfIterations es una clase bastante sencilla, que
debería ser intuitiva para el lector:
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 193
Class NumberOfIterations implements StopCriterium {
private int maximum;
public static NumberOfIterations (int n) {
this.maximum = n;
}
public boolean check (Population p) {
return (p.getCurrentGeneration() == this.maximum);
}
}
14.3.5. Implementaciones de Evaluación
En esta propuesta de implementación, hemos definido la clase de evaluación
como una interfaz, cuyo método evaluate puede ser definido por el lector en la
manera que crea conveniente; Sin embargo, como lo hemos manifestado, la
idea es que el usuario no tenga que tener conocimiento previo acerca de
algoritmos genéticos para poder utilizar nuestro framework, por ello, el
desarrollador deberá considerar utilizar un generador de evaluadores,
implementado mediante un parser de JavaCC, que sea capaz de leer una
gramática de definición de fórmulas susceptible de ser ingresada por el usuario
de forma más o menos sencilla a través de un editor, y crear un evaluador de
acuerdo a la fórmula ingresada.
La gramática implementada debería, como mínimo, incluir los siguientes
términos:
B > b(I) I > NUM F > I
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 194
B > I = I
B > I > I
B > I < I
B > I != I
B > F = F
B > F > F
B > F < F
B > F != F
B > B && B
B > B || B
B > !B
B > (B)
I > d(I~I)
I > I + I
I > I - I
I > I * I
I > I ^ I
I > B ? I : I
I > (I)
F > I / I
F > F + F
F > F - F
F > F * F
F > F / F
F > B ? F : F
F > (F)
Donde B es un booleano, I es un entero y F un flotante; Asimismo, el lector
puede consultar la biblioteca Math del API de Java en busca de funciones
matemáticas que pudieran enriquecer ésta gramática simple. En general, la
idea es que todo evaluador retorne un valor flotante, que será asignado al
cromosoma en cuestión.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 195
15. Glosario
• Aborto: Desecho de un individuo antes de permitirle el cruce.
• Adaptación: ver Costo.
• Alelo: Una de varias opciones posibles para los valores de un gen
específico.
• Algoritmo Genético: Proceso que a partir de las leyes de la genética genera
una solución aproximada a un problema dado.
• Codificación: Transformación de una posible solución en su representación
cromosómica.
• Código Genético: Representación de un individuo, susceptible de ser
procesada por un algoritmo genético.
• Aptitud: ver Costo., también se usa para designar el valor normalizado de
éste costo.
• Costo: Resultado de evaluar la función de costo del algoritmo en cuestión
para un individuo en particular. En términos genéticos, medida de la
adaptación del individuo al medio.
• Cromosoma: Parte indivisible del código genético de un individuo, que
representa –y determina –sus características.
• Cruce: Obtención de un nuevo individuo, cuyo código genético es una
combinación del de sus padres, a partir de otros dos.
• Deriva Genética: Dificultad del algoritmo genético para converger a una
solución; Generalmente resulta de un operador de cruce o una función de
costo mal escogidos.
• Elitismo: Serie de privilegios de los que gozan los individuos mejor
adaptados.
• Envejecimiento: Disminución paulatina de la aptitud de un individuo.
• Escalamiento: Acercamiento de los valores de costo de una población a la
media.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 196
• Fenotipo: Serie de características de un individuo, determinadas por su
código genético.
• Función de Costo: Función a optimizar a través del algoritmo genético, y a
través de la cual se evalúa el grado de eficiencia de los diferentes
individuos.
• Gen: Parte de un cromosoma, que determina una característica particular
de la solución que éste representa.
• Normalización: Reemplazo de ciertas características no deseables de un
individuo por otras más deseables.
• Generación: Población existente en una iteración dada de un algoritmo
genético.
• Individuo: Posible solución a un problema dado, bajo los ojos de la
algorítmica genética.
• Muerte: Desecho de un individuo por baja adaptación o por expiración.
• Mutación: Modificación aleatoria del código genético de un individuo.
• Padre: Individuo a partir del cual se genera uno nuevo.
• Población: Conjunto de individuos.
• Recién Nacido: Individuo generado por un cruce, antes de reproducirse.
• Recombinación: El proceso en que a partir de dos cromosomas padres se
genera un cromosoma hijo.
• Reproducción: ver Cruce.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 197
16. Bibliografía
[1] Altenberg, Lee. (2000). “Evolutionary Computation Models from Population
Genetics: Part 2: An Historical Toolbox”. University of Hawaii at Manoa.
Descargado el 16 de Diciembre de 2003 del sitio Web
http://dynamics.org/~altenber/FTP_PDF/LeeCEC2000.pdf
[2] Aytug, H. et Al. (1997). “A Markov Chain Analysis of Genetic Algorithms
with 2x Cardinality Alphabets”. Descargado el 16 de Diciembre de 2003 del
sitio Web http://www.cba.ufl.edu/dis/papers/9506102.PDF
[3] Baier Aranda, Jorge. (2003). “Algoritmos Genéticos”. Descargado el 16 de
Diciembre de 2003 del sitio Web http://www2.ing.puc.cl/~jabaier/iic2612/ga.pdf
[4] Baum, E. et Al. (1997). “On Genetic Algorithms”. NEC Research Institute.
Descargado el 12 de Febrero de 2004 del sitio Web
http://portal.acm.org/ft_gateway.cfm?id=225326&type=pdf&coll=Portal&dl=GUI
DE&CFID=17130097&CFTOKEN=56103038
[5] Beasley, D. et al. (1993). “An Overview of Genetic Algorithms : Part 2,
Research Topics”. University Computing. Descargado el 16 de Diciembre de
2003 del sitio Web http://www.geocities.com/francorbusetti/gabeasley2.pdf
[6] Beasley, D. et al. (2000). “Genetic Algorithms (Version 2)”. Descargado el
16 de Diciembre de 2003 del sitio Web
http://wwwhome.cs.utwente.nl/~hofstede/Codesign/Sheets/5-
Algoritmes/Beasley.pdf
[7] Black, Paul E. (2003). “Grey Code”. NIST. Descargado el 14 de Enero de
2004 del sitio Web http://www.nist.gov/dads/HTML/graycode.html
[8] Botía, Juan A. (Sin Fecha). “Algoritmos Genéticos”. Universidad de Murcia.
Descargado el 16 de diciembre de 2003 del sitio Web
http://ants.dif.um.es/staff/juanbot/ml/files/20022003/geneticosI.pdf
[9] Busetti, Franco. (2000). “Genetic Algorithms Overview”. Descargado el 21
de Noviembre de 2003 del sitio Web
http://www.geocities.com/francorbusetti/gaweb.pdf
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 198
[10] Carter, Skip. (1996). “Markov chains”. Descargado el 15 de Enero de
2004 del sitio Web http://www.taygeta.com/rwalks/node7.html
[11] Cavalcanti Pacheco, Marco Aurelio. (Sin Fecha). “Algoritmos Genéticos:
Princípios E Aplicaciones”. Descargado el 24 de Noviembre de 2003 del sitio
Web http://www.ica.ele.puc-rio.br/pesquisa/download/paper.pdf
[12] Champandard, Alex J. (2002). “Genetic Algorithms Applications”.
Descargado el 21 de Noviembre de 2003 del sitio Web
http://geneticalgorithms.ai-depot.com/Applications.html
[13] Chu, P., Dudley, S. (1993). “The Effect Of Population Structure On The
Rate Of Convergence Of Genetic Algorithms”. Descargado el 12 de Febrero de
2004 del sitio Web
http://portal.acm.org/ft_gateway.cfm?id=162846&type=pdf&coll=ACM&dl=ACM
&CFID=17032164&CFTOKEN=80681112
[14] Chung, Sam., Perez, Rafael. (1997). “Why is Problem-Dependent and
High-Level Representation Scheme Better in a Genetic Algorithm?”.
Descargado el 12 de Febrero de 2004 del sitio Web
http://portal.acm.org/ft_gateway.cfm?id=331747&type=pdf&coll=Portal&dl=GUI
DE&CFID=18601341&CFTOKEN=61442096
[15] Corcoran, A., Wainwright, R. (1996). “Reducing Disruption Of Superior
Building Blocks In Genetic Algorithms”. Descargado el 12 de Febrero de 2004
del sitio Web
http://portal.acm.org/ft_gateway.cfm?id=331190&type=pdf&coll=Portal&dl=ACM
&CFID=18822822&CFTOKEN=71838925
[16] DeJong, K., Spears, W. (1994). “Using Markov Chains to Analyze
GAFOs”. US Navy. Descargado el 15 de Enero de 2004 del sitio Web
http://www.aic.nrl.navy.mil/~gordon/papers/foga94.ps
[17] Drummond, Lúcia. Et Al. (2000). “Design And Implementation Of A
Parallel Genetic Algorithm For The Travelling Purchaser Problem”. Descargado
el 12 de Febrero de 2003 del sitio Web
http://portal.acm.org/ft_gateway.cfm?id=331750&type=pdf&coll=Portal&dl=GUI
DE&CFID=18438448&CFTOKEN=25960900
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 199
[18] Entriken, R., Vössner, S. (1997). “Genetic Algorithms With Cluster Analysis
For Production Simulation”. Universidad de Stanford. Descargado el 16 de
Diciembre de 2003 del sitio Web http://www.informs-
cs.org/wsc97papers/1307.PDF
[19] Frederick, W., Sedlmeyer, R., White, C. (1997). “The Hamming metric in
genetic algorithms and its application to two network problems”. Indiana
University - Purdue University Fort Wayne. Descargado el 12 de Febrero de
2004 del sitio Web
http://portal.acm.org/ft_gateway.cfm?id=162835&type=pdf&coll=ACM&dl=ACM
&CFID=17032164&CFTOKEN=80681112
[20] Gibson, Emily. (2003). “Parallel Genetic Algorithms: An Exploration of
Weather Prediction Through Clustered Computing”. Eighth Annual Consortium
for Computing Sciences in Colleges Northeastern Conference. Descargado el
16 de Diciembre de 2003 del sitio Web
http://www.tcnj.edu/~crew/SafePGAFinal.pdf
[21] Godefroy, P., Khurshid, S. (2002). “Exploring Very Large State Spaces
Using Genetic Algorithms”. Laboratorios Bell, MIT. Descargado el 16 de
Diciembre de 2003 del sitio Web
http://sdg.lcs.mit.edu/pubs/2002/GA_TACAS02.pdf
[22] Goldberg, D., Sastry, K. (2001). “A Practical Schema Theorem for Genetic
Algorithm Design and Tuning”. Illinois Genetic Algorithms Laboratory.
Descargado el 16 de Diciembre de 2003 del sitio Web
http://gal4.ge.uiuc.edu/~kumara/Publications_files/2001017Pres.pdf
[23] Goodwing, S., Wiese, K. (1999). “Convergence Characteristics of Keep-
Best Reproduction”. University of Regina. Descargado el 12 de Febrero de
2004 del sitio
http://portal.acm.org/ft_gateway.cfm?id=298363&type=pdf&coll=Portal&dl=ACM
&CFID=18822822&CFTOKEN=71838925
[24] Greenhalgh, D., Marshall, S. (2000). “Convergence Criteria for Genetic
Algorithms”. Siam Journal on Computers, Vol. 30, No. 1, pp 269-282. Society
for Industrial and Applied Mathematics.
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 200
[25] Haataja, Juha. (1999). “Using Genetic Algorithms for Optimization:
Technology Transfer in Action”. Center for Scientific Computing. Descargado
el 16 de Diciembre de 2003 del sitio Web
http://www.csc.fi/math_topics/courses/eurogen.pdf
[26] Hoehn, Theodore P. (1999). “Wolves in Sheep’s Clothing? The Effects of
“Hidden,” Parental Mutation on Genetic Algorithm Performance”. Middle
Tennessee State University. Descargado el 12 de Febrero de 2003 del sitio
Web
http://portal.acm.org/ft_gateway.cfm?id=275362&type=pdf&coll=Portal&dl=ACM
&CFID=17130097&CFTOKEN=56103038
[27] Holland, John. (2001). “Building Blocks, Cohort Genetic Algorithms, and
Hyperplane-De.ned Functions”. Massachussets Institute of Technology.
Descargado el 16 de Diciembre de 2003 del sitio Web
http://www.pscs.umich.edu/reprints/hdf_cohortGA.pdf
[28] Hsu, William H. (2001). “Introduction to Genetic Algorithms”. Descargado
el 16 de Diciembre de 2003 del sitio Web
http://www.kddresearch.org/Courses/Fall-2001/CIS732/Lectures/Lecture-23-
20011113.pdf
[29] Hunter, Andrew. (2002). “Genetic Algorithms (Management of
Uncertainty)”. Descargado el 16 de Diciembre de 2003 del sitio Web
http://www.dur.ac.uk/andrew1.hunter/MoU/MoU11GA.pdf
[30] Ilachinsky, Andy. (1997). “A Brief Primer on Genetic Algorithms”. CNA.
Descargado el 16 de Diciembre de 2003 del sitio Web
http://www.cna.org/isaac/gaprim.pdf
[31] Israngkul, Worawit. (2003). “Introduction to Evolutionary Computing”.
Universidad de Kansas. Descargado el 16 de Diciembre de 2003 del sitio Web
http://biohpc.learn.in.th/files/contents2003/Worawit/Evolutionary%20Computatio
n.pdf
[32] Julstrom, Bryant A. (2000). “Adaptive Operator Probabilities In A Genetic
Algorithm That Applies Three Operators”. St. Cloud State University.
Descargado el 12 de Febrero de 2004 del sitio Web
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 201
http://portal.acm.org/ft_gateway.cfm?id=331746&type=pdf&coll=Portal&dl=GUI
DE&CFID=18542795&CFTOKEN=39740524
[33] Littman. (2003). “Chapter 9: Genetic Algorithms”. Descargado el 16 de
Diciembre de 2003 del sitio Web
http://www.cs.rutgers.edu/~mlittman/courses/ml03/ch9.pdf
[34] López Takeyas, Bruno. (2000). “Algoritmos Genéticos (AG)”. Descargado
el 16 de Diciembre de 2003 del sitio Web
http://www.itnuevolaredo.edu.mx/takeyas/Filminas_AG/Filminas-AG.PDF
[35] Louis, Sushil J., Rawlins, Gregory J. (1999). “Predicting Convergence
Time for Genetic Algorithms”. Indiana University. Descargado el 16 de
Diciembre de 2003 del sitio Web
http://www.cs.indiana.edu/pub/techreports/TR370.pdf
[36] Man, K. et Al. (1998). “Genetic Algorithms: Concepts and Designs”.
Universidad de Hong Kong. Descargado el 16 de Diciembre de 2003 del sitio
Web http://sant.bradley.edu/ienews/98_4/GENET2.pdf
[37] Martí, Rafael. (Sin Fecha). “Algoritmos Genéticos”. Descargado el 10 de
Octubre de 2003 del sitio Web http://www.uv.es/~rmarti/genet.html
[38] Matteucci, Mateo. (2003). “Soft Computing: Teoria, Tecniche e
Aplicazioni”. Politécnico de Milán. Descargado el 16 de Diciembre de 2003 del
sitio Web http://airlab.elet.polimi.it/SC2003/Lucidi/handout_ga.pdf
[39] Merelo Guervós, Juan Julián. (Sin Fecha). “Algoritmos Genéticos”.
Descargado el 10 de Octubre de 2003 del sitio Web
http://www.uv.es/~rmarti/genet.html
[40] Otavio, Salvador. (Sin Fecha). “Introduçao a Algoritmos Genéticos”.
Descargado el 16 de Diciembre de 2003 del sitio Web
http://www.freedom.ind.br/otavio/trab/introducao_algoritmos_geneticos-
slides.pdf
[41] Rello, Raúl M. (2001). "Algoritmos Genéticos". Orbis Tecnología Eléctrica.
Descargado el 16 de Diciembre de 2003 del sitio Web http://www.mundo-
electronico.com/PDF/Any2000/313_octubre/Algoritmos.pdf
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 202
[42] Rennard, Jean Phillipe. (2000). “Genetic Algorithm Viewer: Demonstration
of a Genetic Algorithm”. Descargado el 14 de Noviembre de 2003 del sitio Web
http://www.rennard.org/alife/english/gavgb.pdf
[43] Roberts, Pete. (2003). “Genetic Algorithms”. Descargado el 16 de
Diciembre de 2003 del sitio Web http://www.cs.nott.ac.uk/~plr/FAI/lect3.pdf
[44] Rudolph, Günter. (1994). “Convergence Analysis of Canonical Genetic
Algorithms”. IEEE. Descargado el 16 de Diciembre de 2003 del sitio Web
http://nnmi.kaist.ac.kr/lectures/2003evosys/paper/rudolph94convergence.pdf
[45] Rutishauser, Ulei. (2002). “Biologically Inspired Computing – Genetic
Algorithms”. Descargado el 16 de Diciembre de 2003 del sitio Web
http://i.hsr.ch/Content/Gruppen/Doz/jjoller/ISeminare/SeminarSS2002/AISemina
r/GA_folien.pdf
[46] Salvador, Otavio. (Sin Fecha). “Introduçao a Algoritmos Genéticos”.
Universidad Católica de Pelotas. Descargado el 16 de Diciembre de 2003 del
sitio Web
http://www.freedom.ind.br/otavio/trab/introducao_algoritmos_geneticos-
slides.pdf
[47] Santo Orcero, David. (Sin Fecha). “Los Algoritmos Genéticos”.
Descargado el 10 de Octubre de 2003 del Sitio Web
http://www.orcero.org/irbis/disertacion/node189.html
[48] Sekharan, D., Wainwirght, R. (1997). “Manipulating Subpopulations of
Feasible And Infeasible solutions in Genetic Algorithms”. University of Tulsa.
Descargado el 12 de Febrero de 2004 del sitio Web
http://portal.acm.org/ft_gateway.cfm?id=162831&type=pdf&coll=ACM&dl=ACM
&CFID=17032164&CFTOKEN=80681112
[49] Theoktisto, Viktor. (1998). “Order of Magnitude Reduction of Genetic
Algorithms Operations”. Universidad Simón Bolívar. Descargado el 16 de
Diciembre de 2003 del sitio Web
http://www.mpcs.org/MPCS98/Final_Papers/Paper.45.pdf
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 203
[50] Valles, J., Nistal, J. (Sin Fecha). “Algoritmos Genéticos”. Universidad de
Valladolid. Descargado el 14 de enero de 2004 del sitio Web
http://www.infor.uva.es/~calonso/TemasAlumnosIAII/AlgoritmosGeneticos1.ppt}
[51] Enciclopedia Microsoft® Encarta©. (2001). Microsoft Corporation.
[52] “Dynamics of Genetic Algorithms”. (Sin Fecha). Descargado el 16 de
Diciembre de 2003 del sitio Web
http://www.sim.inf.ethz.ch/teach/cosy/lect_02/ga/ga-www.pdf
[53] “Evolutionary Computation”. (2003). University of Columbia. Descargado
el 16 de Diciembre de 2003 del sitio Web http://www.columbia.edu/~cs1001-
1/Session10_4s.pdf
[54] “Genetic Algorithms”. (2000). California Institute of Technology.
Descargado el 16 de Diciembre de 2003 del sitio Web
http://www.coro.caltech.edu/Courses/EE150/Week6/AM_W6GAGeomOpt.pdf
[55] “Genetic Algorithms”. (2002). Inleiding Autonome Systemen. Descargado
el 16 de Diciembre de 2003 del sitio Web
http://tcw2.ppsw.rug.nl/~post/autsys/IAS2001_2002/colleges/genalg.pdf
[56] “Genetic Algorithms”. (2002). NCST. Descargado el 16 de Diciembre de
2003 del sitio Web
http://www.ncst.ernet.in/education/apgdst/aifac/aicontent/ga/genetic.pdf
[57] “Genetic Algorithms”. (2003). Descargado el 16 de Diciembre de 2003 del
sitio Web
http://cognitrn.psych.indiana.edu/rgoldsto/complex/genetic%20algorithms2.pdf
[58] “Genetic Algorithms”. (Sin Fecha). Instituut voor Plasmafysica Rijnhuizen.
Descargado el 16 de Diciembre de 2003 del sitio Web
http://www.rijnh.nl/n3/n2/Talks/genetic.pdf
[59] “Genetic Algorithms (GAs)”. (2003). Descargado el 16 de Diciembre de
2003 del sitio Web
http://www.cs.umbc.edu/~hillol/CLASSES/CMSC47103/NOTES/GA.pdf
[60] “Genetic Server/Library”. (2002). Neurodimension, Inc. Descargado el 14
de Enero de 2004 del sitio Web
http://www.nd.com/products/genetic/crossover.htm
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 204
[61] “Hamming Distance”. (Sin Fecha). Principia Cybernetica Web.
Descargado el 14 de Enero de 2004 del sitio Web
http://pespmc1.vub.ac.be/ASC/HAMMIN_DISTA.html
[62] “Resumen Histórico”. (2003). Descargado el 16 de Diciembre de 2003 del
sitio Web
http://www.itnuevolaredo.edu.mx/takeyas/Materias/Inteligencia%20Artificial/tare
as/Resumen%20AG.pdf
[63] “Selección Natural”. (2002). Facultad de Ciencias. Descargado el 16 de
Diciembre de 2003 del sitio Web
http://evolucion.fcien.edu.uy/Diapositivas/SeleccionNaturalB.pdf
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 205
17. Tabla de Ilustraciones
Figura 1.1 (pg 3) Algoritmos Genéticos. Tomado de [56]
Figura 3.1 (pg 6) Charles Darwin. Tomado de [51]
Figura 4.1 (pg 13) Analogía entre los picos de los pinzones y diferentes
herramientas. Tomado de [63]
Figura 4.2 (pg 15) Cromosomas de la Drosophita. Tomado de [51]
Figura 4.3 (pg 17) El ADN. Tomado de [45]
Figura 4.4 (pg 18) Síntesis de ARN. Tomado de [51]
Figura 4.5 (pg 19) Síntesis de Proteínas. Tomado de [51]
Figura 4.6 (pg 20) Secuencias de ARN y su equivalencia en Aminoácidos.
Tomado de [51]
Figura 4.7 (pg 25) Diagramas de Mendel.
Figura 4.8 (pg 26) Diagrama de Mendel. Tomado de [51]
Figura 4.9 (pg 27) Cromosomas Humanos. Tomado de [51]
Figura 5.1 (pg 33) Niveles de Ruido. Tomado de [58]
Figura 5.2 (pg 37) Paralelo de Términos.
Figura 5.3 (pg 39) Secuencia de un Algoritmo Genético.
Figura 6.1 (pg 59) Esquemas y el Espacio de Búsqueda. Tomado de [19]
Figura 6.2 (pg 60) Interrelación entre Cromosomas y Esquemas [52,30]
Figura 7.1 (pg 67) Cromosomas.
Figura 8.1 (pg 75) Rueda de la Fortuna. Tomado y modificado de
www.ciromarchetti.com/gilded_tarot/major.html
Figura 9.1 (pg 87) Técnicas de Cruce [3,6,38,41]
Figura 9.2 (pg 89) Cruce Uniforme [6,8,28,38]
Figura 9.3 (pg 98) Esquemas [55]
Figura 9.4 (pg 99) Esquemas tras un cruce [55]
Figura 12.1 (pg 128) Reducción de un Cromosoma [15]
Figura 13.1 (pg 132) Matriz de Incidencia [2]
Figura 13.2 (pg 141) Cadenas de Markov simples [10]
Figura 13.3 (pg 149) Convergencia en Calidad [12]
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 206
Figura 13.2 (pg 150) Convergencia en Distancia de Hamming [19]
Figura 14.1 (pg 156) Diagrama de Casos de Uso propuesto para un Algoritmo
Genético.
Figura 14.2 (pg 157) Diagrama de Clases propuesto para un Algoritmo
Genético.
Figura 14.3 (pg 183) Evaluación.
Figura 14.4 (pg 184) Selección.
Figura 14.5 (pg 185) Cruce.
Figura 14.6 (pg 186) Reemplazo.
Figura 14.7 (pg 186) Mutación.
Figura 14.8 (pg 189) Gramática propuesta para un Algoritmo Genético.
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 207
18. Tabla de Contenido
1. Introducción 3
2. Objetivos 5
3. Antecedentes Históricos 6
3.1. Evolución, Selección y Herencia 6
3.2. La Computación Evolutiva 8
4. Un Poco de Genética 10
4.1. La Selección Natural 10
4.2. Cromosomas, Genes y el ADN 15
4.3. Reproducción Sexual 23
4.4 Evolución 30
5. El Algoritmo Genético 32
5.1 Introducción 32
5.2. El Algoritmo Genético 34
5.3. El Proceso 39
5.4. Características 42
5.5. ¿Cuándo usar un Algoritmo Genético? 43
5.6. ¿Porqué Funcionan? 46
6. Codificación 47
6.1. Código de Grey 48
6.3. La Implicación Doble 49
6.4. Espacios Continuos 50
6.5. Espacios Discretos Limitados 52
6.6. Alfabetos Alternativos 54
6.7. Cromosomas de Tamaño Variable 56
6.8. Diploidía 57
6.9. Esquemas 58
6.10. Consideraciones Finales 64
7. Evaluación 66
7.1. La Función de Aptitud 66
Análisis de Estado del Arte en Algoritmos Genéticos
ISC-2003-2-18
Pg. 208
7.2. Paisaje de Aptitud 67
7.3. La Aptitud 68
7.4. Rango de Aptitud y Escalamiento 70
7.5. Consideraciones Finales 72
8. Selección 74
8.1. Desecho de Individuos no Aptos 75
8.2. La Rueda de la Fortuna 76
8.3. Selección por Torneo 79
8.4. Elitismo 80
8.5. Efectos sobre un Esquema 81
9. El Cruce (Crossover) 85
9.1. Técnicas de cruce 88
9.2. Variaciones 96
9.3. Efectos Sobre los Esquemas 98
10. Mutaciones 102
10.1. El Porqué de las Mutaciones 102
10.2. Técnicas de mutación 105
10.4. Evolución Inocente 109
10.5. Efectos Sobre los Esquemas 110
10.6. Consideraciones Finales 112
11. Otros Parámetros 113
11.1. Población Inicial 113
11.2. Criterios de Parada 114
11.3. Criterios de Control 119
11.4. Nichos Ecológicos 120
11.5. Probabilidades Adaptativas de Operadores 123
11.6. Tratamiento de Individuos Duplicados 124
12. Otros Operadores 125
12.1. Aborto 125
12.2. Normalización 126
12.3. Añadir, Eliminar 126
©2004, Wolfgand Enrique Kook Camero
ISC-2003-2-18
Pg. 209
12.4. Intercambio, Reinserción, Barajado 127
12.5. Reducción 128
12.6. Otros Operadores Comunes 129
13. Análisis de Convergencia 130
13.1. Incremento de Aptitud 130
13.2. Hallazgo del Óptimo 132
13.3. Tiempo de Espera 140
13.4. Resultados Empíricos 149
14. Implementación de un Algoritmo Genético en Java 152
14. Implementación de un Algoritmo Genético en Java 153
14.1. Análisis de Requerimientos 153
14.2. Diseño de Aplicación 174
14.3. Sugerencias de Implementación 188
15. Glosario 195
16. Bibliografía 197
17. Tabla de Ilustraciones 205
18. Tabla de Contenido 207