Download Computación Evolutiva: Algoritmos Genéticos

Document related concepts

Algoritmo genético wikipedia , lookup

Algoritmo evolutivo wikipedia , lookup

Programación genética wikipedia , lookup

Evolución gramatical wikipedia , lookup

Mutación (computación evolutiva) wikipedia , lookup

Transcript
Computación Evolutiva:
Algoritmos Genéticos
Apuntes de la asignatura:
Inteligencia Artificial
Razonamiento Aproximado (Máster)
Daniel Manrique Gamo
Profesor Titular de Universidad
Computación Evolutiva: Algoritmos Genéticos
Índice
────────────────────────────────────────────────────────────────────────────────────────────
1. Introducción
5 1.1. Bases de la computación evolutiva
7 1.2. Características de la computación evolutiva
9 2. Algoritmos genéticos
11 2.1. Historia de los algoritmos genéticos
12 2.2. Características y funcionamiento de los algoritmos genéticos
14 2.3. Codificación del problema
17 2.3.1. Codificaciones binarias
18 2.3.2. Codificaciones no binarias
20 2.4. La función de evaluación
23 2.5. Convergencia
25 2.5.1. Medidas de convergencia
2.6. Operadores genéticos
25 27 2.6.1. Operadores de reproducción
27 2.6.2. Operadores de mutación
31 2.6.3. Operadores de cruce con alfabeto finito
32 2.6.4. Operadores de cruce con codificación real
38 2.6.5. Reemplazo de individuos
51
Daniel Manrique Gamo
Página 3
Computación Evolutiva: Algoritmos Genéticos
Introducción
────────────────────────────────────────────────────────────────────────────────────────────
1.
Introducción
Desde mediados de los años cincuenta, existen evidencias del uso de ordenadores para,
entre otras tareas, avanzar en la comprensión del proceso de la evolución natural
[Neum, 56], [Neum, 58]. Uno de los primeros trabajos que utilizan un proceso evolutivo
para la resolución de problemas en computadores es el de Friedberg [Frie, 58], [Frie,
59]. Estos artículos representan los primeros resultados en aprendizaje automático y
describen la utilización de un algoritmo evolutivo para programación automática. El
objetivo era encontrar un programa que calculara una función de entrada-salida.
También el artículo de Fraser [Fras, 57] sirvió de influencia en los primeros trabajos en
esta área.
En esta misma época se presentaron los primeros intentos de aplicar evolución simulada
a problemas de optimización numérica [Brem, 62]. Posteriormente, también comenzó el
desarrollo de la teoría de los algoritmos evolutivos, demostrando que la relación óptima
de mutación para problemas linealmente separables debería tener el valor 1/m, donde m
representa el número de bits que codifica cada individuo [Brem, 65].
Durante este periodo se desarrollaron las ideas de la operación evolutiva (evolutionary
operation EVOP) que utilizaba una técnica evolutiva para el diseño y el análisis de
experimentos industriales [Box, 57], [Box, 69]. Estas ideas no fueron nunca
implementadas en un computador, aunque fueron usadas para el desarrollo del método
denominado diseño símplex [Spen, 62].
Como suele suceder con el comienzo de cualquier nuevo campo de estudio, estos inicios
se veían con un alto grado de escepticismo. Sin embargo, a mediados de los sesenta ya
están establecidas las bases de lo que hoy son las tres ramas principales de la
computación evolutiva (CE). Así los trabajos de Fogel [Foge, 66] en San Diego,
California, se desarrollaron en el campo de la Programación Genética (PG).
Por otra parte, se desarrollan los algoritmos genéticos por Holland [Holl, 69] en la
Universidad de Michigan, y las estrategias evolutivas (EE) en la Universidad de Berlín
[Rech, 65].
Durante los siguientes veinticinco años, cada una de estas ramas se desarrolló de una
forma bastante independiente, pero con rutas paralelas. Fue en el año 1991 cuando se
hizo un esfuerzo por acercar a los distintos investigadores que trabajaban en CE. Para
ello tuvo lugar la celebración del Workshop on Paralell Problem Solving from Nature
en Dortmund, donde realmente se acuñó el nombre de Computación Evolutiva [Schw,
91] para englobar las tres técnicas empleadas para simular los distintos aspectos de la
evolución: los algoritmos genéticos, las estrategias evolutivas y la programación
genética. Todas ellas tienen en común que utilizan la reproducción, el azar, la
competición y la selección de los individuos de la población. Así, en cualquiera de estas
técnicas evolutivas están presentes las ideas de la esencia de la evolución y al menos
Daniel Manrique Gamo
Página 5
Computación Evolutiva: Algoritmos Genéticos
Introducción
────────────────────────────────────────────────────────────────────────────────────────────
uno de estos cuatro procesos, presuponiendo que, tanto en la naturaleza como en la
informática, la evolución es la mejor herramienta de optimización [Atma, 76].
Desde un primer momento, las ideas de la CE se orientan hacia cuatro objetivos:
1. Optimización. La evolución en sí es un proceso de optimización [Mayr, 88] en el
que se busca adaptar, lo mejor posible, los individuos al entorno en el que habitan.
Darwin [Darw, 59] estudió, sorprendido, la extrema perfección que ciertos órganos
habían alcanzado mediante la evolución, como por ejemplo, los ojos. Sin embargo,
optimización no significa perfección. La evolución descubre soluciones funcionales
altamente precisas para problemas concretos que se dan en el medio ambiente de un
determinado individuo. Debido a esto, ya desde un primer momento, se pensó en su
utilización para resolver problemas de optimización en ingeniería. Las técnicas
clásicas utilizadas en esta área, como el descenso del gradiente, técnicas de escalada,
o las puramente aleatorias habían sido claramente inadecuadas al enfrentarse a
problemas de optimización no lineales, especialmente aquellos que contenían una
componente estocástica, temporal o de caos. Todas estas ideas fueron claves para el
desarrollo de las EE [Rech, 94], [Schw, 95].
2. Sistemas robustos. Los problemas del mundo real casi nunca son estáticos y los
problemas de optimización temporal son cada vez más comunes. Estas
circunstancias requieren un cambio en la estrategia que se aplica para resolver el
problema. En estos casos, la realimentación sobre el éxito o el fracaso de la
estrategia actual es fundamental. Holland [Holl, 75], utilizando AAGG, describe un
procedimiento que puede hacer evolucionar estrategias, tanto como cadenas
codificadas de números o como bases de reglas llamadas sistemas clasificadores. El
resultado es un procedimiento robusto que tiene la capacidad de ajustar el
rendimiento basándose en la realimentación de la salida del sistema.
3. Inteligencia artificial. Como se puede comprobar, la evolución ha creado especies
con una inteligencia cada vez más desarrollada. Por tanto, la forma de conseguir
inteligencia artificial, además de las alternativas clásicas que persiguen la emulación
de la inteligencia humana, ya sea mediante la emulación de las estructuras
biológicas del sistema nervioso o mediante la emulación del comportamiento, tiene
una nueva posibilidad: simular la evolución para construir algoritmos predictivos.
Esta es la base de las investigaciones en CE [Foge, 62], [Foge, 66].
4. Vida artificial. En el campo de la biología, más que utilizar la evolución como una
herramienta, se intenta capturar la esencia de la propia evolución en una simulación
por computador y usar entonces esta simulación para conseguir una nueva
información sobre la física de los procesos de la evolución natural [Ray, 91]. El
éxito en este campo abre la posibilidad de estudiar sistemas biológicos alternativos
de cómo puede ser la vida en otros lugares y averiguar qué características pueden
tener en común con la de La Tierra [Lang, 87]. Aunque cada modelo es incompleto
y las características que tiene la vida en otros lugares del universo es pura
Daniel Manrique Gamo
Página 6
Computación Evolutiva: Algoritmos Genéticos
Introducción
────────────────────────────────────────────────────────────────────────────────────────────
especulación, las simulaciones de vida por ordenador, denominadas genéricamente
vida artificial, ya han conseguido generar algunos patrones que se corresponden con
fenómenos que normalmente ocurren en la vida en La Tierra.
Una vez vistas las distintas ramas de aplicación de la CE, la cuestión fundamental que
se plantea ahora es por qué simular los procesos de la evolución. Una respuesta podría
ser que en estos momentos no se dispone de mejores alternativas. Normalmente, no se
pueden utilizar eficientemente las técnicas clásicas de optimización para encontrar un
máximo global en una función si está rodeado de máximos locales. Las técnicas
desarrolladas hasta ahora para emular la inteligencia humana no son suficientemente
adaptables a los dominios cambiantes, ya que no son suficientemente capaces de
predecir ni de anticipar sus acciones. Tampoco se puede visitar un nuevo mundo,
enviarle los compuestos químicos primigenios que dan lugar a la vida y esperar
millones de años para ver qué tipo de vida se desarrolla allí. En contraste, los métodos
de computación evolutiva ofrecen posibles soluciones a estos problemas basándose en
la utilización dirigida del azar y la incertidumbre.
De acuerdo con el teorema “no-free-lunch” (NFL) [Wolp, 96], no puede existir ningún
algoritmo que resuelva todos los problemas (por ejemplo de optimización) que sea, en
general, superior a cualquier otro. Por tanto, en principio, la cuestión de si los
algoritmos evolutivos son superiores o inferiores a cualquier otra aproximación no tiene
sentido. Sin embargo, es posible afirmar que los algoritmos evolutivos se comportan
mejor que otros métodos con respecto a problemas específicos y, como consecuencia, se
comportarán peor con respecto a otras clases de problemas.
El teorema NFL puede corroborar que, en el caso de los algoritmos evolutivos frente a
otros métodos clásicos de optimización, son más eficientes resolviendo problemas
discontinuos, no diferenciables, multimodales, con ruido y cualquier tipo de superficies
de búsqueda no convencionales. Por el contrario, su efectividad disminuye al afrontar
problemas más simples para los que se han desarrollado algoritmos específicos en su
resolución.
Por tanto, en principio, y mientras no se desarrolle un método específico de resolución
del problema que tenga en cuenta ciertas propiedades del mismo que lo haga más
eficiente, parecen claras las ventajas de la utilización de algoritmos no especializados y
robustos como los algoritmos evolutivos.
1.1.
Bases de la computación evolutiva
La más comúnmente aceptada base de teorías sobre la evolución es el paradigma neoDarwiniano. En esta teoría se afirma que la mayor parte de la historia de la vida puede
ser completamente justificada mediante procesos físicos y mediante poblaciones y
especies [Hoff, 89]. Estos procesos son: la reproducción, la mutación, la competición y
la selección. La reproducción es una propiedad común de las especies. Hay que tener en
cuenta que, normalmente, la capacidad reproductiva de las especies es enorme y el
Daniel Manrique Gamo
Página 7
Computación Evolutiva: Algoritmos Genéticos
Introducción
────────────────────────────────────────────────────────────────────────────────────────────
número de individuos se incrementaría exponencialmente si todos sus individuos se
pudieran reproducir con éxito simultáneamente. La reproducción supone la transferencia
del código genético de cada individuo a su descendencia. La mutación sucede debido a
que los errores en la replicación durante el proceso de transferencia de información
genética son inevitables, además de ser necesario incluir variabilidad en las especies. La
competición es una consecuencia del crecimiento de la población dentro de un espacio
físico finito donde no hay espacio o energía para todos. La selección es el resultado de
la reproducción de las especies en un medio de competencia. Gracias a ella, sobrevivían
los mejores individuos, esto es, los más adaptados al medio.
Los individuos y las especies pueden ser vistos como una dualidad de su código
genético, el genotipo, y su forma de plasmarse con respecto al mundo, el fenotipo. El
genotipo ofrece la posibilidad de almacenar la experiencia acumulada, adquirida de la
información histórica. Desgraciadamente, el resultado de la variación genética es
impredecible debido a los efectos combinados de la pleitropía y la poligénesis, [Mayr,
88]. La pleitropía implica que un único gen afecta simultáneamente a varias
características del fenotipo, mientras que la poligénesis significa que cada característica
del fenotipo viene determinada por la interacción de varios genes. No se conoce ninguna
relación, uno a uno, entre genes y características en los sistemas evolutivos naturales.
Debido a esto, el fenotipo cambia siguiendo una función compleja, no lineal, de la
interacción entre las estructuras genéticas y las condiciones medioambientales. De esta
forma, códigos genéticos muy distintos pueden tener comportamientos equivalentes,
igual que programas diferentes pueden conseguir resultados similares.
Dentro del proceso de evolución, hay que tener en cuenta que la selección actúa sólo
sobre los comportamientos externos de los individuos y las especies [Mayr, 88] y no
sobre el genotipo que representan. La selección viene dada por la adaptación de los
individuos al entorno, y esta adaptación se puede ver como un espacio con una
topografía adaptativa dependiente de las condiciones del entorno. Una población de
genotipos genera sus respectivos fenotipos que, por sus características de adaptación al
medio, están situados en un cierto lugar del mapa de adaptación. Cada pico de este
mapa se corresponde con una zona de fenotipos optimizados. De una forma
probabilística, la evolución acerca a los individuos a estos picos, mientras que la
selección elimina las variantes fenotípicamente peores.
Visto de esta forma, la evolución es claramente un proceso de optimización en
resolución de problemas. La selección conduce los fenotipos tan cerca como es posible
del óptimo para la supervivencia con respecto a unas condiciones iniciales y unas
restricciones del entorno. Sin embargo, el entorno está continuamente cambiando y, por
tanto, las diferentes especies constantemente evolucionan hacia nuevos óptimos. Debido
a esto, no se puede decir que ningún organismo esté perfectamente adaptado a su
entorno.
Daniel Manrique Gamo
Página 8
Computación Evolutiva: Algoritmos Genéticos
Introducción
────────────────────────────────────────────────────────────────────────────────────────────
Según todo lo visto anteriormente, se resumen a continuación las características más
importantes del paradigma neo-Darwiniano:
•
El individuo es el principal objetivo de la evolución.
•
La variación genética es un fenómeno de probabilidad. Los fenómenos estocásticos
juegan un papel importante en la evolución.
•
La variabilidad de genotipo se basa, en su mayor parte, en un proceso de
recombinación y, sólo en menor medida, en la mutación.
•
La evolución gradual puede incluir discontinuidades en el fenotipo.
•
No todos los cambios en el fenotipo tienen que ser consecuencia de la selección
natural.
•
La evolución es un cambio en la adaptación y la diversidad, no solamente un cambio
en la frecuencia de los genes.
•
La selección es probabilística, no determinística.
1.2.
Características de la computación evolutiva
Todas las técnicas de la CE se basan en el modelo de la evolución natural, por lo que
todos comparten un conjunto de características comunes. A continuación se reseñan las
más importantes:
•
Se utiliza una estrategia de aprendizaje colaborativo a partir de un conjunto de
individuos. Normalmente, cada individuo representa o codifica un punto del espacio
de búsqueda de soluciones en un problema dado. Cada individuo incorpora
información adicional que permite llegar a la solución final del problema.
•
La descendencia, obtenida a partir de los individuos de la población, se genera de
forma pseudo-aleatoria mediante procesos de cruce y recombinación donde se
intercambia información entre dos o más individuos actualmente existentes. La
mutación es un proceso de auto-replicación errónea de los individuos que produce
pequeños cambios en los mismos.
•
Mediante la evaluación de los individuos, se consigue una medida de la adaptación
de cada uno de ellos a su entorno. De acuerdo con esta medida de adaptación, el
proceso de selección favorece más a los individuos mejor adaptados, que serán por
tanto los que se reproduzcan más frecuentemente.
Estas son las características generales que comparten todas las ramas de la CE. Sin
embargo, existen diferencias de implementación de estos principios que caracterizan y
diferencian a los algoritmos genéticos, las estrategias evolutivas y la programación
genética. A continuación se muestra, de forma resumida, las principales características
diferenciadoras de cada una de estas ramas [Foge, 95], [Back, 96]:
Daniel Manrique Gamo
Página 9
Computación Evolutiva: Algoritmos Genéticos
Introducción
────────────────────────────────────────────────────────────────────────────────────────────
•
Las estrategias evolutivas normalmente usan la mutación para modificar vectores de
números reales, empleando la recombinación (cruce) como operador principal de
búsqueda. El operador de selección es determinístico y, normalmente, el tamaño de
la población de los padres y el de la descendencia es distinto. Dado que este tipo de
algoritmos se apoyan principalmente en el operador de mutación, realizan
búsquedas muy exploratorias del espacio de búsqueda, lo cual resulta interesante en
las primeras iteraciones del proceso de evolución; sobre todo en la resolución de
problemas paramétricos de los que apenas se conoce nada. Sin embargo, esta misma
capacidad exploratoria de las estrategias evolutivas impide alcanzar la convergencia
hacia el óptimo resultando, por tanto, ineficientes en las etapas más tardías del
proceso evolutivo.
•
Los algoritmos genéticos se basan en el cruce como el operador de búsqueda más
importante. A diferencia de las estrategias evolutivas, el operador de mutación se
aplica con una probabilidad muy pequeña, y no es considerado un operador
fundamental. Se usa la selección probabilística y, generalmente, se emplea la
codificación de los individuos mediante cadenas binarias, aunque también se pueden
emplear otras codificaciones tales como las basadas en números reales [Eshe, 93].
•
La programación genética es una extensión de los algoritmos genéticos. Busca
construir programas de computador sin que ellos sean diseñados y programados
expresamente por un humano. Puede decirse que es una técnica de optimización
cuyo espacio de búsqueda son los posibles programas de computador que
solucionan un problema determinado. Al igual que ocurre con los algoritmos
genéticos, la creación de los individuos es completamente aleatoria, es decir, el
computador no ha sido explícitamente programado para encontrar una solución
predeterminada. Se parte de una situación sujeto de la investigación (estado inicial)
obtenida de forma aleatoria, a la que se aplican sucesivamente los operadores
genéticos (selección, cruce, mutación y reemplazamiento de individuos) hasta llegar
a una solución del problema (estado final).
Daniel Manrique Gamo
Página 10
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
2.
Algoritmos genéticos
Como se ha descrito anteriormente, los algoritmos genéticos (en adelante AAGG) son
una clase de algoritmos evolutivos que se usan para resolver problemas de búsqueda y
optimización. Los AAGG son capaces de hacer evolucionar los individuos de una
población hacia soluciones del mundo real, siempre que se encuentre una codificación
adecuada del problema, siendo ésta una de las claves principales de éxito cuando se
aplica este tipo de técnicas.
Los AAGG simulan mediante poblaciones de individuos la evolución sufrida a través de
diferentes operadores. En la naturaleza, los individuos de una población compiten entre
ellos por diferentes recursos necesarios para la supervivencia como el agua y la comida,
y los miembros de una misma especie también compiten por aparearse. De todos ellos,
los que tienen más éxito en sobrevivir y aparearse conseguirán un mayor número de
descendientes. Los individuos con peores aptitudes producirán muy poca o ninguna
descendencia. Esto significa que los genes de los individuos de mayor adaptación al
medio serán heredados por un número creciente de individuos en cada generación. La
combinación de buenas características de diferentes antepasados puede generar una
descendencia altamente adaptada al medio. De la misma forma, es posible también que
la combinación de genes de individuos bien adaptados generen otros con peores
características, con lo que estos individuos tenderán a desaparecer. Es posible, además,
que se produzcan cambios en el propio medio de vida, por lo que las especies
evolucionarán hacia las nuevas condiciones de vida.
Los AAGG presentan una analogía directa a este comportamiento natural. A cada
individuo se le asigna un valor dependiendo de lo buena que sea la solución que aporta
al problema. A los individuos con mayor adaptación, esto es, a los que mejores
soluciones representan, se les da mayor oportunidad de reproducirse, cruzándolos con
otros individuos de la población que probablemente representan también buenas
soluciones al problema. Así se produce la descendencia cuyos individuos comparten
características de cada uno de los padres. Se van produciendo por tanto, nuevas
generaciones con una proporción mayor de individuos mejor adaptados. De esta forma,
con el paso de las generaciones, las poblaciones constan de individuos que aportan
mejores soluciones al problema, mezclándose entre sí en busca de la solución óptima.
Al favorecer el cruce entre los individuos mejor adaptados, se exploran las áreas más
prometedoras del espacio de soluciones del problema, sin dejar de lado tampoco
soluciones que, a priori, pueden considerarse como peores, pero que al recombinarse
pueden dar lugar a individuos muy bien adaptados. Si el AG ha sido bien diseñado, la
población convergerá hacia la solución óptima del problema.
La potencia de los AAGG viene de que la técnica que usan es robusta y puede tratar con
éxito un gran número de tipos de problemas, incluyendo y destacando aquellos que son
Daniel Manrique Gamo
Página 11
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
difícilmente solucionables utilizando otro tipo de métodos clásicos. Los AAGG no
garantizan la localización exacta de la solución óptima del problema, pero proporcionan
una solución alternativa aceptablemente buena en un tiempo corto. Este hecho es
especialmente interesante en el caso de resolución de problemas donde todavía no se ha
desarrollado una técnica específica.
2.1.
Historia de los algoritmos genéticos
Las primeras ideas en las que se basan los AAGG se pueden encontrar en los artículos
de Holland de principios de los años 60 [Holl, 62]. En ellos se establecen los aspectos
básicos para la comprensión y el establecimiento de los principios básicos de los
sistemas adaptativos. Estos sistemas son capaces de automodificarse en respuesta a su
interacción con el medio en el que están funcionando. Las teorías sobre los sistemas
adaptativos están orientadas a facilitar, por un lado, la comprensión de las formas
complejas de adaptación que aparecen en los sistemas naturales y, por otro, la habilidad
para diseñar sistemas adaptativos robustos.
Según Holland, la característica fundamental de los sistemas adaptativos naturales es el
éxito en el uso de la competición y la innovación que les proporciona la habilidad de
responder dinámicamente a sucesos nuevos y a cambios en el medio. Para llegar a estas
ideas, Holland se basó en modelos simples de evolución biológica, a través de la
superviviencia del más adaptado y la producción continua de nueva descendencia.
A mediados de los años 60, las ideas de Holland empezaron a plasmarse en modelos
implementados en ordenador. En cada uno de estos sistemas se representaban elementos
por medio del uso de genomas en los que los mecanismos de evolución y herencia eran
abstracciones de operadores genéticos como la mutación, el cruce o la inversión.
Estos estudios experimentales desembocaron en el tratamiento de problemas de
búsqueda más complejos, como el reconocimiento de patrones. Asimismo, se realizaron
los primeros estudios con operadores de selección de tipo elitista y las ideas básicas
para el empleo de probabilidades adaptativas de mutación y cruce. También en esta
época se estudió detalladamente, por primera vez, las diferentes posibilidades de
reproducción y cruce. Usando dos espacios de soluciones diferentes, se experimentó con
una amplia variedad de operadores de cruce. También resultó interesante la utilización
de la codificación binaria del genoma y las ventajas de la codificación Gray [Hols, 71].
En paralelo con estos estudios experimentales, Holland continuó trabajando en una
teoría general de los sistemas adaptativos [Holl, 67]. Durante este periodo, desarrolló la
teoría de los patrones en los sistemas adaptativos [Holl, 69] y utilizó estas ideas para
completar el análisis teórico de sus planes reproductivos [Holl, 71], [Holl, 73].
Posteriormente, Holland compiló todas estas ideas en su libro “Adaptation in Natural
and Artificial Systems” [Holl, 75].
Es interesante destacar que muchas de las propiedades de los AAGG identificadas por
Holland de forma teórica no pudieron ser observadas experimentalmente debido a la
Daniel Manrique Gamo
Página 12
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
falta de recursos computacionales. Esto obligaba a trabajar con un número limitado de
generaciones y con un número muy pequeño de individuos, habitualmente menos de 20.
En estos casos, las desviaciones en el comportamiento esperado de los AAGG se debía
al fenómeno de la pérdida de diversidad genética debido a los fenómenos estadísticos
que se producen en la selección y reproducción en poblaciones pequeñas.
A principios de los setenta ya había un gran interés en entender mejor el
comportamiento de los AAGG. En concreto, se sabía que la elección del tamaño de la
población, la representación de los individuos y la elección de los operadores y sus
probabilidades de actuación tenían efectos relevantes en el funcionamiento de los
AAGG. Así se realizaron estudios en detalle sobre la influencia del cruce y la mutación,
y se empezaron a utilizar los operadores de cruce basados en múltiples puntos [Fran,
72].
Estos estudios fueron ampliados posteriormente de forma teórico-práctica con el
análisis de los efectos cruzados de la modificación del tamaño de la población, cruce y
mutación en el comportamiento de una familia de AAGG utilizados para optimizar un
conjunto fijo de funciones de prueba [Dejo, 75]. A partir de estos estudios se empezó a
vislumbrar el enorme potencial de los AAGG para resolver problemas de optimización.
En esta misma época, se empieza a generalizar la investigación sobre los AAGG al
iniciarse trabajos en diversas universidades. Esta generalización fue muy lenta en un
principio debido a cierto escepticismo creado por los malos resultados que habían
obtenido las técnicas basadas en sistemas auto-organizativos y las redes de neuronas
artificiales con los perceptrones que no cubrieron las expectativas creadas. A pesar del
ambiente de pesimismo que se creó en torno a estas técnicas, se celebró en la
Universidad de Michigan el congreso “An interdisciplinary Workshop in Adaptive
Systems” [Samp, 81], lo cual impulsó su estudio, consiguiendo que se establecieran
diversos grupos de trabajo. Así, se empezaron a estudiar los sistemas clasificadores
propuestos por Holland [Beth, 81], [Book, 82], [Gold, 83], nuevas mejoras de los
AAGG como la regla de ponderación para aprendizaje de reglas [Smit, 80], [Wetz, 83],
o también, el estudio de nuevas aplicaciones de optimización [Brin, 91].
Dado el creciente interés en los AAGG, se organizó en 1985 el primer “International
Congress on Genetic Algorithms” donde se presentaron los últimos avances tanto
teóricos como prácticos en el empleo de estas técnicas [Gref, 85]. El éxito de esta
edición del congreso consiguió que se instaurara su celebración cada dos años. A partir
de 1989, las actividades en el campo de los AAGG habían crecido mucho, por lo que se
fundó la “International Society for Genetic Algorithms (ISGA)”.
A partir de 1990, la tendencia ha sido la de un tremendo crecimiento y diversificación
del área de investigación de los AAGG, como se refleja en el éxito de las distintas
conferencias y la proliferación de libros y publicaciones periódicas. La interacción de
los AAGG con otras técnicas de la Computación Evolutiva se ha traducido en un muy
productivo intercambio de ideas y la aparición de nuevas aplicaciones híbridas.
Daniel Manrique Gamo
Página 13
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Actualmente, las aplicaciones basadas en AAGG continúan desarrollándose abarcando
un amplio abanico de campos como la ingeniería, la investigación operativa y la
programación automática.
2.2.
Características y funcionamiento de los algoritmos genéticos
Los AAGG comienzan con una muestra aleatoriamente elegida en el espacio de
búsqueda, para ir transformándola paso a paso hasta llegar a un estado estacionario, en
el cual la muestra, también llamada población, está constituida por las soluciones del
problema. Un AG no actúa, en general, directamente sobre el espacio de búsqueda, sino
sobre una codificación de éste, haciendo interaccionar entre sí y operando sobre las
cadenas resultantes de dicha codificación. Esta acción tiene como consecuencia la
progresiva transformación del conjunto de elementos evaluados, hasta llegar al estado
final. Para ello, los algoritmos genéticos se valen de la acción de los llamados
operadores genéticos, tales como reproducción, cruce y mutación, a la que es sometida
la población. Cada operador juega un papel diferente en la evolución de la población.
Así, la reproducción puede ser entendida como una competición, mientras que los otros
operadores, tales como el cruce y la mutación son capaces de crear nuevos individuos a
partir de los existentes en la población. La figura 3.1 muestra el funcionamiento
genérico de los AAGG.
Figura 3.1. Esquema general de funcionamiento de los algoritmos genéticos.
El operador de reproducción obtiene un mejoramiento de la población, mediante un
proceso en el cual se obtienen individuos para la población mejorada de acuerdo con
cierta ley de probabilidad. Para cada individuo, la probabilidad de ser elegido por este
operador, para formar parte de la siguiente generación, depende de su proximidad al
óptimo buscado. De este modo, este operador causa la desaparición de los individuos
más débiles, a costa de la permanencia de los más fuertes.
La reproducción sólo selecciona individuos de entre la población existente. Para llegar
de este modo a las proximidades del óptimo buscado, se necesitaría una gran cantidad
de individuos en la población, ya que la solución proporcionada por la única aplicación
de este operador sería un individuo de la población inicial. En el caso extremo de que la
población estuviera constituida por la totalidad de los individuos entre los que se busca
el óptimo, un algoritmo aceptable consistiría en la sucesiva aplicación de este operador
Daniel Manrique Gamo
Página 14
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
sobre dichos individuos hasta obtener una única muestra formada por un único
individuo repetido en toda la población. Precisamente, una de las ventajas de los
algoritmos genéticos consiste en su eficacia para obtener buenos resultados partiendo de
muestras con cardinal relativamente pequeño con respecto al cardinal del conjunto en el
cual se busca la solución.
La introducción del operador de cruce permite renovar la población, supliendo el
inconveniente presentado por la reproducción. Es en este operador donde juega un papel
muy importante la codificación. Se trabaja ahora con códigos de individuos, de forma
que cada punto del espacio de búsqueda se transforma en un vector o cadena, cuyos
elementos están formados por caracteres pertenecientes a un determinado alfabeto. El
cruce actúa según cierta probabilidad, obteniendo nuevos individuos, denominados
descendencia, con ciertas características “heredadas” de aquellos de los cuales se partió.
Generalmente se suelen emplean dos individuos padres, para generar una descendencia
nueva de otros dos individuos.
Podría pensarse que el efecto de este operador es negativo, ya que pueden resultar
destruidas, de un modo aparentemente arbitrario, cadenas correspondientes a puntos
obtenidos mediante reproducción. Por ello, si bien es cierto que existe una probabilidad
de que estas cadenas se pierdan, también es posible que los nuevos elementos que van
apareciendo mejoren la población, tanto por su proximidad al óptimo buscado, como
por los posibles descendientes a los que pudiera dar lugar posteriormente. Este
enriquecimiento de la población es el objetivo del operador de cruce.
Cuando se cruzan cadenas, existe cierta relación entre los progenitores y los
descendientes. Es por ello por lo que se puede hablar de herencia transmitida por los
primeros a los segundos. Hay ocasiones, con fines experimentales, donde únicamente se
emplean estos dos operadores descritos con el fin de observar más claramente el
comportamiento de los mismos y poder obtener conclusiones. Sin embargo, los
resultados que se obtienen son mejores cuando el algoritmo utilizado se completa con el
operador de mutación. Dicho operador actúa, con cierta probabilidad, directamente
sobre las cadenas, cambiando de forma aleatoria alguno de sus valores. El efecto de este
cambio, en una cadena afectada por el operador, es imprevisible, en el sentido de que
puede obtenerse, a partir del elemento del que se parte, cualquier otro del espacio de
búsqueda. De este modo, se obtienen nuevos individuos para ser evaluados. Esto
produce un enriquecimiento de los individuos de la población, objetivo común de los
operadores de cruce y mutación. Pero con la mutación, desaparece el concepto de
herencia transmitida de los padres a la descendencia que existía en el operador anterior.
Se puede decir que la mutación provoca la búsqueda en nuevas regiones del espacio,
que de otro modo serían inaccesibles. Sin este operador, la búsqueda quedaría limitada,
tras cierto número de pasos, a determinadas zonas de dicho espacio. Con esto, existe el
peligro que el algoritmo converja a soluciones subóptimas [Sced, 89].
Daniel Manrique Gamo
Página 15
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Con relación al tema de que la solución obtenida por el algoritmo esté más o menos
próxima al óptimo buscado, se necesita una base teórica que proporcione un método
para el estudio de dicha proximidad. Según se decía anteriormente, una de las
características de los AAGG es que la solución se presenta en forma de un conjunto de
puntos, y no de un único punto. Partiendo de un estado inicial, la población evoluciona
para aproximarse a la solución del problema. En cada nuevo estado, se aproxima más a
la solución. Finalmente, si el problema converge a un único punto, la población estará
formada por el mismo elemento, repetido tantas veces como indique su cardinal.
También se puede hablar de convergencia cuando una población está formada por
puntos que, aunque no sean todos iguales entre sí, están muy cercanos a la solución.
Para el estudio de la evolución de la población se ha utilizado la teoría de patrones
[Holl, 81] para el caso de individuos codificados con un alfabeto finito. Dicha teoría
proporciona algunas bases teóricas para el conocimiento de la evolución de la población
cuando se aplica un AG. También se han realizado estudios de convergencia mediante
series de Walsh [Barr, 94] que permitan decidir si se puede producir la convergencia
hacia el óptimo en un problema dado según su función objetivo y las condiciones
necesarias que permiten dicha convergencia en el menor tiempo posible [Barr, 98].
Cuando se trabaja con AAGG con individuos codificados con números reales o, en
general, cuando el cardinal del alfabeto utilizado es muy grande, el problema de la
convergencia se ha abordado también mediante la teoría de patrones, esta vez definidos
mediante intervalos de números reales [Eshe, 93].
Los AAGG proporcionan un método de optimización con características que lo hacen
particularmente interesante con respecto a determinadas aplicaciones. Un AG trabaja
con una población de puntos, actuando sobre ellos en paralelo, comparando los valores
obtenidos de la función que se desea optimizar en dichos puntos y obteniendo nuevos
puntos a partir de los que ya se tienen valorados. De este modo, puede interpretarse que
un AG efectúa una búsqueda en un dominio en un sentido global. Por el contrario, otros
métodos de optimización, tanto deterministas como aleatorios, utilizan un conocimiento
local de los puntos del conjunto de búsqueda, teniendo únicamente información de un
entorno de un punto. En este sentido, los AAGG usan la información aportada por todo
un conjunto de puntos de manera simultánea, por lo que, aún en el caso de búsqueda de
puntos óptimos en funciones que no presenten problemas de regularidad, el método
proporcionado por los AAGG presenta ciertas ventajas frente a los tradicionales, ya que
esta “visión global” de la función objetivo es la que evita el peligro de la caída en
óptimos locales comentada anteriormente. Asimismo, el paralelismo implícito de este
tipo de algoritmos tiene como consecuencia una mayor rapidez en la búsqueda.
El método proporcionado por los AAGG, si bien no puede ser clasificado como
determinista, tampoco puede serlo como aleatorio estrictamente hablando. No es posible
conocer, a partir de un conjunto de puntos dado, cuáles serán los siguientes puntos que
se obtengan en la búsqueda como ocurre en el caso de los algoritmos deterministas. Sin
embargo, se introducen técnicas que orientan la búsqueda hacia zonas del dominio
Daniel Manrique Gamo
Página 16
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
donde es más probable encontrar los puntos deseados, por lo que tampoco es un
algoritmo de tipo aleatorio. Como se verá más adelante, los AAGG utilizan cierta
información sobre la proximidad de los puntos elegidos al óptimo, por lo que la
búsqueda se centra más en aquellas zonas del dominio de la función en donde hay
mayor probabilidad de encontrar puntos próximos al óptimo.
La mayoría de las implementaciones de los AAGG mantienen una población de tamaño
fijo, de tal forma que, partiendo de una población de tamaño λ, se aplican los
operadores genéticos sobre la población antigua, hasta completar una nueva población
de λ individuos que reemplaza por completo a la anterior.
Para aplicar un AG a la resolución de un problema concreto, se necesita la
configuración de distintas fases. En primer lugar, se debe diseñar una codificación del
problema que determine un espacio de búsqueda. Después, hay que pensar cómo
evaluar los individuos con respecto al problema que se quiere resolver, cómo aplicar los
operadores genéticos de reproducción, cruce y mutación, cuáles de los existentes son los
más adecuados para el problema en concreto y, por último, cómo realizar la sustitución
de individuos de generaciones anteriores. Las distintas opciones disponibles para
realizar estas tareas se muestran en los siguientes puntos.
2.3.
Codificación del problema
Cuando se trabaja con AAGG, se precisa algún método de codificación de los puntos
del espacio de búsqueda de la función con la que se está trabajando. Esta es una de las
características más interesantes y peculiares del método, ya que con ello cada punto se
puede tratar como una cadena, en función de la codificación utilizada. Por tanto, una
vez aplicada la codificación, el dominio de la función a optimizar queda transformado
en un conjunto acotado de valores representados por cadenas, independientemente de su
origen.
Habitualmente, la codificación utilizada suele ser completa. Es decir, si se utiliza un
alfabeto A de cardinal finito m, y cadenas de longitud l, cualquiera de las ml posibles
cadenas corresponde a la codificación de un único punto del dominio de la función
[Barr, 91]. Sin embargo, dada la discretización establecida por la codificación, la
correspondencia anterior no es biunívoca entre el dominio de la función objetivo y las
diferentes cadenas. En otras palabras, si se considera el conjunto Al de todas las posibles
l-uplas de elementos de A, con la condición de que ml no sea mayor que el cardinal del
dominio de la función que se quiere optimizar, existe al menos una aplicación inyectiva
Ω entre dicho conjunto y el dominio. La terna formada por A, l y una de tales
aplicaciones Ω, determina una codificación de un subconjunto del dominio. Dicho
subconjunto es Ω(Al), y se entiende que cada elemento (a1, a2, ..., al) de Al es la
codificación de su imagen mediante Ω. Ahora bien, el número de puntos codificados es
ml. Por tanto, sólo será posible la búsqueda del óptimo entre estos puntos. Con la
Daniel Manrique Gamo
Página 17
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
notación anterior, se puede definir el espacio de búsqueda como el subconjunto Ω(Al)
del dominio de la función objetivo.
Cuando se utiliza codificación completa, el espacio de búsqueda depende del cardinal
del alfabeto utilizado y de la longitud de las cadenas. De este modo, con un alfabeto de
cardinal m, y una longitud l para las cadenas, el cardinal del espacio de búsqueda es ml,
y será necesario aumentar la longitud de las cadenas, o bien elegir un alfabeto de mayor
cardinal, cuando se desee obtener mayor cantidad de puntos.
En general, al conjunto de puntos del espacio de búsqueda o individuos (posibles
soluciones al problema) con los que trabaja un AG en un momento dado del proceso de
evolución se denomina población. Los individuos que forman una población se
representan a su vez, como un conjunto de parámetros denominados genes. Cada gen
representa una posición en la cadena. A cada uno de los posibles valores que puede
tomar un determinado gen, se denomina alelo. Por tanto, el número de alelos posibles
de un gen coincide con el cardinal del alfabeto utilizado: m. Si la codificación es binaria
entonces existen dos posibles alelos por cada gen que son el valor cero y el valor uno.
Por último, los genes a su vez se agrupan para formar cromosomas. En la literatura
existente, se suele identificar individuo con cromosoma aunque, en general, en la
naturaleza, un individuo consta de varios cromosomas. La figura 3.2 muestra de forma
esquemática estos conceptos.
Figura 3.2. Estructura de los datos manejados por un algoritmo genético.
2.3.1.
Codificaciones binarias
Inicialmente se empezó a trabajar con codificaciones binarias de las cadenas que forman
la población. Es decir, el alfabeto habitualmente utilizado en los algoritmos genéticos
era {0,1}. En este sentido, es necesario escoger el tipo de codificación binaria que se va
emplear. Algunos trabajos experimentales indican que la codificación Gray supera a la
codificación binaria estándar [Caru, 88], al menos en los casos de prueba más
Daniel Manrique Gamo
Página 18
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
comúnmente utilizados. La razón de esta superioridad es que en la codificación Gray,
dos números enteros adyacentes sólo varían su representación binaria en un único bit.
Esto supone que un pequeño cambio en el valor del número codificado repercute muy
poco en la codificación.
Dada la importancia de la codificación de los individuos, se han llevado a cabo diversas
investigaciones para permitir que un AG adapte su propia codificación. Así Holland
propuso desde sus primeros trabajos el operador de inversión para reacomodar la
localización de los genes en las cadenas de los individuos. Posteriormente se desarrolló
el sistema ARGOT [Shae, 87], en el que existe una traducción adaptativa de los
parámetros de números reales a cadenas binarias. La resolución con que la cadena
binaria representa al número real se puede incrementar o decrementar dependiendo de
un cierto número de reglas heurísticas. También se han desarrollado métodos en los
cuales se incrementa la resolución cuando la población comienza a converger [Schr,
92]. Posteriormente se propuso una codificación denominada codificación delta en la
que, cuando la población empieza a converger, la representación de los parámetros se
modifica de forma que el intervalo de codificación esté centrado en el mejor valor
conseguido por el AG hasta el momento y, entonces, se reinicia el algoritmo [Math, 94].
En cualquiera de los casos, para el estudio de las consecuencias de la aplicación de
cualquiera de los operadores, así como la posibilidad de obtener o no la solución o
soluciones esperadas, se introduce el concepto de esquema o patrón [Holl, 81]. Para
ello, se añade al alfabeto binario un tercer carácter, denominado carácter añadido,
obteniendo el alfabeto {0,1,*}. Se denomina entonces patrón o esquema y se representa
por H a todo elemento del conjunto {0,1,*}l.
De este modo, un patrón o esquema se puede representar mediante una l-upla (p1, p2, ...,
pl) donde cada pi∈{0,1,*}. Un patrón p1p2...pl representa un conjunto de cadenas o
elementos de {0,1}l. Para ello, se distinguen dos casos: Si pi es un carácter del alfabeto
original, toda cadena del conjunto toma el valor pi en la posición i. En caso contrario, si
pi=*, entonces las cadenas del conjunto pueden tomar cualquiera de los valores del
alfabeto original en la posición i. Se dice que las cadenas contenidas en un esquema H,
como elementos del conjunto H, son ejemplos o representantes de dicho esquema. La
cantidad de caracteres añadidos de cada patrón determina sus grados de libertad, de
modo que aquellos patrones con más caracteres añadidos tienen, como conjuntos, mayor
cardinal. Concretamente, si en el patrón H aparece el carácter añadido k veces, dicho
patrón es un conjunto formado por 2k cadenas.
Se denomina orden del esquema H, denotado por O(H), a la cantidad de posiciones que
no están ocupadas, en su representación en cadena, por caracteres añadidos. Se trata por
tanto del número de posiciones fijas en el esquema. De este modo, la cantidad de grados
de libertad se obtiene como la diferencia entre la longitud de cadena y el orden.
Daniel Manrique Gamo
Página 19
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Se denomina longitud de un patrón a la distancia máxima entre dos posiciones de dicho
patrón no ocupadas por el carácter añadido. La longitud del patrón H se representa por
l(H).
Por otra parte, ξ(H,t) denota el número de cadenas que en una determinada población en
el tiempo t, se asocian con el esquema H. Se denomina adaptación de un esquema H en
el tiempo t, denotada por eval(H,t), a la media de la función objetivo de todas las
cadenas de la población que pertenecen al esquema H.
Dada una población en el instante t compuesta por λ individuos I1, ..., Iλ, se denota por
F(t) a la media de la función objetivo extendida a toda la población en el tiempo t. Por
tanto, se tiene:
F(t) =
f (Ii),
siendo f(Ii) el valor de la función objetivo del individuo Ii de la población en el instante
t.
Con todos estos conceptos y notación introducida hasta el momento, es posible enunciar
el teorema de los esquemas de la siguiente manera [Larr, 96]:
Sea Esel,cru,mut (ξ(H,t)), el número esperado de individuos que se asocian con el esquema
H, en el tiempo t+1. Después de efectuar la reproducción, el cruce y la mutación en un
algoritmo genético con alfabeto binario, se tiene que:
siendo pc y pm la probabilidad de cruce y mutación respectivamente.
De la fórmula anterior, se desprende como conclusión que esquemas cortos, de bajo
orden y longitud y con una adaptación al problema superior a la adaptación media, se
espera que a medida que evoluciona el AG, obtengan un rápido incremento en el
número de individuos que se asocian con los mismos. La importancia de este teorema
queda de manifiesto cuando se trata de predecir la convergencia de un algoritmo, en
cierto problema. La solución o soluciones obtenidas en cada generación se ajustarán a
los patrones que sobrevivan, hasta ese momento, a la acción de los operadores
genéticos.
2.3.2.
Codificaciones no binarias
Como se ha dicho anteriormente, el tipo de codificación más comúnmente utilizada ha
sido la binaria [Gold, 89b]; sin embargo, desde que se han empezado a utilizar alfabetos
de mayor cardinal [Davi, 91], [Wrig, 91], [Ange, 92], [Anto, 92], se ha observado que
éstos poseen ciertas ventajas [Jani, 91]. La forma más común de codificar un problema
empleando un alfabeto de alta cardinalidad es mediante la codificación con números
enteros [Bram, 91], o mediante números reales [Mich, 91], [Manr, 01].
Daniel Manrique Gamo
Página 20
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
En general, no se puede hablar de que la codificación binaria sea siempre superior, en
términos de velocidad de convergencia, a la codificación con números reales o
viceversa. Las ventajas que puede presentar el uso de un tipo u otro de codificación
depende del problema que se esté tratando [Eshe, 93]. La codificación real tiene las
siguientes ventajas frente a la binaria:
•
La propia representación de un problema con un alfabeto de cardinal elevado como
los números reales supone ya una ventaja en sí misma. En cierto tipo de problemas
la interpretación resulta ser mucho más directa que la codificación del problema con
números binarios. En este último caso se requiere de un proceso de descodificación
para pasar los individuos de una población al espacio definido por la función
objetivo y conocer las soluciones proporcionadas por el algoritmo y el grado de
adecuación de las mismas.
•
La codificación con números reales resulta muy adecuada cuando el dominio de la
función objetivo es continuo. Trabajar en este caso con un espacio de búsqueda
codificado con números binarios implica utilizar una precisión suficiente para que
haya alguna solución codificada dentro del error permitido. Puesto que, en general,
no se conoce a priori cual es el grado de precisión requerido sería necesaria la
utilización de una gran cantidad de bits (más que los realmente necesarios puesto
que no se conoce la localización del óptimo) que permitieran alcanzar la solución,
con la consiguiente pérdida de rendimiento.
•
Mediante la codificación con números reales, ya no se hace necesario exigir que el
cardinal del espacio de búsqueda sea una potencia de dos. Efectivamente, si se
utilizan cadenas binarias de longitud l, existen exactamente 2l puntos en el espacio
de búsqueda. El problema aquí se produce cuando el dominio de la función objetivo
es de tipo discreto y contiene menos de 2l puntos. En este caso existen puntos dentro
del espacio de búsqueda que no pertenecen al dominio de la función. Una forma de
tratar estos puntos consiste en darles a este tipo de soluciones un grado de
adecuación muy bajo, pero esta solución generalmente complica mucho el
problema, y lo cierto es que no existe una forma adecuada de tratarlos.
•
Los algoritmos genéticos codificados con números reales tienen la capacidad de
explorar las funciones de variables reales de forma gradual: pequeños cambios
introducidos en las variables producen pequeños cambios en los valores dados por la
función. Esta característica permite explorar el dominio de la función objetivo con
gran precisión.
Daniel Manrique Gamo
Página 21
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Al igual que se había desarrollado el concepto de patrón para codificaciones binarias, se
desarrolló posteriormente el concepto de patrón intervalo o esquema intervalo, similar
al dado por Wright de esquemas o patrones conectados [Wrig, 91]. Estos conceptos
permiten demostrar teóricamente que la codificación con números reales, enteros o, en
general, elevada cardinalidad, resulta más eficiente que la codificación realizada con
alfabetos de baja cardinalidad en ciertos tipos de problemas [Eshe, 93].
Supóngase, por ejemplo, que se está trabajando con cadenas de números naturales N de
longitud l de la forma c = c1 c2 ... cl, ci ∈ N. El concepto de esquema intervalo añade a la
codificación empleada la posibilidad de que aparezcan intervalos de números naturales,
denotados por Ii, en posiciones i de la cadena de la forma Ii = [ai,bi]∩N, con ai y bi ∈ N.
Se denomina esquema intervalo a todo elemento de la forma c’=c’1c’2... c’l, c’i∈{Ii}∪N.
El patrón intervalo c’ representa un conjunto de cadenas, existiendo dos casos: Si c’i ∈N
entonces todas las cadenas del conjunto toman el valor c’i en la posición i. En caso
contrario, si c’i = Ii, entonces las cadenas del conjunto pueden tomar cualquiera de los
valores del intervalo [ai,bi]∩N.
Supóngase ahora que se trabaja con cadenas c de números naturales formadas por un
único gen. En este caso los patrones intervalo serán de la forma c’ = [a,b]. Si la longitud
del intervalo es n (n = b – a +1), entonces el número de esquemas intervalo (incluyendo
todos los posibles subintervalos) que pueden ser definidos es:
Por tanto, para el caso concreto de que el gen de c tome valores concretos dentro del
intervalo [0,7], existen un total de 36 esquemas intervalo a los que podría pertenecer la
cadena c. Como ejemplos de esquemas intervalo más anchos existe uno de longitud 8:
[0,7], hay dos de longitud 7: [0,6] y [1,7]. En el extremo opuesto, tenemos que existen
ocho esquemas intervalo de longitud 1: [0,0], [1,1], ..., [7,7]. Cada uno de los valores
que pueda tomar el gen de la cadena c es miembro de como mínimo n esquemas
intervalo y pertenece como máximo a E[(n+1)2/4] esquemas intervalo (E[x] es la
función parte entera). Para el caso particular de que dicho gen pueda tomar valores
k∈[0,n-1], este valor pertenecerá a (k+1)·(n-k) esquemas intervalo. Es fácil ver también
que, dados dos valores k1 y k2 ∈ [0,n-1] con k1 < k2, tienen (k1+1)·(n-k2) esquemas
intervalo en común.
La cantidad de intervalos de cada patrón intervalo determina sus grados de libertad.
Desde un punto de vista geométrico, un esquema intervalo en el que haya dos intervalos
define un conjunto rectangular de cadenas, mientras que si existen l intervalos, el
conjunto definido tiene una forma hiperprismática de dimensión l.
El empleo del concepto de patrones intervalo cuando se trabaja con AAGG codificados
con alfabetos de alta cardinalidad permite, al igual que los esquemas definidos sobre
alfabetos de baja cardinalidad, realizar estudios sobre el comportamiento del AG a lo
Daniel Manrique Gamo
Página 22
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
largo de su evolución así como de los operadores que actúan dentro de él. Es fácil
observar que cualquier método de selección que elige con una mayor probabilidad
aquellos individuos mejor adaptados, también elegirá con mayor probabilidad aquellos
esquemas intervalo que contienen a los elementos mejor adaptados, por lo que no se
pierden los mejores esquemas intervalo. La cuestión fundamental a la hora de diseñar un
operador de cruce para individuos codificados con números reales o enteros es, por
tanto, que sea capaz de explorar y preservar los mejores patrones intervalo, aunque sin
descuidar la posibilidad de alcanzar otras zonas del espacio de búsqueda [Radc, 90],
[Mich, 96], [Ono, 97] .
2.4.
La función de evaluación
La función de evaluación, también denominada función objetivo, tiene que ser diseñada
para cada problema que se quiere resolver [Dora, 99]. Dado un cromosoma concreto, la
función de evaluación devuelve un valor de ajuste o adaptación, que es proporcional a la
habilidad del individuo que representa el cromosoma.
A la hora de optimizar una función mediante algoritmos genéticos, ésta puede ser
utilizada directamente como función de evaluación, aunque en ciertos casos es posible
obtener mejores resultados cuando se emplea una transformación o una aproximación
de la misma. La elección de una adecuada función objetivo, junto con la codificación
utilizada, son dos aspectos que resultan cruciales en el comportamiento de los AAGG.
Idealmente, interesaría construir funciones objetivo con ciertas regularidades, es decir,
funciones objetivo que verifiquen que para dos individuos que se encuentren cercanos
en el espacio de búsqueda (recordemos que el espacio de búsqueda es un subconjunto
del dominio de la función objetivo definido por la función Ω(Al)), sus respectivos
valores en la función objetivo sean también parecidos. Además, la existencia de gran
cantidad de óptimos locales en la función objetivo, o el hecho de que el óptimo global
se encuentre muy aislado suponen dificultades añadidas en el comportamiento de los
AAGG.
En muchos problemas de optimización combinatoria, donde existen gran cantidad de
restricciones, buena parte de los puntos del espacio de búsqueda representan individuos
no válidos, para los cuales no hay un valor definido de adaptación. Este hecho supone
dificultades a la hora de emplear los AAGG por lo que se han propuesto varias
soluciones [Larr, 96].
La primera es la absolutista, donde aquellos individuos que no verifican las condiciones
necesarias para ser válidos no son considerados como tales, y se siguen efectuado cruces
y mutaciones sobre ellos hasta conseguir que se les pueda asignar un valor por la
función objetivo. Una posible variante consiste en dar un valor fijo a los individuos no
válidos que represente poca adaptación, con el fin de que no sean elegidos para
reproducción, cruce o mutación, y desaparezcan en la siguiente generación. Asimismo,
existe la posibilidad de reconstruir aquellos individuos que no verifican las restricciones
mediante la aplicación de un operador denominado reparador. Otra solución es
Daniel Manrique Gamo
Página 23
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
establecer un criterio de penalizaciones en la función objetivo. La idea general consiste
en dividir la función objetivo por una cantidad (la penalización) que guarda relación con
aquellas características del individuo que le hacen no ser válido. Dicha cantidad puede
tener en cuenta el número de características violadas, o bien el denominado costo
esperado de reconstrucción, es decir, un coste asociado a la conversión de dicho
individuo en otro que sea válido.
Hay ocasiones en las que se emplea una evaluación aproximada de la función objetivo,
sobre todo cuando la computación de la misma es muy costosa. La obtención de una
aproximación al valor de adaptación para un determinado individuo puede resultar
mejor que su evaluación exacta siempre y cuando se obtenga una gran velocidad de
cálculo como contrapartida.
En la elección de una adecuada función objetivo, es necesario, además, que el intervalo
de posibles valores de adaptación que proporciona sea el adecuado. Si este intervalo es
demasiado amplio, es posible que se dé el caso de que unos pocos individuos dominen
sobre todo el resto de la población. Si, por el contrario, dicho intervalo es demasiado
estrecho, se produce una convergencia muy lenta hacia el valor óptimo.
Por último, hay que resaltar que existe la posibilidad de modificar el valor de la función
objetivo en cada individuo de tal manera que individuos que estén muy cercanos entre
sí, se devalúen con objeto de que la población gane en diversidad [Gold, 87]. Dada una
codificación binaria del problema, si se denota por d(Ij,Ii) la distancia Hamming entre
los individuos Ij y Ii en un instante t, y por K un valor real positivo fijo, se puede definir
la siguiente función:
h [d (Ij,Ii)] =
K – d (Ij,Ii), si d (Ij,Ii) < K
0,
si d (Ij,Ii) ≥ K
A partir de la función h se define, para cada individuo Ij de la población, el valor de
devaluación σj de la función objetivo de la siguiente manera:
σj =
h [d (Ij,Ii)]
Por tanto utilizando este método, cualquier función objetivo f que hace corresponder a
todo individuo Ij de la población un valor de medida de su adaptación al problema f(Ij),
queda modificada de la siguiente forma:
f*(Ij) = f(Ij) / σj
De esta manera, aquellos individuos cuyas codificaciones sean parecidas (dependiendo
del parámetro K) verán devaluadas sus adaptaciones y, por tanto, se reducirá la
probabilidad de ser seleccionados como padres, promoviendo la existencia de
individuos que se encuentren más aislados, por lo que se produce un aumento de la
diversidad genética.
Daniel Manrique Gamo
Página 24
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
El mecanismo de devaluación de la función objetivo descrito, puede ser también
aplicado a otro tipo de codificaciones simplemente definiendo una distancia d(Ij,Ii) entre
dos individuos que dé una medida de su parecido.
2.5.
Convergencia
Una vez conocido y planteado el problema de optimización con algoritmos genéticos, la
pregunta inmediata es hasta qué punto puede esperarse la obtención de la solución
buscada. La respuesta a esta pregunta es un claro indicador de la bondad del método. En
aquellos casos en los que se pueda esperar convergencia del algoritmo hacia el óptimo u
óptimos de la función objetivo, se puede comenzar a plantear otras cuestiones, tales
como la velocidad de convergencia, o el error cometido por el método.
Si el algoritmo genético ha sido implementado correctamente, la población evolucionará
a través de las generaciones de tal forma que la adaptación del mejor y la media de
todos los individuos en cada generación se incrementará hacia el óptimo global. Este
proceso de incremento uniforme del valor de adaptación es lo que se denomina
convergencia. Se dice que un gen converge cuando el 95% de la población comparte el
mismo valor para ese determinado gen [Dejo, 75], o bien que todos los valores que toma
ese gen en todos los individuos de la población sufren variaciones de no más del 5%
para el caso de alfabetos infinitos. Asimismo, se dice que la población converge cuando
todos los genes han convergido.
Hay que tener en cuenta que tanto la convergencia de los AAGG, como su velocidad de
convergencia y error cometido depende en gran medida de ciertos parámetros como el
tamaño de la población, frecuencia de aplicación de los diferentes operadores, además
de la elección de los diferentes operadores.
2.5.1.
Medidas de convergencia
Como ejemplo de la preocupación de algunos investigadores respecto al tema de la
buena convergencia de los AAGG, cabe destacar los estudios de De Jong [Dejo, 75], el
cual definió dos medidas de convergencia que aún hoy siguen vigentes: la medida fuera
de línea (offline) y la medida en línea (online).
La medida fuera de línea mide la capacidad de convergencia del algoritmo. En cada
generación T, se mide la media entre todos los mejores individuos de las generaciones
anteriores, incluida la actual:
m* (T) =
f (I* (t))
donde f (I* (t)) es el valor de la función objetivo para el individuo más cercano al óptimo
en la generación t. En cada generación t, la medida fuera de línea se puede interpretar
como un indicador del progreso del algoritmo. Cuando transcurre cierto número de
generaciones, el resultado de dicha medida puede aproximarse o no al óptimo buscado.
La velocidad con que esto ocurre indica la capacidad del algoritmo para estabilizarse en
Daniel Manrique Gamo
Página 25
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
la solución. De este modo, la medida puede ser utilizada para establecer algún criterio
de parada. Por ejemplo, cuando la diferencia entre resultados obtenidos para
generaciones consecutivas es suficientemente próximo a cero, según cotas establecidas
a priori.
La medida en línea se define como la media, para la función objetivo, obtenida por el
algoritmo hasta el momento de la evaluación:
m (T) =
F(t)
donde F(t) es la media de los valores de la función objetivo de todos los individuos
existentes en la generación t.
Para ambas medidas, la diferencia entre los valores obtenidos en generaciones
consecutivas proporciona información sobre la última de éstas. La comparación entre la
medida en línea y la medida fuera de línea para cada generación, puede considerarse
como un indicador del estado en el cual se encuentra el algoritmo. En efecto, al
comienzo existe una mayor diversidad genética en la población, y la media puede diferir
considerablemente del individuo mejor adaptado. Pero, cuando el algoritmo avanza
hacia la solución, los individuos de la población empiezan a aproximarse al mejor valor
obtenido, sea o no la solución óptima. Entonces, la media y el óptimo obtenidos en cada
generación se aproximan entre sí.
La utilización de estas medidas a lo largo del proceso de evolución del algoritmo
permite advertir problemas de convergencia. Si se tiene poco cambio en línea entre
generaciones consecutivas, se puede intuir la poca renovación de la población entre dos
instantes de tiempo, ya que la media alcanzada es parecida. Por tanto, si ese valor está
muy alejado de la solución final, se está dando un problema de convergencia hacia un
subóptimo. Si, por otro lado, la variación de esta medida con respecto a la medida fuera
de línea es grande, y no mejora significativamente con el paso del tiempo, ello indica
que la media alcanzada en cada generación dista mucho del mejor individuo que se tiene
hasta el momento. Por tanto se puede deducir que el algoritmo actúa muy lentamente
sobre el problema que se está tratando, dando lugar a un proceso de convergencia muy
lento.
Estudios posteriores tratan de obtener una medida de la diversidad genética de la
población en un instante determinado con el fin de conocer el proceso de evolución
actual. Si la medida de la diversidad genética indica un valor muy bajo, significa que la
población está convergiendo, al contrario que si la diversidad genética es alta. En este
sentido, se ha utilizado la desviación típica de cada uno de los genes de los individuos
medidos en toda la población. Una desviación típica elevada indica mucha diversidad
genética. Por el contrario, si la desviación típica es muy baja, significa que la población
está convergiendo [Roch, 99].
Daniel Manrique Gamo
Página 26
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Otros trabajos utilizan una medida de la diversidad genética incluida dentro del
operador de cruce con el fin de variar su comportamiento de acuerdo a ésta. Esto es lo
que ocurre en el caso del operador de cruce gaussiano [Ono, 97]. Aquí la medida de la
diversidad genética se obtiene a partir de una definición de la distancia existente entre
los tres padres que se van a cruzar elegidos mediante algún mecanismo de selección. A
partir de esta medida se construye una distribución normal de donde se obtienen los dos
hijos.
2.6.
Operadores genéticos
Entre los operadores genéticos, los considerados fundamentales por la mayoría de los
estudiosos del tema [Holl, 75], [Gold, 89], son los de reproducción, mutación y cruce.
Cada uno de ellos desarrolla una labor específica, bien diferenciada de las de los demás,
como se verá seguidamente.
2.6.1.
Operadores de reproducción
Este operador selecciona, entre los diferentes puntos de la población, aquellos que van a
tener descendencia, para lo cual se copian primero a un lugar intermedio denominado
lugar de apareamiento (matting pool). Los individuos más adaptados tienen más
probabilidades de ser seleccionados, incluso varias veces si esto se permite. Por el
contrario, los individuos menos adaptados tendrán una probabilidad muy baja de poder
producir descendencia.
El comportamiento de los AAGG depende mucho de cómo se seleccionen los
individuos para producir la descendencia. Existe una gran variedad de métodos de
selección, entre los que se destacan los siguientes por ser los más comúnmente
empleados:
1. La función de selección más utilizada, que es la denominada función de selección
proporcional a la función objetivo, en la cual cada individuo tiene una probabilidad
de ser seleccionado que es proporcional a su valor en la función objetivo [Barr, 91].
Denotando por pjprop la probabilidad de que el individuo Ij sea seleccionado de entre
una población de λ individuos y por f(Ij) el valor de la función objetivo, se tiene
que:
pjprop = f (Ij)
f (Ij)
Esta función de selección es invariante ante un cambio de escala, pero no ante una
traslación. El problema que se plantea con la aplicación de este método de selección
es que la existencia de un individuo super-adaptado provoca que únicamente él
mismo sea seleccionado, ya que tendría un valor de pjprop muy elevado, mientras que
el resto de individuos lo tendrían muy bajo. Este hecho provocaría la convergencia
del algoritmo genético hacia un óptimo local.
Daniel Manrique Gamo
Página 27
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Una de las maneras de solucionar este problema es mediante la utilización del
mecanismo de selección proporcional al orden del individuo [Davi, 89], con lo cual
se consigue un reparto más uniforme de la probabilidad de selección, tal y como se
ilustra en la figura 3.3. Este método utiliza el concepto de orden de un individuo Ij,
denotado por Orden[f(Ij)], según el cual, una vez ordenados los λ individuos de la
población de menor a mayor adaptación, asigna un valor de 1 a λ según la posición
del individuo Ij en la lista ordenada. Así, el orden del peor individuo es el valor 1,
mientras que el orden del mejor individuo es λ. Para la selección de los individuos,
se calcula la probabilidad de que el individuo Ij sea seleccionado cuando la selección
se efectúa proporcionalmente a la posición que ocupa el individuo en la lista
ordenada. Esta probabilidad se denota por pjorden y se calcula según la siguiente
fórmula:
pjorden = Orden [f (Ij) ]
λ (λ+1) / 2
El factor λ(λ+1)/2 constituye la constante de normalización. La propiedad
fundamental de la selección basada en el orden es invariante no sólo a cambios de
escala, sino también a traslaciones.
Figura 3.3. Esquemas de selección de individuos proporcional a la función objetivo (izquierda)
y proporcional al orden de los individuos (derecha).
Otro posible refinamiento del modelo de selección proporcional, es el modelo de
selección del valor esperado, el cual actúa de la manera siguiente: para cada
individuo Ij, se introduce un contador, inicializado en f (Ij) / F(t), donde F(t) denota
la media de la función objetivo en la generación t. Cada vez que el individuo Ij es
seleccionado, dicho contador decrece en una cantidad c, con c∈(0.5,1). El individuo
en cuestión dejará de poder ser seleccionado cuando su contador sea negativo.
2. El muestreo estocástico con reemplazamiento del resto [Brin, 91], que
empíricamente ha proporcionado muy buenos resultados. Según este método de
selección, cada individuo es seleccionado un número de veces que coincide con la
parte entera del número esperado de ocurrencias de dicho individuo, compitiendo el
Daniel Manrique Gamo
Página 28
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
resto de individuos por los restos de esta división. Si se nota por n(Ij) el número de
veces que el individuo Ij es seleccionado, se tiene que:
n(Ij) = n1(Ij) + n2(Ij)
donde n1(Ij) = E[f (Ij) / F(t)], y n2(Ij) corresponde a la componente aleatoria que
resulta de muestrear sobre los λ -
E[f (Ij) / F(t)] restantes individuos, siendo el
muestreo proporcional a la función objetivo de cada individuo.
3. El muestreo universal estocástico o método de la ruleta [Bake, 87] emplea un
círculo (la ruleta) dividido en sectores circulares que son proporcionales a la función
objetivo. De esta forma, los sectores correspondientes a individuos mejor adaptados
ocupan un área mayor dentro de la ruleta, mientras que los peor adaptados se
corresponden con sectores circulares con una superficie muy pequeña. Los
individuos son seleccionados a partir de marcadores igualmente espaciados, siendo
la colocación del primero de ellos aleatoria. La figura 3.4 representa un ejemplo de
este tipo de métodos en el que el individuo I1 (el más adaptado) se escoge dos veces,
los individuos I3 e I4 se escogen una vez cada uno, mientras que el individuo I2 (el
menos adaptado) no es seleccionado.
Figura 3.4: Método de la ruleta para la selección de individuos.
4. La selección por torneo [Brin, 91], constituye un procedimiento de selección muy
extendido y en el cual, la idea consiste en escoger al azar tantos individuos de la
población como se haya prefijado el tamaño del torneo (con o sin reemplazamiento),
se selecciona el mejor individuo de los que constituyen el grupo de torneo, y se
repite el proceso hasta alcanzar el número de individuos seleccionados deseado.
Habitualmente, el tamaño del torneo es de dos, y generalmente se utiliza una versión
Daniel Manrique Gamo
Página 29
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
probabilística en la cual se permite la selección de individuos sin que
necesariamente sean los mejores de los diferentes torneos que tienen lugar.
5. El método de ponderación explícita de la adaptación (explicit fitness remapping)
toma el valor dado por la función objetivo para cada individuo como estimador del
número de veces que puede ser seleccionado. Más concretamente, el número de
veces n(Ij) que un individuo Ij puede ser seleccionado es n(Ij) = f (Ij) / F(t) . Por ello,
la media del número de veces que cada individuo de la población puede ser
seleccionado es uno. Este tipo de selección reparte las posibilidades de selección de
acuerdo al grado de adaptación de cada individuo, y se corresponde con la versión
original de las teorías de Holland. Sin embargo, este mecanismo de selección tiene
el peligro de que el algoritmo genético caiga en mínimos locales, debido a que
únicamente se le da la oportunidad de producir descendencia a los individuos mejor
adaptados, produciéndose una pérdida de la diversidad genética. Para evitar este
problema existen algunas variantes de este método [Bake, 87] como el método de
cambio de escala de la adaptación y el método de cambio de escala mediante
ventanas.
Con el método de cambio de escala de la adaptación, el número máximo de veces
que un individuo puede ser seleccionado se fija a un determinado valor que
típicamente suele ser dos. El método funciona de manera similar al anterior. Sin
embargo, en este caso se aplica una escala a los valores de adaptación de los
individuos de la población. Esta escala se calcula restando al valor de la adaptación
del mejor individuo el número máximo de selecciones repetidas permitido, y
dividiendo el resultado por la adaptación media de la población. Este procedimiento
tiende a comprimir el intervalo de valores de la función objetivo, por lo que se da el
problema de una convergencia muy lenta.
El método de cambio de escala mediante ventanas es también muy parecido al
anterior, pero en este caso la cantidad que se resta es el valor mínimo de la
adaptación de los individuos aparecidos en las últimas n generaciones, siendo n
típicamente diez. Este método se encuentra implementado en [Gref, 84].
Estas dos últimas técnicas, cambio de escala de la adaptación y cambio de escala
mediante ventanas, tienen el problema de que el grado de compresión del intervalo
de valores de la función objetivo depende de un único individuo, el más adaptado, o
el peor. El rendimiento de estas técnicas sufrirá mucho si estos individuos son muy
diferentes al resto de la población.
Una vez vistos los procedimientos de selección más frecuentemente utilizados, se
podría realizar una clasificación de los mismos atendiendo a diferentes criterios.
Daniel Manrique Gamo
Página 30
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Atendiendo a si se modifican o no las probabilidades de selección de los individuos de
una generación a otra, se podría realizar una primera clasificación en métodos de
selección dinámica y métodos de selección estática. En los métodos de selección
dinámica, las probabilidades de selección varían de generación en generación como, por
ejemplo, la selección proporcional a la función objetivo. Los métodos de selección
estática mantienen las probabilidades de selección constantes como, por ejemplo, en el
método de selección basada en el orden de los individuos.
Por otro lado, si se asegura que todos los individuos tienen asignada una probabilidad de
selección distinta de cero, el método de selección se engloba dentro de los métodos
preservativos. En caso contrario, se denominan métodos extintivos.
En [Gold, 91b] se comparan algunos de los diferentes métodos de selección expuestos
en este apartado, concluyendo que todos ellos (excepto la selección proporcional a la
función objetivo) ofrecen un rendimiento similar si se utilizan los parámetros
adecuados, por lo que no existe un método definitivo a utilizar en todos los casos.
Como se ha podido comprobar, todas las diferentes formas de selección tienen en
común que tratan de elegir con mayor probabilidad aquellos individuos más adaptados,
es decir, aquellos puntos que se encuentren más cerca del valor óptimo buscado, para lo
cual, de una u otra manera, se emplea el valor dado por la función objetivo f(Ij). De este
modo, se conforma el hecho de que la actuación del operador de reproducción está
inspirada en los procesos de selección natural, de forma que los individuos más fuertes
son los que tienen más posibilidades para sobrevivir.
2.6.2.
Operadores de mutación
El operador de mutación, también actúa según cierta probabilidad pm, característica de
cada problema concreto. Cuando una cadena resulta afectada por el operador, se
selecciona aleatoriamente un lugar de mutación. Para ello, todos los lugares posibles de
la cadena son equiprobables. El valor correspondiente a dicho lugar cambia por otro de
los posibles, eligiendo éste, también aleatoriamente, entre todos los del alfabeto que se
esté utilizando. La mutación se considera, por ello, un operador genético básico, que
proporciona un pequeño elemento de aleatoriedad en los individuos de la población.
En este caso, sólo se puede hablar de un progenitor y un descendiente. Elegida una
cadena, correspondiente a un punto en el espacio de búsqueda, el producto de aplicar
este operador será otra cadena, no necesariamente perteneciente a la población actual.
De este modo el operador de mutación ayuda a renovar la población, aunque lo hace de
forma aparentemente arbitraria ya que el resultado, la cadena descendiente, nada tiene
que ver con su progenitora.
Como ilustración del resultado de aplicar este operador, supóngase código binario,
donde cada cadena se obtiene como la expresión en binario del correspondiente punto
del espacio de búsqueda de los números naturales positivos. Suponiendo, además,
longitudes de cadena igual a cinco, el individuo 01101 es la codificación de 13. Si esta
Daniel Manrique Gamo
Página 31
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
cadena resultara afectada por la mutación, y el lugar de mutación fuese 3, entonces se
obtendría el descendiente 01001, codificación de 9. Sin embargo, si el lugar de
mutación es 1, la cadena descendiente es 11101, codificación de 29. Por tanto, según el
lugar de mutación, se obtienen puntos muy diferentes del espacio de búsqueda. En este
sentido, el operador de mutación encuentra su más amplia justificación como método
para obtener nuevos puntos en los que recomenzar la búsqueda, evitando de esta forma
la pérdida de diversidad genética en la población, lo cual, como se verá más adelante,
tiene implicaciones directas en el proceso de convergencia del algoritmo genético.
Tanto es así que, según ciertos estudios, el operador de mutación va ganando en
importancia a medida que la población de individuos va convergiendo [Davi, 91].
Según lo expuesto anteriormente se observa que la elección de una adecuada
probabilidad de mutación es un elemento crucial. Si la probabilidad de mutación es muy
elevada, el algoritmo genético se convierte en una búsqueda aleatoria; mientras que si se
elige una probabilidad de mutación muy pequeña, entonces la pérdida de diversidad
genética producida cuando los individuos de la población están convergiendo, puede
llevar al algoritmo a un subóptimo. La determinación de la probabilidad de mutación es,
de hecho, mucho más crucial que la probabilidad de cruce [Scha, 89].
La búsqueda del valor óptimo para la probabilidad de mutación, es una cuestión que ha
sido motivo de muchos trabajos de investigación. Así, una de las recomendaciones es la
utilización de una probabilidad de mutación de 1/l (l es la longitud de la cadena)
[JONG75]. Otros estudios, a partir de ciertos resultados experimentales, obtuvieron que
la mejor probabilidad de mutación era proporcional al tamaño y a la longitud según la
fórmula
[Scha, 89].
Si bien en la mayoría de las implementaciones de algoritmos genéticos se asume que la
probabilidad de mutación permanece constante, algunos estudios realizados revelan que
se obtienen mejores resultados modificando esta probabilidad a lo largo del proceso de
convergencia del algoritmo [Ackl, 87], [Bram, 91], [Foga, 89], [Mich, 91], lo cual ha
sido corroborado en algunos estudios realizados más recientemente [Roch, 99], donde a
intervalos regulares en el tiempo, se obtiene la diversidad genética existente en la
población a través del cálculo de la desviación típica. Si el valor obtenido es menor que
un cierto límite predefinido, lo cual significa que la población está convergiendo,
entonces se incrementa la probabilidad de mutación. Si, por el contrario, el valor
calculado de la desviación típica como medida de la diversidad genética de la población
es mayor que este límite, entonces se reduce la probabilidad de mutación.
2.6.3.
Operadores de cruce con alfabeto finito
El trabajo con algoritmos genéticos cuya codificación de los puntos de la función a
optimizar se realiza empleando un alfabeto finito se puede modelizar, como ya se ha
indicado anteriormente, suponiendo que se emplea un alfabeto A de cardinal m.
Asimismo, se supone que la cadena c1, c2, ..., cl corresponde a la codificación de un
Daniel Manrique Gamo
Página 32
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
punto del espacio de búsqueda, donde ck∈A, para cada k∈{1,2,...,l}, utilizando cadenas
de longitud l. El operador de cruce actúa sobre cadenas correspondientes a la población
actual, generalmente dos, denominadas cadenas progenitoras o padres. Actuando sobre
las cadenas progenitoras, un operador de cruce produce generalmente otras dos cadenas
que corresponden a nuevos puntos del espacio de búsqueda, denominadas cadenas
descendientes. Este operador afecta a cada par de puntos de la población con
probabilidad pc, siendo el valor de pc característico de cada problema concreto.
A continuación se describen algunos de los operadores de cruce más importantes:
1. Operador de cruce ordinario u operador basado en un punto [Larr, 96]. Toma dos
padres seleccionados y corta sus cadenas en un punto elegido al azar, denominado
lugar de cruce, de entre los l posibles. Con esto se determinan dos subcadenas en
cada una de las cadenas del par. Si el lugar de cruce resulta ser k, y las cadenas que
se cruzan son a1, a2, ..., ak, ak+1, ..., al y b1, b2, ..., bk, bk+1, ..., bl, las subcadenas
determinas por el cruce tienen longitud k y l-k respectivamente, y están constituidas
por los caracteres correspondientes a las k primeras y l-k últimas posiciones en
ambos casos. Estas cuatro subcadenas serán utilizadas para formar las dos nuevas
cadenas que forman la descendencia. El primer descendiente se forma concatenando
la subcadena de longitud k de uno de los padres con la cadena de longitud l-k del
otro padre, y las otras dos subcadenas conducen al segundo descendiente. Por tanto,
el resultado del aplicar este operador de cruce está dado por las cadenas a1, a2, ..., ak,
bk+1, ..., bl y b1, b2, ..., bk, ak+1, ..., al. De esta forma ambos descendientes heredan
genes de cada uno de los padres.
2. Operador de cruce basado en dos puntos. Se han realizado diferentes
investigaciones en cuanto al comportamiento del operador de cruce basado en
múltiples puntos, concluyéndose que el basado en dos puntos representa una mejora
respecto al operador basado en uno solo. Sin embargo, el añadir más puntos de
cruce no beneficia al comportamiento del algoritmo [Dejo, 75]. Este operador actúa
de la siguiente forma: dadas dos cadenas a cruzar a1, a2, ..., ak, ak+1, ..., ak’, ak’+1, ..., al
y b1, b2, ..., bk, bk+1, ..., bk’, bk’+1, ..., bl, se determinan aleatoriamente, de entre los l
posibles, los dos lugares de cruce k y k’, y se intercambian las subcadenas ak+1, ...,
ak’ y bk+1, ..., bk’, quedando las cadenas descendientes a1, a2, ..., ak, bk+1, ..., bk’, ak’+1,
..., al y b1, b2, ..., bk, ak+1, ..., ak’, bk’+1, ..., bl.
3. Operador de cruce uniforme. Se basa en la definición de una máscara de cruce
consistente en una cadena de bits aleatoria de longitud l. El operador genera dos
descendientes para cada par de padres de la siguiente forma: dadas dos cadenas
padres a1, a2, ..., ai, ..., al y b1, b2, ...,bi, ..., bl, la posición i de la cadena del primer
descendiente será ai si existe el valor 0 en la posición i de la máscara de cruce; y
será bi en caso contrario. Para el caso del segundo descendiente se aplica la máscara
de forma inversa [Sysw, 91]. El término de cruce uniforme viene del hecho de que
Daniel Manrique Gamo
Página 33
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
la obtención de la máscara de cruce se realiza de forma aleatoria dando la misma
probabilidad a que en cada una de las posiciones de la máscara haya un 1 ó un 0.
El operador de cruce uniforme puede emular el comportamiento de los operadores
de cruce basados en uno o en dos puntos. Así, elegido el lugar de cruce en la
posición k para el cruce de un solo punto, se podría utilizar una máscara formada por
la concatenación de una cadena de k ceros con otra de l-k unos. En el caso del cruce
basado en dos puntos, elegidos k y k’ como lugares de cruce, la máscara se compone
de la concatenación de una cadena de k ceros, seguida de una cadena de k’-k unos y
finalmente, una cadena de l-k’ ceros.
4. Operador de cruce basado en la función objetivo. Este operador es una
modificación del cruce uniforme. El valor de la función de adaptación de cada padre
es tenido en cuenta a la hora de generar la máscara de cruce, de tal manera que
cuanto mayor sea la adaptación de un individuo, sea más probable heredar sus
características [Larr, 96]. En este caso, la máscara de cruce se interpreta como una
muestra aleatoria de ceros y unos de tamaño l que sigue una distribución de
Bernouilli de parámetro:
p = f (Ii)
f (Ii) + f (Ij),
donde Ii e Ij son los padres seleccionados para el cruce y f es la función objetivo.
5. Operador de cruce basado en el enfriamiento simulado. Se basa en la definición de
un umbral de energía θc y una temperatura T, las cuales influencian la manera en la
que se escogen los caracteres dentro de la cadena que va a pasar a formar parte de la
descendencia [Sira, 87]. Según este operador, el bit (i+1)-ésimo se tomará del padre
opuesto del bit i-ésimo, con probabilidad e-θc/T, donde el parámetro de temperatura T
irá decreciendo lentamente por medio de un programa de enfriamiento. Con altas
temperaturas, e-θc/T toma valores próximos a 1, y el comportamiento se asemeja al
operador de cruce uniforme. Por tanto, los bits se van cogiendo alternativamente de
cada padre. Por otra parte, cuando el valor de temperatura se acerca a cero, el hijo
resultante coincide prácticamente con alguno de los padres, pues la probabilidad de
cambiar de progenitor en cada posición i es e-θc/ T, valor muy próximo a cero.
6. Operador de cruce generalizado. Parte de dos cadenas padres codificadas con un
alfabeto binario para obtener dos nuevas cadenas descendientes de las anteriores
[Barr, 91]. Sea S = {0,1}l el conjunto de todas las posibles cadenas de longitud l.
Sea g: S → {0, 1, ..., 2l-1} la función de transformación que permite, a partir de una
cadena binaria, obtener su decodificación usual como número entero. Puesto que g
es una función biyectiva, se puede definir el conjunto entero equivalente como el
conjunto g(S). De esta forma es posible trabajar con el espacio de búsqueda o el
conjunto entero equivalente indistintamente.
Daniel Manrique Gamo
Página 34
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Dadas dos cadenas binarias a y b ∈ S, los descendientes mediante el operador de
cruce generalizado serán los puntos a’ y b’ tales que:
a’∈ g-1 ( [g(a∧b) , g (a∨b)] )
;
b’ = g-1 ( g(a) + g(b) – g(a’) )
siendo ∧ el operador lógico and bit a bit, y ∨ el operador lógico or bit a bit.
A la cadena a∧b se la denomina cadena mínima, mientras que a la cadena a∨b se la
denomina cadena máxima ya que siempre se cumple que si g(a)≤g(b) entonces
g(a∧b) ≤ g(a) ≤ g(b) ≤ g(a∨b). Al intervalo [g(a∧b),g(a∨b)] se le denomina intervalo
de cruce ya que siempre se cumple que g(a’) y g(b’)∈ [g(a∧b),g(a∨b)]. La figura 3.5
localiza de forma esquemática los progenitores y descendientes dentro del intervalo
de cruce.
Figura 3.5: Progenitores y descendientes en el intervalo de cruce.
En otras investigaciones se han realizado modificaciones al operador de cruce
específicas para resolver, por ejemplo, el problema del viajante que se basan en el
orden de los genes. En este problema, no se cruzan los valores de los genes, sino su
orden dentro de la cadena, ya que cada gen representaría una ciudad, y el
cromosoma completo, el recorrido que se ha de llevar a cabo [Sysw, 91], [Davi, 91],
[Star, 91], [Muhl, 91].
Convergencia con codificación binaria
El modelo que Holland estableció para los algoritmos genéticos, y que debía resolver
los problemas de convergencia [Holl, 75], presenta ciertos problemas en la práctica, ya
que estableció las siguientes simplificaciones: la población debería ser infinita, la
función de evaluación debe reflejar exactamente el grado de utilidad de una solución y
que los genes dentro de un cromosoma no deben interactuar entre sí significativamente
[Dora, 99].
Si bien es posible satisfacer las dos últimas premisas, aunque no suele ser así cuando se
tratan problemas del mundo real, sí que es cierto que una población nunca puede ser
infinita, ni siquiera se puede disponer de un gran número de individuos en la población
para que sea computacionalmente abordable. Debido a esta causa, el rendimiento de un
AG siempre está sujeto a errores estocásticos. Los miembros de una población siempre
convergirán a algún punto del espacio de soluciones debido a la acumulación de errores
estocásticos. Si la presencia de un determinado gen en una población finita se
incrementa a lo largo de sucesivas generaciones, entonces se puede extender a todos sus
Daniel Manrique Gamo
Página 35
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
individuos. En tal caso, el valor de dicho gen queda fijo (salvo mutaciones), ya que el
cruce no puede producir nuevos valores.
Se ha puesto de manifiesto, al menos de forma empírica, que el tamaño de la población
afecta directamente en el comportamiento del AG [Gold, 91b]. En general, los
problemas de convergencia de los AAGG suelen verse atenuados, utilizando tamaños de
población mayores. Esto es debido a que la renovación de la población es mayor, y se
tiene acceso a un mayor número de puntos dentro del intervalo de búsqueda. Por tanto,
la selección se efectúa entre una mayor cantidad de individuos a la vez. Cuando, por el
contrario, el tamaño de la población es excesivamente pequeño, el algoritmo puede
conducirse rápidamente hacia puntos más distantes de las soluciones buscadas. Se
observa también, sin embargo, que existe un cierto tamaño de la población, a partir del
cual el rendimiento baja considerablemente. Efectivamente, si el tamaño de la población
es excesivamente grande, el número de generaciones necesarias para seguir avanzando
hacia el óptimo es muy elevado, por lo que el proceso de convergencia se hace muy
lento [Barr, 91].
Retomando de nuevo los trabajos de Holland, El teorema de Holland predice los
patrones con mayor probabilidad de sobrevivir son aquellos de menor orden y longitud.
Esto supone un inconveniente, ya que es posible que el óptimo se adapte a un patrón de
orden o longitud elevados y que, por tanto, no sería deseable que se destruyese.
A la vista de tales resultados, se han realizado numerosos estudios acerca de qué
operadores de cruce (ver la sección titulada operadores de cruce con alfabeto finito)
pueden paliar estas dificultades. Inicialmente se apostó principalmente por el operador
de cruce uniforme porque los patrones de un cierto orden tienen la misma probabilidad
de ser divididos, independientemente de su longitud [Sysw, 89]. Otra ventaja del cruce
uniforme es que el ordenamiento de los genes es irrelevante, lo cual significa que las
operaciones de reordenamiento, como la inversión, son innecesarias y no hay que
preocuparse de colocar los genes de forma que se puedan desarrollar buenos bloques
constructivos, al contrario que en otros operadores de cruce como el basado en dos
puntos [Beas, 93].
Eshelman [Eshe, 89] realizó una comparación en profundidad de los operadores de
cruce ordinario, basado en dos puntos y uniforme. Estos operadores fueron analizados
desde un punto de vista empírico aplicándolos a diferentes tipos de problemas diseñados
a tal fin. De estas pruebas, no se obtuvo ningún ganador claro, obteniendo unas
diferencias máximas del 20% en rendimiento. Las conclusiones de este trabajo fueron
que no se debe de tener una excesiva preocupación a la hora de elegir el método de
cruce.
Existen otros trabajos muy críticos con el operador de cruce uniforme [Spea, 91]. Sus
análisis teóricos dieron como resultado que, en general, el cruce con uno o dos puntos
son los operadores óptimos. Sin embargo comentan que el cruce basado en dos puntos
funciona peor cuando el algoritmo está convergiendo casi completamente.
Daniel Manrique Gamo
Página 36
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
A la vista de todas las conclusiones anteriores que se basan en el orden y longitud de los
patrones que van apareciendo en el proceso de evolución de un AG, cabe preguntarse si
es posible la existencia de problemas donde el óptimo buscado no se ajuste a los
mejores patrones, entendiendo que éstos son los que tienen mayor probabilidad de
sobrevivir tras cada generación. La respuesta a tal pregunta es afirmativa: los problemas
paradójicos. Por tanto, ante uno de tales problemas se puede esperar que el algoritmo se
desvíe de la solución buscada.
Para el análisis de los problemas paradójicos, se introdujo el concepto de funciones de
Walsh [Gold, 89c], [Gold, 89d], [Gold, 89e]. Las funciones de Walsh permiten
aproximar cualquier función como combinación de una base de funciones denominada
monomios de Walsh. La transformada inversa de Walsh, para cada aproximación, indica
el tipo de problema con el que se enfrenta el algoritmo, pudiendo predecirse, de este
modo, la posibilidad de llegar a obtener los resultados deseados tras su aplicación. Los
estudios teóricos posteriores, confirmados mediante simulaciones realizadas con
funciones de prueba, revelan que cuando todos los coeficientes de la transformada de
Walsh de orden mayor que uno son nulos, entonces el problema es no paradójico [Barr,
94].
Estos resultados permiten conocer a priori la dificultad del problema de optimización al
que se enfrenta el AG, así como determinar las dos deficiencias encontradas en los
operadores de cruce clásicos como el ordinario, el basado en múltiples puntos de corte y
el uniforme, que impiden la resolución de este tipo de problemas:
1. Dadas dos cadenas binarias a y b pertenecientes a una determinada población que
han resultado seleccionadas para el cruce, los operadores de cruce clásicos son
incapaces de acceder a puntos del espacio de búsqueda comprendidos entre las
cadenas máxima y mínima, entre las cuales podría encontrarse el óptimo. Como se
indicó en el estudio realizado del operador de cruce generalizado, la cadena máxima
se define como a∨b y la cadena mínima como a∧b, siendo ∧ el operador lógico and
bit a bit, y ∨ el operador lógico or bit a bit. Así por ejemplo, si a = 101101001 y b =
011101011, entonces se tiene que en ningún caso podría obtenerse como
descendiente de un operador de cruce clásico la cadena 011111001, aún estando
comprendida dentro del intervalo de cruce definido las cadenas mínima y máxima.
2. El grave inconveniente que supone la preferencia que posee este tipo de operadores
por ciertos patrones en función de su longitud o su orden, sin tener en cuenta si éstos
se encuentran o no próximos al óptimo buscado.
Daniel Manrique Gamo
Página 37
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
2.6.4.
Operadores de cruce con codificación real
El principal problema que surge a la hora de utilizar el operador de cruce cuando se
trabaja con cadenas de números reales para codificar un problema de optimización
consiste en que no es posible utilizar operadores de cruce basados en la recombinación
de los genes procedentes de los padres para generar la descendencia. Supongamos dos
cadenas de números reales a = a1,a2, ..., al y b = b1, b2, ..., bl con ai, bi∈ℜ, ∀ i∈{1, ..., l}.
Recombinando de cualquier forma los genes procedentes de los padres, se obtendrán
como descendientes cadenas de longitud l del tipo c = c1, c2, ..., cl donde ci∈{a1, ..., al,
b1, ..., bl}, ∀ i∈{1, ..., l}. Es decir, se manejarán constantemente los mismos genes
(números reales) que aparecieron en la población inicial, aunque en posiciones
diferentes a lo largo de todo el proceso de evolución. En este contexto, el único
operador capaz de generar nuevos genes sería el operador de mutación por lo que, dada
su poca probabilidad de actuación en general, no se produciría la convergencia del
algoritmo.
Uno de los primeros operadores de cruce para cadenas codificadas con números reales
es el operador de cruce plano de Radcliffe [Radc, 90]. Este operador toma dos cadenas
de números reales a = a1,a2, ..., al y b = b1, b2, ..., bl y genera dos descendientes c = c1,c2,
..., cl y d = d1, d2, ..., dl donde cada uno de los genes descendientes ci y di se obtiene de
forma aleatoria del intervalo de cruce Ci obtenido como Ci=[min(ai,bi),max(ai,bi)], para
cada i∈{1, ..., l}.
El operador de cruce lineal de Wright [Wrig, 91] toma dos cadenas a y b como
progenitores para generar tres descendientes c, d y e, donde para el caso del gen ci se
calcula como el punto medio de ai y bi, es decir, ci = ai + bi
2. Por otro lado el gen di
se calcula como di = 1.5·ai – 0.5·bi, mientras que ei = –0.5·ai + 1.5·bi.
Una generalización del operador de cruce plano es el operador de cruce combinado
[Eshe, 93]. Este operador toma dos progenitores a y b para generar dos nuevos
descendientes c y d. Para cada par de genes ai y bi procedentes de las cadenas padres, y
suponiendo ai≤bi, se crea el intervalo de cruce Ci calculado como Ci = [ai-αI , bi+αI],
donde I = bi-ai y α∈[0,1] es un parámetro predeterminado de antemano. La figura 3.6
muestra de forma esquemática el intervalo de cruce formado por los genes ai y bi de los
progenitores. El descendiente ci se toma de forma aleatoria de este intervalo de cruce,
siendo di = ai + bi - ci. A partir de la figura 4.6 se puede observar que este operador de
cruce guarda un cierto paralelismo en su funcionamiento con el operador de cruce
generalizado definido para cadenas binarias. Por otro lado se puede ver que el valor del
parámetro α determina cuánto se ensancha el intervalo de cruce con respecto al
intervalo [ai,bi] determinado por los genes de las cadenas de los padres. Si α = 0,
entonces el funcionamiento de este operador es el mismo que en el caso del operador de
cruce plano. Por el contrario, si α = 1, la longitud del intervalo de cruce es la máxima
posible, siendo de tres veces la longitud del intervalo determinado por los genes padres.
Daniel Manrique Gamo
Página 38
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Figura 3.6: Operador de cruce combinado.
Otro operador de cruce importante es el operador de cruce gaussiano [Ono, 97]. Éste
trata a los individuos de la población como vectores de números reales de dimensión l,
generando, a partir de tres cadenas progenitoras
la siguiente forma:
=
+ z1· +
=
– z1·
–
+
) / 2,
=(
zk ·
zk ·
,
y
, dos descendientes,
y
, de
,
,
z1 ∼ N (0, σ1), zk ∼ N (0, σ2) (k = 2, ..., l).
Siendo N (0, σ1) y N (0, σ2) dos distribuciones normales de media cero y desviaciones
típicas σ1 y σ2 respectivamente. σ1 se calcula como un valor proporcional a la distancia
euclídea existente entre los padres
y
proporcional a la distancia euclídea entre
. Los vectores { , ...,
. Mientras que σ2 se calcula como un valor
y el segmento que une los extremos de
y
} forman una base de ℜl.
Este operador de cruce genera hijos que se encuentran muy alejados entre sí, en
distancia euclídea, si la distancia entre los padres también es muy grande, mientras que
se mantienen próximos en caso contrario. Este hecho permite explorar todo el espacio
de búsqueda en las primeras iteraciones del algoritmo, mientras que posteriormente se
centra más en aquellas zonas donde parece estar el óptimo buscado.
Otras características del operador de cruce gaussiano es su independencia respecto a los
ejes del sistema de coordenadas y que es independiente a transformaciones ortogonales.
El operador de cruce morfológico [Barr, 00], [Barr, 03] (denominado MMX) es un
operador de propósito general para la resolución de problemas con algoritmos genéticos
codificados con números reales. Se basa en la utilización de la morfología matemática,
la cual apareció gracias a los trabajos de Matheron y Serra [Math, 65], [Math, 75], [Serr,
82], [Serr, 83], [Serr, 86], [Serr, 88]. Se basa en la aplicación de la teoría de conjuntos al
procesamiento de señales [Cres, 93]. En concreto, puesto que una imagen digitalizada
puede ser interpretada como una señal bidimensional [Dalo, 98], es muy común utilizar
los conceptos derivados de la morfología matemática al análisis de imágenes con el fin
Daniel Manrique Gamo
Página 39
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
de extraer aquellos componentes que serán útiles para describirla, tales como forma o
contornos [Giar, 88], [Gonz, 93], [Cres, 93].
El operador de cruce morfológico incluye una nueva medida de la diversidad genética
basada en el gradiente morfológico, usado generalmente en imágenes digitalizadas. Para
ello, se ha adaptado su funcionamiento y la interpretación de sus resultados con el fin de
aplicar capacidades de exploración y explotación de forma equilibrada.
El cruce morfológico opera con poblaciones de λ individuos formados por cadenas de
números reales de longitud l de la siguiente forma. Partiendo de un número n impar de
cadenas progenitoras (n ≤ λ), obtenidas sin repetición de la población actual, se obtiene
un conjunto de l intervalos, denominados intervalos de cruce C0, ..., Cl-1, a partir de los
cuales se generan las cadenas descendientes del operador, denotadas por o = (o0, ..., ol-1)
y o’ = (o0’, ..., ol-1’).
Para cada i = 0, ..., l-1, oi es un valor aleatorio perteneciente al intervalo de cruce Ci,
mientras que oi’ se obtiene como:
oi’ = ( ai + bi ) – oi
siendo ai y bi los extremos del intervalo de cruce Ci.
Puesto que se trabaja con cadenas de números reales, cada punto del espacio de
búsqueda está codificado mediante un vector definido como:
s=
, con
∈ ℜ, i = 0, 1, ..., l-1
Al conjunto de todas las cadenas que codifican el espacio de búsqueda de un
determinado problema se denota por Dlℜ. Se va a suponer de aquí en adelante que se
trabaja siempre con cadenas de números reales acotados. Es decir, cualquier gen
perteneciente a cualquier cadena s que representa un punto del espacio de búsqueda,
será un valor comprendido dentro de un intervalo real acotado:
∀ s ∈ Dlℜ, con s =
se tiene que
∈[αi, ωi], αi, ωi ∈ ℜ, ∀ i = 0, ..., l-1
Por tanto, para que un AG que trabaje con este tipo de cadenas encuentre la solución a
un problema de optimización, ésta debe poder ser codificada mediante una cadena de
genes cuyos valores se encuentren dentro de las cotas establecidas.
Con estas premisas es posible definir la función de normalización N, como una función
biyectiva l-dimensional de la forma:
N: Dlℜ → [0,1]l.
N (s) =
que transforma cada uno de los genes
, con
∈ [0,1], i = 0, 1, ..., l-1
de una determinada cadena en un número real
del intervalo [0,1]. Analíticamente, se describe la función de normalización como:
Daniel Manrique Gamo
Página 40
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Puesto que la función de normalización es biyectiva, es equivalente trabajar con cadenas
s pertenecientes al espacio Dlℜ, o bien con las correspondientes cadenas normalizadas
N(s), pertenecientes al espacio [0,1]l. Por tanto, se supone desde este momento que se
trabaja siempre con cadenas normalizadas según la función N.
Recordando que el cruce morfológico opera con un número n impar de cadenas
progenitoras de dimensión l, obtenidas mediante un mecanismo de selección sin
repetición de la población actual, se denomina matriz progenitora, y se denota por G, a
la matriz que representa todos los valores de los genes de las cadenas padre:
donde si =
(3.1)
, i = 1 ,.., n
Para cada una de las l columnas de G se define el vector unidimensional fi como:
fi =
con i = 0 ,.., l-1
Partiendo de estos l vectores columna: f0, ..., fl-1, el cruce morfológico lleva a cabo los
siguientes tres pasos: cálculo de la medida de la diversidad genética, cálculo de los
intervalos de cruce y obtención de la descendencia.
1. Cálculo de la medida de la diversidad genética.
El primer paso del operador de cruce morfológico es el cálculo de un valor que
proporcione una medida de la diversidad genética de la población. De esta forma, será
posible poder decidir de forma dinámica, según se evoluciona en el proceso de
convergencia hacia el óptimo global, si es más interesante aplicar técnicas de
explotación sobre los esquemas intervalo actualmente existentes, o si, por el contrario,
se está en peligro de convergencia subóptima. En este último caso, hay que tomar
medidas más intensas de exploración, provocando la ruptura de patrones intervalo.
La obtención de la medida de la diversidad genética se realiza gen a gen a partir de los n
individuos tomados como progenitores, es decir, se toma una medida gi para cada vector
columna fi de la matriz progenitora. Puesto que se trabaja con cada uno de los genes que
forman los individuos independientemente, es posible conocer cómo evoluciona cada
uno de ellos por separado, lo cual proporciona una mayor información, y es posible
actuar de forma distinta (explorando o explotando) según cada caso.
Sea el retículo completo ℱ, cualquier transformación ε: ℱ → ℱ que cumple la
propiedad conmutativa con respecto al ínfimo se denomina erosión. Es decir, si la
trasformación ε es una erosión, ∀ {fi} ⊆ ℱ se tiene que ε (∧ifi) = ∧i ε (fi).
Daniel Manrique Gamo
Página 41
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
De forma similar, cualquier transformación δ:ℱ → ℱ que cumple la propiedad
conmutativa con respecto al supremo se la denomina dilatación. Es decir, si la
trasformación δ es una dilatación, ∀ {fi} ⊆ ℱ, se tiene que δ (∨ifi) = ∨i δ (fi).
Estos dos operadores morfológicos pueden ser aplicados sobre funciones pertenecientes
al retículo completo ℱ, las cuales son del tipo:
f: E → T,
siendo E un conjunto cualquiera y T un retículo completamente ordenado.
Supóngase ahora que se desean aplicar las operaciones de dilatación y erosión de la
morfología matemática, pero esta vez sobre cada uno de los l vectores columna f0, ..., fl-1
de la matriz progenitora. Con este fin, se interpreta fi como la función:
fi: Dfi → [0,1], siendo Dfi = {1, 2, ..., n}
fi (j) = aj,i, con aj,i ∈ G
Puesto que [0,1] es un retículo completamente ordenado, se cumplen todas las premisas
para la aplicación de estos operadores.
Dadas una imagen f y una función b: Z x Z → Z, denominada elemento estructurante,
la operación dilatación morfológica más usual de dicha imagen con el elemento
estructurante b sobre el punto (s,t) es de la forma [GIAR88], [GONZ93]:
(f ⊕ b) (s,t) = max {f (s-x , t-y) + b (x,y) : (s-x, t-y)∈Df ; (x,y) ∈ Db}
(3.2)
donde Db es el dominio del elemento estructurante.
La ecuación 3.2 define la operación dilatación que se aplica sobre imágenes digitales.
Se trata ahora de modificar esta expresión con el fin de aplicarla sobre los vectores
columna fi de G. Para ello, hay que tener en cuenta que la única diferencia importante
entre una imagen y fi es que ésta es una función de una variable, mientras que aquella es
una función de dos variables.
Se toma en primer lugar el elemento estructurante b que, por lo dicho anteriormente,
debe tratarse de una función de una variable:
b: Db → ℜ, siendo Db = {-E (n/2), -E (n/2) + 1 , …, E (n/2)}.
E (x) es la función parte entera de x.
Al igual que suele ocurrir en el caso de imágenes digitalizadas, se supone el elemento
estructurante nulo:
b (x) = 0, ∀ x∈ Db
Con estas premisas, y partiendo de la ecuación 3.2 se define la operación dilatación
morfológica sobre los vectores fi de G, empleando el elemento estructurante b definido
anteriormente de la forma:
Daniel Manrique Gamo
Página 42
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
(fi ⊕ b) (s) = max {fi (s-x) + b (x) : s-x ∈ Dfi ; x ∈ Db}
Dado que se emplea el elemento estructurante nulo, resulta:
(fi ⊕ b) (s) = max {fi (s-x) : s-x ∈ Dfi ; x ∈ Db}
(3.3)
La operación erosión morfológica usual de una imagen f sobre un punto (s,t) de la
misma mediante el elemento estructurante b, es de la forma [GIAR88], [GONZ93]:
(f ⊖ b) (s,t) = min {f (s+x , t+y) - b (x,y) : (s+x, t+y)∈Df ; (x,y) ∈ Db}
(3.4)
Utilizando el mismo razonamiento, es posible aplicar esta operación de erosión
morfológica sobre cada uno de los l vectores f0, ..., fl-1 de la matriz progenitora,
empleando el mismo elemento estructurante nulo b. Para ello, partiendo de la ecuación
3.4, se define:
(fi ⊖ b) (s) = min {fi (s+x) - b (x) : s+x∈Dfi ; x ∈ Db}
Puesto que, de nuevo, se trabaja con el elemento estructurante nulo, resulta finalmente:
(fi ⊖ b) (s) = min {fi (s+x) : s+x∈Dfi ; x ∈ Db}
(3.5)
La transformación gradiente morfológico sobre una imagen consiste en la resta entre la
imagen dilatada y la imagen erosionada, obteniendo una nueva imagen denotada por la
función g. Su expresión es la siguiente:
g = (f ⊕ b) - (f ⊖ b)
Con muy pocas modificaciones se obtiene que la operación gradiente morfológico,
aplicada sobre un vector fi de la matriz progenitora con el elemento estructurante usual
nulo b, es la siguiente:
g (s) = (fi ⊕ b) (s) - (fi ⊖ b) (s)
El funcionamiento interno de esta operación aplicada sobre la componente situada en la
posición media del vector fi, es decir, el cálculo de g (E (n/2)+1) se realiza en tres pasos:
1. En primer lugar, se aplica una operación de dilatación del vector fi sobre el punto
E(n/2)+1, con el elemento estructurante b. De la ecuación 3.3 se deduce que el
resultado de esta operación es el valor máximo de las componentes del vector,
puesto que el elemento estructurante recorre a fi desde la componente
E(n/2)+1−E(n/2) = 1; hasta E (n/2) +1 + E (n/2) = 2· E (n/2) +1 = n (ya que n es
impar).
2. Posteriormente se calcula, de la misma forma, la erosión del vector fi sobre el punto
E (n/2)+1. A partir de la ecuación 3.5, se tiene que esta operación consiste en el
cálculo del valor mínimo de las componentes del vector fi.
Daniel Manrique Gamo
Página 43
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
3. Finalmente, se realiza la resta entre los valores máximo y mínimo de las
componentes de fi obtenidos en los dos pasos anteriores.
Definición: Sea G la matriz progenitora de dimensión (n x l) de la ecuación 3.1, y sean
f0, ..., fi, ..., fl-1 sus l vectores columna, fi = (a1,i, a2,i, ..., an,i) que contienen los n valores
de los n progenitores para el gen i. Se define como medida de la diversidad genética del
gen i en la población, el valor gi∈[0,1] calculado como:
gi = g (E (n/2)+1) = (fi ⊕ b) (E (n/2)+1) - (fi ⊖ b) (E (n/2)+1)
(3.6)
Es decir, se toma como medida de la diversidad genética del gen número i al valor del
gradiente morfológico aplicado sobre la componente situada en la posición media del
vector columna fi de la matriz progenitora.
La operación gradiente morfológico aplicada sobre una imagen digitalizada en niveles
de gris produce el realce de las zonas donde se producen cambios de nivel de gris, sin
importar la dirección del borde, dejando el resto de la imagen en tonos oscuros (valores
próximos a cero). Esto es precisamente lo que se quiere detectar en el vector fi: si las n
componentes de fi son todas parecidas, entonces el valor máximo de todas ellas será un
valor similar al valor mínimo, y por tanto, la resta entre ellos, un valor próximo a cero.
Si por el contrario, hay divergencias y, por tanto, diversidad genética para ese gen, el
valor máximo y el mínimo de las componentes de fi serán diferentes, y la operación
gradiente morfológico devolverá un valor tanto más alejado de cero (y más cercano a
uno) cuanto mayor sea la diversidad. Puesto que los genes contenidos en fi están
normalizados entre cero y uno, el caso límite de máxima diversidad es que exista un gen
con valor cero y otro con valor uno, lo que da como resultado del gradiente el valor uno.
En el extremo opuesto, si todos los genes son iguales, el resultado del gradiente es el
valor cero.
Lo dicho anteriormente supone una nueva interpretación de la operación gradiente
morfológico cuando se aplica de esta manera en AAGG reales. A este hecho, hay que
resaltar además, como característica muy importante de esta medida definida en la
ecuación 3.6, su bajo coste computacional al constar únicamente del cálculo del valor
máximo y mínimo de un vector y, posteriormente, la resta entre ambos. Al contrario que
el resto de medidas existentes hasta el momento, no hay que aplicar ni una sola
multiplicación o división, que es lo computacionalmente costoso cuando se trabaja con
números reales.
2. Cálculo de los intervalos de cruce.
Como se ha dicho anteriormente, el cruce morfológico toma un número impar de
progenitores sin repetición de la población actual para generar dos nuevos descendientes
o = (o0, ..., ol-1) y o’ = (o’0, ..., o’l-1). Cada uno de los pares de genes oi y oi’ de la
descendencia se obtienen como dos valores pertenecientes al intervalo de cruce Ci.
Daniel Manrique Gamo
Página 44
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
El cálculo de cada uno de los l intervalos de cruce Ci depende de una función ϕ: ℜ → ℜ
denominada función de exploración / explotación. La elección de ϕ se discutirá en la
siguiente sección por sus importantes repercusiones en el funcionamiento del cruce
morfológico.
Sea gimax el gen máximo, definido como la resta entre la dilatación del vector fi en el
punto medio y el valor de la función ϕ en el punto gi (valor de la diversidad genética del
gen número i):
gimax = (fi ⊕ b) (E (n/2)+1) - ϕ (gi)
Es decir, según lo comentado en el apartado anterior:
gimax = máx (fi) - ϕ (gi)
(3.7)
Asimismo, se define el gen mínimo i, y se denota por gimin, como la suma entre la
erosión del vector fi en el punto medio, y el valor de la función ϕ en el punto gi:
gimin = (fi ⊖ b) (E (n/2)+1) + ϕ (gi)
lo cual es equivalente a:
gimin = mín (fi) + ϕ (gi)
(3.8)
El gen máximo y el gen mínimo son los valores que determinan finalmente los bordes
de los intervalos de cruce, de tal forma que Ci = [gimin, gimax], con i = 0, ..., l-1.
La función ϕ de exploración / explotación, FEE, es crucial en el funcionamiento del
cruce morfológico, ya que determina cómo van a ser los intervalos de cruce.
Supóngase que ϕ (gi) = 0, ∀gi. En este caso se tiene que los intervalos de cruce son de
la forma Ci = [mín (fi), máx (fi)]. A este intervalo se le denomina intervalo de cruce
definido por los padres o intervalo de referencia. Visto desde el punto de vista de los
patrones intervalo, se podría interpretar en este caso a C0, ..., Cl-1 como el patrón
intervalo mínimo que contiene a todos los progenitores s1, ..., sn. En este caso, se
cumple también que las cadenas descendientes o y o’ también pertenecen al patrón
intervalo definido por los l intervalos de referencia. Un operador de cruce de este tipo
actuaría exactamente igual que el cruce plano de Radcliffe, o el cruce combinado
tomando α=0. Estos operadores de cruce mantienen siempre los patrones intervalo,
aplicando únicamente técnicas de explotación al generar únicamente individuos dentro
del intervalo de cruce definido por los padres. Este hecho puede llevar al algoritmo a la
convergencia prematura. La figura 3.7 muestra esta situación para el caso de un gen
cualquiera i.
Daniel Manrique Gamo
Página 45
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Figura 3.7: La descendencia se obtiene siempre dentro del intervalo de referencia.
Mediante la inclusión de la FEE en el cruce morfológico es posible controlar la
construcción de los intervalos de cruce, para que éstos no sean siempre iguales a los
intervalos definidos por los padres. Puesto que depende de la variable gi, es decir, de la
diversidad genética de la población actual, la FEE debe de proporcionar una regla que
permita, de forma dinámica según el estado del proceso de convergencia, localizar la
búsqueda dentro del intervalo [mín (fi), máx (fi)] (explotación), o bien por el contrario,
tratar de buscar nuevos puntos dentro del espacio de búsqueda (exploración).
Cuando los valores que toma algún determinado gen i en los individuos de la población
son muy similares entre sí, éste está convergiendo hacia algún punto. En estos casos, el
valor obtenido de gi será muy cercano a cero y por tanto, la FEE debe expandir el
intervalo [mín (fi), máx (fi)], para permitir la exploración de nuevos puntos dentro del
espacio de búsqueda, con el fin de evitar la convergencia hacia un punto que no sea el
óptimo. A partir de las ecuaciones 3.7 y 3.8, se deduce que en este caso, la FEE debe
proporcionar valores negativos para valores pequeños de gi, con lo que [mín (fi), máx
(fi)] ⊆ [gimin, gimax]. La figura 3.8 ilustra este caso.
Figura 3.8: Posibilidad de obtener descendencia fuera del intervalo de referencia.
Existe también la posibilidad de que los valores de un determinado gen sean muy
diferentes unos de otros en las cadenas que forman la población actual. O bien, el caso
general de que los individuos de la población estén muy dispersos dentro de todo el
espacio de búsqueda. Este hecho se produce, por ejemplo, en la población inicial o en
las primeras etapas del proceso de convergencia del AG. En estos casos, el valor de gi
será muy elevado (más cercano al valor 1) y, por tanto, la FEE debe estrechar el
intervalo de referencia, hecho importante y novedoso. Para ello, la FEE debe
proporcionar valores positivos, por lo que según las ecuaciones 3.7 y 3.8 se tiene que
[gimin, gimax] ⊆ [mín (fi), máx (fi)]. La figura 3.9 ilustra este hecho.
Daniel Manrique Gamo
Página 46
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Figura 3.9: El intervalo de cruce es más estrecho que el intervalo de referencia.
De esta forma, se evita el problema de la no convergencia por la continua exploración
de nuevos puntos cuando la población está muy dispersa, consiguiendo, por el contrario,
una convergencia muy rápida hacia algún punto. Si resultara ser el óptimo global, el AG
finalizaría en muy pocas iteraciones. Si, por el contrario, este proceso no conduce hacia
la solución, sería entonces cuando se volverían a aplicar técnicas de exploración
ensanchando el intervalo de cruce con respecto al de referencia, para explorar nuevas
regiones del espacio de búsqueda.
A continuación se describen las condiciones que debe de cumplir la función ϕ (gi) para
conseguir el comportamiento descrito anteriormente:
1. La función ϕ debe proporcionar valores positivos para valores elevados de gi. De
esta forma se estrecha el intervalo de cruce. Por el contrario, debe proporcionar
valores negativos cuando gi esté próximo a cero, ya que el gen i está convergiendo e
interesa explorar nuevas regiones ensanchando el intervalo.
2. La función ϕ debe de tener un coste computacional bajo, ya que en cada aplicación
del cruce morfológico, se calcula tantas veces como genes tengan los individuos, es
decir, se calcula l veces: ϕ (g0), ϕ (g1), ..., ϕ (gl-1).
3. El dominio de la función debe de ser el intervalo real [0,1], que contiene los valores
que puede tomar gi.
4. Puesto que la función ϕ (gi) se utiliza para el cálculo del intervalo de cruce Ci =
[gimin, gimax], se debe de cumplir siempre que gimin ≤ gimax, con lo que a partir de las
ecuaciones 3.7 y 3.8 se tiene que:
mín (fi) + ϕ (gi) ≤ máx (fi) - ϕ (gi)
Despejando ϕ (gi):
ϕ (gi) ≤ ½·[máx (fi) - mín (fi)]
(3.9)
A partir de las ecuaciones 3.3, 3.5 y 3.6, con el elemento estructurante usualmente
utilizado, b (x) = 0, ∀ x∈Db = {-E (n/2), …, 0, …, E (n/2)}, se tiene que:
Daniel Manrique Gamo
Página 47
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
gi = máx (fi) - mín (fi)
(3.10)
Luego,
ϕ (gi) ≤ ½ gi
Finalmente, se obtiene la condición que debe de satisfacer ϕ para asegurar que
gimin≤gimax:
ϕ (x) ≤
, ∀ x ∈ Dϕ
(3.11)
5. En el caso particular de que gi = 0, entonces todos los valores de los genes i de los n
individuos que se cruzan son iguales:
gi = 0 ⇒ g (E (n/2)+1) = 0 ⇒ fi(j) = k, ∀ j ∈ Dfi, k ∈ ℜ
La función ϕ (gi) debe de ser tal que cumpla la condición: ϕ (0) ≠ 0. En caso de que
esta premisa no se satisfaga, ocurre que tanto gimax como gimin son iguales a un valor
k:
gimax = máx (fi) - ϕ (0) = k
gimin = mín (fi) + ϕ (0) = k
Por lo tanto, el intervalo de cruce es Ci = [k , k]. Puesto que, como se verá en el
siguiente apartado, los valores para el gen i de la descendencia, oi y o’i, pertenecen a
Ci, entonces oi = o’i = k. Si el valor k no es el óptimo para el gen i, el AG quedará
atrapado en ese valor, no alcanzando nunca la solución óptima.
La figura 3.10 muestra la función ϕ (gi) que mejores resultados ha proporcionado en las
pruebas realizadas, cuya forma final depende de cuatro parámetros: a, b, c y d, donde
ϕ(0) = a; ϕ (c-) = b; ϕ (c) = ϕ (c+) = 0 y ϕ (1) = d.
Figura 3.10. Función ϕ empleada en las pruebas realizadas.
Para satisfacer los cinco requisitos descritos anteriormente, se debe de cumplir que:
•
La función ϕ sea como mucho de orden lineal, para no incrementar el coste
computacional del algoritmo.
Daniel Manrique Gamo
Página 48
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
•
a<0, con lo que se evita el problema de que ϕ (0) = 0, y además, por ser negativo,
ensancha el intervalo para valores pequeños de gi.
•
b ≤ a. Así, los puntos (0,a) y (c,b) determinan una recta de pendiente negativa, de tal
forma que cuanto menor sea gi, menor sea el ensanchamiento que se produce del
intervalo definido por los padres. Esto es así, debido a que si [gimin, gimax] es muy
grande comparado con [mín (fi), máx (fi)], entonces no se tiene en cuenta para nada
los valores de los genes de los padres, convirtiendo el proceso en una búsqueda
aleatoria. Este último razonamiento lleva a la conclusión de que el parámetro a tenga
que tener un valor negativo y muy próximo a cero.
•
El parámetro c puede ser cualquier valor entre cero y uno. Este parámetro es el que
decide cuándo se considera que la población está dispersa y cuándo la población
está convergiendo. Valores de gi mayores de c, indican que el gen i está disperso, lo
cual proporciona un valor positivo de ϕ (gi) que, a su vez, provoca el estrechamiento
del intervalo definido por los padres. Por el contrario, valores de gi menores que c,
indican que este gen está convergiendo, con lo que ϕ (gi) es negativo, y el intervalo
de cruce será más ancho que el definido por los padres.
•
d∈[0, 0.5]. Los puntos (c,0) y (1,d) determinan una recta de pendiente positiva de tal
forma que cuanto mayor sea gi, más disperso está el gen i, y por tanto, mayor será el
estrechamiento que se produce del intervalo definido por los padres. Si d = 0,
entonces el cruce morfológico no estrecha nunca este intervalo. Por otro lado, d
nunca puede ser mayor de 0.5 para que se cumpla la condición definida por la
ecuación 3.11.
3. Cálculo de la descendencia.
Una vez obtenidos los l intervalos de cruce C0, C1, ..., Ci, ..., Cl-1, a partir del intervalo
definido por los padres y el valor proporcionado por la FEE. El tercer y último paso del
cruce morfológico es el cálculo de la descendencia o = (o0, ..., ol-1) y o’ = (o’0, ..., o’l-1),
resultado final del operador. Como ya se comentó anteriormente, para cada i = 0, ..., l-1,
este paso se realiza en dos etapas:
1. oi es un valor aleatorio escogido del intervalo de cruce Ci.
2. oi’ se obtiene a partir del valor de oi según la expresión:
oi’ = ( mín (fi) + máx (fi) ) – oi, con i = 0, 1, ..., l-1
(3.12)
Esta forma de calcular oi’ provoca que los genes elegidos para la descendencia
cumplan:
oi + oi’ = mín (fi) + máx (fi) = gimin + gimax,
(3.13)
lo cual significa que son equidistantes al centro del intervalo de cruce.
Además, como cabría esperar, se asegura que oi y oi’ pertenecen al intervalo de
cruce Ci = [gimin , gimax]. En efecto, de la ecuación 3.12 se tiene que:
Daniel Manrique Gamo
Página 49
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
oi = ( mín (fi) + máx (fi) ) – oi’
(3.14)
Puesto que oi se elige aleatoriamente de Ci, también se tiene que:
gimin ≤ oi ≤ gimax
Reemplazando en la ecuación anterior oi por su valor de la expresión 3.14:
gimin ≤ ( mín (fi) + máx (fi) ) – oi’ ≤ gimax
Despejando oi’:
( mín (fi) + máx (fi) ) - gimax ≤ oi’ ≤ ( mín (fi) + máx (fi) ) - gimin
Finalmente, empleando 3.13:
gimin ≤ oi’ ≤ gimax
Coste computacional del operador de cruce morfológico
Se realiza a continuación un recuento de las operaciones en coma flotante que se llevan
a cabo en cada uno de los pasos del algoritmo, suponiendo cadenas de un único gen, ya
que, en el caso de existir l genes, el proceso es exactamente igual, repetido l veces:
1. Para el cálculo de g, se parte del vector f, de dimensión n, y se realiza la operación
g= máx (f) – mín (f). Se considera que el cálculo de los valores máximo y mínimo
implica la realización de n sumas / restas. Por tanto, en este primer paso se realizan
2·n + 1 sumas / restas.
2. El intervalo de cruce C = [gmin, gmax] se calcula como se describe en las ecuaciones
3.7 y 3.8 teniendo en cuenta que máx (f) y mín (f) ya están calculados del paso
anterior. Si se emplea la función ϕ propuesta en la figura 3.10, el cálculo de ϕ (g)
implica una suma y una multiplicación. Luego en total en este paso se realizan 3
sumas / restas y una multiplicación.
3. Por último, el cálculo del descendiente o’ implica una suma y una resta.
Resumiendo todo lo anterior, se tiene que para cada gen, la ejecución del operador de
cruce emplea únicamente una multiplicación y 2·n + 6 sumas / restas.
De aquí en adelante se denominará FLOPS al número total de operaciones en coma
flotante (números reales) necesarias para realizar una tarea. Asimismo, se denominará
FLOMS al número de multiplicaciones y S al número de sumas. Según lo dicho
anteriormente, se tiene que: FLOPS=FLOMS+S.
Puesto que el operador de cruce morfológico trabaja con cadenas de longitud l, una
operación de cruce emplea l FLOMS, esto es, tantas multiplicaciones en coma flotante
como genes tengan los individuos de la población, más SMMX sumas en coma flotante:
Daniel Manrique Gamo
Página 50
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
FLOPSMMX = l + l·(2n+6) = l + SMMX
(3.15)
Se observa claramente, después de este recuento, que el operador de cruce morfológico
emplea muy pocas operaciones en coma flotante, lo cual lo hace especialmente indicado
para su utilización con números reales dentro de un AG, donde se realizan gran cantidad
de operaciones de cruce a lo largo del proceso de evolución.
Además, para todos los genes se actúa de igual forma, e independientemente (los
valores de unos genes no interactúan con los otros), luego este proceso es muy
fácilmente paralelizable empleando l procesadores, con lo que la velocidad de ejecución
del cruce morfológico quedaría, en este caso, multiplicada por l.
2.6.5.
Reemplazo de individuos
Una vez obtenidos los individuos descendientes de una determinada población tras la
aplicación de los diferentes operadores, es necesario formar una nueva población (la
nueva generación) de λ individuos a partir de las λ cadenas existentes en la población
de partida y los nuevos individuos obtenidos. El concepto de reemplazo suele ir ligado
con el de tasa de reemplazamiento generacional ttg que es el porcentaje de hijos
generados con respecto al tamaño de la población inicial.
Inicialmente, el proceso de reemplazamiento se efectuaba de uno en uno, ttg=λ-1, por lo
que se generaba un único individuo descendiente que sustituía a otro de la población
inicial [Holl, 75].
De Jong aplicó el concepto de tasa de reemplazamiento generacional con el objetivo de
efectuar un solapamiento controlado entre padres e hijos [Dejo, 75]. En este trabajo, una
proporción ttg de la población es seleccionada para ser cruzada. Los hijos resultantes
reemplazarán a los miembros de la población anterior que peor adaptados se encuentren.
Este tipo de algoritmos genéticos, donde únicamente se sustituyen unos pocos
individuos, se conocen bajo el nombre de SSGA (Steady-State Replacement Genetic
Algorithms), llegando en algunas implementaciones a sustituir únicamente dos. Un
ejemplo de este tipo de reemplazamiento se aplica en el sistema GENITOR [Whit, 88],
[Whit, 89], [Whit, 90].
Es posible también realizar el reemplazamiento de individuos en bloque, es decir ttg = 1
[Gref, 86]. Según este estudio, habiendo obtenido λ individuos por aplicación de los
operadores genéticos sobre una población inicial también de λ individuos, se aplica lo
que se denomina un proceso de reducción simple, consistente en un reemplazo
generacional completo donde los nuevos λ individuos sustituyen a todos los de la
población inicial.
Otra posibilidad es la de, a partir de los λ individuos iniciales, más otros λ individuos
descendientes, obtener los λ individuos más adaptados al problema en lo que se
denomina reducción elitista de grado λ.
Daniel Manrique Gamo
Página 51
Computación Evolutiva: Algoritmos Genéticos
Algoritmos Genéticos
────────────────────────────────────────────────────────────────────────────────────────────
Los algoritmos genéticos modificados llevan a cabo el reemplazo generacional
seleccionando al azar r1 individuos por la reproducción, así como otros r2 individuos
distintos a los anteriores destinados a morir. Estas selecciones aleatorias tienen en
consideración el valor de la función objetivo para cada individuo, de tal manera que
cuanto mayor es la adaptación del individuo, mayor es la probabilidad de que sea
seleccionado por la reproducción, y menor es la probabilidad de que dicho individuo
fallezca. El resto de los λ - (r1+r2) individuos son considerados como neutros y pasan
directamente a formar parte de la población en la siguiente generación [Mich, 96].
Existen, además, otros operadores relacionados con los métodos de selección de los
individuos, denominados catastróficos [Kure, 96]. Dichos operadores realizan una
evaluación cada cierto tiempo sobre el grado de convergencia del algoritmo. Si la
población está convergiendo hacia un determinado óptimo, el cual podría ser un óptimo
local y, por tanto, no es la solución al problema, se aplica alguno de estos operadores,
reemplazando una serie de individuos de la población actual por otros generados
aleatoriamente. Estos operadores nunca destruyen a los mejores individuos generados
hasta el momento, ya que éstos podrían estar muy cerca del óptimo buscado,
permitiendo la aparición de nuevos individuos de forma aleatoria con el fin de explorar
nuevas regiones dentro del espacio de búsqueda por si existieran puntos mejores que los
encontrados hasta ahora. Los principales operadores catastróficos son dos:
•
Operador de empaquetado: Todos los individuos que tienen el mismo valor en la
función objetivo son destruidos excepto uno de ellos. El resto son reemplazados en
la población por individuos generados aleatoriamente. Este operador impide la
repetición de individuos en la población, facilitando la diversidad de la misma.
•
El día del juicio final: Este operador destruye a todos los individuos de la población
excepto al más adaptado. La población se vuelve a rellenar con individuos
generados aleatoriamente.
Daniel Manrique Gamo
Página 52