You are on page 1of 240

Metaheurísticas

Abraham Duarte Muñoz


Juan José Pantrigo Fernández
Micael Gallego Carrillo

Metaheurísticas

Universidad Rey Juan Carlos


A María I. El problema de optimización más entretenido que me he encontrado.
Abraham Duarte

A mis padres y a mis hermanos. Sois maravillosos.


A Nora, que siempre me muestra ese otro punto de vista tan sugerente.
Juan J. Pantrigo

A Ana, por estar a mi lado.


A mi familia, por haberme apoyado siempre.
A mis compañeros del grupo Gavab de la URJC, por dejarme compartir mis
inquietudes con ellos.
Micael Gallego

NO TE DETENGAS

“No dejes que termine el día sin haber crecido un poco, sin haber sido feliz, sin
haber aumentado tus sueños. No te dejes vencer por el desaliento. No permitas que
nadie te quite el derecho a expresarte, que es casi un deber. No abandones las ansias
de hacer de tu vida algo extraordinario. No dejes de creer que las palabras y las
poesías sí pueden cambiar el mundo. Pase lo que pase nuestra esencia está intacta.
Somos seres llenos de pasión. La vida es desierto y oasis. Nos derriba, nos lastima,
nos enseña, nos convierte en protagonistas de nuestra propia historia. Aunque el
viento sople en contra, la poderosa obra continúa: tú puedes aportar una estrofa. No
dejes nunca de soñar, porque en sueños es libre el hombre.”

Anónimo (atribuido a Walt Whitman)


Índice general

Índice de figuras XII

Índice de algoritmos XV

Prólogo XVII

1. Introducción a la Optimización 1
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1. Heurísticas . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2. Metaheurísticas . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1. Vecindad y óptimos locales . . . . . . . . . . . . . . . . . . 6
1.2.2. Intensificación y diversificación . . . . . . . . . . . . . . . 8
1.3. Complejidad algorítmica: problemas P y NP . . . . . . . . . . . . 9
1.4. Limitaciones de los algoritmos exactos . . . . . . . . . . . . . . . . 13

2. Problemas Clásicos de Optimización 15


2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2. El problema del viajante de comercio . . . . . . . . . . . . . . . . 15
2.3. El problema del enrutamiento de vehículos . . . . . . . . . . . . . . 17
2.4. El problema de la mochila . . . . . . . . . . . . . . . . . . . . . . 19
2.5. El problema del corte máximo sobre grafos . . . . . . . . . . . . . 19
2.6. El problema de la máxima diversidad . . . . . . . . . . . . . . . . . 21
2.7. El problema de la ordenación lineal . . . . . . . . . . . . . . . . . 22

3. Algoritmos Heurísticos 25
3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2. Definiciones de algoritmos heurísticos . . . . . . . . . . . . . . . . 25
3.3. Clasificación de algoritmos heurísticos . . . . . . . . . . . . . . . . 27
3.4. Limitaciones de los algoritmos heurísticos . . . . . . . . . . . . . . 28

IX
X ÍNDICE GENERAL
4. Algoritmos Metaheurísticos 31
4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2. Clasificación de algoritmos metaheurísticos . . . . . . . . . . . . . 35
4.2.1. Taxonomías clásicas . . . . . . . . . . . . . . . . . . . . . 35
4.2.2. Taxonomía tabular . . . . . . . . . . . . . . . . . . . . . . 36
4.2.3. Taxonomía jerárquica . . . . . . . . . . . . . . . . . . . . . 39
4.2.4. Taxonomía basada en la relación intensificación-diversificación 42
4.3. Limitaciones de los algoritmos metaheurísticos . . . . . . . . . . . 44

5. Metaheurísticas Trayectoriales 45
5.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2. Búsqueda tabú . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3. Recocido simulado . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.4. Búsqueda de vecindad variable . . . . . . . . . . . . . . . . . . . . 57
5.5. Búsqueda local guiada . . . . . . . . . . . . . . . . . . . . . . . . 61
5.6. Aceptación de umbral . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.7. Métodos ruidosos . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.8. FANS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.9. Búsqueda local iterativa . . . . . . . . . . . . . . . . . . . . . . . . 72

6. Metaheurísticas Poblacionales 79
6.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2. Algoritmos evolutivos . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2.1. Algoritmos genéticos . . . . . . . . . . . . . . . . . . . . . 82
6.2.2. Algoritmos meméticos . . . . . . . . . . . . . . . . . . . . 84
6.3. Búsqueda dispersa . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.4. Reencadenamiento de trayectorias . . . . . . . . . . . . . . . . . . 91
6.5. Algoritmos de estimación de la distribución . . . . . . . . . . . . . 95
6.6. Algoritmos culturales . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.7. Inteligencia de enjambre y opt. por enjambre de partículas . . . . . 101

7. Metaheurísticas Constructivas 105


7.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.2. Métodos multi-arranque . . . . . . . . . . . . . . . . . . . . . . . . 105
7.3. GRASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
7.4. Concentración heurística . . . . . . . . . . . . . . . . . . . . . . . 113
7.5. Optimización por colonias de hormigas . . . . . . . . . . . . . . . 114
7.6. POPMUSIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
7.7. Equipos asíncronos . . . . . . . . . . . . . . . . . . . . . . . . . . 120
ÍNDICE GENERAL XI

8. Tendencias Actuales en Optimización Metaheurística 125


8.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.2. Técnicas híbridas . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.3. Hiperheuristicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
8.4. Implementaciones avanzadas . . . . . . . . . . . . . . . . . . . . . 129
8.4.1. Análisis del espacio de búsqueda . . . . . . . . . . . . . . . 130
8.4.2. Búsquedas multi-objetivo . . . . . . . . . . . . . . . . . . 131
8.4.3. Implementaciones paralelas . . . . . . . . . . . . . . . . . 132
8.5. Optimización dinámica . . . . . . . . . . . . . . . . . . . . . . . . 133
8.5.1. Algoritmos evolutivos . . . . . . . . . . . . . . . . . . . . 135
8.5.2. Optimización por colonias de hormigas . . . . . . . . . . . 139
8.5.3. Algoritmos culturales . . . . . . . . . . . . . . . . . . . . . 140
8.5.4. Inteligencia de enjambre . . . . . . . . . . . . . . . . . . . 141
8.5.5. Filtro de partículas metaheurístico . . . . . . . . . . . . . . 143

9. Búsqueda dispersa aplicada al MDP 145


9.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
9.2. Ejemplo detallado . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
9.3. Aplicación de la búsqueda dispersa . . . . . . . . . . . . . . . . . . 148
9.3.1. Distancia entre soluciones . . . . . . . . . . . . . . . . . . 149
9.3.2. Métodos de generación de soluciones diversas . . . . . . . . 150
9.3.3. Método de generación de subconjuntos . . . . . . . . . . . 151
9.3.4. Métodos de combinación . . . . . . . . . . . . . . . . . . . 151
9.3.5. Métodos de mejora . . . . . . . . . . . . . . . . . . . . . . 153
9.3.6. Filtro en el método de mejora . . . . . . . . . . . . . . . . 154

10. Cuestiones de implementación 157


10.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
10.2. Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
10.3. Detalles de implementación . . . . . . . . . . . . . . . . . . . . . . 162
10.3.1. Algoritmo ScatterSearch . . . . . . . . . . . . . . . . . . . 162
10.3.2. Algoritmo de diversificación . . . . . . . . . . . . . . . . . 168
10.3.3. Generación de soluciones diversas. Selección aleatoria . . . 171
10.3.4. Método de combinación. Selección D-2 . . . . . . . . . . . 173
10.3.5. Método de Mejora. Búsqueda Local Mejorada . . . . . . . . 177

A. Especificación de la Sintaxis del Lenguaje Algorítmico 181


A.1. Tipos de datos básicos . . . . . . . . . . . . . . . . . . . . . . . . 181
A.1.1. Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
A.1.2. Real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
A.1.3. Char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
A.1.4. Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
XII ÍNDICE GENERAL
A.1.5. Operadores de relación . . . . . . . . . . . . . . . . . . . . 183
A.2. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
A.3. Estructura de un algoritmo . . . . . . . . . . . . . . . . . . . . . . 184
A.3.1. Cabecera . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
A.3.2. Declaración de variables . . . . . . . . . . . . . . . . . . . 185
A.3.3. Cuerpo del algoritmo . . . . . . . . . . . . . . . . . . . . . 185
A.4. Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
A.4.1. Instrucción de asignación . . . . . . . . . . . . . . . . . . . 185
A.4.2. Instrucciones en lenguaje natural . . . . . . . . . . . . . . . 185
A.4.3. Estructuras de selección . . . . . . . . . . . . . . . . . . . 185
A.4.4. Estructuras de repetición . . . . . . . . . . . . . . . . . . . 186
A.4.5. Llamadas a otros algoritmos . . . . . . . . . . . . . . . . . 187
A.5. Tipos de datos derivados . . . . . . . . . . . . . . . . . . . . . . . 187
A.5.1. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
A.5.2. Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
A.5.3. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

B. Definición de Tipos de Datos 191


B.1. TipoComponente . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
B.2. TipoSolucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
B.3. TipoOperador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
B.4. TipoFuncionObjetivo . . . . . . . . . . . . . . . . . . . . . . . . . 192

C. Tabla de acrónimos 193

Bibliografía 195
Índice de figuras

1.1. Espacio de búsqueda y su subespacio de soluciones factibles. . . . . 5


1.2. Vecindad de una solución x marcado por el área interior a la circun-
ferencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3. Función objetivo con máximo global, máximo local y vecindad. . . 8
1.4. Relación entre los problemas P y NP. . . . . . . . . . . . . . . . . 9
1.5. Relación entre los problemas P, NP y NP − completo. . . . . . . . 10
1.6. Relación entre los problemas P, NP, NP − completo y NP − duro. 11

2.1. Problema del viajante en un grafo G. Las líneas gruesas representan


un circuito hamiltoniano, es decir, una posible solución al problema
dada por la permutación [v1 , v2 , v9 , , v6 , v8 , v5 , v4 , v7 , v3 ]. . . . . . . . 16
2.2. Problema del enrutamiento de vehículos en un grafo G. Las líneas
gruesas representan una posible solución al problema dada por las ru-
tas m1 = [v0 , v2 , v3 , v1 , v0 ], m2 = [v0 , v4 , v7 , v5 , v0 ] y m3 = [v0 , v6 , v8 , v9 , v0 ]. 18
2.3. Grupo de corte para un grafo G. . . . . . . . . . . . . . . . . . . . 20
2.4. El problema de la selección de los tres elementos más diversos entre
un conjunto de nueve localizados en el plano euclídeo. Los elementos
seleccionados aparecen sombreados. En este caso, la solución viene
determinada por la expresión: [1, 0, 0, 0, 0, 0, 1, 0, 1] . . . . . . . . . 22

3.1. Función multimodal. Suele conducir a que los algoritmos heurísticos


queden atrapados en óptimos locales. . . . . . . . . . . . . . . . . . 29

4.1. Elementos básicos que permiten el diseño de metaheurísticas. . . . . 33


4.2. Resumen de las características que presentan las distintas metaheu-
rísticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.3. Estructura de árbol que permite la clasificación jerárquica de las me-
taheurísticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.4. Vista algorítmica unificada de las metaheurísticas. . . . . . . . . . . 41
4.5. Espacio intensificación-diversificación. . . . . . . . . . . . . . . . . 42

XIII
XIV ÍNDICE DE FIGURAS
5.1. Convergencia a mínimos absolutos. (a) Enfoque multi-arranque. (b)
Enfoque aleatorizado. (c) Enfoque determinista y sistemático. . . . 45
5.2. Procedimiento de búsqueda a través de TS. . . . . . . . . . . . . . 47
5.3. (a) Ejemplo de diferentes distribuciones de partículas en niveles de
energía en función de la temperatura. (b) Probabilidad de aceptación
en función de la temperatura. . . . . . . . . . . . . . . . . . . . . . 53
5.4. Perfil del espacio de búsqueda para dos estructuras de vecindad dis-
tintas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.5. Escape de un óptimo local a través de la penalización de la función
objetivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.6. Ejemplos de etiquetas borrosas. . . . . . . . . . . . . . . . . . . . . 69
5.7. (a) Topología del espacio de búsqueda SS para una función objeti-
vo y una vecindad dada. (b) Topología del espacio de búsqueda re-
muestreado SS∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.8. Perturbaciones en la solución para encontrar el cuenco de atracción
vecino. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

6.1. Poblaciones (a) inicial y (b) final durante un proceso de optimización


utilizando una metaheurística poblacional. Generalmente, el espacio
de búsqueda es multidimensional. . . . . . . . . . . . . . . . . . . 80
6.2. Representación gráfica de las etapas de la búsqueda dispersa (adap-
tado de [198]). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.3. Esquema general para un algoritmo cultural. . . . . . . . . . . . . . 100

7.1. Lista de candidatos restringida para problemas de maximización. . . 109


7.2. Caminos del hormiguero a la comida. . . . . . . . . . . . . . . . . 115
7.3. Ejemplo de dos clases muy poco relacionadas con el resto (parte de
arriba) y un sub-problema creado a partir de la semilla s3 y 5 clases
muy relacionadas (resaltadas en gris oscuro alrededor de la semilla). 120
7.4. AT para resolver el problema del TSP. . . . . . . . . . . . . . . . . 121

8.1. Clasificación jerárquica de las metaheurísticas híbridas (adaptado de


[306]). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
8.2. Clasificación plana de las metaheurísticas híbridas (adaptado de [306]).127
8.3. Esquema general para una hiper-heurística. . . . . . . . . . . . . . 129

10.1. Diagrama de clases de la la metaheurísticas Scatter Search aplicada


al MDP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Índice de algoritmos

5.1. Búsqueda Tabú . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48


5.2. Recocido Simulado . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.3. Búsqueda en Vecindad Variable . . . . . . . . . . . . . . . . . . . . 59
5.4. Búsqueda Local Guiada . . . . . . . . . . . . . . . . . . . . . . . . 65
5.5. FANS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.6. Iterated Local Search . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.1. Algoritmo Evolutivo . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.2. Algoritmo Memético . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.3. Optimizador Local . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.4. Búsqueda Dispersa . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.5. Reencadenamiento de Trayectorias . . . . . . . . . . . . . . . . . 92
6.6. Algoritmos de Estimación de la Distribución . . . . . . . . . . . . 96
6.7. Algoritmo Cultural . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.8. Optimización por enjambre de partículas . . . . . . . . . . . . . . 102
7.1. Multi-Start Methods . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.2. GRASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.3. Fase constructiva de GRASP . . . . . . . . . . . . . . . . . . . . . 110
7.4. Fase de mejora de GRASP . . . . . . . . . . . . . . . . . . . . . . 112
7.5. Optimización por Colonias de Hormigas . . . . . . . . . . . . . . 116
7.6. POPMUSIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
9.1. Función hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
10.1. Búsqueda Dispersa Mejorada . . . . . . . . . . . . . . . . . . . . 160
10.2. Mejora de soluciones y actualización del Re f Set . . . . . . . . . . 161
A.1. NombreAlgoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

XV
Prólogo

Una gran cantidad de problemas que tienen interés en multitud de campos cien-
tíficos y tecnológicos pueden enunciarse como problemas de optimización. La op-
timización constituye una disciplina fundamental en áreas como la Informática, la
Inteligencia Artificial o la Investigación Operativa. Existe una colección importan-
te de problemas de optimización para la que no se dispone de algoritmos exactos
que permitan encontrar la solución óptima en tiempos razonables. Para resolver estos
problemas, una alternativa consiste en diseñar algoritmos aproximados que encuen-
tren soluciones de alta calidad en un tiempo que pueda asumirse. De entre todos los
métodos aproximados destacan las metaheurísticas por su eficiencia, efectividad y
flexibilidad. Éstas se han aplicado con éxito a una gran variedad de problemas de
optimización.
La presente obra tiene como objetivo recoger una visión resumida, aunque com-
pleta, del estado de la cuestión en el ámbito de las metaheurísticas. En ella, se ha
prestado especial atención a la presentación didáctica de los contenidos, de forma
que sean entendibles para todos los lectores que posean una formación científico-
técnica y conocimientos básicos de algoritmia y programación. A ellos está dirigida
esta obra, tanto a aquellos que cursan estudios de postgrado como a los que necesitan
resolver problemas complejos de optimización en el ejercicio de su profesión. La obra
se ha estructurado en diferentes capítulos que tratan temáticas diferentes alrededor de
la optimización metaheurística, combinando contenidos teóricos y prácticos:
Capítulo 1: Introducción a la Optimización. En este capítulo se presentan con-
ceptos fundamentales que serán necesarios para la lectura del resto del libro.
Capítulo 2: Problemas Clásicos de Optimización. En este capítulo se presenta
una colección no exhaustiva de problemas clásicos de optimización. Los problemas
que se presentan aquí han sido elegidos bien por su popularidad, bien porque los
autores los hayan estudiado. La descripción es breve, de modo que no se incluye una
revisión exhaustiva de los trabajos dedicados a su resolución.
Capítulo 3: Algoritmos heurísticos. Este capítulo introduce una visión general
de los algoritmos heurísticos, describiéndolos y presentando su clasificación así como

XVII
XVIII P RÓLOGO
sus limitaciones.
Capítulo 4: Algoritmos metaheurísticos. En este capítulo se presenta una visión
general de los algoritmos metaheurísticos, y al igual que en el capítulo anterior, se
presta especial interés a su descripción, clasificación y limitaciones.
Capítulo 5: Metaheurísticas trayectoriales. Este es el primero de tres capí-
tulos que se dedica a la descripción de metaheurísticas concretas. En cada uno de
ellos, se revisa y describe de forma detallada las metaheurísticas aplicadas con éxito
a una colección de problemas relativamente extensa. De cada una de ellas se señalan
una serie de detalles, tales como el investigador que las propuso, principio básico de
operación, descripción algorítmica de alto nivel, extensiones de la metaheurística y
aplicaciones. Este capítulo se dedica a las metaheurísticas trayectoriales.
Capítulo 6: Metaheurísticas poblacionales. Este capítulo está dedicado al estu-
dio de las metaheurísticas poblacionales y tiene la misma estructura que los anterio-
res.
Capítulo 7: Metaheurísticas constructivas. Este capítulo está dedicado al es-
tudio de las metaheurísticas constructivas. Los contenidos se organizan de la misma
forma que en el capítulo anterior.
Capítulo 8: Tendencias actuales. Se presenta aquí una revisión de las tendencias
más actuales en optimización. Desde el punto de vista de los métodos, actualmente
se tiende a abordar los problemas utilizando combinaciones de metaheurísticas e im-
plementaciones avanzadas de las mismas. Desde el punto de vista de los nuevos pro-
blemas abordados, en esta obra se destaca el estudio de problemas de optimización
dinámica.
Capítulo 9: Búsqueda dispersa aplicada al MDP. Se describe cómo aplicar
una metaheurística a un problema determinado de optimización combinatoria. En
concreto se detalla cómo utilizar una estrategia de Búsqueda Dispersa para resolver
el problema de la Máxima Diversidad, describiendo cada uno de los bloques en los
que se basa dicha metaheurística.
Capítulo 10: Cuestiones de implementación. En este capítulo se especifica los
detalles de implementación en lenguaje Java del algoritmo descrito en el capítulo
anterior. Dada su generalidad, varios de los aspectos de implementación descritos
se podrían utilizar en el diseño de otros procedimientos metaheurísticos aplicados a
otros problemas de optimización.
Este libro tiene sus orígenes en el desarrollo de un intenso y exhaustivo trabajo de
revisión del estado del arte que los autores han desarrollado durante la preparación de
sus tesis doctorales y se concreta después de una labor de síntesis de la información
recopilada en el transcurso de este período. Estas tesis doctorales están dedicadas a
la resolución de diferentes problemas de optimización y son las siguientes:
XIX

Abraham Duarte presentó el 2 de julio de 2004 su Tesis Doctoral titulada “Al-


goritmos Sociales Jerárquicos: Una metaheurística basada en la hibridación
entre métodos constructivos y evolutivos”, en la que se propone una nueva me-
taheurística que ha sido probada con éxito en diferentes problemas de optimi-
zación que se pueden modelar con una estructura de grafo.

Juan José Pantrigo presentó el 27 de octubre de 2005 su Tesis Doctoral titulada


“Resolución de Problemas de Optimización Dinámica Mediante la Hibrida-
ción entre Filtros de Partículas y Metaheurísticas Poblacionales” en la que se
propuso un método de diseño de algoritmos especializados en la resolución de
problemas de optimización dinámica.

Micael Gallego se encuentra en el último año de preparación de su Tesis Doc-


toral, en la que se proponen y comparan diferentes métodos exactos y metaheu-
rísticos para la resolución del problema de la máxima diversidad.

Esperamos que esta obra sea de utilidad a todos los lectores que la consulten y
deseamos que despierte la curiosidad por el ámbito de la optimización metaheurística
de todos aquellos que se acerquen a ella.

Los autores
Capítulo 1

Introducción a la Optimización

1.1. Introducción

La optimización es una disciplina fundamental en campos de la ciencia tales


como la Informática, la Inteligencia Artificial o la Investigación Operativa. En otras
comunidades científicas, la definición de optimización se torna bastante impreciso
[71], y se relaciona con la idea de ”hacerlo mejor”. En el marco de este libro, el
concepto de optimización se concibe como el proceso de intentar encontrar la mejor
solución posible a un problema de optimización, generalmente en un tiempo limitado.
Se puede decir que un problema de optimización es simplemente un problema en
el que hay varias (en general muchas) posibles soluciones y alguna forma clara de
comparación entre ellas, de manera que éste existe si y sólo si se dispone un conjunto
de soluciones candidatas diferentes que pueden ser comparadas. Desde un punto de
vista matemático, un problema de optimización P se puede formular como una 3-
tupla P = ( f , SS, F), definida como sigue:

 opt : f (x), Función Objetivo
P= s.a., (1.1)
x ∈ F ⊂ SS Restricciones

donde f es la función a optimizar (maximizar o minimizar), F es el conjunto de


soluciones factibles y SS es el espacio de soluciones.
Este tipo de problemas se pueden dividir de forma natural en dos categorías
[32][238]: aquéllos en los que la solución está codificada mediante valores reales y
aquéllos cuyas soluciones están codificadas por valores enteros. Dentro de la segun-
da categoría se encuentran un tipo particular de problemas denominados problemas
de optimización combinatoria. De acuerdo con [238] un problema de optimización

1
2 I NTRODUCCIÓN A LA O PTIMIZACIÓN
combinatoria consiste en encontrar un objeto entre un conjunto finito (o al menos
contable) de posibilidades. Este objeto suele ser un número natural (o conjunto de
naturales), una permutación o una estructura de grafo (o subgrafo).
Algunos ejemplos muy conocidos de problemas de optimización combinatoria
son el problema del viajante de comercio o del agente viajero (TSP) (Travelling Sa-
lesman Problem), el problema de la asignación cuadrática (QAP) (Quadratic Assign-
ment Problems), los problemas de planificación (Scheduling Problems) o los proble-
mas de cortes sobre grafos (Cut Set Problems). En el capítulo 2 se puede encontrar
una descripción de estos problemas (para descripciones más detalladas, pueden con-
sultarse [238][70]).
Los problemas combinatorios presentan como particularidad que siempre existe
un algoritmo exacto que permite obtener la solución óptima. Este método consis-
te en la exploración de forma exhaustiva del conjunto de soluciones (enumeración)
[238][70]. Este algoritmo suele ser extremadamente ineficiente, ya que para la ma-
yoría de los problemas de interés que se pueden encontrar en el ámbito de la opti-
mización combinatoria el tiempo que emplearía en encontrar una solución crece de
forma exponencial con el tamaño del problema. En general, este tipo de problemas
se caracterizan por tener espacios de soluciones con una cardinalidad muy elevada.
Desde finales de los años 70 [114][190] se han intentado caracterizar matemáti-
camente los problemas combinatorios. De estos estudios se concluye que existe un
subconjunto de problemas cuyos algoritmos de resolución presentan una complejidad
computacional polinómica, es decir, el tiempo de ejecución de estos algoritmos crece
de forma polinómica con el tamaño del problema. Este tipo de problemas se dice que
pertenecen a la clase P y se considera que son resolubles de manera eficiente. Sin
embargo, para la mayoría de problemas que tienen interés práctico o científico, no se
conoce un algoritmo con complejidad polinómica que lo resuelva de forma exacta.
Este tipo de problemas pertenecen a una clase conocida como NP (En la sección 1.3
se profundiza en estas definiciones). Dado el interés práctico que tiene la resolución
de muchos problemas pertenecientes a la clase NP y la dificultad que existe en resol-
ver dichos problemas de forma exacta, se plantea la opción de encontrar soluciones
de alta calidad en tiempos razonables, aunque estas soluciones no sean óptimas. Pa-
ra esta tarea se necesita utilizar algoritmos aproximados que permitan resolver los
problemas combinatorios.

1.1.1. Heurísticas

Para la mayoría de problemas de interés no se conoce un algoritmo exacto con


complejidad polinómica que encuentre la solución óptima a dicho problema. Ade-
más, la cardinalidad del espacio de búsqueda suele ser enorme, lo cual hace general-
mente inviable el uso de algoritmos exactos, fundamentalmente porque la cantidad de
I NTRODUCCIÓN 3
tiempo que se necesitaría para encontrar una solución es completamente inaceptable.
Debido a estos dos motivos, se deben utilizar métodos aproximados o heurísticas que
permitan obtener una solución de calidad en un tiempo razonable a estos problemas.
El término heurística proviene del vocablo griego heuriskein que podría tradu-
cirse como [196] encontrar, descubrir o hallar. La definición que aparece en el Dic-
cionario de la Real Academia de la Lengua Española [255] en su segunda y cuarta
acepción es la siguiente:

Técnica de la indagación y del descubrimiento.

En algunas ciencias, manera de buscar la solución de un problema mediante


métodos no rigurosos, como por tanteo, reglas empíricas, etc.

Por otro lado, la Enciclopedia Salvat [284], considera la siguinte definión:


“Arte de inventar o descubrir hechos valiéndose de hipótesis o principios que,
aún no siendo verdaderos, estimulan la investigación”.
Desde un punto de vista científico, el término heurística se debe al matemático
G. Polya quien lo empleó por primera vez en su libro How to solve it [249]. Con
este término Polya quería expresar las reglas con las que los humanos gestionan el
conocimiento común. Actualmente, existen bastantes definiciones para el término
heurística. Una de las más claras e intuitivas es la presentada por Zanakis et al. [331]:
“Procedimientos simples, a menudo basados en el sentido común, que se supone
que obtendrán una buena solución (no necesariamente óptima) a problemas difíciles
de un modo sencillo y rápido”.
Los métodos heurísticos tienen su principal limitación en su incapacidad para es-
capar de óptimos locales. Esto se debe, fundamentalmente, a que estos algoritmos no
utilizan ningún mecanismo que les permita proseguir la búsqueda del óptimo en el
caso de quedar atrapados en un óptimo local. Para solventar este problema, se intro-
ducen otros algoritmos de búsqueda más inteligentes (denominados metaheurísticas
[121]) que evitan, en la medida de lo posible, este problema. Este tipo de algoritmos
son procedimientos de alto nivel que guían a métodos heurísticos conocidos, evitando
que éstos queden atrapados en óptimos locales.

1.1.2. Metaheurísticas

El término Metaheurística o Meta-heurística fue acuñado por F. Glover en el año


1986 [121]. Etimológicamente, deriva de la composición de dos palabras con origen
griego, que son ”meta” y ”heurística”. El segundo término ha sido descrito en la
sección anterior, mientras que el prefijo meta (en inglés) se podría traducir como más
4 I NTRODUCCIÓN A LA O PTIMIZACIÓN
allá de, en un nivel superior. Con este término, Glover pretendía definir un proce-
dimiento maestro de alto nivel que guía y modifica otras heurísticas para explorar
soluciones más allá de la simple optimalidad local. En la literatura se pueden encon-
trar bastantes definiciones del término metaheurística o heurística moderna (como se
las denomina en [259][211]), que están basadas en la definición original de Glover.
Una de las definiciones más descriptivas es la presentada por J.P. Kelly et al. [174],
que se puede enunciar del siguiente modo:
“Las metaheurísticas son una clase de métodos aproximados que están diseñados
para resolver problemas difíciles de optimización combinatoria en los que los heurís-
ticos clásicos no son efectivos. Las metaheurísticas proporcionan un marco general
para crear nuevos algoritmos híbridos combinando diferentes conceptos derivados
de la inteligencia artificial, la evolución biológica y los mecanismos estadísticos”.
La evolución de las metaheurísticas durante los últimos 25 años ha tenido un
comportamiento prácticamente exponencial. Desde las primeras reticencias por su
supuesta falta de rigor científico [96] hasta la actualidad, se ha resuelto una gran
cantidad de problemas que inicialmente parecían inabordables.
La metaheurísticas incluyen1 (pero no están restringidas a) métodos tan popu-
lares como optimización por colonias de hormigas (ACO), algoritmos evolutivos
(EA), donde se incluyen los algoritmos genéticos (GA) y los algoritmos meméticos
(MA), procedimientos de búsqueda miope (constructiva, voraz o ávida), aleatoriza-
dos y adaptativos (GRASP), búsqueda local iterativa (ILS), re-encadenamiento de
trayectorias (PR), recocido simulado (SA), búsqueda dispersa (SS) y búsqueda tabú
(TS). En el apéndice C se puede encontrar una tabla de acrónimos que contiene el
nombre de las metaheurísticas y algunas de las referencias más relevantes. Además
los capítulos 5, 7 y 6 están dedicados a describir los aspectos fundamentales de las
metaheurísticas más populares.

1.2. Definiciones

Existen tres conceptos básicos que se pueden encontrar en la resolución algorít-


mica de, prácticamente, cualquier problema de optimización combinatoria. Indepen-
dientemente de la técnica que se utilice, se debe especificar:

Representación: se encarga de codificar las soluciones factibles para su mani-


pulación. Determina el tamaño (cardinalidad) del espacio de búsqueda (SS) de
cada problema.

1 En orden alfabético por su acrónimo en inglés.


D EFINICIONES 5

Espacio de soluciones
Posibles SS

Espacio de soluciones
factibles F

Figura 1.1: Espacio de búsqueda y su subespacio de soluciones factibles.

Objetivo: describe el propósito que se debe alcanzar para una representación


dada. Es un predicado matemático que expresa la tarea que se tiene que realizar.
Función de evaluación: permite asociar a cada solución factible un valor que
determina su calidad. Es una correspondencia f entre los puntos del espacio de
soluciones y R.

Cuando se diseña una función de evaluación2 se debe tener en cuenta que para
muchos problemas no es suficiente con encontrar una solución, sino que ésta debe
ser una solución factible; es decir, que satisfaga una serie de restricciones impuestas
por el problema. Por lo tanto, se debe establecer una diferencia entre el espacio de
búsqueda SS y el espacio de soluciones factibles F ⊆ SS. En la figura 1.1 se muestra
un ejemplo.
En estas condiciones, se puede definir un problema de optimización en los si-
guientes términos:

Definición 1.1 Un problema de optimización combinatoria P se puede definir a tra-


vés de una 3-tupla P = ( f , SS, F), donde:

SS se corresponde con un conjunto finito (o infinito contable) de soluciones o


configuraciones posibles. Este conjunto se conoce como espacio de búsqueda
(search space).
f : SS → R es una función de coste o función objetivo que asigna a cada
solución candidata (x ∈ SS) un valor numérico ( f (x) ∈ R).
2 Se utilizarán equivalentemente los términos: función de evaluación, función de coste, función ob-
jetivo o función de optimización.
6 I NTRODUCCIÓN A LA O PTIMIZACIÓN
Vecindad de X
N(X)

Espacio de búsqueda (SS)

X*

Figura 1.2: Vecindad de una solución x marcado por el área interior a la circunferen-
cia.

F determina el conjunto de soluciones factibles x ∈ F ⊆ SS.

La solución a un problema de optimización (maximización3 ) combinatoria con-


siste en encontrar un valor de x∗ ∈ F ⊆ SS caracterizado por la siguiente ecuación:

x∗ ∈ F ⊆ SS : ∀x ∈ F f (x∗ ) ≥ f (x) (1.2)

1.2.1. Vecindad y óptimos locales

Dada una solución x ∈ SS, la vecindad N(x) de esa solución es un subconjunto del
espacio de soluciones que contiene soluciones que están “próximas” de la solución
considerada. En la figura 1.2 se muestra una representación gráfica de la vecindad de
una determinada solución x. La cercanía entre dos soluciones del espacio de búsqueda
se podría definir de varias formas. A continuación, se describen las más comunes
[211]:

Dado un espacio de búsqueda SS para un problema concreto, se puede definir


una función distancia dist(x, y) entre cualquier par de puntos x, y ∈ SS como
sigue:

dist : SS × SS → R

A partir de esta función se puede definir la vecindad N(x) ⊆ SS de la solución


x como:

N(x) = {y ∈ SS : dist(x, y) ≤ ε}
3 La adaptación a problemas de minimización es directa sin más que sustituir ′′ ≥′′ por ′′ ≤′′ .
D EFINICIONES 7
para algún ε ≥ 0. Lógicamente, la función distancia descrita en la aplicación
anterior depende del problema que se quiera resolver. Por ejemplo, si el espacio
de búsqueda fuese euclídeo, la distancia entre dos soluciones x = (x1 , . . . , xn ) e
y = (y1 , . . . , yn ) se podría calcular como sigue:

∑ni=1 (xi − yi )2
p
dist(x, y) =

En este caso, la vecindad N(x) de la solución x está formada por todas las so-
luciones interiores a una hiper-esfera con radio máximo dado por dist(x, ymax ),
donde ymax representa el punto más lejano que se puede alcanzar.

Dado un espacio de búsqueda SS para un problema concreto, se puede definir


una función N del espacio de soluciones como sigue:

N : SS → 2SS

donde esta función define una vecindad N(x) para cada punto x ∈ SS.

En la vecindad de una solución se encuentran todas aquellas soluciones ”cer-


canas” de forma que, dada una solución x ∈ N(x), cada solución de su vecindad
y ∈ N(x) puede alcanzarse (obtenerse) directamente desde x mediante una operación
llamada movimiento. Una vez introducidos estos conceptos, se puede definir respec-
tivamente el óptimo global y el óptimo local de la siguiente manera:

Definición 1.2 Dado un problema de optimización ( f , SS, F), se dice que una solu-
ción factible x ∈ F ⊆ SS es un óptimo (máximo) global si:

∀y ∈ F f (x) ≥ f (y)

Definición 1.3 Dado un problema de optimización P = ( f , SS, F ) y una estructura


de vecindad N, se dice que una solución factible x ∈ F ⊆ SS es un óptimo (máximo)
local con respecto a N si:

∀y ∈ N(x) f (x) ≥ f (y)

Las definiciones anteriores se pueden particularizar para problemas de minimiza-


ción sin más que cambiar “≥” por “≤”. En la figura 1.3 se representan gráficamente
el máximo global, el máximo local y la vecindad, para una función objetivo dada.
8 I NTRODUCCIÓN A LA O PTIMIZACIÓN

f([X])
Máximo Global
Máximo Local

Vecindad

[X]

Figura 1.3: Función objetivo con máximo global, máximo local y vecindad.

1.2.2. Intensificación y diversificación

La intensificación y la diversificación son ideas que se desarrollaron original-


mente en el marco de la búsqueda tabú [121][122][123][127]. Actualmente, se han
extendido al resto de metaheurísticas como una medida de su “potencialidad”:

La intensificación es la forma de definir el proceso de búsqueda más exhaustivo


que puede llevar a cabo una metaheurística en una vecindad dada. Generalmen-
te, la metaheurística no intensifica en cualquier entorno, ya que eso sería una
búsqueda exhaustiva de todo el espacio de soluciones, sino que tiene en cuenta
factores como, por ejemplo, la calidad de las soluciones encontradas en esa
vecindad. Es decir, si en esa vecindad no hay ninguna solución de calidad no
parece interesante intensificar la búsqueda en dicha región.

La diversificación es la forma de definir el proceso mediante el cual la me-


taheurística es capaz de visitar diversas vecindades lejanas. Habitualmente, la
metaheurística no diversifica constantemente y sin criterio, ya que eso sería
una búsqueda aleatoria en el espacio de soluciones, sino que tiene en cuenta
factores, como por ejemplo el hecho de que una región no haya sido visitada.

Para la mayoría de los problemas, las estrategias de intensificación y la diversifi-


cación son contrapuestas. En otras palabras, una metaheurística, cuanto más tiempo
le dedique a intensificar la búsqueda en una región dada, menos tiempo le podrá de-
dicar a buscar en regiones inexploradas. Lógicamente este razonamiento también es
cierto a la inversa.
C OMPLEJIDAD ALGORÍTMICA : PROBLEMAS P Y NP 9

NP
P

Figura 1.4: Relación entre los problemas P y NP.

1.3. Complejidad algorítmica: problemas P y NP

Matemáticamente, los problemas pueden caracterizarse atendiendo a la dificultad


que entraña su resolución por un ordenador. Se han definido varias clases de proble-
mas, entre las que destacan las clases P, NP, NP − completo y NP − duro. En esta
sección se introducen definiciones intuitivas y formales para establecer el dominio de
cada una de estas clases de problemas.
Se dice que un problema se puede resolver en un tiempo polinómico cuando el
tiempo de ejecución de un algoritmo que lo resuelve se puede relacionar con el tama-
ño de la entrada con una formula polinómica. Los problemas para los que existe un
algoritmo polinómico se denominan P. Se considera que los problemas P se pueden
resolver en un tiempo de ejecución razonable para la informática actual.
Una gran cantidad de problemas útiles en el ámbito de la optimización combina-
toria son difíciles de resolver. Dicho de otro modo, a día de hoy no se ha encontrado
ningún algoritmo que obtenga una solución óptima en tiempo polinómico. Por tanto,
no se pueden resolver en un tiempo de ejecución razonable. Este tipo de problemas
se pueden categorizar dependiendo de la dificultad de resolución. Hay problemas
que, pese a que no se haya encontrado un algoritmo polinómico que los resuelva, si
que se puede saber en tiempo polinómico si un valor corresponde a la solución del
problema. Por ejemplo, el cálculo de la raíz cuadrada de un número puede ser un
problema complicado. En cambio, saber si un determinado valor es la raíz cuadrada
de otro es bastante sencillo, ya que basta con elevar ese número al cuadrado. A este
tipo de problemas, se les denomina NP. A simple vista, puede parecer que la gran
mayoría de los problemas son NP, ya que intuitivamente parece que comprobar una
solución es bastante más sencillo que calcularla. Sin embargo, para los problemas
de optimización, comprobar si esos valores corresponden a la solución óptima no es
nada sencillo. De hecho, existen problemas que requieren ejecutar el mismo algorit-
mo para buscar soluciones al problema como para comprobar que unos valores son
solución.
Los problemas P también son problemas NP, ya que siempre es posible compro-
bar que un valor es solución al problema en tiempo polinómico. Si no se encuentra
una forma más sencilla de hacerlo, siempre se puede ejecutar el propio algoritmo po-
10 I NTRODUCCIÓN A LA O PTIMIZACIÓN

NP NP -completo
P

Figura 1.5: Relación entre los problemas P, NP y NP − completo.

linómico que lo resuelve y comparar el resultado con el valor obtenido. Por tanto, el
conjunto de problemas P es un subconjunto de los problemas NP. En la figura 1.4 se
muestra la relación entre los problemas P y NP.
Por otro lado, existen ciertos problemas de los que siempre se ha pensado que
no son P, aunque sí NP, porque nadie ha encontrado nunca un algoritmo polinómico
que los resuelva. Sin embargo, en un momento dado, alguien puede encontrar un
algoritmo polinómico para un problema considerado NP, de modo que éste pase a
ser P. Por ejemplo, hasta 2002 no se encontró un algoritmo polinómico que permite
saber si un número es o no primo [3]. Por tanto, se puede decir que para un problema
de tipo NP no se puede obtener una solución en un tiempo razonable hasta que se
encuentre un algoritmo polinómico que lo resuelva.
No obstante, hay otro tipo de problemas, llamados NP − completos que no tie-
nen un algoritmo en tiempo polinómico que los resuelva. No se ha podido demostrar
formalmente que no exista, pero los matemáticos creen que realmente no existe. Este
tipo de problemas es un subconjunto de los problemas NP, es decir, existe un algorit-
mo polinómico que puede determinar si un valor es solución al problema. La relación
de esta clase de problemas con las demás se muestra en la figura 1.5.
Para saber si un problema es NP − completo, al menos un problema NP −
completo tiene que ser reducible a ese problema. Se dice que un problema A, que
es NP − completo, es reducible a otro problema B, cuando se puede crear un algo-
ritmo que resuelva el problema A utilizando como una caja negra un algoritmo para
resolver el problema B. Es decir, existe una algoritmo para resolver A de la siguiente
forma:

Toma los datos de entrada del problema A, los transforma de manera que pue-
dan utilizarse como entrada de una caja negra que resuelve el problema B, y la
solución a B se pueda transformar a su vez en una solución para el problema A.
La caja negra que resuelve el problema B puede utilizarse una única vez o un
número polinómico de veces dentro del algoritmo que resuelve A.

Considerando que la caja negra que resuelve B se ejecuta en un único paso, el


algoritmo para resolver A debe ser polinómico. Todos los problemas NP− completos
C OMPLEJIDAD ALGORÍTMICA : PROBLEMAS P Y NP 11

NP NP -completo
NP -duro
P

Figura 1.6: Relación entre los problemas P, NP, NP − completo y NP − duro.

son reducibles entre sí. Es decir, para resolver cualquier problema NP − completo
se puede construir un algoritmo polinómico que use una caja negra que, a su vez,
resuelve otro problema NP − completo, en caso de que esta caja negra se ejecutase
en un único paso. Esto tiene una consecuencia bastante interesante: si se llegara a
encontrar un algoritmo polinómico que resuelve cualquier problema NP − completo,
todos los demás problemas NP − completos podrían usar ese algoritmo como caja
negra. Como el algoritmo que usa la caja negra debe ser también polinómico, existiría
un algoritmo polinómico para resolver cualquier problema NP − completo. Dicho de
otra forma, como los matemáticos no han encontrado ningún algoritmo polinómico
para resolver ninguno de los problemas NP− completos, consideran que no existe tal
algoritmo. No obstante, no han podido demostrar matemáticamente que realmente no
exista. De hecho, si alguien es capaz de realizar esta demostración o bien encuentra
un algoritmo polinómico para algún problema NP − completo, el Instituto Clay de
Matemáticas (Cambridge - Massachusetts) le pagaría un millón de dólares.
Finalmente, existe otro tipo de problemas al menos tan difíciles de resolver como
los problemas NP − completos, aunque es posible que sean incluso más difíciles. A
este tipo de problemas se les denomina NP − duros. Los problemas NP − duros no
son un subconjunto de los problemas NP. Es decir, para los problemas NP − duros
no existe un algoritmo polinómico que nos permita verificar una solución. Para que
un problema sea considerado NP − duro, debe existir un problema NP − completo
que sea reducible a ese problema. Es decir, debe existir algún algoritmo polinómico
que pueda usar una caja negra que resuelva el problema NP − duro para resolver un
problema NP − completo. Se dice que son, al menos, tan difíciles de resolver como
un problema NP − completo porque un algoritmo los podría utilizar para resolver
un problema NP-completo. Como conclusión, los problemas se pueden categorizar
atendiendo a su dificultad en P, NP, NP − completos y NP − duros. La relación
entre estas clases de problemas se muestra en la figura 1.6.
De forma resumida, Los problemas P son los problemas para los que existe un
algoritmo polinómico que los resuelve. Los problemas NP son aquellos problemas
para los que existe un algoritmo polinómico que verifica una solución. Hay proble-
mas NP que pueden pasar a ser P si se encuentra un algoritmo polinómico que los
resuelva. Los problemas NP − completos son aquellos problemas de tipo NP que
12 I NTRODUCCIÓN A LA O PTIMIZACIÓN
los matemáticos consideran que no existe un algoritmo polinómico que los resuelva,
aunque no se haya podido demostrar matemáticamente. Y los problemas NP − duros
son aquellos al menos tan difíciles como los problemas NP − completos, es decir,
que los matemáticos consideran que tampoco existe un algoritmo polinómico que los
resuelva.
Rigurosamente hablando, las clases P y NP no están compuestas por los proble-
mas de optimización, sino por sus correspondientes problemas de decisión. A conti-
nuación se describe la definición de los problemas P y NP desde el punto de vista de
la Teoría de Lenguajes Formales (En la literatura se pueden encontrar descripciones
equivalentes a través de máquinas de Turing).
Desde un punto de vista formal, un problema de decisión se define como sigue:

Definición 1 Dado un lenguaje L de palabras construido sobre un alfabeto α, la


comprobación de que una palabra x está en L recibe el nombre de problema de
decisión.

Una vez introducido el concepto de problema de decisión se puede definir la clase


P del siguiente modo:

Definición 2 La clase P esta compuesta por los problemas de decisión (Lenguajes


L) para los que existe una función f (x) tal que:
f es polinomial con respecto a la palabra x
x ∈ L ⇔ f (x) = true
x 6∈ L ⇔ f (x) = f alse

Es decir, en esta clase estarían todos aquellos problemas de decisión para los que
se puede encontrar una solución en tiempo polinómico. Análogamente, se puede
definir la clase NP así:

Definición 3 La clase NP esta compuesta por los problemas de decisión (Lenguajes


L) para los que dada una palabra c ∈ L existe una función f (x, c) tal que:
f es polinomial con respecto a la palabra x
x ∈ L ⇔ f (x, c) = true
x 6∈ L ⇔ f (x, c) = f alse

donde c recibe el nombre de certificado y es necesario para comprobar que la cadena


x pertenece al lenguaje L.
En esta clase estarían todos aquellos problemas de decisión para los que se puede
comprobar una solución en tiempo polinómico. Antes de pasar a definir los proble-
mas NP − duros, es necesario introducir el concepto de lenguaje reducible:
L IMITACIONES DE LOS ALGORITMOS EXACTOS 13
Definición 4 Un lenguaje L′ se dice que es polinomialmente reducible en tiempo a
un lenguaje L si existe una función polinomial f tal que:
∀x ∈ L′ ⇔ f (x) ∈ L

Los problemas NP − duros se caracterizan por ser al menos tan “difíciles” como
cualquier problema que se encuentre en NP. Formalmente se podrían definir como:

Definición 5 Un problema de decisión L es NP − duro (NP − hard) si:


∀L′ ∈ NP es reducible polinomialmente a L.

Finalmente, los problemas NP − completos se pueden definir como:

Definición 6 Un problema de decisión L es NP − completo (NP − complete) si es


NP − duro y NP.

Una consecuencia inmediata que se puede extraer es que, si se encontrase un


algoritmo P para un problema NP − duro, se podría demostrar que NP = P, ya que
cualquier problema NP se puede reducir polinomialmente a ellos.

1.4. Limitaciones de los algoritmos exactos

Los métodos exactos de resolución de problemas se han aplicado con éxito a una
cantidad elevada de problemas. Algunos ejemplos de estos métodos son los algorit-
mos voraces, algoritmos de divide y vencerás, algoritmos de ramificación y poda,
backtraking, etc. Todos estos procedimientos resuelven problemas que pertenecen a
la clase P de forma óptima y en tiempo razonable. Como se ha comentado anterior-
mente, existe una clase de problemas, denominada NP, con gran interés práctico para
los cuales no se conocen algoritmos exactos con tiempos de convergencia en tiempo
polinómico; es decir, aunque existe un algoritmo que encuentra la solución exacta
al problema, tardaría tanto tiempo en encontrarla que lo hace completamente inapli-
cable. Además, un algoritmo exacto es completamente dependiente del problema (o
familia de problemas) que resuelve, de forma que cuando se cambia el problema se
tiene que diseñar un nuevo algoritmo exacto y demostrar su optimalidad.
Capítulo 2

Problemas Clásicos de
Optimización

2.1. Introducción

En este capítulo se presenta una colección de problemas clásicos de optimiza-


ción. Debido a la gran cantidad de problemas diferentes descritos en la literatura, el
conjunto de problemas recogidos aquí no es exhaustivo. Existen libros [10] e incluso
páginas web [74] que recogen compendios muy amplios de descripciones de pro-
blemas de optimización. Además existen libros monográficos dedicados a problemas
de optimización populares, como el problema del viajante de comercio [144] o del
enrutamiento de vehículos [310]. En las sucesivas secciones se presenta una breve
descripción de cada problema considerado, acompañada de aplicaciones.

2.2. El problema del viajante de comercio

El Problema del Viajante de Comercio (Travelling Salesman Problem - TSP) es,


probablemente, el problema de optimización combinatoria más estudiado y que mejor
se conoce [144]. De manera informal, se puede describir como la:
“búsqueda de la ruta más corta de un viajero que comienza su viaje en una ciudad
de origen, visita un conjunto prescrito de ciudades y vuelve a la ciudad de partida”
La distancia recorrida en el viaje depende del orden en que se visitan las ciudades.
Por lo tanto, este problema también se puede enunciar como [144][97]:
“búsqueda del orden óptimo de visita de las ciudades, de forma que la distancia
recorrida sea mínima y cada ciudad se visite exactamente una vez”

15
16 P ROBLEMAS C LÁSICOS DE O PTIMIZACIÓN

v9 c69
c89 v6
v8 c68 G
c29 c58 c56
c28 c18
v2 c51 v5
c12 v1 c46
c23 c41 c45 c57
c13
v3 c34 v4 c47
c37 v7

Figura 2.1: Problema del viajante en un grafo G. Las líneas gruesas representan un
circuito hamiltoniano, es decir, una posible solución al problema dada por la permu-
tación [v1 , v2 , v9 , , v6 , v8 , v5 , v4 , v7 , v3 ].

Como se puede inferir de esta descripción, no se necesitan herramientas matemá-


ticas demasiado sofisticadas para formular matemáticamente el TSP. A pesar de ello,
el TSP es un problema NP − duro (como se demuestra en el trabajo de Karp [173]),
y es muy difícil, e incluso imposible a veces [144], resolver instancias de gran tama-
ño de forma óptima. Para un grafo no dirigido completo de n vértices el tamaño del
espacio de búsqueda es (n − 1)!/2 [211].
Formalmente, el TSP puede representarse mediante un grafo no dirigido como el
siguiente:
G = {V, E,C} (2.1)
donde V es un conjunto de vértices que representa el conjunto de vértices, E es un
conjunto de aristas con pesos que modela rutas entre ciudades y C es una matriz de
pesos que representa el coste del viaje entre pares de ciudades adyacentes. Se supone
que existe una arista conectando cada par de ciudades y los pesos ci j ∈ C, asociados
a las aristas (i, j) ∈ E representan el coste entre las ciudades i, j ∈ V . En la figura
2.1 se representa gráficamente una solución posible al problema del TSP sobre un
grafo G. Desde este punto de vista, el TSP se puede enunciar como el problema
que consiste en encontrar el circuito hamiltoniano con menor longitud en el grafo
G [333]. Si consideramos el problema de las n ciudades, es posible expresar una
solución como el vector [π(1), . . . , π(n)] donde π(i) representa el orden en el cual se
visita la ciudad i. Considerando esta descripción, el problema del viajante se puede
formular del siguiente modo:
EL PROBLEMA DEL ENRUTAMIENTO DE VEHÍCULOS 17

(
n−1
T SP = min : cπ(1)π(n) + ∑ cπ(i)π(i+1) (2.2)
i=1

Las aplicaciones del TSP van más allá del problema de la planificación de rutas
de un viajante de comercio y abarcan diferentes áreas de conocimiento, incluyendo
las Matemáticas, Ciencias de la Computación, Investigación Operativa, Genética, In-
geniería y Electrónica [253]. Entre ellas destacan la planificación de máquinas, los
procesos de fabricación, los problemas de asignación de frecuencias, etc. Existe una
gran cantidad de versiones diferentes del TSP, como el TSP Simétrico (Symmetric
TSP), TSP Máximo (MAX TSP), TSP con Cuello de Botella (Bottleneck TSP), TSP
con Múltiples Visitas (TSP with Multiple Visits), Problema del Mensajero (Messen-
ger Problem), TSP Agrupado (Clustered TSP), TSP Generalizado (Generalized TSP),
TSP Dinámico (Dynamic TSP), etc [253].

2.3. El problema del enrutamiento de vehículos

El problema de enrutamiento de vehículos o Vehicle Routing Problem (VRP) con-


siste en:
“obtener el conjunto de rutas más cortas posibles utilizando un conjunto de
vehículos lo más pequeño posible tal que, partiendo de un almacén y regresando
sucesivamente a él, abastecen a una serie de clientes distribuidos geográficamen-
te, teniendo en cuenta que cada vehículo tiene una capacidad máxima propia y la
cantidad de producto demandada por los clientes es diferente.”
En términos de teoría de grafos, el VRP clásico se puede definir como sigue.
sea G un grafo donde V = {v1 , . . . , vn } es el conjunto de vértices los vértices y
A = {(vi , v j )|vi , v j ∈ V and i 6= j} es el conjunto de arcos. El vértice v0 representa
el depósito, donde tiene su base una flota de m vehículos idénticos de capacidad Q,
y los vértices restantes V ′ = V \ {v0 } representan la localización de los clientes. Se
define una matriz de costes C = {ci j } no negativa que satisface que ci j ≤ cik + ck j .
Se dice que el problema es simétrico cuando ci j = c ji ∀(vi , v j ) ∈ A. En este caso, se
suele sustituir A por el vector de aristas E = {(vi , v j )} |vi , v j ∈ V, i 6= j. Se asume
que m ∈ [m, m] con m = 1 y m = n − 1. El valor de m puede ser una variable o una
constante, dependiendo de la aplicación. A cada vértice se le asocia una cantidad qi
que representa la cantidad de producto que demanda. El VRP consiste en determinar
un conjunto m de rutas con coste total mínimo, comenzando y terminando en el de-
pósito v0 , tal que cada vértice vi j ∈ V ′ se visite exactamente una vez por un vehículo
y la cantidad total de producto repartido en cada ruta no exceda la capacidad Q del
vehículo que sirve la ruta.
18 P ROBLEMAS C LÁSICOS DE O PTIMIZACIÓN

v9 c89 c68 v6
v8 G
c09 c06
v2 c02 v0 c05 v5
c23 c c04
01 c57
v3
c13 v1 v4
c47 v7

Figura 2.2: Problema del enrutamiento de vehículos en un grafo G. Las líneas


gruesas representan una posible solución al problema dada por las rutas m1 =
[v0 , v2 , v3 , v1 , v0 ], m2 = [v0 , v4 , v7 , v5 , v0 ] y m3 = [v0 , v6 , v8 , v9 , v0 ].

Se define una solución al VRP como un conjunto de m rutas, s = {R1 , . . . , Rm },


donde cada Rk = (v0 , vk1 , vk2 , . . . , v0 ) es un conjunto ordenado que representa verti-
ces consecutivos en la ruta k. Si seguimos una representación similar a la del TSP,
podríamos representar una solución como [π1 (1), . . . , π1 (n1 ), . . . , πm (1), . . . , πm (nm )].
De modo que, VRP puede formularse matemáticamente de la siguiente manera:
 m nk
min : ∑ ∑ cπ (i)π (i+1)


 k k



 k=1 i=1
 s.a.,


nk
V RP = (2.3)

 ∑ qπ (i) ≤ Qk ∀k ∈ [1, m]
k

 i=1
 m
∑ nk ≤ n





k=1

Existe una gran cantidad de versiones derivadas del VRP, como el VRP con ca-
pacidades (Capacitated VRP), que es su versión homogénea. VRP con múltiples al-
macenes (Multiple Depot VRP), VRP cpn ventanas temporales (VRP with Time Win-
dows) en el que se asocia una ventana temporal a cada cliente (con instante de inicio
y de fin de servicio), VRP estocástico (Stochastic VRP) si cada componente tiene un
comportamiento aleatorio, VRP periódico (Periodic VRP), VRP con atención dividi-
da (Split Delivery VRP) cuando varios vehículos sirven a un mismo cliente, etc.
EL PROBLEMA DE LA MOCHILA 19
2.4. El problema de la mochila

El problema de la mochila o Knapsack Problem (KP) consiste en:


“dados n objetos, cada un con un peso w j y un valor v j , se debe seleccionar el
conjunto de objetos cuyo valor total sea máximo, sin exceder un peso máximo W.”
En este problema, una solución se suele representar mediante un vector [x1 , . . . , xn ],
donde cada componente xi representa un objeto i y su valor indica si el objeto se ha
seleccionado (en cuyo caso el valor es 1) o no (en cuyo caso el valor es 0). Conside-
rando esta representación, el problema de la mochila se puede formular del siguiente
modo:
 n
∑ vi xi



 max :

 i=1
KP = s.a., (2.4)
 n
∑ wixi ≤ W





i=1

Este problema tiene numerosas aplicaciones como la denominada Cutting Stock,


que consiste en cortar una plancha de acero en diferentes piezas. También se puede
utilizar para modelar el problema de la determinación de los artículos que puede
almacenar un depósito para maximizar su valor total. Indicar que el problema es
relativamente fácil de resolver (algoritmos exactos en tiempo polinómico) cuando se
permite que los objetos que se introducen en la mochila se puedan partir. En cambio,
cuando dichos objetos no se pueden partir, el problema es NP − duro.

2.5. El problema del corte máximo sobre grafos

El problema del corte máximo o max-cut consiste en:


“dado un grafo ponderado y no dirigido G = {V, A,W }, donde V es un conjunto
de vértices, A es un conjunto de arcos no orientados o aristas y W es un conjunto de
pesos wi j asociados a cada arista (i, j) ∈ A, con i, j ∈ V , encontrar una partición del
conjunto de vértices V de G en dos subconjuntos disjuntos V = {V1 ,V2 } : V1 ∩V2 =
0/ V1 ∪ V2 = V , tal que maximice la suma de los pesos de los arcos cuyos extremos
se encuentran en subconjuntos distintos”.
En la figura 2.3 se representa gráficamente un corte sobre un grafo G. La bipar-
tición de V en V1 y V2 se denomina grupo de corte y el valor numérico de ese corte
viene dado por la siguiente expresión:
20 P ROBLEMAS C LÁSICOS DE O PTIMIZACIÓN

V1 1 G

2 5

3 4 V2

Figura 2.3: Grupo de corte para un grafo G.

cut(V1 ,V2 ) = ∑ wuv (2.5)


u∈V1 ,v∈V2

Naturalmente, la solución a este problema consiste en la maximización de esta


ecuación. En [173] se demuestra que la versión de decisión de max-cut es un pro-
blema NP −Completo. Para grafos planos existen algoritmos con complejidad poli-
nómica que resuelven dicho problema de forma exacta [146]. En [248] aparece una
revisión muy extensa y detallada de este problema.
La resolución del problema del max-cut tiene importantes aplicaciones prácticas,
entre las cuales se pueden destacar el diseño VLSI, el diseño de ASICS o la física
estadística. En [14][55][61] se pueden encontrar descripciones de estas aplicaciones.
El problema del corte máximo se puede reformular como un problema de progra-
mación cuadrática entera P en los siguientes términos [81][102][134]:

1
∑ wi j (1 − yi y j )

 max :


2 1≤i≤ j≤n
MCP = (2.6)

 s.a.,
yi ∈ {−1, 1}, ∀i ∈ V

donde yi se corresponde con la variable de decisión que determina si el vértice i


pertenece a V1 o a V2 .
Los conjuntos V1 y V2 en este formalismo vienen representados por:

V1 = {i ∈ V : yi = 1} V2 = {i ∈ V : yi = −1} (2.7)
EL PROBLEMA DE LA MÁXIMA DIVERSIDAD 21
Luego, el grupo de corte viene definido en esta formulación como:

1
cut(V1 ,V2 ) = ∑ wi j (1 − yi y j )
2 1≤i≤
(2.8)
j≤n

En el caso general, este problema no se puede resolver de forma eficiente porque


pertenece a la clase NP − Completa. Debido al interés práctico que tiene su reso-
lución, en la literatura se han propuesto varias relajaciones, entre las que destacan:
la relajación a un problema continuo, la relajación a un problema de programación
lineal y la relajación a un problema de programación semidefinida o SDP (Semi-
Definite Programming). De estas alternativas, probablemente la más interesante es la
SDP, ya que se resuelve en tiempo polinómico [139] y suele proporcionar soluciones
más próximas al óptimo que los otros enfoques.

2.6. El problema de la máxima diversidad

El problema de la máxima diversidad o maximum diversity problem (MDP) con-


siste en:
“seleccionar un conjunto de elementos de una colección más grande de tal forma
que los elementos seleccionados tengan las características más variadas entre sí”
En la figura 2.4 se representa el MDP sobre distancias euclídeas. Desde un punto
de vista matemático, siendo di j la distancia entre los elementos i y j, el MDP se puede
formular como el siguiente problema cuadrático binario:

 n−1 n
max : ∑ ∑ di j xi x j





 i=1 j=i+1


MDP = s.a., (2.9)
n
∑ xi = m






 i=1
xi = {0, 1} | 1 ≤ i ≤ n

Un ejemplo de aplicación de este problema aparece en la preservación de la bio-


diversidad. En este ámbito, se dispone de un número limitado de recursos para salvar
únicamente a un número determinado de especies. En este escenario es más adecuado
salvar a aquellas especies que muestren el conjunto más variado de características.
En [184] se usa esta formulación para mostrar que el problema del clique (que es
NP − completo) es reducible al MDP.
22 P ROBLEMAS C LÁSICOS DE O PTIMIZACIÓN

9 6
8

2
5
4
3

1
7

Figura 2.4: El problema de la selección de los tres elementos más diversos entre un
conjunto de nueve localizados en el plano euclídeo. Los elementos seleccionados
aparecen sombreados. En este caso, la solución viene determinada por la expresión:
[1, 0, 0, 0, 0, 0, 1, 0, 1]

2.7. El problema de la ordenación lineal

El problema de la ordenación lineal o lineal ordering problem (LOP) se puede


enunciar del siguiente modo:
“dada una matriz de pesos E = {ei j } de tamaño n × n, encontrar una permuta-
ción p de las columnas (y filas) que maximice la suma de los pesos en el triángulo
superior”
En términos matemáticos podemos expresarlo de este modo:
(
n−1 n
LOP = max : ∑ ∑ e p(i)p( j) (2.10)
i=1 j=i+1

donde p(i) es el índice de la columna (y fila) i en la permutación. Se debe señalar


que en el LOP, la permutación p proporciona el ordenamiento tanto de la fila como
de la columna. El problema equivalente en grafos consiste en encontrar, en un grafo
completo ponderado, un torneo acíclico con una suma máxima de los pesos de los
arcos [262].
En economía, LOP es equivalente al llamado problema de la triangulación (trian-
gulation problem) para tablas de entrada-salida, que puede describirse como sigue: la
economía de una región (generalmente un país) se divide en n sectores y se construye
una tabla de entrada-salida E, donde la entrada ei j representa el total de entregas (en
EL PROBLEMA DE LA ORDENACIÓN LINEAL 23
valores monetarios) del sector i al sector j en un año dado. El problema de la trian-
gulación consiste en permutar simultáneamente filas y columnas de E, para hacer la
suma de las entradas sobre la diagonal principal lo más grande posible. Una solución
óptima ordena los sectores de modo que los proveedores (es decir, los sectores que
producen materiales para otras industrias) van primero, seguido de los consumidores
(es decir, los sectores que fabrican el producto final que llega a los consumidores)
[196].
Capítulo 3

Algoritmos Heurísticos

3.1. Introducción

Como se comentó en el capítulo 1, para la mayoría de problemas de interés no


existe un algoritmo exacto con complejidad polinómica que encuentre la solución
óptima a dicho problema. Además, la cardinalidad del espacio de búsqueda de estos
problemas suele ser muy grande, lo cual hace inviable el uso de algoritmos exactos ya
que la cantidad de tiempo que necesitaría para encontrar una solución es inaceptable.
Debido a estos dos motivos, se necesita utilizar algoritmos aproximados o heurísti-
cos que permitan obtener una solución de calidad en un tiempo razonable. El término
heurística proviene del vocablo griego heuriskein, que puede traducirse como encon-
trar, descubrir o hallar.
Desde un punto de vista científico, el término heurística se debe al matemático
George Polya quien lo empleó por primera vez en su libro How to solve it [249].
Con éste término, Polya englobaba las reglas con las que los humanos gestionan el
conocimiento común y que, a grandes rasgos, se podían simplificar en: (i) buscar un
problema parecido que ya haya sido resuelto, (ii) determinar la técnica empleada para
su resolución así como la solución obtenida y (iii) en el caso en el que sea posible,
utilizar la técnica y solución descrita en el punto anterior para resolver el problema
planteado.

3.2. Definiciones de algoritmos heurísticos

Actualmente existen dos interpretaciones posibles para el término heurística. La


primera de ellas concibe las heurísticas como un procedimiento para resolver proble-

25
26 A LGORITMOS H EURÍSTICOS
mas. Para esta interpretación, las definiciones más interesantes que se extraen de la
literatura son las siguientes:

T. Nicholson [227]: “Procedimiento para resolver problemas por medio de un


método intuitivo en el que la estructura del problema puede interpretarse y
explotarse inteligentemente para obtener una solución razonable”.

H. Müller-Merbach [217]: “En investigación operativa, el término heurístico


normalmente se entiende en el sentido de un algoritmo iterativo que no con-
verge hacia la solución (óptima o factible) del problema”.

Barr et al. [15]: “Un método heurístico es un conjunto bien conocido de pasos
para identificar rápidamente una solución de alta calidad para un problema
dado”.

La segunda interpretación de heurística entiende que éstas son una función que
permiten evaluar la bondad de un movimiento, estado, elemento o solución. Algunas
de las definiciones más interesantes que se encuentran en la literatura son:

Rich et al. [272]: “Una función heurística es una correspondencia entre las
descripciones de los estados del problema hacia alguna medida de idonei-
dad, normalmente representada por números. Los aspectos del problema que
se consideran, cómo se evalúan estos aspectos y los pesos que se dan a los
aspectos individuales, se eligen de forma que el valor que la función da a un
nodo del proceso de búsqueda sea una estimación tan buena como sea posible
para ver si ese nodo pertenece a la ruta que conduce a la solución”.

Russell et al. [279]: “Actualmente, el término heurística se utiliza más bien


como adjetivo para referirse a cualquier técnica que permita mejorar el de-
sempeño del caso promedio en una tarea de resolución de problemas, aunque
no necesariamente permita mejorar el desempeño del peor de los casos. Espe-
cíficamente en el área de los algoritmos de búsqueda, se refiere a una función
mediante la cual se obtiene una estimación del coste de una solución”.

De todas las definiciones, quizá las más intuitivas son la presentada por Zanakis
et al. [331]:
“Procedimientos simples a menudo basados en el sentido común que se supone
que obtendrán una buena solución (no necesariamente óptima) a problemas difíciles
de un modo sencillo y rápido”.
y la presentada por Pearl [242]:
C LASIFICACIÓN DE ALGORITMOS HEURÍSTICOS 27
“considerándola como una regla del pulgar que se utiliza para guiar una ac-
ción”.
En [114][331] se pueden encontrar argumentaciones y justificaciones de cuándo,
cómo y por qué se deben utilizar heurísticas en la resolución de problemas.

3.3. Clasificación de algoritmos heurísticos

Existen métodos heurísticos (también llamados algoritmos aproximados, proce-


dimientos inexactos, algoritmos basados en el conocimiento o simplemente heurísti-
cas) de diversa naturaleza, por lo que su clasificación es bastante complicada. Basán-
dose en la propuesta que aparece en [291][332][79][196] en esta sección se sugiere
la siguiente clasificación1 .

1. Métodos constructivos: Procedimientos que son capaces de construir una so-


lución a un problema dado. La forma de construir la solución depende fuerte-
mente de la estrategia seguida. Las estrategias más comunes son:

Estrategia voraz2 : Partiendo de una semilla, se va construyendo paso a


paso una solución factible. En cada paso se añade un elemento consti-
tuyente de dicha solución, que se caracteriza por ser el que produce una
mejora más elevada en la solución parcial para ese paso concreto. Este
tipo de algoritmos se dice que tienen una visión "miope" ya que eligen la
mejor opción actual sin que les importe que ocurrirá en el futuro.
Estrategia de descomposición: Se divide sistemáticamente el problema
en subproblemas más pequeños. Este proceso se repite (generalmente de
forma recursiva) hasta que se tenga un tamaño de problema en el que la
solución a dicho subproblema es trivial. Después el algoritmo combina
las soluciones obtenidas hasta que se tenga la solución al problema ori-
ginal. Los algoritmos más representativos de los métodos de descompo-
sición son los algoritmos de divide y vencerás (en [161][181] se pueden
encontrar descripciones de estos algoritmos) tanto en su versión exacta
como aproximada.
Métodos de reducción: Identifican características que contienen las so-
luciones buenas conocidas y se asume que la solución óptima también
las tendrá. De esta forma se puede reducir drásticamente el espacio de
búsqueda.

1 Se ha introducido un nivel más de jerarquía, tomado de la idea de [285]


2 También conocidos como algoritmos voraces, algoritmos miopes o algoritmos ávidos.
28 A LGORITMOS H EURÍSTICOS
Métodos de manipulación del modelo3 : Consisten en simplificar el mo-
delo del problema original para obtener una solución al problema sim-
plificado. A partir de esta solución aproximada, se extrapola la solución
al problema original. Entre estos métodos se pueden destacar: la lineali-
zación, la agrupación de variables, introducción de nuevas restricciones,
etc.

2. Métodos de búsqueda: Parten de una solución factible dada y a partir de ella


intentan mejorarla.

Estrategia de búsqueda local 1: Parte de una solución factible que la


mejora progresivamente. Para ello examina su vecindad y selecciona el
primer movimiento que produce una mejora en la solución actual (first
improvement)
Estrategia de búsqueda local 2: Parte de una solución factible que la me-
jora progresivamente. Para ello examina su vecindad y todos los posibles
movimientos seleccionando el mejor movimiento de todos los posibles,
es decir aquel que produzca un incremento (en el caso de maximización)
más elevado en la función objetivo (best improvement).
Estrategia aleatorizada: Para una solución factible dada y una vecindad
asociada a esa solución, se seleccionan aleatoriamente soluciones vecinas
de esa vecindad.

En cualquiera de las referencias introducidas en la sección se puede encontrar


más información acerca de estos métodos, como puede ser el pseudo-código o los
problemas que resuelven de forma satisfactoria.

3.4. Limitaciones de los algoritmos heurísticos

El principal problema que presentan los algoritmos heurísticos es su incapaci-


dad para escapar de los óptimos locales. En la figura 3.1 se muestra como para una
vecindad dada el algoritmo heurístico basado en un método búsqueda local se que-
daría atrapado en un máximo local. n general, ninguno de los métodos constructivos
descritos en la sección anterior tendrían por qué construir la solución optima.
Los algoritmos heurísticos no poseen ningún mecanismo que les permita escapar
de los óptimos locales. Para solventar este problema se introducen otros algoritmos
de búsqueda más inteligentes que eviten en la medida de lo posible quedar atrapa-
dos en óptimos locales. Estos algoritmos de búsqueda más inteligentes, denominados
3 También conocidos como métodos inductivos
L IMITACIONES DE LOS ALGORITMOS HEURÍSTICOS 29

Figura 3.1: Función multimodal. Suele conducir a que los algoritmos heurísticos que-
den atrapados en óptimos locales.

metaheurísticas, son procedimientos de alto nivel que guían a algoritmos heurísti-


cos conocidos evitando que éstos caigan en óptimos locales. Los siguientes capítulos
están dedicados a describir con detalle este tipo de algoritmos.
Capítulo 4

Algoritmos Metaheurísticos

4.1. Introducción

El término metaheurística o meta-heurística fue acuñado por F. Glover en el año


1986 [121]. Con este término, pretendía definir un “procedimiento maestro de alto
nivel que guía y modifica otras heurísticas para explorar soluciones más allá de la
simple optimalidad local”.
Actualmente, existe una cantidad muy importante de trabajos científicos publi-
cados que abordan problemas de optimización a través de las metaheurísticas, in-
vestigaciones sobre nuevas metaheurísticas o extensiones de las metaheurísticas ya
conocidas. Existen bastantes foros donde se publican todos estos trabajos de investi-
gación, entre los que se pueden destacar varias revistas (Journal of Heuristics [327] o
el INFORMS Journal of Computing [328]), libros ([211][318][271][71][133]), con-
gresos temáticos (de ámbito internacional como el MIC - Metaheuristics Internatio-
nal Conference, o nacional como el MAEB - Metaheurísticas Algoritmos Evolutivos
y Bioinspirados), sitios web ([329][162]), informes técnicos, números especiales de
revistas, etc.
A partir de la definición original de F. Glover, en la literatura se pueden encontrar
otras definiciones alternativas de metaheurísticas o heurísticas modernas (como se las
denomina en [259][211]), entre las que se pueden destacar las siguientes:

J.P. Kelly et al. [174]: “Las metaheurísticas son una clase de métodos aproxi-
mados que están diseñados para resolver problemas difíciles de optimización
combinatoria, en los que los heurísticos clásicos no son efectivos. Las me-
taheurísticas proporcionan un marco general para crear nuevos algoritmos
híbridos combinando diferentes conceptos derivados de la inteligencia artifi-
cial, la evolución biológica y los procedimientos estadísticos”.

31
32 A LGORITMOS M ETAHEURÍSTICOS
S. Voss et al. [318]: “Una metaheurística es un proceso iterativo maestro que
guía y modifica las operaciones de una heurística subordinada para producir
eficientemente soluciones de alta calidad. Las metaheurísticas pueden manipu-
lar una única solución completa (o incompleta) o una colección de soluciones
en cada iteración. La heurística subordinada puede ser un procedimiento de
alto (o bajo) nivel, una búsqueda local, o un método constructivo”.

En [300][329][32] se pueden encontrar otras definiciones del término metaheu-


rística. La idea básica general es siempre la misma: enriquecer a los algoritmos heu-
rísticos de forma que éstos no se queden atrapados en óptimos locales.
La evolución de las metaheurísticas durante los últimos 25 años ha tenido un
comportamiento prácticamente exponencial. En el tiempo que transcurre desde las
primeras reticencias (por su supuesta falta de rigor científico [96]) hasta la actuali-
dad, se han encontrado soluciones de muy alta calidad a problemas que hace tiempo
parecían inabordables.
De modo general, se puede decir que las metaheurísticas combinan ideas que
provienen de cuatro campos de investigación bien distintos: las técnicas de diseño de
algoritmos (resuelven una colección de problemas), algoritmos específicos (depen-
dientes del problema que se quiere resolver), fuente de inspiración (del mundo real)
y métodos estadísticos. En la figura 4.1 se muestra esta idea.

Una primera conclusión que se puede extraer de las definiciones dadas es que, en
muchos casos, son reglas de sentido común que permiten hacer una búsqueda “in-
teligente”. Debido a esta característica, para bastantes metaheurísticas no existe un
marco teórico que las sustente, sino que es a través de los buenos resultados expe-
rimentales donde encuentran su justificación. Aún así, algunos autores han intenta-
do desarrollar un marco matemático donde se pueda establecer, por ejemplo, bajo
qué condiciones un procedimiento metaheurístico converge hacia el óptimo. En este
sentido, para los algoritmos estocásticos de búsqueda1 , se ha desarrollado un marco
común, conocido como algoritmos de escalada generalizados [166][165][171][172],
que asegura la convergencia de todos ellos. Dentro de este tipo de algoritmos se in-
cluyen como casos particulares los procedimientos de búsqueda local [2], el recocido
simulado [1], los métodos ruidosos [56] y los métodos de aceptación del umbral
[91][226]. Se han obtenido resultados semejantes para algoritmos genéticos [287] y
búsqueda tabú aleatorizada [98]. Estos desarrollos teóricos no reflejan el compor-
tamiento real de la metaheurística, ya que, aunque aseguran la convergencia en de-
terminadas circunstancias, requieren tiempos exponenciales, que lógicamente, no se
corresponden con los requisitos reales.
1 Procedimientos
de búsqueda local con cierta aleatorización en la aceptación de movimientos que
empeoran la solución.
I NTRODUCCIÓN 33

Técnicas de diseño de algoritmos Algoritmos específicos


* Divide y vencerás * Relajación del modelo
* Algoritmos voraces * Algoritmos ad hoc
* Programación dinámica * Etc
* Etc

Metaheurística

Inspiración Estadística
* Psicología => Aprendizaje * Aleatorización
* Biología => Evolución * Funciones de distribución
* Termología => Recocido * Estimimadores
* Etc * Etc

Figura 4.1: Elementos básicos que permiten el diseño de metaheurísticas.

Otro resultado teórico fundamental, en el contexto de los algoritmos genéticos, es


el teorema del esquema (schemata theorem) [160][136]. Los esquemas son una ex-
tensión de la codificación binaria de un individuo. Realmente, un esquema representa
a un conjunto de individuos con ciertas características comunes (template). En este
escenario, el teorema del esquema cambia la búsqueda de soluciones por la búsqueda
de esquemas, los cuales son instanciados por un individuo, de tal forma que se pro-
duce un paralelismo intrínseco en la metaheurística. Desafortunadamente, el teorema
NFL [325], que se describirá a continuación, disuadió a los investigadores de seguir
por ese camino. El paralelismo intrínseco sólo aparece en algunos problemas.
Es importante resaltar que las metaheurísticas no son la panacea para todos los
problemas de optimización combinatoria. En 1997 D. Wolpert y W. Macready [325]
probaron que para todas las posibles funciones objetivo2 todos los algoritmos de bús-
queda, tratados como cajas negras, se comportan igual de bien (o de mal), de tal for-
ma que si una técnica es muy eficiente para una colección de problemas, se mostrará
muy ineficiente para otra colección. Este resultado, conocido como teorema NFL (No
Free Lunch Theorem) establece que, en media, ni los algoritmos genéticos, ni el re-

2 Cada función objetivo identifica un problema combinatorio.


34 A LGORITMOS M ETAHEURÍSTICOS
cocido simulado, ni la búsqueda tabú ni ninguna metaheurística, es más eficiente que
la búsqueda puramente aleatoria.
La conclusión más importante que se puede extraer de este trabajo, no es que
no tenga sentido estudiar o diseñar metaheurísticas, sino que en este diseño se debe
incluir algún tipo de conocimiento sobre la función objetivo, de tal forma que se
pueda responder a la siguiente pregunta: ¿cómo se pueden encontrar soluciones de
alta calidad para una función objetivo dada?. La respuesta a esta pregunta está en
el propio artículo de D. Wolpert y W. Macready: determinar ciertas características
de la función objetivo (salient features) y construir un algoritmo de búsqueda que
específicamente encaje con estas características.
La demostración del teorema NFL se basa en la utilización de algoritmos de bús-
queda que no visiten dos veces la misma solución. Esta hipótesis, habitualmente, no
se verifica en la mayoría de las metaheurísticas. Por ejemplo, en las metaheurísticas
poblacionales, de generación a generación se mantienen ciertas estructuras; por lo
tanto, se visitarán soluciones ya visitadas. En este sentido, el teorema NFL admite
que un algoritmo de búsqueda que utilice estructuras del pasado, que sean adecuadas
y que se introduzcan en la siguiente iteración, se comportará mejor que aquél que no
lo haga.
Las metaheurísticas deben afrontar este resultado teórico siendo fieles a la des-
cripción que se ha dado al inicio de la sección. En primer lugar, tener una parte ge-
neral y sencilla, que les permita ser aplicadas a una colección amplia de problemas.
En segundo lugar, pueden tener una parte dependiente del problema que les permita
obtener un algoritmo eficiente.
Además, las metaheurísticas utilizan como mecanismo para guiar la búsqueda
el principio de optimalidad aproximada (POP) [127], que se puede enunciar en los
siguientes términos:
“Las soluciones de alta calidad en un nivel determinado, se suelen encontrar muy
próximas a las soluciones que también son de alta calidad en un nivel adyacente. Por
lo tanto, esta clase de soluciones usualmente tienen estructuras en común”.
De este principio se puede extraer que, para cualquier problema de optimización,
su espacio de búsqueda contiene vecindades en las cuales, las soluciones de alta ca-
lidad, están rodeadas de otras soluciones de:

alta calidad.

alta y baja calidad.

mucha peor calidad.


C LASIFICACIÓN DE ALGORITMOS METAHEURÍSTICOS 35
Los procedimientos metaheurísticos se basan también en estas ideas como meca-
nismo de guía de la búsqueda.

4.2. Clasificación de algoritmos metaheurísticos

En los sucesivos capítulos se presentarán algunas de las metaheurísticas que con


más éxito se han aplicado a una colección amplia de problemas. Es importante desta-
car que aunque estas metaheurísticas, a priori, parece que son estrategias de búsqueda
muy diferentes, sus principios algorítmicos son bastante parecidos [116]. Durante los
últimos, años algunos investigadores están desarrollando un marco general en el que
tengan cabida la mayoría de las metaheurísticas. El desarrollo del marco general vie-
ne determinado por el análisis entre las semejanzas y diferencias que existen entre las
distintas metaheurísticas. Este análisis es equivalente a encontrar una “estructura”
que permita organizar las metaheurísticas según una o varias características. Estas
características podrían ser: la forma de explorar el espacio de soluciones, el dominio
de inspiración, los métodos a partir de los cuales se construye la metaheurística, etc.
La determinación de la estructura del marco general establece una clasificación o
taxonomía de las metaheurísticas que, por lo general, es una tarea difícil y arriesgada
[185], debido fundamentalmente a que en las implementaciones reales no se pueden
extraer un conjunto de características que sean totalmente ortogonales y que permitan
una separación completa entre unas metaheurísticas y otras. Una metaheurística tiene
dos interpretaciones distintas [26][32]. La primera de ellas hace referencia al “estado
puro” [26] de la metaheurística. La segunda vision considera la implementación real,
que habitualmente incluye “inhomogeneidades” [26][32] que la suelen hacer más
eficiente. Debido a estas inhomogeneidades la clasificación de las metaheurísticas se
complica enormemente. Con el objetivo de obtener una clasificación más clara y útil,
se han considerado exclusivamente las características conceptuales de las metaheu-
rísticas (estado puro).
A partir de las taxonomías que aparecen en la literatura, se proponen varias alter-
nativas que permiten clasificar las metaheurísticas revisadas en este capítulo.

4.2.1. Taxonomías clásicas

En la literatura se pueden encontrar diferentes formas de describir o clasificar


las metaheurísticas, dependiendo fundamentalmente de las características que se se-
leccionen para dicho propósito. A continuación, se describen brevemente algunas de
las formas que más comúnmente se han utilizado para clasificar metaheurísticas [32]:
36 A LGORITMOS M ETAHEURÍSTICOS
Atendiendo a la Inspiración:
Natural: algoritmos que se basan en un símil real, ya sea biológico, social,
cultural, etc.
Sin inspiración: algoritmos que se obtienen directamente de sus propiedades
matemáticas.

Atendiendo al número de soluciones:


Poblacionales: buscan el óptimo de un problema a través de un conjunto de
soluciones.
Trayectoriales: trabajan exclusivamente con una solución que mejoran iterati-
vamente.

Atendiendo a la función objetivo:


Estáticas: no hacen ninguna modificación sobre la función objetivo del proble-
ma.
Dinámicas: modifican la función objetivo durante la búsqueda.

Atendiendo a la vecindad:
Una vecindad: durante la búsqueda utilizan exclusivamente una estructura de
vecindad.
Varias vecindades: durante la búsqueda modifican la estructura de la vecindad.

Atendiendo al uso de memoria:


Sin memoria: se basan exclusivamente en el estado anterior.
Con memoria: utilizan una estructura de memoria para recordar la historia pa-
sada.

Cualquiera de las alternativas descritas por sí solas no es de grano suficiente-


mente fino como para permitir una separación clara entre todas las metaheurísticas.
Generalmente, estas características (pueden incluirse más) se suelen combinar para
permitir una clasificación más elaborada.

4.2.2. Taxonomía tabular

La estructuración tabular, como mecanismo de análisis de las diferencias y se-


mejanzas entre las distintas metaheurísticas es, probablemente, la taxonomía más
usada y más sencilla. Consiste en construir una tabla de características que permita la
comparación entre metaheurísticas. Esta tabla tiene una columna por cada una de las
características descritas anteriormente (aunque podrían incluirse más). Cada celda de
C LASIFICACIÓN DE ALGORITMOS METAHEURÍSTICOS 37
Paradigma Implementación Inspiración Multi- Búsqueda Solución Función Niveles de Vecindad Memoria Proceso Procesos
arranque local inicial objetivo vecindad aleatorios adaptativos

Optimización por colonias aco tradicional si no no poblac. estática uno estática explícita no si
de hormigas - ACO aco + demonios si dinámica

Equipos asíncronos- AT AT parcial no si poblac. estática varios estática explícita no si

Algoritmos Culturales - CA si no no poblac. estática varios dinámica explícita si si


CA

Algoritmos de estimación EDA parcial no no poblac. estática varios * implícita no si


de la distribución - EDA

Búsqueda por entorno FANS no no si trayec. dinámica varios estática no no si


adaptativo borroso - FANS

Algoritmos Genéticos - GA si no no poblac. estática varios estática implícita si si


GA

Proc. aleatorizados y GRASP no si si trayect. estática varios dinámica no si no


adaptativos de búsqueda tradicion no si
voraz - GRASP GRASP biased no si
Búsqueda local guiada - GLS no no si trayect. dinámica uno estática explícita no no
GLS

Concentración heurística - HC no si si trayect. estática varios estática explícita no no


HC

Búsqueda local Iterativa - ILS tradicional no no si trayect. estática varios estática no si no


ILS ILS reactivo si

Algoritmos Meméticos - MA parcial no si poblac. estática varios estática implícita si si


MA

Métodos Multi-arranque - MSM basico no si si trayect. estática uno estática no si no


MSM AMS no si

Métodos ruidosos - NM NM- ruido datos no no si trayect. dinámica uno estática no si no


NM ruido f dinámica no
NM perturbación estática no
Metah. de opt. parcial en POPMUSIC no no si trayect. estática uno estática no no no
condiciones. esp. de in-
tensificacion - POPMUSIC
Reencadenamiento de PR no * si poblac. estática uno estática implícita no si
trayectorias - PR

Recocido simulado - SA SA si no si trayect. estática uno estática no si no

Inteligencia de enjambre - SI si no no poblac. dinámica uno dinámica implícita si si


SI

Búsqueda dispersa - SS SS no no si poblac. estática varios estática explícita no si

Métodos de aceptación TA no no si trayect. estática uno estática no no no


del umbral - TAM

Búsqueda tabú - TS TS tradicional no no si trayect. estática uno dinámica explícita no no


TS aleatorio si no
TS reactivo no si
Búsqueda en vecindad VND no no si trayect. estática varios estática no no no
variable - VNS RVNS no si
BVNS si si

Figura 4.2: Resumen de las características que presentan las distintas metaheurísticas.

la tabla se rellenaría con el valor correspondiente. Por ejemplo: en el caso de la bús-


queda tabú, la celda correspondiente a la memoria debería estar marcada; en cambio,
la celda que se corresponde con poblaciones de soluciones no estaría marcada.
En [185][26][48][32][116] se pueden encontrar ejemplos de este tipo de clasifi-
cación. Basándose en estos trabajos, a continuación se muestran las características
que se han considerado más descriptivas para realizar una clasificación tabular:

Inspiración: determina si una metaheurística se inspira en un símil real o no.


El valor de esta casilla será: “sí” en caso afirmativo, “no” en caso negativo y
“parcialmente” en el caso de que se base en una metaheurística con inspiración
38 A LGORITMOS M ETAHEURÍSTICOS
real, aunque no se inspire directamente. Por ejemplo, los algoritmos genéticos
están basados en las teorías neo-darwinistas de evolución de las especies.

Número de soluciones: determina la cantidad de soluciones que utiliza la me-


taheurística para implementar la búsqueda. El valor de esta casilla puede ser
“trayectorial” en el caso de utilizar una única solución y “poblacional” en el
caso de que se utilice un conjunto de soluciones.

Multi-arranque: determina si la metaheurística se ejecuta una o varias veces.


El valor de esta casilla será “sí” en el caso de que sea multi-arranque, y “no”
en caso contrario.

Búsqueda local: determina si la metaheurística utiliza un procedimiento de


búsqueda local para mejorar las soluciones. El valor de esta casilla será “sí” en
caso afirmativo, y “no” en caso negativo.

Función objetivo: determina si la metaheurística modifica la función objetivo


para hacer la búsqueda o no. El valor de esta casilla será “dinámica” en el caso
de que se modifique la función objetivo y “estática” en el caso contrario.

Niveles de vecindad: determina si la metaheurística utiliza una o varias estruc-


turas de vecindad. En el primer caso el valor de la casilla será “uno” y en el
segundo caso “varios”.

Vecindad: establece si la metaheurística utiliza una estructura de vecindad es-


tática o dinámica. En el primer caso el valor de esta casilla será “estática” y en
el segundo caso “dinámica”. En el caso de los EDAs, no tiene sentido hablar
de vecindad

Memoria: establece si la metaheurística utiliza estructura de memorias (en


cualquiera de sus implementaciones) para hacer la búsqueda. El valor de esta
casilla será “explícita” en el caso de tener una estructura explícita que almace-
ne y guíe la búsqueda o “implícita” cuando se tienen en cuenta características
del pasado, pero no de forma explícita. No se considera memoria al almacena-
miento de información, si éste no se utiliza para guiar la búsqueda. Por ejemplo,
GRASP almacena la mejor solución encontrada en cada iteración, pero a no ser
que sea reactivo, esta memoria no guía la búsqueda.

Procesos aleatorios: determina si la metaheurística contempla fenómenos de


aleatorización para permitir movimientos que puedan empeorar la solución pa-
ra salir de óptimos locales. El valor de la casilla será “sí” en caso afirmativo y
“no” en el caso contrario.

Procesos adaptativos: determina si la metaheurística se adapta al problema,


de tal forma que es capaz de cambiar sus parámetros, ya sea para intensificar o
C LASIFICACIÓN DE ALGORITMOS METAHEURÍSTICOS 39
para diversificar la búsqueda. El valor de la casilla será “sí” en el caso de que
algún procedimiento sea adaptativo o “no” en caso negativo. Esta característica
se debe considerar conjuntamente con otras características como la búsqueda
local, multi-arranque o el proceso constructivo.

Para tener una clasificación más clara, se ha hecho una separación entre lo que es
el paradigma de la metaheurística y la implementación concreta. Por ejemplo, se con-
sidera que GRASP es el paradigma de la metaheurística que lleva su propio nombre
y “GRASP tradicional” o “GRASP reactivo” son dos implementaciones concretas
de esa metaheurística. En la figura 4.2 se muestra una clasificación tabular para las
metaheurísticas descritas en este capítulo.

4.2.3. Taxonomía jerárquica

La clasificación jerárquica es bastante más compleja que la clasificación tabu-


lar, debido fundamentalmente a que la primera clasificación debe describir de forma
explícita la estructura que relaciona todas las metaheurísticas, mientras que en la se-
gunda clasificación, esta estructura es implícita. Además, la clasificación jerárquica
supone que no existe solapamiento entre las metaheurísticas, hipótesis que por lo ge-
neral no tiene por qué ser cierta. Por ejemplo, no es cierto para metaheurísticas que
hereden características de más de una (hibridación de metaheurísticas).
Las taxonomías jerárquicas más sencillas establecen una estructura de árbol para
intentar clasificar las metaheurísticas. Estas clasificaciones asumen que son parcia-
les, ya que la relación entre estos algoritmos suele ser más compleja. Aún así, esta
clasificación es bastante útil, debido a que con muy pocas clases se pueden clasificar
muchas metaheurísticas. Ejemplos de este tipo de jerarquías se pueden encontrar en
[154][79].
En la figura 4.3 se presenta una propuesta de taxonomía que permite clasificar
jerárquicamente la mayoría de las metaheurísticas revisadas en este capítulo. Natu-
ralmente, esta taxonomía presenta problemas, ya que probablemente algunas de las
clases se solapen entre sí. La característica más importante de la taxonomía jerárquica
es que permite agrupar las metaheurísticas desde un punto de vista conceptual.
Es importante destacar que la jerarquía propuesta no puede clasificar todas las
metaheurísticas revisadas en este libro. Por ejemplo, la búsqueda tabú aleatorizada
[98] estaría a medio camino entre las metaheurísticas basadas en búsqueda local y las
metaheurísticas basadas en búsquedas aleatorizadas. Para tener una descripción más
detallada se debe recurrir a una estructura de grafo, más compleja que la de árbol. En
este campo, el desarrollo de librerías de clases es, probablemente, desde donde más
esfuerzos se ha hecho para conseguir clasificar de forma completamente ortogonal
cada una de las metaheurísticas. Así, se diseña una jerarquía de clases que permita
40 A LGORITMOS M ETAHEURÍSTICOS

Metaheurística

Trayectorial Poblacional

Basadas en Basadas en Basadas en búsqueda


búsqueda búsqueda multi-arranque
Combinación Movimientos
local iterativa
de soluciones

ILS FANS HC AMS MSM GRASP


ACO AT EDA SI

Con memoria Estocástica Por entornos Inspiración Sin inspiración


evolutiva

TS GLS NM SA TA VNS POPMUSIC CA GA MA PR SS

Figura 4.3: Estructura de árbol que permite la clasificación jerárquica de las metaheu-
rísticas.

construir una metaheurística concreta. La jerarquía debe ser lo suficientemente flexi-


ble como para construir una metaheurística y alguna de sus variantes. Además, si la
jerarquía de clases está bien diseñada, no se produce ninguna intersección entre cada
una de las clases. En [326][105] se pueden encontrar taxonomías de este tipo.
La jerarquía propuesta en la figura 4.3 permite una clasificación conceptual de
las metaheurísticas, pero no da ninguna información acerca de las características al-
gorítmicas de cada una de ellas. En [116] se propone un marco que permite describir
algorítmicamente la mayoría de las metaheurísticas. Para ello, supone que todas las
metaheurísticas están compuestas por un conjunto relativamente pequeño de méto-
dos. A continuación, se describen los métodos utilizados en este libro:

Construcción: lo emplean todas las metaheurísticas para crear una o un con-


junto de soluciones. Además, como se verá en capítulos sucesivos, en el caso
de GRASP y ACO utilizan este método para construir soluciones iniciales de
forma iterativa.

Recombinación: permite generar nuevas soluciones a partir de las actuales por


medio del cruce, en el sentido amplio del término. Este método sólo lo utilizan
algunas metaheurísticas poblacionales evolutivas.

Modificación aleatoria: se utiliza para introducir una perturbación aleatoria


que modifica una o varias soluciones actuales.
C LASIFICACIÓN DE ALGORITMOS METAHEURÍSTICOS 41

[ ACO | GRASP]

Construcción

[GA | SS]

[GA | SS]
[ACO | GRASP | SA | TS | VNS]
Recombinación

[SA | TS | VNS]

[GA | SS | VNS]
[GRASP | SS | TS]
Modificación
aleatoria
[ACO]

[GRASP | SS | TS | VNS]

[GA | SA] Mejora

[ACO | GA | SS | TS]

[GRASP | SA | VNS] Actualización


de memoria

[SA | TS | VNS]

[ACO | GA |GRASP | SS] Actualización de


Parámetros o
vecindades

[Condición de Parada]

Figura 4.4: Vista algorítmica unificada de las metaheurísticas.


42 A LGORITMOS M ETAHEURÍSTICOS
NOG
No

No uso de función objetivo


ale
ato
r iza
G2 ció
n
G1 OG

G3 oria
em
dem
o
us
No

R
Diversificación Intensificación

Figura 4.5: Espacio intensificación-diversificación.

Mejora: se emplea para mejorar una o varias soluciones. Se puede implemen-


tar mediante un procedimiento de búsqueda local o incluso a través de una
metaheurística.

Actualización de memoria: se encarga de actualizar la memoria, tanto ex-


plícitamente (p.ej. listas tabú en la búsqueda tabú o rastro de feromonas en
la colonia de hormigas) como implícitamente (p.ej. poblaciones en algoritmos
genéticos o conjunto de referencia en la búsqueda dispersa).

Actualización de parámetros o vecindades: se utiliza para actualizar los pa-


rámetros de la búsqueda (modificación de los criterios de aceptación, reducción
del ruido) y las estructuras de las vecindades, como en VNS.

En la figura 4.4, se presenta un diagrama algorítmico que ilustra una visión uni-
ficada y general de las metaheurísticas basada en la aplicación de las posibles com-
binaciones de los métodos descritos anteriormente. En esta figura se puede observar
que la descripción algorítmica de cada una de las metaheurísticas es un camino entre
el nodo Inicio y el nodo Fin.

4.2.4. Taxonomía basada en la relación intensificación-diversificación

Otra alternativa considerada para clasificar las metaheurísticas consiste en evaluar


cómo efectúan el proceso de búsqueda cada una de ellas. Este hecho se manifiesta en
cómo hacen el balance entre la intensificación y la diversificación (ver sección 1.2.2).
C LASIFICACIÓN DE ALGORITMOS METAHEURÍSTICOS 43
En este tipo de clasificaciones, se supone que todos los métodos de las metaheurís-
ticas tienen un efecto directo en la intensificación y/o en la diversificación. Como
ejemplos de métodos que afectan a la intensificación y a la diversificación se pueden
destacar: el criterio de aceptación y la cola de enfriamiento en recocido simulado;
la selección, recombinación y mutación en algoritmos evolutivos; la perturbación, la
búsqueda local y el criterio de aceptación en la búsqueda local iterativa; etc. Todos
estos métodos se analizarán con detalle en capítulos sucesivos. En [32] se propone el
análisis de estos métodos como mecanismo para extraer las semejanzas y diferencias
entre las distintas metaheurísticas. Para ello, utilizan un espacio bidimensional que
permite situar cada uno de estos métodos en un dominio, caracterizado por restringir
a los valores de dichos métodos dentro de una superficie triangular, cuyos vértices se
corresponden con tres casos extremos de relaciones intensificación-diversificación.
En la figura 4.5 se muestra un ejemplo de este triángulo.
El vértice etiquetado con OG se corresponde con aquellos métodos que exclusiva-
mente se guían por la función objetivo del problema. Por ejemplo, un procedimiento
de búsqueda local aislado y sin ningún tipo de aleatorización estaría muy cerca de
este vértice. El vértice NOG engloba a aquellos métodos que utilizan una o más fun-
ciones de guía pero que no son la función objetivo del problema. Por ejemplo, un
procedimiento multi-arranque determinista sin aleatorización estarían muy cerca de
este vértice. Por último, el vértice R determina a aquellos procedimientos que no
tienen ninguna función de guía, o lo que es lo mismo, que son totalmente aleatorios.
La esquina OG se corresponde con los métodos de las metaheurísticas que tienen
máxima intensificación y mínima diversificación. En cambio, las esquinas NOG, R y
el segmento que la une se corresponden con los métodos de las metaheurísticas que
tienen máxima diversificación y mínima intensificación.
En [32] se describe que, sobre el triángulo definido, se pueden establecer tres
gradientes diferentes:

G1: un método cuanto menos utiliza la función objetivo más lejos está del
vértice OG.

G2: un método cuanto menos utiliza la aleatorización más lejos está del vértice
R.

G3: un método cuanto menos utiliza funciones alternativas a la función obje-


tivo, generalmente relacionadas con el uso de memorias explícitas (búsqueda
tabú) o implícitas (algoritmos poblacionales), más lejos estará de NOG.

En el triángulo descrito en esta sección se sitúan de forma sencilla aquellas me-


taheurísticas cuyos métodos tienen bien separada la parte de intensificación de la par-
te de diversificación. Por ejemplo, desde un punto de vista intuitivo, la búsqueda tabú
44 A LGORITMOS M ETAHEURÍSTICOS
es un procedimiento de búsqueda local que tiene restringidos algunos movimientos
por una o varias listas tabú (se puede encontrar una descripción detallada del método
en la sección 5.2). Esta forma de explorar el espacio de búsqueda tiene efectos tanto
en la intensificación como en la diversificación. El hecho de evitar que se accedan a
todos los vecinos favorece la intensificación, mientras que el hecho de elegir al mejor
vecino disponible favorece la intensificación. Estos dos efectos se pueden controlar
a través de la longitud de la lista tabú, de tal forma que las listas largas favorecen la
diversificación y las listas cortas favorecen la intensificación. Con respecto al trián-
gulo descrito, se tendrá que el método estará situado en el segmento NOG − OG, de
tal forma que cuanto más corta sea la lista tabú más cerca estará el algoritmo de OG.

4.3. Limitaciones de los algoritmos metaheurísticos

Según el teorema NFL, los métodos generales de búsqueda, entre los que se en-
cuentran las metaheurísticas, se comportan exactamente igual cuando se promedian
sobre todas las funciones de objetivo posibles, de tal forma que si un algoritmo A es
más eficiente que un algoritmo B en un conjunto de problemas, debe existir otro con-
junto de problemas de igual tamaño para los que el algoritmo B sea más eficiente que
el A. Esta aseveración establece que, en media, ninguna metaheurística (algoritmos
genéticos, búsqueda dispersa, búsqueda tabú, etc.) es mejor que la búsqueda com-
pletamente aleatoria. Una segunda característica que presentan las metaheurísticas es
que existen pocas pruebas sobre su convergencia hacia un óptimo global; es decir,
que a priori no se puede asegurar ni que la metaheurística converja ni la calidad de
la solución obtenida. Por último, las metaheurísticas más optimizadas son demasiado
dependientes del problema o al menos necesitan tener un elevado conocimiento heu-
rístico del problema. Esto hace que, en general, se pierda la genericidad original con
la que fueron concebidas.
A pesar de estos aparentes problemas, la realidad es que el comportamiento expe-
rimental de la mayoría de las metaheurísticas es extraordinario, convirtiéndose para
muchos problemas difíciles de resolver en la única alternativa factible para encontrar
una solución de calidad en un tiempo razonable. En general, las metaheurísticas se
comportan como métodos muy robustos y eficientes que se pueden aplicar con re-
lativa facilidad a una colección amplia de problemas. Además, la demostración del
teorema NFL se basa en que el algoritmo de búsqueda no visita dos veces la misma
solución y en que no se introduce conocimiento heurístico en el diseño del método
metaheurístico. Estas hipótesis habitualmente no son ciertas.
Capítulo 5

Metaheurísticas Trayectoriales

5.1. Introducción

En este capítulo se describen las características generales de las metaheurísti-


cas trayectoriales. Se utiliza el término trayectoria porque el proceso de búsqueda
que desarrollan estos métodos se caracterizan por una trayectoria en el espacio de
soluciones. Es decir, que partiendo de una solución inicial, son capaces de gene-
rar un camino o trayectoria en el espacio de búsqueda a través de operaciones de
movimiento. Las características de la trayectoria proporcionan información sobre el
comportamiento del algoritmo así como de su efectividad. En la figura 5.1 se muestra
gráficamente alguna de las estrategias que siguen las metaheurísticas trayectoriales
para intentar converger al óptimo global evitando los óptimos locales. En la figura
5.1(a) se representa un método que intenta encontrar la solución óptima mediante va-
rios arranques independientes, donde cada arranque se produciría cuando la búsqueda
se queda atrapada. En cambio, en la figura 5.1(b) el procedimiento de búsqueda evita-

f([x]) Búsqueda multi-arranque f([x]) Búsqueda aleatorizada f([x]) Búsqueda determinsita

xo xo xo xo xo xo xo xo

(a) (b) (c)

Figura 5.1: Convergencia a mínimos absolutos. (a) Enfoque multi-arranque. (b) En-
foque aleatorizado. (c) Enfoque determinista y sistemático.

45
46 M ETAHEURÍSTICAS T RAYECTORIALES
ría los óptimos locales tomando decisiones aleatorias. Por último, en la figura 5.1(c)
se muestra un método donde se permiten movimientos que incluso empeoran la solu-
ción. A continuación, se describen algunas de las metaheurísticas trayectoriales que
se han aplicado con éxito a una colección extensa de problemas.

5.2. Búsqueda tabú

La búsqueda tabú o TS (Tabu Search) se puede considerar como un procedi-


miento de búsqueda local dotado de una memoria que le permite escapar de óptimos
locales. En esencia, TS se basa en las dos siguientes premisas:

Memoria adaptativa: la memoria se actualiza en función del tiempo y del aná-


lisis de la vecindad.

Búsqueda sensible: la operación de movimiento se produce después de sacar


conclusiones de lo acontecido anteriormente.

El principio de operación TS puede resumirse como [196][127]:


Es mejor una mala decisión basada en información, que una buena decisión to-
mada al azar. En un sistema que emplea memoria, una mala decisión basada en una
estrategia proporcionará claves útiles para continuar la búsqueda. En cambio, una
buena decisión fruto del azar no proporcionará ninguna información para posterio-
res acciones.
TS fue desarrollada por F. Glover en [121], basada en algunas ideas formuladas
en [120]. En [122][123][127] aparecen descripciones muy detalladas de esta me-
taheurística. En [125][115][32] se pueden encontrar descripciones más modernas, así
como información sobre su aplicación a problemas combinatorios.
Quizá la característica que más diferencia la búsqueda tabú del resto de metaheu-
rísticas es que en ésta se minimiza la participación de cualquier proceso aleatorio. TS
se basa fundamentalmente en métodos sistemáticos y deterministas que conducen a
un óptimo local. Para ello, esta metaheurística utiliza la “historia de la búsqueda”
tanto para escapar de óptimos locales como para implementar la estrategia de explo-
ración del espacio de búsqueda. Nótese que existe alguna implementación de TS en la
que sí existe cierta aleatorización de proceso (generalización del recocido simulado)
[192][127][98].
La implementación más sencilla del algoritmo de TS empieza con una solución
factible x que intenta optimizar localmente a través de una estrategia de búsqueda
local. Para ello, se define una vecindad N(x) de esa solución, de tal forma que se in-
tentan alcanzar soluciones de mejor calidad efectuando operaciones de movimiento.
B ÚSQUEDA TABÚ 47
Vecindad
Función objetivo f([x])

Función objetivo f([x])

Función objetivo f([x])


Prohibido por Prohibido por
la historia la historia

Movimiento Movimiento Vecindad


De mejora De mejora

Movimiento de
enpeoramiento

Espacio de búsqueda [x] Espacio de búsqueda [x] Espacio de búsqueda [x]

(a) (b) (c )

Figura 5.2: Procedimiento de búsqueda a través de TS.

Sin embargo, en el marco de TS, en vez de considerar la vecindad íntegra, se consi-


dera una vecindad reducida N ∗ (x), definida por las soluciones accesibles desde x por
medio de una operación de movimiento. Lógicamente se tendrá que N ∗ (x) ⊆ N(x).
La razón por la cual la vecindad reducida es distinta de la vecindad estándar se
debe a la memoria de corto plazo o lista tabú T . Esta memoria restringe las solu-
ciones que se pueden alcanzar desde una solución dada, ya que se prohíben cier-
tos movimientos. La memoria de corto plazo almacena las soluciones que se han
visitado recientemente, de tal forma que quedan prohibidos los movimientos hacia
esas soluciones. En estas condiciones, la vecindad reducida se podría definir como
N ∗ (X ) = N(X ) \ T .
La forma de proceder de TS consiste en seleccionar iterativamente la mejor solu-
ción posible en la vecindad reducida, introduciendo en la memoria la última solución
visitada. Se dice que esta solución es tabú activa. Además, si la memoria se ha im-
plementado como una memoria FIFO de tamaño l [32], al añadir una nueva solución
a la lista tabú (memoria) se extrae la solución que se incluyó hace l iteraciones. Pue-
de darse una situación donde todos los movimientos posibles empeoran la solución
actual. A todos los efectos, se puede considerar que TS es una metaheurística que
efectúa la búsqueda sobre una estructura de vecindad dinámica [300].
En el contexto de TS, el uso de la memoria evita que se visiten las soluciones
recientes, con lo que se previene efectos cíclicos en la búsqueda, permitiendo inclu-
so movimientos que empeoran la solución. Además, después de cierto tiempo, las
soluciones almacenadas en la lista pierden su estatus tabú, ya que se supone que la
búsqueda estará suficientemente lejos como para que no se pueda alcanzar de nuevo
esa solución.
La longitud de la lista tabú (tabu tenure) controla la memoria del proceso de
búsqueda. Con longitudes pequeñas, la búsqueda se concentra en áreas pequeñas del
espacio de búsqueda. En cambio, con longitudes grandes, se obliga a que visiten
zonas mucho más grandes del espacio de búsqueda. En las implementaciones más
avanzadas de TS se permite que la longitud de la lista varíe de forma dinámica durante
48 M ETAHEURÍSTICAS T RAYECTORIALES
Algoritmo 5.1 Búsqueda Tabú
{x: TipoSolucion} = TS(ST , SV , SV ∗ : integer; f : TipoFuncionObjetivo)
var
x,y: TipoSolucion;
T : array [1 . . . ST ] of TipoSolucion; // Memoria Tabu;
V : array [1 . . . SV ] of TipoSolucion; // Estructura de Vecindad;
V ∗ : array [1 . . . SV ∗ ] of TipoSolucion; // Estructura de Vecindad Reducida;

begin
{x} := GenerarSolucionInicial();
while not terminacion do
V := GenerarVecindad(x);
V ∗ := GenerarVecindadReducida(V );
{y} := SeleccionarMe jor(V ∗ , f );
if f (y) ≥ f (x) then
x := y;
end if
{T } := GrabarMovimientoMemoria(x, T ); // Marcar la solución como tabú-
activo
{T } := ActualizarMemoria(T ); // Borrar elementos tabúes antiguos si pro-
cede
end while
end

el proceso de búsqueda, permitiendo que el algoritmo sea mucho más robusto. Estas
ideas se generalizan en el método conocido como búsqueda tabú reactiva (reactive
tabu search) [17][16]. En [123][127] se pueden encontrar descripciones detalladas de
esta opción.
En las figuras 5.2 se muestra de forma esquemática el proceso de búsqueda de
TS. En la figura 5.2(a) se parte de una solución inicial factible. Puesto que no hay
historia, la vecindad coincide con su versión reducida. En 5.2(b) existe ya una región
prohibida, de tal forma que todos los movimientos que tuviesen como destino la zona
rayada estarían prohibidos (evita volver hacia atrás). El caso de la figura 5.2(c) es aún
más descriptivo porque el procedimiento de búsqueda tiene que tomar la decisión de
empeorar la solución (el resto de movimientos están prohibidos o son inalcanzables).
En las versiones estándares de TS, además de la memoria a corto plazo o basada
en lo reciente, descrita anteriormente, se introduce la memoria a largo plazo o basada
en la frecuencia. La memoria a largo plazo, comparada con la memoria a corto plazo,
introduce un enfoque que típicamente opera sobre un horizonte más lejano. En esta
memoria se almacena la frecuencia con la que se han producido una serie de solucio-
B ÚSQUEDA TABÚ 49
nes (implementación explícita) o una serie de atributos (implementación implícita).
Con la información almacenada en la memoria a largo plazo se consigue tanto intensi-
ficar como diversificar la búsqueda. La intensificación se produce porque se premian
aquellas regiones que contienen soluciones de alta calidad visitadas anteriormente,
de tal forma que esa área se explora de forma más exhaustiva. La diversificación se
produce debido a que también se premian aquellas regiones del espacio de búsqueda
que no se han visitado frecuentemente.
La implementación de estas memorias tabú pueden ser explícita o basada en
atributos. El primer tipo de implementación es el que se ha descrito en esta sección,
es decir, se almacenan una elite de soluciones completas ya visitadas (durante el
proceso de búsqueda). El segundo tipo tiene un efecto mucho más eficiente, ya que
se almacenan en la memoria atributos, que pueden ser componentes de la solución,
movimientos o diferencias entre soluciones [127]. En este caso, el atributo o grupo
de atributos identifica un conjunto de soluciones. Obsérvese que esta opción tiene la
contrapartida de que se pueden almacenar soluciones en la memoria que no han sido
visitadas y que pueden ser de muy alta calidad.
El término tabú tiene una connotación cultural que indica una serie de prohibi-
ciones para tratar ciertos temas en los que, generalmente, la historia pasada ha tenido
una influencia elevada. En el contexto cultural este tipo de restricciones puede su-
perarse. La búsqueda tabú modela este hecho por medio del criterio de aspiración,
que permite movimientos hacia estados que estén etiquetados como tabú activos. Ha-
bitualmente, se selecciona como criterio el valor de la función objetivo, de tal forma
que si una solución etiquetada como tabú presenta un valor de la función objetivo
superior (en problemas de maximización) al actual, se supera el estatus tabú permi-
tiendo el movimiento, aunque a priori estuviese etiquetado como tabú. Existen otros
criterios de aspiración, generalmente basados en la influencia, donde la influencia es
una medida que se relaciona con la magnitud del cambio (a mayor cambio, mayor
influencia). En [130] se revisan algunos de estos criterios de aspiración. En el algo-
ritmo 5.1 se muestra pseudo-código de alto nivel para una implementación estándar
de TS.
Existen otro tipo de procedimientos más elaborados que en algunos problemas
pueden mejorar sustancialmente el comportamiento de TS, permitiendo hacer una
búsqueda mucho más efectiva. A continuación, se describe algunos de ellos [122][123]
[127][115][130]:

Movimientos de influencia: determina la bondad del movimiento a través de


una medida alternativa a la que da la función objetivo. Estos movimientos son
la base de los procedimientos de intensificación y diversificación.
Intensificación: se basa en la idea intuitiva de explorar con mayor énfasis aque-
llas regiones que parezcan más prometedoras. En el marco de TS estas estra-
50 M ETAHEURÍSTICAS T RAYECTORIALES
tegias se basan en una memoria reciente en la que se almacenan el número de
iteraciones consecutivas que una componente de la solución se ha presentado
sin interrupciones. La forma de utilizar esta información podría ser empezando
de nuevo la búsqueda en la mejor solución conocida para, posteriormente, fijar
en ella las componentes más interesantes. Este mecanismo ha sido utilizado
por otras metaheurísticas (i.e ACO [87]) para aprender cuáles son las buenas
combinaciones de componentes en las soluciones de calidad.

Diversificación: los métodos basados en búsqueda local tienen el inconveniente


de que la mayoría del tiempo que emplean en la búsqueda lo consumen explo-
rando una región del espacio de soluciones muy pequeña. La diversificación es
un mecanismo que fuerza a que la búsqueda explore regiones del espacio de so-
luciones que no han sido exploradas anteriormente. Estas estrategias se basan
en la memoria de largo plazo, y existen dos formas típicas de implementarla.
La primera de ellas consistiría en reiniciar la búsqueda partiendo de la solu-
ción actual o de la mejor encontrada hasta el momento, forzando a que tenga
las componentes de la solución menos usadas. La segunda alternativa consiste
forzar la diversificación de forma continua incluyendo componentes muy poco
utilizadas en el proceso regular de la estrategia de búsqueda.

Oscilación estratégica: permite relajar ciertas restricciones ampliando así la


versatilidad a la hora de hacer movimientos. Una posible implementación po-
dría consistir en permitir movimientos hacia soluciones no factibles para luego,
desde esas soluciones, producir soluciones factibles.

Elecciones probabilísticas: permite aleatorizar algún proceso de decisión. Sue-


le ser útil cuando se tienen varios criterios que son contrapuestos o cuando
existen varios candidatos con calidades equivalentes.

Umbrales tabú: añade versatilidad a los criterios de aspiración. Para ello, exa-
mina la lista tabú T y si la solución actual no está en la lista se compara con el
valor del umbral, de tal forma que se aceptará el movimiento si lo que empeora
la solución es menor que el umbral.

Funciones subrogadas: permite no evaluar la función objetivo cuando ésta es


muy costosa. Las funciones subrogadas están correlacionadas con la función
objetivo, pero computacionalmente son más ligeras.

Existen dos estrategias que tienen una relevancia mayor, que son la búsqueda
dispersa (scatter search) y el re-encadenamiento de trayectorias (path relinking)
[124][128] [125][129][131][132], que aunque originalmente se concibieron en el
marco de TS, se han consolidado como metaheurísticas independientes. Debido a
su importancia, estas técnicas se revisarán posteriormente con detalle.
R ECOCIDO SIMULADO 51
Actualmente, algunas de las líneas de investigación que tienen más interés son
aquéllas que están relacionadas con la efectividad de la búsqueda y con la hibridación
de TS con otras metaheurísticas. También se ha ampliado el ámbito de aplicación de
esta metaheurística para resolver problemas de optimización continua [274] o multi-
objetivo [192].

5.3. Recocido simulado

El recocido simulado1 o SA (Simulated Annealing) es una metaheurística que


se basa en la analogía que puede existir entre un proceso de optimización combina-
toria y un proceso termodinámico, conocido como recocido. Este proceso consiste
en elevar la temperatura de un sólido cristalino con defectos hasta una temperatura
determinada, que por lo general suele ser alta. Posteriormente, se permite que el ma-
terial se enfríe muy lentamente en un baño térmico. El proceso de enfriamiento viene
descrito por una función de la temperatura conocida como cola de enfriamiento, que
generalmente suele ser continua y suave. Con este proceso se pretende que el sólido
alcance una configuración de red cristalina lo más regular posible, eliminando duran-
te este proceso los posibles defectos que tuviese originalmente. La nueva estructura
cristalina se caracteriza por tener un estado de energía de la red mínimo.
Desde un punto de vista algorítmico, el principio de operación en el que se basa
el SA se puede enunciar en los siguientes términos:
SA es un algoritmo de búsqueda local capaz de escapar de los óptimos locales
permitiendo que bajo ciertas circunstancias se admitan movimientos que empeoren
la mejor solución encontrada hasta el momento en el proceso de búsqueda.
En la literatura aparecen varios algoritmos análogos a SA, entre los que se pueden
destacar los siguientes: recocido de Monte Carlo (Monte Carlo annealing), enfria-
miento estadístico (statistical cooling), escalada probabilística (probabilistic hill-
climbing), relajación estocástica (stochastic relaxation) o algoritmo de cambio pro-
babilístico (probabilistic exchange algorithm). Esta metaheurística fue inicialmente
concebida2 por Kirkpatrick et al. [180] a principios de los 80. Este grupo de inves-
tigación estaba trabajando en problemas de diseño de circuitos electrónicos. Consi-
deraron aplicar el algoritmo de Metropolis [206] a problemas de minimización que
aparecen en este tipo de diseños, para lo cual introdujeron una analogía entre los pará-
1 También se denomina temple simulado, lo cual es bastante inadecuado, ya que el proceso de tem-
ple (hardening) se utiliza para endurecer materiales, en cambio el recocido (annealing) se utiliza para
eliminar defectos [79].
2 Es interesante destacar que Cerny [54], de forma independiente, llegó a las mismas conclusiones,

pero trabajando en el problema del TSP.


52 M ETAHEURÍSTICAS T RAYECTORIALES
Termodinámica Optimización
Configuración cristalina Solución factible
Configuración cristalina de mínima energía Solución óptima
Energía de la configuración Coste de la solución
Temperatura Parámetro de control

Tabla 5.1: Comparación de conceptos entre el proceso termodinámico y el de optimi-


zación.

metros que intervienen en el proceso termodinámico y en el proceso de optimización.


En la tabla 5.1 se muestra la identificación de conceptos.
El origen físico de este proceso se puede encontrar descrito en [79][180][206].
En esencia, se supone que las partículas que componen el sólido cristalino son distin-
guibles y que siguen una distribución de Maxwell-Boltzmann. Matemáticamente esta
distribución de probabilidad viene dada por la siguiente expresión:

n′j = C × e−β×ε j (5.1)


donde n′j es el número de partículas en el estado de ocupación j; C es una constante
de proporcionalidad; β = 1/kB T , con kB como la constante de Boltzmann y T la
temperatura del sólido; finalmente, ε j es la energía del estado j. En la figura 5.3.a
se muestra, de forma esquemática, la distribución de partículas en niveles de energía
en función de la temperatura. Como se puede observar, para una temperatura nula
todas las partículas que componen el sólido están en el nivel más bajo de energía.
En cambio, cuando se eleva la temperatura del sólido, aumenta la probabilidad de
encontrar partículas en niveles más altos de energía.
El algoritmo de SA se fundamenta en el trabajo de Metropolis [206], quien mode-
ló el proceso de recocido de un sólido simulando cambios energéticos en un sistema
de partículas conforme decrece la temperatura. Este proceso se mantiene hasta que
se llega a un estado estable. El algoritmo de Metropolis permite calcular los valores
medios de energía de cada uno de los niveles. Para ello, se introduce una ligera per-
turbación en el sistema. Posteriormente, se calcula de nuevo la energía de cada una de
las partículas, de tal forma que si ésta ha decrecido, el sistema transita al nuevo nivel
de energía. Sin embargo, si el nivel de energía aumentaba, el nuevo estado se acepta
con la probabilidad descrita en 5.1. En la figura 5.3.b se muestra la distribución de
probabilidad en función de la temperatura. En esta figura se puede observar que cuan-
do la temperatura es elevada, la probabilidad de aceptación de un estado con energía
mayor (peor configuración) es relativamente alta. En cambio, cuando la temperatura
es baja, la probabilidad de aceptar estados con mayor energía es muy pequeña.
R ECOCIDO SIMULADO 53

Estados de energía
-bÎ
Î5 e
Î4
Î3
Î2
Î1
Î0

T=0°K T = Medio T = Alto T (°K) Î


(a) (b)

Figura 5.3: (a) Ejemplo de diferentes distribuciones de partículas en niveles de ener-


gía en función de la temperatura. (b) Probabilidad de aceptación en función de la
temperatura.

Desde el punto de vista algorítmico, el recocido simulado es un procedimiento


de búsqueda local que introduce una fase de aleatorización en la aceptación de movi-
mientos, de tal forma que si el movimiento es de mejora se acepta. Por el contrario,
si el movimiento conduce a una solución peor, se acepta con la probabilidad dada por
5.1. Nótese que en el caso de problemas de optimización, la constante de Boltzmann
no se considera, ya que no tiene significado en este contexto. La aleatorización en la
aceptación de movimientos viene controlada por el parámetro T , que se corresponde
con la temperatura en el proceso termodinámico. La temperatura permite que en los
primeros instantes de la búsqueda la mayoría de los movimientos se acepten, aunque
éstos empeoren la solución. Posteriormente, la temperatura se va reduciendo, lo cual
implica que cada vez se hace más restrictivo el proceso de aceptación de estados de
peor calidad.
Tanto la elección de la temperatura inicial como de la función que se utiliza pa-
ra describir la cola de enfriamiento, son factores críticos en el diseño de SA. En
[1][79][315][157] se indican algunos métodos de cómo seleccionar estos parámetros.
Siguiendo con la analogía termodinámica, SA empieza la búsqueda del estado
más estable con una temperatura elevada; por lo tanto, la probabilidad de aceptar es-
tados ”peores” es alta. En esta situación inicial no es demasiado ”peligroso” aceptar
soluciones peores, ya que se supone que la búsqueda está demasiado lejos del óptimo
global. Posteriormente, esta temperatura se va reduciendo (cola de enfriamiento), con
lo que la probabilidad de aceptación de estados peores va disminuyendo. Se supone
que según se va disminuyendo la temperatura se está más cerca del óptimo global
y que las partículas del sólido van ocupando sus posiciones definitivas. Este proce-
so termina cuando se encuentra una solución satisfactoria. En el algoritmo 5.2 se
presenta el pseudo-código de alto nivel para la metaheurística SA.
Actualmente, la implementación y diseño de SA sigue dos tendencias [157]. En la
primera de ellas se especifica las elecciones que son propias del problema (vecindad,
54 M ETAHEURÍSTICAS T RAYECTORIALES
función objetivo y restricciones). En la segunda se especifica las elecciones generales
del algoritmo (funciones de probabilidad de aceptación, de generación o la cola de
enfriado) [94].
A continuación, se describen algunos de los resultados más interesantes que se
pueden encontrar en la literatura:

Funciones objetivo: su determinación es dependiente del problema. En [296]


se recomienda utilizar una función heurística que dependa de la temperatura
(que la penalice). Este método es semejante al propuesto por Charon y Hurdey
[56] que da lugar a los métodos ruidosos y que se detallarán posteriormente.
Otra forma de acelerar la convergencia de SA consiste en calcular directamente
el incremento de energía en vez de calcular las energías propiamente dichas,
antes y después del movimiento. En [312] se proponen varios métodos para
aproximar el incremento de energía por medio de funciones subrogadas. Este
método, denominado intercambio de funciones subrogadas (surrogate function
swindle) se caracteriza por ser mucho más rápido. Tiene como contrapartida
que pierde precisión. En [195][298] se propone utilizar la función de distribu-
ción clásica en vez de la que se encuentra en la dinámica molecular. El efecto
que tiene es el de suavizar la superficie de energía, minimizando la cantidad y
profundidad/altura de los mínimos/máximos. En [330] se estudia el caso de no
conocer la función objetivo. En estas circunstancias, se utiliza una simulación
probabilística para generar muestras de la función objetivo para una entrada
dada, y que se aceptan si el valor está en unos determinados límites.

Selección de vecindad: la eficiencia de SA está muy relacionada con la elec-


ción de la vecindad [223]. En [94][293][106][148] se concluye que la estruc-
tura de la vecindad debe ser ”suave”, de tal forma que los óptimos estén ”di-
fuminados” en vez de ser abruptos, ya que en este caso los óptimos presentan
perfiles escarpados. Otro factor importante a tener en cuenta es el tamaño de la
vecindad. En este sentido no hay ningún resultado teórico. Por ejemplo, Chech
et al. [60] concluye que es mejor utilizar vecindades pequeñas. Por el contrario,
en [229] se establece que es más adecuado utilizar vecindades grandes.

Con respecto a la segunda tendencia, los resultados más interesantes que se han
encontrado en la literatura son los siguientes:

Funciones de generación de probabilidad: estas funciones, generalmente,


suelen ser distribuciones uniformes con probabilidades proporcionales al ta-
maño de la vecindad que, por lo general, son independientes de la temperatura.
En [110] se propone un mecanismo más ”inteligente” que modifica la vecin-
dad y la densidad de probabilidad para favorecer la intensificación y la diver-
R ECOCIDO SIMULADO 55

Algoritmo 5.2 Recocido Simulado


{x: TipoSolucion} = SA(T: real; Mmax : integer; f : TipoFuncionObjetivo)
/*Mmax son las iteraciones por temperatura*/
var
x, y: TipoSolucion;
V : list of TipoSolucion; // Estructura de vecindad;
tk : h cola de enfriamiento i;
k: integer; // índice de cambio de temperatura

begin
{x} := SolucionInicial(); //Inicializar solución
k := 0;
{tk } := ColaEn f riamiento; //Inicializar la cola de enfriamiento
t0 := T ;
repeat
m := 0;
repeat
{y} := SeleccionarVecino(V (x));
∆E := f (y) − f (x);
if ∆E ≥ 0 then
x := y;
else
ρ := rand(1);
if ρ ≤ e−δE/tk then
x := y;
end if
end if
m := m + 1;
until m = Mmax
{tk } := ReducirTemperatura(tk , k);
k := k + 1;
until terminacion
end
56 M ETAHEURÍSTICAS T RAYECTORIALES
sificación. Este enfoque está muy influido por la búsqueda tabú. Tovey [312]
propone un enfoque similar.

Funciones de aceptación de probabilidad: habitualmente, la función de pro-


babilidad que se utiliza como función de aceptación de estados es una versión
de la distribución de Maxwell-Boltzmann. En la literatura se proponen otra se-
rie de funciones como las que se presentan en [229]. En este trabajo se propone
una función de distribución con un decrecimiento geométrico (ak xk−1 ), que es
independiente del cambio en la función objetivo.

Cola de enfriamiento (cooling schedule): en SA la cola de enfriamiento está


totalmente descrita por una temperatura inicial, una planificación (scheduling)
para reducir/cambiar la temperatura y un criterio de parada. Romeo et al. [275]
muestran que es imprescindible tener una buena planificación para aumentar la
eficiencia de SA. En [49][110][228][66] también se pueden encontrar trabajos
muy interesantes en esta línea. En [275] se sugiere un procedimiento para el
diseño de la cola de enfriamiento. La cola de enfriamiento puede ser: estática,
está predefinida la variación de la temperatura de antemano, y dinámica, donde
la variación de temperatura es función de como se va comportando el algorit-
mo. En [299] aparece un estudio exacto para problemas muy pequeños del que
se pueden sacar conclusiones acerca del diseño de la cola de enfriamiento. En
[66][103][232] aparecen otros estudios experimentales e implementaciones de
la cola de enfriamiento.

Algunas implementaciones más avanzadas de SA se pueden encontrar en Ohl-


mann y Bean [231], que enriquecen la metaheurística SA, introduciendo variables
como la presión y el volumen (además de la temperatura). Esta variante de SA la
denominan recocido comprimido (compressed annealing). Otro enfoque interesante,
que se presenta en el marco de SA, consiste en dividir el algoritmo en dos fases. La
primera fase se ocuparía de las altas temperaturas (se puede implementar con una
búsqueda local rápida). La segunda fase la llevaría a cabo un algoritmo SA tradicio-
nal. Además, se suele implementar con una cola de enfriamiento ”inteligente” que
determina la temperatura inicial con la que empieza la segunda fase del algoritmo.
En [316] se propone un método para determinar la temperatura inicial para la imple-
mentación de SA en dos fases utilizando colas de enfriamiento estándares.
Es importante destacar que SA es una de las pocas metaheurísticas para la que
se puede demostrar que bajo ciertas circunstancias converge [1][166][165]. El pro-
blema es que las condiciones de convergencia son muy restrictivas, de tal forma que
aseguran dicha convergencia en tiempos prácticamente exponenciales. En general, se
suelen introducir modificaciones, como las que se han descrito en los dos grandes
bloques anteriores, que reducen el tiempo de búsqueda a costa de dejar de cumplir
las condiciones que aseguran su convergencia asintótica [157].
B ÚSQUEDA DE VECINDAD VARIABLE 57

Función objetivo f([x])

Función objetivo f([x])


x0 x1 x1 x2
Espacio de búsqueda [x] Espacio de búsqueda [x]

(a) (b)

Figura 5.4: Perfil del espacio de búsqueda para dos estructuras de vecindad distintas.

SA ha sido fuente de inspiración de varias metaheurísticas como son los mé-


todos ruidosos [56] o los métodos de aceptación de umbral [91]. Esto permitió a
Jacobson desarrollar un marco común para los procedimientos basados en búsqueda
local, denominado algoritmos de escalada generalizados (generalized hill-climbing
algorithms) [166], que se basan en que los algoritmos de escalada son esencialmente
los mismos, apareciendo la diferencia fundamental en el método probabilístico que
empeora las soluciones. Dada su importancia, estos métodos se describirán posterior-
mente con detalle.

5.4. Búsqueda de vecindad variable

La búsqueda de vecindad variable o VNS (Variable Neighborhood Search) ori-


ginalmente fue propuesta por P. Hansen y N. Mladenovìc [215][216][152]. VNS es
una metaheurística relativamente nueva que intenta evitar quedar atrapada en ópti-
mos locales cambiando la estructura de la vecindad donde se realiza la búsqueda. El
principio de operación es el siguiente:
VNS se basa en un cambio sistemático de las estructuras de vecindades dentro
de un procedimiento de búsqueda local.
La mayoría de las metaheurísticas basadas en búsqueda local que se pueden en-
contrar en la literatura trabajan con una única estructura de vecindad, independien-
temente de que tenga una estructura dinámica, como ocurre en la búsqueda tabú
[121][127][115]. La metaheurística VNS introduce como idea novedosa el manejo
de un conjunto determinado de estructuras de vecindad. Por lo tanto, para cada solu-
ción ∀x ∈ SS se define un conjunto de vecindades Nk (x), donde 1 ≤ k ≤ kmax . Cada
58 M ETAHEURÍSTICAS T RAYECTORIALES
una de estas vecindades Nk (x) se puede construir mediante una o varias métricas (o
cuasi-métricas) que lógicamente serán dependientes del problema.
La metaheurística VNS se basa en los siguientes tres puntos [152]:

1. Un óptimo local con respecto a una vecindad Ni (x) no tiene por qué serlo con
respecto a otra vecindad N j (x).
2. Un óptimo global es un óptimo local con respecto a todas las posibles estruc-
turas de vecindad.
3. Para muchos problemas, los óptimos locales con respecto a una o varias estruc-
turas de vecindad, están relativamente próximos.

La última observación es empírica pero implica que, en algunas ocasiones, el


óptimo local proporciona información sobre el óptimo global. Por ejemplo, el óptimo
local puede compartir varias componentes (de la solución) del óptimo global, que
generalmente no se sabe cuáles son. Este hecho se basa en el principio de optimalidad
aproximada [127].
Para un problema de optimización concreto, se puede decir que una solución
es localmente óptima exclusivamente con respecto a una estructura de vecindad. Esta
aseveración probablemente no tenga por qué ser cierta con respecto a otras estructuras
de vecindad. Por lo tanto, la estructura de vecindad determina el perfil (landscape)
del espacio de búsqueda. Estos conceptos se pueden resumir en la siguiente expresión
[170]:
Un operador, una superficie de soluciones (One operator, one landscape).
La idea que reside detrás de esta afirmación es que la estructura de vecindad
determina las propiedades topológicas del espacio de búsqueda. Para el perfil del es-
pacio de búsqueda que aparece en la figura 5.4.a, VNS partiría del punto x0 y a través
de un procedimiento de búsqueda local podría mejorar la solución hasta obtener la
solución x1 (óptimo local), donde se quedaría atrapado. Si se cambia la estructura
de vecindad3 , el perfil del espacio de soluciones también cambiaría, con lo que por
medio de un procedimiento de búsqueda local se podría obtener la solución x2 . En la
figura 5.4.b se muestra esta idea.
En la bibliografía revisada se pueden encontrar varias implementaciones distintas
de VNS, teniendo en cuenta fundamentalmente como se combinan las tres ideas intro-
ducidas con anterioridad. En primer lugar, esta combinación puede ser determinista.
En este caso VNS se renombra como búsqueda del entorno variable descendente o
VND (Variable Neighborhood Descent) [153][152]. En esta implementación el cam-
bio de vecindad se hace de forma determinista, de tal forma que cuando la búsqueda
3 En
este caso se aumenta el tamaño de la vecindad, aumentando también el tamaño del salto. Como
consecuencia, algunos picos podrían desaparecer.
B ÚSQUEDA DE VECINDAD VARIABLE 59

Algoritmo 5.3 Búsqueda en Vecindad Variable


{x: TipoSolucion} = VNS(N1 ,. . . , NKmax : <Estructura de Vecindad>; f : TipoFun-
cionObjetivo; opcion: char)
var
/*Cada una de las N1 ,. . . , Nk representa una estructura de vecindad*/
y: TipoSolucion;
V : array [. . .] of TipoSolucion; // Vecindad
k:integer;

begin
{x} := GenerarSolucionInicial();
{V } := GenerarVecindad(N1 );
repeat
k := 1;
repeat
/*Se pueden implementar diferentes métodos VNS*/
if opcion =′ a′ then
y := BusquedaLocal(x,V );
else
if opcion =′ b′ then
y := ElegirAleatorio(V );
else
y := ElegirAleatorio(V );
{V } := GenerarVecindad(Nk );
y := ElegirAleatorio(V );
end if
end if
if f (y) >= f (x) then
x := y;
k := 1;
else
k := k + 1;
end if
until k = kmax
until terminacion
end
60 M ETAHEURÍSTICAS T RAYECTORIALES
se queda atrapada en un óptimo local, se cambia la estructura de vecindad con el ob-
jetivo de poder escapar de dicho óptimo. Destacar que la solución que se obtiene al
final de este método es un óptimo local con respecto a todas las vecindades que haya
considerado la metaheurística. En el pseudo-código general de VNS presentado en
el algoritmo 5.3, la variante VND se corresponde con la opción a. En [44][150] se
pueden encontrar implementaciones exitosas de VND.
La combinación de ideas también puede ser estocástica. En este caso la imple-
mentación de VNS se llama VNS reducido o RVNS (Reduced VNS) [153][152]. En
RVNS se selecciona aleatoriamente un punto que pertenece a una vecindad dada, sin
hacer ningún tipo de optimización local. Esta implementación resulta particularmente
útil cuando, para cada entorno, la búsqueda local es costosa. Esta implementación es-
tá relacionada con el método de Monte-Carlo, aunque como se apunta en [152] RVNS
es más sistemática. En el pseudo-código general de VNS presentado en el algoritmo
5.3, la variante RVNS se corresponde con la opción b. En [151][214][153][152] se
pueden encontrar ejemplos de implementaciones de esta versión.
Por último, la combinación también puede ser mixta, es decir, combinando as-
pectos deterministas y estocásticos. En este caso, VNS recibe el nombre de VNS
Básico o BVNS (Basic VNS) [153][152]. En esta implementación también se selec-
ciona aleatoriamente un punto que pertenece a una vecindad, pero en ésta se mejora
mediante una estrategia de búsqueda local. En el pseudo-código general del VNS
presentado en el algoritmo 5.3, la variante BVNS se corresponde con la opción c. En
[269][270][44][150] se pueden encontrar implementaciones de este tipo.
Existen otro tipo de implementaciones más elaboradas, como pueden ser la bús-
queda descompuesta de vecindades variables o VNDS (Variable Neighborhood De-
composition Search) [151][153][152]. Esta variante se basa en la extensión de la me-
todología de VNS a dos niveles. La diferencia fundamental con respecto a BVNS es
que, en vez de aplicar el procedimiento de búsqueda local a toda la solución, sólo
se aplica a parte de la solución. Otras implementaciones son, por ejemplo: el VNS
sesgado o SVNS (Skewed VNS) [153][152], que proporciona criterios de aceptación
más flexibles y potentes o el VNS Paralelo o PVNS (Parallel VNS) [153][152], ver-
sión paralela de VNS. En [152][32][153] se puede encontrar una descripción de estos
métodos y sus posibles aplicaciones.
Uno de los campos donde más éxito ha tenido VNS (en cualquiera de sus imple-
mentaciones) es en la hibridación con otras metaheurísticas, como por ejemplo con
TS, con GRASP o con programación con restricciones.
B ÚSQUEDA LOCAL GUIADA 61
5.5. Búsqueda local guiada

La búsqueda local guiada o GLS (Guided Local Search) es una metaheurística


basada en penalizaciones que se sitúa en un nivel superior a un procedimiento de
búsqueda local, de tal forma que ésta intenta mejorar su eficiencia y robustez. La idea
fundamental que reside detrás de GLS es la modificación de la función objetivo a
través de penalizaciones con el fin de evitar quedar atrapada en óptimos locales. El
principio de operación de esta metaheurística es el siguiente:
GLS es un procedimiento de alto nivel que intenta ayudar a un procedimiento de
búsqueda local a escapar de un óptimo local, modificando el perfil del espacio de
búsqueda a través de las penalizaciones.
GLS originalmente aparece como un algoritmo de búsqueda en el marco de GE-
NET Neural Network [323][324]. GENET es un modelo de red neuronal competitiva,
concebido como un módulo para realizar diseños VLSI [240] que resuelvan proble-
mas de satisfacción de restricciones (Constraint Satisfaction Problems (CSP)). GE-
NET se inspira en el método de reparación heurística (Heuristic Repair Method) [8]
que a su vez toma ideas del heurístico de conflicto mínimo (Min-Conflict Heuristic)
[8]. Una de las aportaciones más importante que hace GENET es la incorporación de
un algoritmo de aprendizaje que le permita escapar de los óptimos locales. En este
contexto es donde se desarrolla GLS, como una evolución de una serie de algoritmos
de aprendizaje.
Desde un punto de vista muy general, GLS se podría clasificar como una imple-
mentación de una variante de la búsqueda tabú (TS), ya que el principio de operación
es semejante. Se trata de restringir la búsqueda a través de una memoria (explícita en
TS e implícita en GLS) en un procedimiento de búsqueda local. En [319] se arguyen
tres motivos para clasificarlas como dos metaheurísticas distintas:

1. GLS es un algoritmo compacto que se puede utilizar sin ningún tipo de modi-
ficación para una colección de problemas. En cambio, las variantes de TS son
dependientes del problema.
2. Las restricciones en GLS se refieren a las soluciones (características de las
soluciones), tomando la forma de penalizaciones en la función objetivo. En
cambio en TS están referidas a movimientos y suelen estar implementadas a
través de listas.
3. Las restricciones en GLS son "blandas", de tal forma que se sobrescriben con
facilidad. Por contra, en TS las restricciones son "duras", superándose sólo
mediante el criterio de aspiración.

En el contexto de GLS, tanto el conjunto de soluciones como la estructura de la


vecindad se mantienen inalterados; en cambio, la función objetivo se modifica diná-
62 M ETAHEURÍSTICAS T RAYECTORIALES

Función objetivo f([x])

x0 x1
Espacio de búsqueda [x]

Figura 5.5: Escape de un óptimo local a través de la penalización de la función obje-


tivo.

micamente con la intención de ayudar al procedimiento de búsqueda local a escapar


de los óptimos locales. En la figura 5.5 se muestra esta idea, donde se observa có-
mo el procedimiento de búsqueda local, partiendo de x0 , es capaz de mejorar esa
solución hasta encontrar x1 , que es un óptimo local. GLS evita que el procedimiento
de búsqueda local se quede atrapado en un óptimo local por medio de la inclusión
de penalizaciones en la función objetivo. Estas penalizaciones se manifiestan en una
modificación del perfil del espacio de búsqueda (search landscape). Iterativamente,
se penaliza la función objetivo (representado por líneas discontinuas en la figura 5.5)
hasta que se pueda escapar del óptimo local.
La inclusión de penalizaciones en la función objetivo se basa en el concepto de
características (features) de la solución. Estas características son propiedades que
tienen las soluciones y que se utilizan para distinguirlas. Por ejemplo, en el caso del
TSP [238][70] una característica podría ser un arco, que representa la distancia entre
dos ciudades. Para el problema de MAXSAT [238][70] las características podrían ser
las cláusulas insatisfechas.
La metaheurística GLS introduce una función Ii (x) que indica si la característica i
está presente en la solución x. Considerando m características, la función Ii (x) estaría
definida por la siguiente ecuación:

1, si x presenta la característica i
Ii (x) = (5.2)
0, e.o.c
con 1 ≤ i ≤ m.
Esta metaheurística se encarga de dar un coste ci y una penalización pi a cada
característica i que esté presente en la solución x. Por ejemplo, para un problema
B ÚSQUEDA LOCAL GUIADA 63
modelado con un grafo G = {V, A}, las características de las solución podrían ser los
arcos ai ∈ A : 1 ≤ i ≤ |A|, el coste ci que se le asocia a cada característica podría
ser el valor del peso del arco y, por último, la penalización pi se inicializaría a un
valor nulo pi = 0 para cada arco, de manera que se iría incrementando si dicho arco
ha conducido a un óptimo local. De forma general, se tiene que la función objetivo
modificada se puede definir como:

m
h(x) = f (x) + λ × ∑ (pi × Ii (x)) (5.3)
i=1

donde x es una posible solución, f (x) es el valor de la función objetivo para esa
solución, λ es un parámetro de ajuste de la metaheurística que da una idea de la
importancia que tienen las penalizaciones frente a la función objetivo, i, con 1 ≤ i ≤ m
es un índice que recorre las características (m) que se consideren y, finalmente, pi es
la penalización para la característica i (inicialmente ∀i : pi = 0, 1 ≤ i ≤ m).
GLS intenta no quedar atrapada en óptimos locales por medio de la función h(x),
penalizando las características desfavorables que presenta dicha solución cuando
queda atrapada en un óptimo local. Para penalizar cada característica se tienen en
cuenta dos criterios. El primero es el coste de la característica, de tal forma que si
el coste es elevado, se le penaliza más. Recordando el ejemplo del grafo se tendría
que, para problemas de minimización, cuanto más coste (peso) tenga un arco más
habría que penalizarlo. La segunda característica a considerar es el coste actual de la
penalización, ya que en este caso la búsqueda tiene en cuenta la historia pasada. Si
no se introdujese esta característica, la búsqueda estaría completamente guiada por
el peso. Estos dos conceptos se introducen en una función denominada utilidad de
penalización utili (x∗ ) que se define para un óptimo local x∗ como:

ci
utili (x∗ ) = Ii (x∗ ) × (5.4)
1 + pi
donde ci y pi son respectivamente el coste y la penalización actual de la característica
i.
La utilidad de penalización variará en los siguientes términos:

Si la característica i no está presente en el óptimo local x∗ la utilidad de pena-


lización es cero, ya que Ii = 0.

Cuanto más elevado es el coste ci de la característica i, mayor será la utilidad


de penalizarlo.

Cuantas más veces haya sido penalizada (mayor pi ) la característica i, menor


es la utilidad de penalizarla de nuevo.
64 M ETAHEURÍSTICAS T RAYECTORIALES
En un óptimo local, la característica con mayor valor de la utilidad de penali-
zación será penalizada, incrementando su valor en uno (teniendo en cuenta que está
ajustado por el parámetro λ).
La modificación de la función objetivo y la utilidad de penalización tienen en
cuenta para cada una de las características tanto el coste como el valor actual de la
penalización. Por este motivo, GLS permite la búsqueda en zonas más prometedo-
ras del espacio de soluciones. En primer lugar, se exploran las áreas del espacio de
búsqueda que contienen soluciones con coste bajo (intensificación). La inclusión de
penalizaciones ayuda a prevenir que el procedimiento de búsqueda centre todos sus
esfuerzos en una región muy determinada, de tal forma que la metaheurística explo-
rará otras regiones del espacio (diversificación). En el algoritmo 5.4 se muestra el
pseudo-código de alto nivel para GLS.
En [322] se apunta como mejora del algoritmo GLS estándar, la inclusión del
procedimiento de búsqueda local rápida FLS (fast local search ). La finalidad de es-
te procedimiento heurístico consiste en reducir el tamaño de la vecindad. Para ello,
divide cada vecindad en sub-vecindades. Inicialmente, se considera que todas están
activas. A medida que avanza la búsqueda, estas sub-vecindades se van desactivando.
La razón para desactivarlas es que no se haya encontrado un movimiento de mejo-
ra en esa sub-vecindad. El algoritmo terminará cuando no quede ninguna activa. En
[212] se considera la posibilidad de incluir en GLS un criterio de aspiración seme-
jante al de TS que añada más versatilidad al procedimiento de búsqueda. Otro campo
que se debería estudiar más profundamente es la hibridación de esta metaheurística,
ya que en la bibliografía consultada sólo se ha encontrado la hibridación con algorit-
mos genéticos [189]. Es de esperar que los resultados sean buenos ya que comparte
similitudes con VNS y TS. En [320][321][213][212] se pueden encontrar algunas
implementaciones exitosas de esta metaheurística.

5.6. Aceptación de umbral

La metaheurística de aceptación de umbral o TA (Threshold Accepting) fue pre-


sentada originalmente por G. Dueck y T. Scheuer [91] y de forma independiente por
P. Moscato [226]. El principio de operación de esta metaheurística se puede enunciar
en los siguientes términos:
Dada una solución inicial, todos los movimientos que produzcan una mejora en
la función objetivo son aceptados. En cambio, los movimientos que empeoran la
función objetivo son aceptados, si esta pérdida de calidad es menor que un umbral
dado.
Algunos autores consideran los métodos de aceptación del umbral como un caso
particular del recocido simulado, donde la función de aceptación de movimientos
ACEPTACIÓN DE UMBRAL 65

Algoritmo 5.4 Búsqueda Local Guiada


{x: TipoSolucion} = GLS(m: integer; f : TipoFuncionObjetivo)
var
λ: real;
factor de escalado
I: array [1, . . . , m] of langlecaracterísticas rangle;
P: array [1, . . . , m] of langle penalización de características rangle;
C: array [1, . . . , m] of langle costes de características rangle;
U : array [1, . . . , m] of langle utilidad de características rangle;
y,z: TipoSolucion;
i,j:integer;
h: TipoFuncionObjetivo;

begin
{I,C, λ} := Inicializar();
{x} := GenerarSolucionInicial();
y := x;
repeat
/*h = f + λ ∑ Ii Pi */
{h} := CalcularF uncionOb jetivoModi f icada( f , λ, I, P, x);
/*buscamos un óptimo local de h*/
z := BusquedaLocal(y, h);
if f (z) >= f (x) then
x := y;
end if
/*Calculamos la utilidad de las características*/
{U } := CalcularUtilidad(i, I,C, m);
/*Seleccionamos la característica de máxima utilidad de penalización*/
hi := argmax(U, j) , j ∈ [1, . . . , m]i;
{P} := Penalizar(i, P);
until terminacion
end
66 M ETAHEURÍSTICAS T RAYECTORIALES
es determinista en vez de aleatoria. En esta revisión se ha preferido considerarlas
como dos metaheurísticas independientes, debido a que así es más sencillo analizar
las relaciones entre las diversas metaheurísticas.
En el contexto de esta metaheurística, la función de aceptación de movimientos
viene dada por la siguiente ecuación:

si ∆E ≤ T hk

1,
Pk (∆E) = (5.5)
0, e.o.c
donde ∆E es el cambio en la función objetivo y T hk la función que determina el
umbral en la iteración k. Esta función suele ser determinista y no creciente.
TA es un método trayectorial e iterativo en el que se fija un umbral determina-
do en cada iteración. Habitualmente, el umbral empieza en valores elevados para,
posteriormente, decrecer de forma monótona hasta que se hace cero. El umbral de-
termina en cada iteración el nivel máximo de pérdida de calidad que se le permite a
la solución. Para cada iteración, se hace una búsqueda local exhaustiva (aunque hay
versiones que eligen un valor aleatorio de la vecindad) de la vecindad. En [91][226]
se muestra, para algunos problemas, una mejora significativa del enfoque TA con
respecto a SA.
No se proporciona un pseudo-código para esta metaheurística porque tiene mu-
chas similitudes con el pseudo-código de SA (figura 5.2). La diferencia fundamental
aparece en la función de aceptación de movimientos, que en este caso, vendría des-
crito por una función semejante a la presentada en 5.5.
En [163] se propone una modificación sobre el esquema general de TA, denomi-
nada aceptación de paquetes antiguos u OBA (Old Bachelor Acceptance), en el que
se permiten modificaciones no monótonas del umbral. Además, los cambios en el
umbral son automáticos; es decir, que el umbral aumenta o disminuye en función de
la lectura del problema (proximidad o lejanía a un óptimo local). En Hu et al. [163] se
denomina a este efecto expectación de la disminución (dwindling expectation), que
permiten la intensificación y diversificación de la metaheurística. En otras palabras,
si el algoritmo se ve forzado a empeorar la función objetivo, se aumenta el umbral
para escapar del óptimo local. Sin embargo, cuando se producen movimientos de
mejora, se reduce el umbral para explorar de forma más intensa la vecindad. Se pue-
de considerar que desde un punto de vista algorítmico, OBA es una implementación
adaptativa de TA.
M ÉTODOS RUIDOSOS 67
5.7. Métodos ruidosos

Los métodos ruidosos o NM (Noising Methods) fueron desarrollados por I. Cha-


ron y O. Hudryen en 1993 [56]. La idea fundamental que reside detrás de NM se
puede resumir como sigue [59]:
Los métodos ruidosos se basan en la introducción de una serie de fluctuaciones
(ruido) decrecientes sobre los datos del problema, de tal forma que al final estas
fluctuaciones convergen hacia los datos que representan al óptimo.
NM es una metaheurística trayectorial que se basa en la operación de movimiento
como mecanismo para encontrar soluciones de alta calidad. La diferencia fundamen-
tal que existe entre esta técnica y la búsqueda local es que se introduce una pertur-
bación (ruido) en la función objetivo o en los datos del problema. Generalmente,
este ruido viene descrito por alguna función de distribución que selecciona un valor
en un intervalo (−r, r), donde la relación de ruido (noise-rate) r, decrece durante
la ejecución del procedimiento. El ruido es el valor que toma una variable aleatoria
con una cierta probabilidad (uniforme, gaussiana, etc.). Habitualmente, la media y la
desviación estándar de esta distribución tienden a cero. Además, la desviación están-
dar suele reducirse a medida que aumenta el tiempo de ejecución del método; por lo
tanto, la presencia del ruido disminuye con el tiempo.
En función de cómo se añada el ruido, la NM se puede implementar de varias
formas. A continuación, se describen las formas que se han aplicado con éxito a
problemas combinatorios [58][57][59]:

1. Añadir ruido a los datos: si por ejemplo el problema está descrito por un grafo
G = {V, A}, esta opción consistiría en construir un grafo ruidoso Gnoised =
{V, Anoised } obtenido por medio de la suma de ruido a los pesos de las aristas
que componen el grafo.
∀a ∈ A : anoised = a + noise
donde −r < noise < r se ha seleccionado con una determinada función de dis-
tribución. En estas circunstancias, el método actuaría como un procedimiento
de búsqueda local sobre el grafo ruidoso. Posteriormente se reduciría el nivel
ruido y se volvería a aplicar la búsqueda local. Este procedimiento se repetiría
hasta que el ruido fuese nulo.
2. Añadir ruido a los movimientos: un movimiento desde una solución x a una
solución x′ está descrito por un cambio en la función objetivo dado por:
∆ f (x′ , x) = f (x′ ) − f (x)
En este caso, la forma de añadir ruido sería:
∆ fnoise (x′ , x) = f (x′ ) − f (x) + noise
68 M ETAHEURÍSTICAS T RAYECTORIALES
donde: −r < noise < r se ha seleccionado con una determinada función de
distribución. Se puede demostrar de forma trivial que esta opción generaliza a
la primera.
3. Añadir ruido olvidando parte de la solución: si por ejemplo el problema está
descrito por un grafo en el que la solución es un subgrafo, la forma de añadir
ruido sería olvidar nodos o arcos que hasta el momento se suponía que estaban
en la solución. En este caso, el nivel de ruido vendría dado por el nivel de
olvido.

La razón por la cual se añade ruido tanto a los datos como a la función objetivo, es
para intentar evitar que la búsqueda se quede atrapada en un óptimo local [59]. Para
que este razonamiento fuese valido, el ruido debería permitir que el procedimiento de
búsqueda hiciese tanto movimientos de mejora como movimientos que empeorasen
la mejor solución encontrada hasta el momento. Esta condición se verifica, ya que el
ruido toma valores positivos y negativos.
Desde un punto de vista algorítmico, se puede considerar que la opción de añadir
ruido, descrita en esta sección, es una generalización del recocido simulado. A con-
tinuación se describe dicha generalización. En el contexto del recocido simulado la
aceptación de estados de peor calidad viene dada por:

e∆E/T > p : p ∈ (0, 1)

En cambio, en los métodos ruidosos viene dada por:

∆ f (x′ , x) + noise < 0

luego, seleccionando noise = T × ln(p), se tendrá que NM es completamente equi-


valente al recocido simulado. También se puede considerar que NM generaliza a los
métodos de aceptación por umbral sin más que considerar que los umbrales de acep-
tación son ruido sumado a la función objetivo (2a opción). Obsérvese que, en este
caso, el ruido es determinista.

5.8. FANS

FANS es una metaheurística desarrollada por Blanco et al. [27][29][30] cuyo


nombre proviene de su acrónimo en inglés Fuzzy Adaptive Neighborhood Search
(búsqueda por vecindades adaptativa y borrosa) [30]. Esta metodología intenta intro-
ducir ideas que provienen de la lógica borrosa [336] en el campo de la optimización
combinatoria. El principio de operación puede resumirse como sigue:
FANS 69
Grado de Grado de Grado de
pertenencia pertenencia pertenencia

Solución Solución Solución

(a) (b) (c)

Figura 5.6: Ejemplos de etiquetas borrosas.

FANS incorpora como elemento de decisión la valoración borrosa de la evalua-


ción de las soluciones, así como el uso de varios operadores para explorar el espacio
de búsqueda.
En general, los métodos de optimización que se pueden encontrar en la literatura
son de naturaleza no borrosa (crisp), lo que significa que entre dos soluciones a un
problema dado, se puede considerar que una es ”mejor” que la otra, que ambas son
”diferentes”, etc. Este tipo de respuestas se derivan directamente del valor de la fun-
ción objetivo, ya que si el valor es distinto implica que las soluciones son distintas.
Para algunos problemas, esta forma de distinguir las soluciones no tiene por qué ser
adecuada. Por ejemplo, dadas dos soluciones para el problema del TSP [238][70],
no es lo mismo que éstas se diferencien en unos pocos arcos, que se diferencien en
prácticamente todos los arcos. En este caso, puede ser más interesante etiquetar las
soluciones como diferentes, similares o razonables, de tal forma que tengan una ca-
talogación subjetiva. FANS describe esta situación permitiendo que las soluciones
formen parte de un conjunto borroso [336] cuya función de pertenencia viene dada
por una valoración borrosa. En el marco de FANS, se dice que una solución ”buena”
pertenecerá al conjunto borroso de ”buenas soluciones”, pero, puesto que esta cata-
logación es borrosa, esta solución también puede tener una parte de ”mala solución”,
con lo que simultáneamente podría pertenecer al conjunto de las ”malas soluciones”.
FANS utiliza operadores distintos para explorar el espacio de búsqueda, por lo
que se permiten movimientos de distinto tipo para buscar el óptimo. Obsérvese que
esta forma de explorar el espacio de búsqueda tiene alguna similitud con la empleada
por VNS [152].
Desde un punto de vista algorítmico, se puede considerar que FANS se basa en
los siguientes cuatro grandes bloques:

Operador de movimiento: ejecuta un determinado tipo de movimiento de los


70 M ETAHEURÍSTICAS T RAYECTORIALES

Algoritmo 5.5 FANS


{x: TipoSolucion} = FANS( f : TipoFuncionObjetivo)
var
y: TipoSolucion;
µ: real;
Valoración borrosa
O: TipoOperador;
Operador de modificación
NS: TipoOperador;
Administrador de vecindad
OS: TipoOperador;
Administrador de movimiento

begin
{NS, OS, O} := Inicializar();
repeat
/*Ejecutar el administrador de vecindad*/
y := NS(x, µ, O);
if In f erirCalidad(y) >= In f erirCalidad(x) then
x := y;
{µ} := AdaptarValores(x);
else
/*Modificar el tipo de movimiento*/
O := CambiarOperador(O);
end if
/*Si la búsqueda se atasca se proporciona un mecanismo de escape*/
if Estancamiento() then
Escape()
end if
until terminacion
end
FANS 71
k posibles. Es decir que para una solución dada x ∈ SS, este operador seleccio-
na un determinado tipo de movimiento Oi ∈ {O1 , .., Ok } que le permite obtener
una nueva solución. En el marco de FANS, los operadores verifican dos pre-
misas. La primera es que el operador tenga cierto grado de aleatoriedad; por
lo tanto, el mismo operador de movimiento aplicado sobre la misma solución,
produce soluciones distintas. La segunda premisa establece que el operador de-
be ser adaptativo, lo que indica que tendrá parámetros de entrada que se ajustan
durante la búsqueda. Como consecuencia, modifican el comportamiento de di-
cho operador.

Administrador de operación: gestiona el tipo de movimiento (operador de


movimiento) que actúa en cada momento. La elección depende de varios pará-
metros, como pueden ser la cantidad de evaluaciones de la función objetivo, el
número de iteraciones consecutivas sin mejora, etc. Se podría incluso cambiar
el operador de movimiento en cada iteración. En FANS se plantean dos alter-
nativas para gestionar los movimientos. La primera opción consiste en plantear
de antemano un conjunto de operadores {O1 , .., Ok }, donde el administrador
va estableciendo un determinado orden. La segunda opción consiste en ajustar
los parámetros del operador, de tal forma que el movimiento ejecutado por el
nuevo operador sea distinto.

Operador de valoración difusa: cualifica las soluciones con unas determi-


nadas etiquetas. Para llevar a cabo esta tarea, se suelen describir conjuntos
borrosos µ() caracterizados por:

µ : R → [0, 1] (5.6)

de tal forma que se puede decir que una solución determinada cumple una
propiedad descrita por una etiqueta en cierto grado, o lo que es lo mismo: µ
indica el grado de pertenencia a un determinado conjunto borroso. En la figura
5.6 se muestran algunos ejemplos de etiquetas.

Administrador de vecindad: genera y selecciona una nueva solución partien-


do de: la solución actual, un operador de movimiento determinado y una va-
loración borrosa de esa solución. FANS plantea dos tipos de vecindades. El
primer tipo se conoce como vecindad operativa, que se define para un opera-
dor O y una solución x como:

Noperativo (x) = {xi : xi = Oi (x)} (5.7)

donde Oi (x) indica la i-ésima aplicación de O sobre x.


72 M ETAHEURÍSTICAS T RAYECTORIALES
El segundo tipo de vecindad se conoce como vecindad semántica, que se define
para una solución x y una valoración borrosa µ() como:

Nsemantico (x) = {xi ∈ N(x) : µ(xi ) ≥ λ} (5.8)

es decir, que el vecindario semántico vendría dado por todas aquellas solucio-
nes cuya etiqueta supere un umbral dado por λ, o lo que es lo mismo, aquellas
soluciones que tengan un grado de pertenencia a un conjunto borroso dado
mayor que el umbral. Para generar esta vecindad, se ejecuta un determinado
número de veces el operador de movimiento, generando un vecindario N(x).
Posteriormente, se retorna aquel subconjunto de soluciones cuyo grado de per-
tenencia o combinaciones es mayor que el umbral (λ). Por ejemplo, para las
etiquetas mostradas en la figura 5.6, el vecindario vendría dado por un corte en
el eje de ordenadas a una altura λ dada. Una vez seleccionada la vecindad, se
infiere una solución concreta. Para esta tarea existen varias alternativas, como
elegir la primera, la mejor, etc.

En el algoritmo 5.5 se presenta un pseudo-código de alto nivel para esta me-


taheurística. En este caso, se ha introducido un procedimiento extra Escape(), que
intenta evitar el estancamiento de la búsqueda. Dicho procedimiento podría consistir
en reiniciar el algoritmo o efectuar un movimiento determinado en el caso de que la
búsqueda se atasque en un óptimo local.
Una característica muy importante de FANS es que es una metaheurística alta-
mente configurable, por lo que el comportamiento del algoritmo puede cambiar ra-
dicalmente en función de la elección de los parámetros. En este sentido, en [30] se
describen una serie de elecciones de parámetros con los que FANS se puede compor-
tar como un algoritmo de caminos aleatorios, de escalada o incluso como un recocido
simulado. En [244][29][28][30][31] se pueden encontrar aplicaciones exitosas de esta
metaheurística.

5.9. Búsqueda local iterativa

La búsqueda local iterativa [193] o ILS (Iterated Local Search) se basa en una
idea sencilla de búsqueda, que paradójicamente se ha re-descubierto varias veces por
distintos investigadores, dándole entre otros nombres: descenso iterativo (iterated
descent) [18]; cadenas de Markov de paso grande (large-step Markov chains) [200];
algoritmo de Lin-Kernighan iterativo (Lin-Kernighan iterated) [169]; optimización
local encadenada (chained local optimization) [199]. El principio de operación de
todos estos enfoques se puede resumir en los siguientes términos:
B ÚSQUEDA LOCAL ITERATIVA 73
Dado el espacio de soluciones SS, una vecindad N y un procedimiento de bús-
queda local LS, se establece una correspondencia entre SS y el espacio de soluciones
de óptimos locales SS∗ . ILS se basa en un procedimiento de búsqueda local sobre el
espacio de soluciones de óptimos locales SS∗ .
En la formulación actual de ILS [193] se asume que la metaheurística tiene em-
bebido un procedimiento de búsqueda local determinista LS, de tal forma que dada
una solución factible x ∈ F ⊆ SS siempre se obtiene la misma solución:

x∗ ∈ SS LS : x → x∗

La topología del perfil del espacio de búsqueda (search landscape) viene deter-
minada por una estructura de vecindad, de tal forma que si se aplica el procedimiento
de búsqueda local a todos los puntos del espacio de búsqueda SS, se generará un
subespacio SS∗ ⊆ SS donde estarán todos los óptimos locales. El espacio SS∗ es un
remuestreo del espacio de soluciones SS. Este remuestreo se debe a que cada ópti-
mo local x∗ introduce un cuenco de atracción (basin of attraction), de tal forma que
un conjunto de soluciones se ven atraídas por ese óptimo local. Esa atracción viene
dada por el procedimiento de búsqueda local. En las figuras 5.7.a y 5.7.b se muestra
esta situación. En la imagen de la izquierda se representa la topología del perfil del
espacio de búsqueda SS para una función objetivo y una vecindad dada, donde cada
punto representa una solución. En la figura de la derecha se representa el espacio re-
muestreado SS∗ . En este caso, los únicos valores posibles son los óptimos locales de
SS. Partiendo de un espacio de soluciones SS cuyo perfil viene determinado por una
estructura de vecindad N y un procedimiento de búsqueda local LS, la metaheurística
ILS intenta diseñar un procedimiento de búsqueda local LS∗ con una vecindad N ∗
que defina la topología del subconjunto de soluciones SS∗ , de tal forma que se haga
una nueva búsqueda en este subespacio.
La dificultad de este enfoque estriba en cómo definir las vecindades N ∗ y otro
procedimiento de búsqueda local LS∗ en el subespacio de soluciones SS∗ . Obsérvese
que si estos puntos estuviesen claros, se podría definir una segunda correspondencia
entre SS∗ y otro subespacio SS∗∗ ⊆ SS∗ , que contuviese óptimos locales con respecto
a la nueva estructura de vecindad N ∗ y al nuevo procedimiento de búsqueda local LS∗ .
Este razonamiento se puede extender a tantos niveles como se quiera, obteniendo una
jerarquía de búsquedas locales anidadas.
La definición de las vecindades en SS∗ es relativamente sencilla. Dadas dos so-
luciones localmente óptimas x∗1 , x∗2 ∈ SS∗ ⊆ SS se dice que son vecinas en SS∗ si sus
cuencos de atracción están ”en contacto”, o lo que es lo mismo, existe una solución
x1 en el cuenco de atracción x∗1 y una solución x2 en el cuenco de atracción x∗2 tales que
x1 y x2 son vecinas en SS. Esta definición tiene el problema de que computacional-
mente es muy costoso determinar si dos soluciones son vecinas, ya que prácticamente
requeriría hacer una búsqueda exhaustiva de todo el espacio de soluciones. Una for-
74 M ETAHEURÍSTICAS T RAYECTORIALES

Función objetivo f([x])

Función objetivo f([x])


Espacio de búsqueda SS Espacio de búsqueda SS*

(a) (b)

Figura 5.7: (a) Topología del espacio de búsqueda SS para una función objetivo y una
vecindad dada. (b) Topología del espacio de búsqueda re-muestreado SS∗ .

ma menos costosa de encontrar un vecino en SS∗ consistiría en generar un camino a


través de operaciones de movimiento, que deliberadamente empeoran la solución:

x∗ → x1 → .. → xi → ..

y ver en qué momento del camino aparece un xi que pertenece a otro cuenco de
atracción x′∗ . Aunque este procedimiento es menos costoso, habitualmente se tiene
que ejecutar muchas veces el procedimiento de búsqueda local para poder escapar
del cuenco de atracción.
La forma que tiene ILS de solucionar este problema consiste en explorar el sub-
espacio SS∗ a través de un muestreo guiado (biased sampling). Para llevar a cabo
esta exploración se parte de un solución x∗ ∈ SS∗ a la que se le aplica una pertur-
bación (ligera modificación), generando una nueva solución x′ ∈ SS, que recibe el
nombre de estado intermedio. Finalmente se le aplica el procedimiento de búsqueda
local a x′ obteniendo un óptimo local x′∗ ∈ SS∗ . Si esta nueva solución es aceptable
bajo algún criterio, se efectúa el movimiento en el sub-espacio SS∗ de x∗ a x′∗ . En
caso contrario, no se produciría el movimiento y se buscaría otro vecino. Este mé-
todo funciona correctamente si las perturbaciones no son ni demasiado pequeñas, ni
demasiado grandes; es decir, que si son demasiado pequeñas, no será capaz de salir
del cuenco de atracción del mínimo local. Por el contrario, si son demasiado grandes,
el nuevo óptimo local encontrado no sería vecino, con lo que no sería ILS sino un
algoritmo de re-arranque aleatorio. En la figura 5.8 se muestran estas ideas de forma
gráfica.
Las perturbaciones suelen tener un carácter aleatorio ya que en el caso contrario
se corre el riesgo de que la búsqueda se cicle [193]. Como consecuencia, los mo-
B ÚSQUEDA LOCAL ITERATIVA 75

Perturbacion
aleatoria

Perturbación

Función objetivo f([x])


optima

Perturbación
pequeña

x0 x1
Espacio de búsqueda [x]

Figura 5.8: Perturbaciones en la solución para encontrar el cuenco de atracción ve-


cino.

Algoritmo 5.6 Iterated Local Search


{z: TipoSolucion} = ILS( f : TipoFuncionObjetivo)
var
y, x: TipoSolucion;
M: langleEstructura de vecindadrangle;

begin
/*La solución inicial puede ser aleatoria o heurística*/
{y} := InicializarSolucion();
{x} := BusquedaLocal(y, f );
repeat
/*Perturbar el óptimo local modificando algún parámetro*/
{y} := perturbar(x, M);
{x} := BusquedaLocal(y, f );
{z} := AceptarMovimiento(x, M, f );
if f (x) > f (z) then
z := x;
end if
until SolucionFactible(z)
end
76 M ETAHEURÍSTICAS T RAYECTORIALES
vimientos en SS∗ no suelen ser reversibles. La mayoría de publicaciones sobre ILS
interpretan los movimientos en SS∗ como markovianos; es decir, sólo dependen del
estado origen y destino. Nótese que se puede introducir una memoria tanto en el pro-
ceso de la perturbación como en el proceso de la aceptación de soluciones [300], con
el objetivo de hacer una búsqueda mucho más robusta e inteligente.
Desde un punto de vista algorítmico, ILS está compuesto de 4 grandes bloques
(en el algoritmo 5.6 se presenta un pseudo-código de alto nivel), los cuales se descri-
ben a continuación:

Procedimiento para generar una solución inicial: consiste en generar una


solución inicial para empezar la búsqueda, utilizando, o bien un procedimiento
aleatorio o bien un procedimiento constructivo. En [301] se apunta que siguien-
do la segunda estrategia se suelen obtener mejores resultados, aunque también
se indica que es un resultado empírico. En [193] se establece como regla del
pulgar que cuantas más iteraciones tenga la metaheurística (en el espacio SS∗ ),
más irrelevante es la elección de la solución inicial.

Procedimiento de búsqueda local: permite mejorar las soluciones conducien-


do a óptimos locales. Este tipo de procedimientos tienen la desventaja de que
suelen ser dependientes del problema4 . Este problema se puede resolver a tra-
vés de la hibridación de ILS con metaheurísticas de búsqueda basadas en en-
tornos, como la búsqueda tabú [127] o el recocido simulado [2].

Procedimiento para la perturbación: consiste en modificar algunos elemen-


tos componentes de la solución que se corresponde con un óptimo local. La
forma de aplicar la perturbación a un óptimo local depende lógicamente del
problema. En este sentido, se pueden encontrar perturbaciones con tamaño fijo
o con tamaño adaptativo. La perturbación también se puede producir añadiendo
ruido a los datos o incluso optimizando localmente sólo parte de la solución.

Procedimiento para la aceptación de soluciones: permite establecer un equi-


librio entre la intensificación y la diversificación de la búsqueda en el sub-
espacio SS∗ . En otras palabras, si sólo se aceptan movimientos de mejora, se
favorece la intensificación frente a la diversificación. En cambio, si se acepta
cualquier movimiento, se favorece la diversificación frente a la intensificación.
Entre estos dos extremos se pueden encontrar varios criterios, como el presen-
tado en [200], similar al recocido simulado o incluso utilizando estructuras de
memorias [127].

4 Para
casi todos los problemas se conoce de antemano un algoritmo aproximado que se puede utili-
zar como algoritmo de búsqueda local.
B ÚSQUEDA LOCAL ITERATIVA 77
ILS es una metaheurística sencilla que necesita muy pocos parámetros para su
ajuste. Además, es capaz de producir soluciones de muy alta calidad de forma eficien-
te. Algunas aplicaciones de esta metaheurística se pueden encontrar en [6][45][46][301].
Capítulo 6

Metaheurísticas Poblacionales

6.1. Introducción

Las metaheurísticas basadas en poblaciones o metaheurísticas poblacionales son


aquéllas que emplean un conjunto de soluciones (población) en cada iteración del
algoritmo, en lugar de utilizar una única solución como las metaheurísticas trayec-
toriales. Estas metaheurísticas proporcionan de forma intrínseca un mecanismo de
exploración paralelo del espacio de soluciones, y su eficiencia depende en gran me-
dida de cómo se manipule dicha población [32].
La figura 6.1 muestra gráficamente el funcionamiento de una metaheurística po-
blacional en problemas de optimización. A la izquierda, se representa la distribución
de la población inicial sobre un espacio de búsqueda unidimensional mediante un
conjunto de puntos que se distribuyen de forma prácticamente uniforme sobre el es-
pacio. A la derecha, se representa la distribución de los individuos de la población en
la última iteración del problema de maximización. En esta situación se puede apre-
ciar que los individuos se agrupan alrededor del valor máximo. Este capítulo está
dedicado a presentar las metaheurísticas poblacionales más conocidas en el ámbito
de la optimización.

6.2. Algoritmos evolutivos

Los primeros trabajos científicos que se pueden encontrar en el campo de los al-
goritmos evolutivos (Evolutionary Algorithms - EA) provienen de finales de los años
cincuenta. En esta década aparecen publicaciones [111][38][112][113] en las que se
proponen EA sencillos para resolver problemas combinatorios. Ya en la década de
los sesenta, L. Fogel [109], establece las bases de la programación genética, y en

79
80 M ETAHEURÍSTICAS P OBLACIONALES

Figura 6.1: Poblaciones (a) inicial y (b) final durante un proceso de optimización
utilizando una metaheurística poblacional. Generalmente, el espacio de búsqueda es
multidimensional.

los setenta, Rechemberg [258] hace lo propio con las estrategias evolutivas. Holland
[160] introduce los algoritmos genéticos a mediados de esta década. Estos trabajos
(ordenados cronológicamente), suponen las bases de muchas metaheurísticas moder-
nas como son los propios algoritmos genéticos [160][136], los algoritmos meméticos
[222][224], los algoritmos culturales [268] o la inteligencia de enjambre [177] entre
otros.
EA se basa en la idea neo-darwiniana de evolución de las especies, que se puede
expresar en los siguientes términos:
Los individuos que tienen una mejor adaptación al medio tienen una probabi-
lidad más elevada de vivir más tiempo, con lo que tendrán más posibilidades de
generar descendencia que herede sus buenas características. En cambio, los indivi-
duos con peor adaptación al medio, tienen menos probabilidad de sobrevivir, por lo
que tendrán menos oportunidades de generar descendencia y probablemente acaben
extinguiéndose
Desde un punto de vista algorítmico, EA consta de los siguientes elementos
[210][211]:

Población: conjunto de soluciones candidatas de un problema dado, donde


cada una de ellas recibe el nombre de individuo.

Selección: mecanismo de elección de individuos sesgado de forma que sea más


probable seleccionar a los mejores para que transmitan su contenido genético
a su descendencia.
A LGORITMOS EVOLUTIVOS 81
Algoritmo 6.1 Algoritmo Evolutivo
{xbest : TipoSolucion} = EA(N: integer; f : TipoFuncionObjetivo)
/*N es el número de individuos por generación*/
var
xg , x∗g : array [1, . . . , N] of TipoSolucion; // Población;

begin
g := 1; // Inicializar el número de generación
{x} := inicializar(N); // Inicializar la población
repeat
{x∗ } := seleccionar(x, f ); // Seleccionar los mejores individuos
{x} := alterar(x∗ ); // Alterar los individuos seleccionados
g := g + 1;
until terminacion
{xbest } := seleccionar(x, f ); //Seleccionar la mejor solución encontrada
end

Alteración: mecanismo de generación de nuevos individuos mediante la mo-


dificación estocástica de los antiguos. En función del número de individuos
antiguos utilizados, la transformación puede ser unaria (mutación) o de orden
superior (cruce).

Estas características se pueden agrupar para diseñar un algoritmo de optimiza-


ción robusto y eficaz. En el algoritmo 6.1 se presenta un pseudocódigo de alto nivel
para esta metaheurística. EA inicializa una población de N individuos siguiendo al-
gún determinado criterio. Esta población se modifica utilizando la aplicación de las
operaciones de selección y alteración (típicamente, mutación y cruce) en sucesivas
iteraciones hasta que se alcanza una condición de parada. Finalmente, el mejor indi-
viduo encontrado se devuelve como la solución al problema de optimización.
EA se organiza en cuatro grandes áreas que comparten la plantilla mostrada en el
algoritmo 6.1, pero cuya implementación difiere sensiblemente [295]. Éstas son:

Programación Evolutiva [108][109]: desarrollada en el marco de la predic-


ción de secuencias de tareas. Se caracteriza por tener una representación muy
ligada al dominio del problema. Habitualmente no tiene cruce, con lo que el
mecanismo de mutación es más elaborado. El algoritmo inicializa una pobla-
ción para seleccionar todos los individuos como padres posteriormente. Des-
pués, muta los N padres para generar N hijos y evaluarlos. De la población de
padres e hijos se seleccionan, de forma probabilística N hijos, permitiendo que
el mejor individuo siempre sobreviva (esta estrategia se denomina “elitismo”).
82 M ETAHEURÍSTICAS P OBLACIONALES
Estrategias de Evolución [258][290]: desarrolladas en el ámbito de los pro-
blemas de optimización en hidrodinámica, por lo que utilizan como estructura
de representación vectores reales. El algoritmo inicializa y evalúa una pobla-
ción para, posteriormente, seleccionar los padres de forma uniforme y aleato-
ria. La combinación de dos padres genera los hijos en una cantidad superior
a los padres. Finalmente, se modifican los hijos utilizando una etapa de muta-
ción. La supervivencia de los individuos es determinista y puede estar imple-
mentada con o sin elitismo.

Algoritmos Genéticos [160][136]: se ha dedicado la sección 6.2.1 a su análisis


debido a su gran relevancia en el contexto de la optimización.

Programación Genética [182][183]: persigue la construcción de programas


informáticos, utilizando un conjunto de programas generados aleatoriamente y
los principios de EA.

EA constituye una herramienta de optimización muy versátil que se puede aplicar


a una gran cantidad y variedad de problemas de optimización. EA siempre funciona
relativamente bien, aunque para cada tarea puede existir una herramienta específica
del problema que funcione mejor. En este sentido, su uso está especialmente indicado
en los casos en que no se dispone de un conocimiento profundo del problema que se
quiere resolver.

6.2.1. Algoritmos genéticos

Los algoritmos genéticos (Genetic Algorithm - GA) fueron presentados por J.


Holland [160], aunque existen trabajos previos de otros científicos que desarrollaron
ideas similares [111][38][112][113][109][258]. El concepto de recombinación de so-
luciones supone una de las aportaciones fundamentales de GA. Por otro lado, es tam-
bién relevante la diferencia explícita entre la representación del problema (denomi-
nada genotipo), que habitualmente viene determinada por cadenas de bits conocidas
como cromosomas, y las variables del problema en sí (denominadas fenotipo).
GA representa una metaheurística poblacional sencilla e intuitiva que, muy pro-
bablemente, sea la más utilizada. El principio de operación es el siguiente:
GA se basa en una población de soluciones candidatas, que evoluciona por me-
dio de los mecanismos genéticos neo-darwinistas de selección, cruce y mutación
La nomenclatura utilizada en GA está muy relacionada con su inspiración bio-
lógica. En este sentido, es usual denominar “población de individuos” al conjunto
de soluciones, de forma que cada individuo se corresponde con una solución. La
solución en sí (variables del problema) establece el fenotipo del individuo, y su re-
A LGORITMOS EVOLUTIVOS 83
presentación el genotipo. Esta representación recibe el nombre de cromosoma y cada
uno suele estar compuesto por unidades discretas llamadas genes.
GA es un tipo de EA, y heredan sus características algorítmicas. Por esta razón,
se ha omitido de esta sección el algoritmo que describe su pseudocódigo. Sin em-
bargo, GA presenta una serie de particularidades que lo hace singular y con entidad
propia como metaheurística. Los elementos que deben identificarse para resolver un
problema con un algoritmo genético son:

Población inicial: suele estar formada por una generación aleatoria de solu-
ciones al problema dado [160][80][136].

Representación: constituye una correspondencia entre las soluciones factibles


(fenotipo) y la codificación de las variables (genotipo) [211]. Originalmente,
las representaciones eran cadenas binarias [160][80][136]. Sin embargo, ac-
tualmente se han utilizado otras representaciones en problemas discretos [203],
de permutaciones [261] y binarios [211].

Función de evaluación: determina la calidad de los individuos de la población.


Habitualmente, es una función monótona creciente que asigna un valor mayor
cuanto mejor sea el individuo.

Operadores genéticos: Son métodos probabilísticos que obtienen nuevos in-


dividuos. Suelen ser dependientes de la representación. Habitualmente, se uti-
lizan los siguientes operadores:
1. Cruce: consiste en la sustitución de un conjunto de genes de un padre
por los genes correspondientes del otro padre para generar un nuevo in-
dividuo hijo. En [260] se puede encontrar diferentes métodos de cruce.
2. Mutación: consiste en el cambio aleatorio de parte de un individuo. La
mutación se emplea como mecanismo para preservar la diversidad de las
soluciones y explorar nuevas zonas del espacio de soluciones.

Selección: es un mecanismo que permite elegir con mayor probabilidad a los


individuos que presenten un valor más elevado de la función de evaluación
[211][260]. Este mecanismo suele estar implementado usando el método de la
ruleta, del torneo, etc. En [260] se puede encontrar una descripción detallada
de diferentes métodos de selección.

Es importante destacar que la cantidad de variantes que se pueden presentar en


los algoritmos genéticos es enorme. En esta sección, sólo se han indicado las carac-
terísticas básicas de esta metaheurística como son: la determinación de la población
inicial; los métodos que se utilizan para inicializarla; las estrategias de selección, mu-
tación y cruce; las probabilidades que se asignan a cada estrategia. En el caso de que
84 M ETAHEURÍSTICAS P OBLACIONALES
se quiera introducir cierto conocimiento del problema (representación de individuos
a través de estructuras más complejas, operadores de cruce y mutación que tengan
en cuenta estas estructuras, etc.), el diseño del algoritmo genético podría ser muy
distinto. En [260] se apunta que prácticamente cada algoritmo genético es único.

Algoritmo 6.2 Algoritmo Memético


{xbest : TipoSolucion} = MA(N:integer; Operador: array [1 . . . N] of TipoOpera-
dor; f : TipoFuncionObjetivo)
var
xg : array [1 . . . N] of TipoSolucion; // Soluciones con peso
g, i: integer;

begin
g := 1; // Inicializar el número de generación
{x} := Inicializar(N); // Inicializar aleatoriamente la población
for i := 1 to N do
{x[i]} := OptimizadorLocal(x[i], Operador[i], f );
end for
repeat
/*Paso generacional:*/
{x} := Seleccionar(x, f ); // Seleccionar los mejores individuos
{x} := Alterar(x); // Reproducir nuevos individuos
for i := 1 to Ns do
{x[i]} := OptimizadorLocal(x[i], Operador[i], f );
end for
if convergencia(x) then
{x} := Inicializar(Ns ); // Inicializar aleatoriamente la población
for i := 1 to Ns do
{x[i]} := OptimizadorLocal(x[i], Operador[i], f );
end for
end if
g := g + 1;
until terminacion
{xbest } := seleccionar(x, f ); // Seleccionar la mejor solución encontrada
end

6.2.2. Algoritmos meméticos

Los orígenes de los algoritmos meméticos (Memetic Algorithms - MA) se re-


montan a finales de los años ochenta, a pesar de que algunos trabajos en décadas
anteriores también tienen similares características [225]. En aquella época, EA es-
A LGORITMOS EVOLUTIVOS 85
taba comenzando a afianzarse sólidamente, una vez que el choque conceptual que
había causado la introducción de estas técnicas en el mundo de la optimización se
iba atenuando. Otro tanto se podía decir de técnicas relacionadas, como SA o TS. En
general, estas técnicas hacían uso de heurísticas subordinadas para llevar a cabo el
proceso de optimización. Fue en este escenario en el que surgió la idea básica que
sustenta MA: combinar conceptos y estrategias de diferentes metaheurísticas para
aunar las ventajas de las mismas.
MA debe su nombre al concepto de “meme” introducido por R. Dawkins [78]
en una clara analogía con gen, para dar una explicación a la evolución cultural. El
principio de operación de esta metaheurística es el siguiente:
De la misma forma que en una población se trasmiten los genes de los padres a
los hijos, los memes se transmiten de cerebro a cerebro de la población
Desde un punto de vista algorítmico, es común considerar MA como un GA al
que se añade un procedimiento de Búsqueda Local. Sin embargo, aunque MA to-
ma ideas de ambos procedimientos, también se proponen nuevos operadores que los
hacen diferentes e independientes de GA [71][225]. En este sentido, una de las ca-
racterísticas más descriptivas de MA es la incorporación de todo el conocimiento del
problema que se tenga disponible, en contraposición a los algoritmos genéticos, que
evitan, en la medida de lo posible, las particularidades del problema [71][224][225].
La algorítmica de esta metaheurística fue desarrollada por P. Moscato [222], en
un trabajo donde se proponía la hibridación de un GA [160] con un procedimiento
SA [180]. Actualmente se entiende que un MA está compuesto por una población
de agentes, que son una extensión del individuo. Cada agente contiene una o varias
soluciones y un procedimiento de mejora de estas soluciones [224]. Los agentes pue-
den mejorar durante su vida mediante procedimientos de búsqueda local. Además,
se establecen relaciones de cooperación y competición con el resto de agentes de la
población.
En el algoritmo 6.2 se presenta una plantilla general para los Algoritmos Memé-
ticos. MA tiene una relación muy estrecha con EA, al menos desde un punto de vista
sintáctico, debido fundamentalmente a su naturaleza poblacional [225]. Este hecho
se ve reflejado en la similitud que existe entre este pseudocódigo y el presentado
en el algoritmo 6.1. La diferencia fundamental entre ambos métodos se encuentra
en la implementación de los grandes bloques de selección y alteración. La parte de
competición viene determinada por los bloques de selección, con su correspondiente
reemplazo de agentes. La cooperación entre agentes sustituye a las fases de alteración
(mutación y cruce) en EA.
Una de las características más identificables de los algoritmos meméticos es el
operador de optimización local cuyo esquema general se muestra en el algoritmo 6.3.
Éste se define como un operador iterativo que actúa sobre un agente, de forma que
86 M ETAHEURÍSTICAS P OBLACIONALES
Algoritmo 6.3 Optimizador Local
{x: TipoSolucion} = OptimizadorLocal(x: TipoSolucion; Operador: TipoOpera-
dor; f : TipoFuncionObjetivo)
var
xnuevo : TipoSolucion;

begin
repeat
{xnuevo } := aplicar(x, Operador);
if f (xnuevo ) > f (x) then
x := xnuevo ;
end if
until Terminacion
end

mejora la calidad de la solución o soluciones que contiene dicho agente hasta que no
se pueda mejorar más.
Para una descripción exhaustiva de MA pueden consultarse los trabajos [224][225]
[71] en los que se consideran descripciones y aplicaciones de esta metaheurística a
distintos problemas de optimización.

6.3. Búsqueda dispersa

La búsqueda dispersa (Scatter Search - SS) es un procedimiento metaheurístico


basado en formulaciones y estrategias introducidas durante la década de los setenta.
A principios de esta década se propusieron los conceptos y principios fundamentales
del método, basados en estrategias de combinación de reglas de decisión [198]. La
primera descripción de la metaheurística aparece en [120], donde se establecen las
líneas básicas de SS, pero hasta 1998 [124] no se constituye la forma y terminología
definitiva del método.
Los antecesores de SS fueron aplicados inicialmente a problemas de planifica-
ción de tareas (scheduling) [119], donde se proponían una serie de estrategias para
combinar las reglas de decisión y restricciones [120]. Estos métodos obtenían nuevas
reglas mediante la combinación lineal de otras [119]. Los estudios experimentales
demostraron que esta combinación producía mejores resultados que la aplicación de
las reglas originales por separado.
El principio de operación de esta metaheurística puede ser expresado del siguien-
te modo [196]:
B ÚSQUEDA DISPERSA 87

Figura 6.2: Representación gráfica de las etapas de la búsqueda dispersa (adaptado


de [198]).

La información sobre la calidad o el atractivo de un conjunto de reglas, restric-


ciones o soluciones se puede utilizar mediante la combinación de éstas en lugar de
aisladamente. De este modo, dadas dos soluciones de un problema, se podría obtener,
mediante su combinación, una nueva solución que mejore a las que la originaron
El motor fundamental de SS consiste en la combinación de soluciones de alta
calidad, con el objetivo de obtener mejores soluciones que las originales. En este
sentido, se dice que SS es un Algoritmo Evolutivo, ya que mantiene una población
de soluciones en cada momento [198]. Sin embargo, a diferencia de éstos, SS no está
fundamentado en la aleatorización sobre un conjunto grande de soluciones, sino en
elecciones sistemáticas y estratégicas sobre un conjunto pequeño. En otras palabras,
SS está diseñada para trabajar con un conjunto de soluciones llamado conjunto de
referencia (RefSet), caracterizado por contener “buenas” soluciones. En el contexto
de SS, se consideran buenas soluciones las que o bien tienen alta calidad (dada por
la función objetivo) o bien tienen alta diversidad1 (muy alejadas de las soluciones de
alta calidad seleccionadas).

1 Es importante notar que el cálculo del subconjunto de las soluciones más diversas de un conjunto
es un problema difícil.
88 M ETAHEURÍSTICAS P OBLACIONALES
Las combinaciones de soluciones son versiones generalizadas de combinaciones
lineales (en el espacio euclídeo). A priori, para muchos problemas combinatorios no
tiene sentido la combinación lineal de soluciones. Por ejemplo, en el caso de proble-
mas cuya solución es una permutación (como el Problema del Viajante de Comercio
o el Problema del Enrutamiento de Vehículos) no se pueden combinar linealmente
dos soluciones. Para aplicar SS a este tipo de problemas, se extiende el concepto de
combinación lineal, introduciendo los cruces o combinaciones basados en votos (vo-
ting method) [186]. En ellos, cada solución (formada por componentes) “vota” para
que sus componentes aparezcan en la nueva solución generada. En [198] se resalta
que esta estrategia es una de las claves del éxito de SS. Además, se fuerza a que el
resultado de dicha combinación satisfaga ciertas condiciones de factibilidad [120].
Una característica notable de SS es la integración de métodos de mejora y de com-
binación de soluciones. Los procedimientos de mejora suelen ser algoritmos sencillos
de Búsqueda Local, pero no existe ninguna limitación para utilizar otros métodos más
complejos como la Búsqueda Tabú [121]. La aplicación de esta etapa asegura que la
calidad de las soluciones consideradas siempre es elevada, al menos en una vecindad
dada.
Desde un punto de vista algorítmico, la metaheurística SS consiste básicamente
en cinco procedimientos, que se representan gráficamente en la figura 6.2:

1. Método de generación de soluciones diversas (Diversification Generation


Me- thod): genera una población de N soluciones diversas (típicamente N =
100). Cada una de estas soluciones se optimiza utilizando el método de me-
jora. A continuación, se extrae un subconjunto pequeño de buenas soluciones
(usualmente alrededor de 10). Este subconjunto recibe el nombre de conjunto
de referencia (Reference Set - RefSet).

2. Método de mejora (Improvement Method): transforma las soluciones de prue-


ba en una o más soluciones de prueba mejoradas. Típicamente se trata de
un procedimiento de Búsqueda Local, aunque se puede utilizar cualquier me-
taheurística trayectorial. El método debe permitir, a partir de una solución no
factible, obtener una que lo sea y después intentar mejorar su calidad. Si el
método no logra mejorar la solución inicial se considera que el resultado es la
propia solución inicial.

3. Método de actualización del conjunto de referencia (RefSet Update Met-


hod): construye y mantiene el conjunto de referencia (RefSet), compuesto por
las b (b << N) mejores soluciones encontradas hasta el momento. A partir del
conjunto de soluciones iniciales se extrae el conjunto de referencia siguiendo
un criterio de convivencia entre soluciones de calidad y soluciones diversas.
Éstas son ordenadas de mayor a menor calidad.
B ÚSQUEDA DISPERSA 89

Algoritmo 6.4 Búsqueda Dispersa


{Re f Set[1]: TipoSolucion} = SS(N, b, SubsetSize: integer; f : TipoFuncionObjeti-
vo)
var
DiverseSet: array [1 . . . N] of TipoSolucion;
Re f Set: array [1 . . . b] of TipoSolucion;
pnueva : TipoSolucion;
P: array [1 . . . N,1 . . . SubsetSize] of integer;
NewSolution: boolean;
i: integer;

begin
{DiverseSet} := GenerarDiversas(N); // Incluyendo mejora de las soluciones
/*Inicializa RefSet con los b/2 mejores individuos y los b/2 más diversos en
DiverseSet*/
{Re f Set} := ConstruirRe f Set(DiverseSet, b, f );
NewSolution := T RU E;
while NewSolution do
NewSolution := FALSE;
{P} := GenerarGrupos(SubsetSize);
while P 6= 0/ do
{pnueva } := Combinar(Re f Set, P[1, :]);
P := P[2 :, :]; // Eliminar de P la combinación utilizada
{pnueva } := Me jorar(pnueva , f ); // Mejorar las soluciones nuevas
if f (pnueva ) > f (Re f Set[b]) then
{Re f Set} := Actualizar(Re f Set, pnueva ); // Actualizar Re f Set
NewSolution := T RU E;
end if
end while
end while
end
90 M ETAHEURÍSTICAS P OBLACIONALES
Creación: Típicamente, el RefSet se inicializa con las b/2 mejores solu-
ciones del conjunto diverso. El resto (b/2) se extraen con el criterio de
maximizar la distancia con las ya incluidas en el RefSet. Para esta selec-
ción, se debe definir una función distancia que dependerá del problema.
Actualización: Las nuevas soluciones generadas, fruto de las combina-
ciones, que mejoren a las del RefSet deberán reemplazarlas. El conjunto
de referencia mantiene así un tamaño constante b, pero la calidad de las
soluciones que contiene mejora durante la búsqueda. Fundamentalmen-
te, existen dos estrategias para tratar las soluciones obtenidas por medio
de la combinación. La primera de ellas, denominada “estática”, almacena
todas las soluciones temporalmente hasta que se han combinado todas.
Después, se analizan y se decide si alguna de las soluciones generadas
debe entrar en el conjunto de referencia. En la estrategia “dinámica”, la
actualización del RefSet se realiza en el momento en que se produzca una
solución mejor que alguna de las ya almacenadas.

4. Método de generación de subconjuntos (Subset Generation Method): SS


se basa en la combinación exhaustiva de todas las soluciones del RefSet. Este
método especifica la forma en que se construyen los subconjuntos a los que
posteriormente se aplica el método de combinación. Una implementación sen-
cilla y utilizada frecuentemente consiste en restringir los conjuntos a parejas
de soluciones. El método de combinación de soluciones se aplican a todas y
cada una de ellas.
5. Método de combinación de soluciones (Solution Combination Method): com-
bina las soluciones de los subconjuntos generados en una o más soluciones.

En el algoritmo 6.4 se muestra un pseudocódigo de alto nivel de SS muy similar


al propuesto por M. Laguna y R. Martí en [186]. SS establece una metodología muy
flexible y modular, por lo que es relativamente sencillo introducir extensiones de los
procedimientos que forman parte de la metaheurística. En [186][198][128][129][131]
[132] se describen diversas modificaciones en los procedimientos de SS que han au-
mentado el rendimiento de la metaheurística. Algunas de las mejoras más extendidas
son las siguientes:

Reconstrucción del conjunto de referencia: se utiliza cuando no se pueden


generar nuevas soluciones que mejoren las que ya existen en el RefSet. En esta
situación, el conjunto de referencia es parcialmente reconstruido introduciendo
soluciones que aporten diversidad, sustituyendo, típicamente, b/2 soluciones
por otras tantas que aportan diversidad.

Memoria: la memoria basada en frecuencia suele mejorar el comportamiento


de la metaheurística, debido fundamentalmente a que se asegura la diversifica-
R EENCADENAMIENTO DE TRAYECTORIAS 91
ción. Para ello, se generan soluciones que contienen componentes significati-
vas. Con esta estrategia se puede evitar que aparezcan soluciones con compo-
nentes repetidas o que hayan conducido a soluciones de baja calidad.
Tamaño del conjunto de referencia: no existe un tamaño óptimo para el Ref-
Set, por lo que puede ser una buena estrategia aumentar el tamaño cuando no
se consiguen soluciones aceptables.
Fase de mejora selectiva: en muchas ocasiones, aplicar la fase de Búsqueda
Local a todas las combinaciones no asegura que se encuentren soluciones de
mayor calidad. Por esta razón, puede ser útil restringir la aplicación de la Bús-
queda Local a soluciones que mejoren un cierto umbral de calidad (soluciones
“prometedoras”).
Equilibrio entre intensificación y diversificación: se debe hacer un balance
entre el tiempo que se emplea en buscar soluciones de alta calidad (intensifica-
ción) y en explorar el espacio de soluciones, (diversificación). Por ejemplo, un
aumento de b, incrementa la diversificación del procedimiento, pero habitual-
mente también crece el coste computacional.
Métodos de combinación distintos: el uso de métodos de combinación de
soluciones distintos permite explorar regiones diferentes del espacio de bús-
queda. Algunos trabajos proponen la combinación de elementos aleatorios con
deterministas, de tal forma que la metaheurística decide utilizar uno u otro en
función del éxito que haya tenido el proceso de búsqueda con cada uno de
ellos.

El método SS ha sido aplicado con éxito a una cantidad importante de problemas


de optimización. En [186] aparecen aplicaciones de esta metaheurística, además de
un conjunto de referencias que facilitan su implementación para problemas concretos.

6.4. Reencadenamiento de trayectorias

El método reencadenamiento de trayectorias (Path Relinking - PR) fue origi-


nalmente propuesto como una estrategia que integra procesos de intensificación y
diversificación en el contexto de TS [127]. Es un método que está en desarrollo y su
propuesta es muy reciente. PR tiene una gran relación con SS [128], descrito en la
sección anterior. De hecho, el establecimiento de la forma y terminología de SS y PR
se establece conjuntamente en un trabajo de F. Glover en 1998 [124]. El principio de
operación que sigue PR es el siguiente:
PR genera nuevas soluciones mediante la exploración de trayectorias en el es-
pacio de soluciones. Para ello, partiendo de dos soluciones de alta calidad, una
92 M ETAHEURÍSTICAS P OBLACIONALES

Algoritmo 6.5 Reencadenamiento de Trayectorias


{Re f Set[1]: TipoSolucion}=PR(N, b, NumImp, SubsetSize: integer; f : TipoFun-
cionObjetivo)
var
DiverseSet: array [1 . . . b] of TipoSolucion;
Re f Set: array [1 . . . N] of TipoSolucion;
Ruta: list of TipoSolucion;
pinicial , pguia ): TipoSolucion;
P: array [1 . . . N,1 . . . SubsetSize] of integer;
NewSolution: boolean;
i: integer;

begin
{DiverseSet} := GenerarDiversas(N); // Incluyendo mejora de las soluciones
{Re f Set} := ConstruirRe f Set(DiverseSet, b, f ); // con los mejores individuos
NewSolution := T RU E;
while NewSolution do
NewSolution := FALSE;
{P} := GenerarGrupos(SubsetSize);
while P 6= 0/ do
{pinicial , pguia } := Seleccionar(Re f Set, P[1, :]); // Selecc. una pareja de P
P := P[2 :, :]; // Eliminar de P la combinación utilizada
{Ruta} := Reencadenamiento(pinicial , pguia ); // Generar nuevas soluciones
for i := 1 to Nelem(Ruta)/NumImp do
{Ruta[i]} := Me jorar(Ruta[i]); // Mejorar soluciones nuevas
end for
for i := 1 to Nelem(Ruta) do
if f (Ruta[i]) > f (Re f Set[b]) then
{Re f Set} := Actualizar(Re f Set, Ruta); // Actualizar Re f Set
NewSolution := T RU E;
end if
end for
end while
end while
end
R EENCADENAMIENTO DE TRAYECTORIAS 93
actuando como origen y la otra como destino, se genera un camino en el espacio de
soluciones entre origen y el destino
Se suele considerar PR como una extensión del mecanismo de combinación de
soluciones de SS [127]. El método de combinación en PR se basa en la generación
de trayectorias entre soluciones en el espacio de búsqueda, en lugar de llevar a cabo
combinaciones lineales entre ellas. En otras palabras, dadas dos buenas soluciones
x1 y x2 , PR construye un camino entre ambas, comenzando por la solución x1 , de-
nominada “solución de partida” y, llevando a cabo una serie de movimientos, inten-
ta llegar a la solución x2 , denominada “solución guía”. PR construye la trayectoria
x1 → x2 eliminando paulatinamente los atributos de la solución de partida para intro-
ducir atributos que pertenecen a la solución guía. El objetivo es encontrar en estos
caminos soluciones que mejoren a aquéllas que originaron la trayectoria.
Desde un punto de vista algorítmico, PR comparte con SS los 5 procedimientos
generales expuestos en la sección 6.3 (ver figura 6.2). De este modo, PR y SS son
métodos que operan sobre un conjunto de soluciones de referencia y difieren en la
forma en la que el conjunto de referencia es construido, mantenido, actualizado y
mejorado [143]:

1. Método de generación de soluciones diversas (Diversification Generation


Method): Su implementación es equivalente a la expuesta en la sección 6.3.
2. Método de mejora (Improvement Method): transforma las soluciones de prue-
ba en una o más soluciones de prueba mejoradas. Al contrario que sucede en el
esquema de SS, en PR se suele aplicar el procedimiento de mejora únicamente
a un subconjunto de tamaño NumImp de las soluciones generadas. Usualmente
se utiliza un procedimiento de Búsqueda Local, aunque se puede utilizar una
metaheurística.
3. Método de actualización del conjunto de referencia (RefSet Update Met-
hod): construye y mantiene el conjunto de referencia (RefSet), compuesto por
las b mejores soluciones encontradas hasta el momento. A partir del conjunto
de soluciones iniciales se extrae el RefSet siguiendo un criterio de conviven-
cia entre soluciones de calidad y diversidad. Éstas son ordenadas de mayor a
menor calidad.

Creación: El RefSet se inicializa con las b mejores soluciones en el con-


junto diverso.
Actualización: Las soluciones fruto de las combinaciones que mejoren
aquéllas en el RefSet deberán reemplazarlas. El conjunto de referencia
mantiene así un tamaño constante b, pero la calidad de las soluciones que
contiene mejora durante la búsqueda.
94 M ETAHEURÍSTICAS P OBLACIONALES
4. Método de generación de subconjuntos (Subset Generation Method): PR se
basa en la generación de trayectorias entre conjuntos (típicamente parejas) de
soluciones de calidad. La generación de estas trayectorias es aplicado a todos
y cada uno de los subconjuntos generados.
5. Método de combinación de soluciones (Solution Combination Method): com-
bina las soluciones de los subconjuntos generados en una o más soluciones.
Para parejas, el método de combinación de PR elige dos soluciones del Ref-
Set xinicial y xguia , y construye un camino entre ambas, comenzando por xinicial
y llevando a cabo una serie de movimientos (que generan nuevas soluciones)
para llegar a la solución xguia . Este procedimiento se implementa de forma dis-
tinta si las trayectorias se generan a partir de grupos de soluciones de mayor
tamaño.

En el algoritmo 6.5 se muestra un pseudocódigo de esta metaheurística para el


caso más usual en el que se emplean dos soluciones para generar cada ruta. PR es
una metaheurística que, al igual que SS, permite introducir modificaciones en sus
procedimientos. En [198][128][129][131][132] se presentan diversas modificaciones
que han mejorado sustancialmente el rendimiento de la metaheurística para algunos
problemas:

Variación: consiste en generar trayectorias desde la solución de arranque has-


ta un punto intermedio y simultáneamente desde la solución guía hasta otro
punto intermedio. Finalmente se construye la trayectoria entre los dos puntos
intermedios.

Tunelación: permite la variación en la estructura de la vecindad. El uso de


esta estrategia permite, por ejemplo, que el proceso de búsqueda considere
soluciones pertenecientes a una región no factible. Es importante notar que
la búsqueda no puede quedar atrapada en una solución no factible, ya que la
solución guía siempre lo es.

Reencadenamiento extrapolado: genera trayectorias entre dos soluciones más


allá de los puntos intermedios entre ellas, extendiendo el camino que las une.

Padres múltiples: utiliza un conjunto de soluciones guía en lugar de una sola.


En este contexto, el siguiente movimiento desde la solución de partida x1 viene
determinado por la influencia de todas componentes presentes en los padres,
de forma que aquellos padres con una componente más adecuada respecto a la
función objetivo, guiarán la formación de la trayectoria.

Vecindades constructivas: comienza con una solución de partida incompleta


o incluso nula para generar una trayectoria influida por un conjunto de solucio-
nes. La solución se construye mediante movimientos hacia las soluciones guía,
A LGORITMOS DE ESTIMACIÓN DE LA DISTRIBUCIÓN 95
introduciendo progresivamente sus elementos. Generalmente, la inclusión de
características en la solución se realiza utilizando el mecanismo de votos.

6.5. Algoritmos de estimación de la distribución

Los algoritmos de estimación de la distribución (Estimation of Distribution Al-


gorithms - EDA) [187][194] son EA que usan una colección de soluciones candidatas
para explorar trayectorias de búsqueda evitando los óptimos locales. Es una metaheu-
rística actualmente en desarrollo, propuesta por Mühlenbein y Paass en 1996 [208],
aunque existen trabajos previos de Zhigljavsky [334]. Anteriormente, Holland [160]
ya había considerado la posibilidad de considerar la interacción entre variables para
incorporarla en el contexto de los GA. La aparición de EDA estuvo fundamentalmen-
te motivada por los siguientes hechos [188]:

El rendimiento de EA depende de la elección de los valores de varios paráme-


tros asociados. La determinación de estos valores constituye un problema de
optimización en sí mismo.

La predicción de los movimientos de la población sobre el espacio de búsqueda


es muy compleja.

El procedimiento de cruce en los algoritmos genéticos puede destruir ciertas


agrupaciones de componentes de alta calidad.

El principio de funcionamiento de EDA viene dado por:


El uso de la estimación y posterior muestreo de una distribución de probabilidad
aprendida a partir de los individuos seleccionados permite sustituir el cruce y la
mutación en el contexto de los Algoritmos Evolutivos
EDA es una metaheurística que generaliza GA, sustituyendo el cruce y la muta-
ción por el aprendizaje y muestreo de una distribución de probabilidad, que describe
a los mejores individuos de la población en cada iteración. En este sentido, la ca-
racterística principal de EDA es que no utiliza directamente los individuos, sino una
determinada función de distribución de probabilidad. Utilizando la estimación de la
distribución, EDA captura y explota eficientemente las relaciones existentes entre las
variables involucradas en el dominio del problema. Por medio de esta estrategia, EDA
intenta evitar la destrucción de individuos de alta calidad, al mismo tiempo que sortea
la determinación de parámetros necesaria en la computación evolutiva [142].
Desde un punto de vista algorítmico, un EDA considera cuatro etapas, que se
disponen como muestra el algoritmo 6.6:
96 M ETAHEURÍSTICAS P OBLACIONALES
Algoritmo 6.6 Algoritmos de Estimación de la Distribución
{xbest : TipoInidividuo} = EDA(N: integer; f : TipoFuncionObjetivo)
var
poblacion: array [1 . . . N] of TipoInidividuo; // Soluciones con peso
g: integer; // generación
M: integer;
pg (x): hFunción de distribucióni;

begin
g := 1; // Inicializar el número de generación
{poblacion} := Inicializar(N); // Inicializar aleatoriamente la población
repeat
/*Seleccionar M individuos de acuerdo a un mecanismo de selección*/
{poblacion} := Seleccionar(poblacion);
/*Estimar la distribución de probabilidad de los individuos seleccionados*/
{pg (x)} := EstimarPDF(p(x|poblacion), f );
/*Muestrear N individuos*/
hpoblacion ∼ pg (x)i;
g := g + 1;
until terminacion
{xbest } := SeleccionarMe jor(poblacion, f );
end

Inicializar: la generación de la población inicial se realiza aleatoriamente o


utilizando cualquier procedimiento heurístico.

Seleccionar: genera un subconjunto de individuos de alta calidad de la pobla-


ción anterior. El método de selección suele elegir con más probabilidad a los
individuos con pesos mayores. Un ejemplo típico puede ser el método de la
ruleta [210][211].

Estimar: estima la función de distribución de probabilidad pg (x) a partir de


los individuos seleccionados.

Muestrear: genera una nueva población mediante el muestreo de la función


de distribución pg (x) obtenida en el paso anterior.

La estimación de la función de distribución es la fase más complicada de este


enfoque. Se realiza a partir de un subconjunto de “buenos individuos” de la población
inicial. La función de distribución estimada expresa la interrelación existente entre
las componentes. En este sentido, la función de distribución es tanto más difícil de
modelar cuanto más complicada sea la dependencia entre las componentes. En el
A LGORITMOS CULTURALES 97
caso más sencillo, el individuo xi está compuesto por ni atributos independientes. En
el caso más general, pg (x) es una función de distribución conjunta de dimensión n
que no se puede estimar de forma exacta. Para un valor de n suficientemente grande
el problema es inabordable. La forma de tratar este problema consiste en suponer que
la función de distribución de probabilidad se puede factorizar de acuerdo a un modelo
simplificado. A continuación, se describen brevemente algunas de las propuestas de
factorización de dicha función de distribución conjunta:

Sin dependencias: se supone que la función de distribución de probabilidad se


puede factorizar como el producto de funciones de probabilidad univariantes e
independientes.

Dependencias bi-variadas: se considera que existe una dependencia entre pa-


res de componentes, de tal forma que, sólo se tienen que considerar estadísticos
de orden 2. En [37][13][243] se pueden encontrar trabajos en esta línea.

Dependencias múltiples: este caso es el más general de todos. Se requieren


estadísticos de orden superior a dos. Generalmente, este problema se aborda
mediante redes bayesianas. Algunas implementaciones de este estilo se pueden
encontrar en [155][187].

6.6. Algoritmos culturales

Los algoritmos culturales (Cultural Algorithms - CA) son un tipo de EA que


se inspiran en los teorías y modelos que proponen algunos sociólogos y arqueólo-
gos para intentar explicar la evolución cultural. CA fue introducido por Reynolds
[265][267][268] a finales de la década de los setenta como vehículo para modelar
la evolución y el aprendizaje social. Consisten en una población evolutiva cuyas ex-
periencias se integran en un espacio de creencias que consiste en varias formas de
conocimiento simbólico. Se han aplicado con éxito en un conjunto diverso de áreas
[281]. En [268] se expone una revisión de los modelos utilizados a lo largo de la
historia para explicar la evolución cultural.
El principio de funcionamiento de esta metaheurística es el siguiente:
Los algoritmos culturales establecen que la toma de decisiones depende de la
cultura heredada, así como de las creencias de la población actual
En las sociedades humanas, la cultura puede ser considerada como un contenedor
de información pasada, en el sentido de una “memoria histórica”. La cultura es inde-
pendiente de los individuos que la generaron y potencialmente accesible por todos los
miembros de la sociedad. Este esquema se puede utilizar para desarrollar estrategias
98 M ETAHEURÍSTICAS P OBLACIONALES
que permitan encontrar soluciones a un problema dado, modelando las relaciones en-
tre los individuos, la sociedad y la cultura de dicha sociedad. Los sistemas culturales
se pueden interpretar como un mecanismo de herencia en dos niveles:

1. Nivel micro-evolutivo: el contenido genético pasa de los padres a los hijos.


2. Nivel macro-evolutivo: el contenido cultural pasa de una generación a otra.

En cada iteración, la mejora genética de la población y las creencias adquiridas,


se transmiten a la siguiente generación [92]. CA utiliza esta información para guiar
a los individuos, de modo que pueda distinguirse entre soluciones de alta y de baja
calidad.
En el contexto de los algoritmos culturales, se produce una evolución tanto en la
sociedad, compuesta por individuos, como en la cultura, compuesta por creencias. En
este sentido, se puede considerar que los algoritmos culturales están estructurados en
las siguientes componentes:

Población: que evoluciona mediante los mecanismos de selección, reproduc-


ción y evaluación.

Espacio de creencias: permite guiar la búsqueda mediante el conocimiento


adquirido durante la resolución del problema.

Protocolo de comunicación: describe la interacción entre la población y sus


creencias. Considera dos tipos de relaciones:

• establecimiento del conjunto de individuos (aceptables) que pueden in-


fluir en la modificación de las creencias adquiridas.
• establecimiento del mecanismo de influencia de las creencias sobre los
individuos.

Reynolds [268], establece que un algoritmo cultural viene descrito por un con-
junto de ocho componentes:

CA = [P, S,Vc , f , B, Aceptar, A justar, In f luir] (6.1)

donde

P es la población de individuos que compone la sociedad,

S es el operador de selección,

Vc es un operador de variación,

f es la función objetivo,
A LGORITMOS CULTURALES 99
Algoritmo 6.7 Algoritmo Cultural
{xbest : TipoSolucion} = CA(N: integer; f : TipoFuncionObjetivo)
var
P: array [1 . . . N] of TipoSolucion; // Soluciones con peso
B: h Creencias i;
g: integer; // generación

begin
g := 1; // Inicializar el número de generación
{P} := InicializarPoblacion(N); // Inicializar los elementos de la población
{B} := InicializarCreencias; // Inicializar las creencias de la población
repeat
{P} := Evaluar(P, f ); // Evaluar la calidad de los individuos
{B} := A justar(B, Aceptar(P)); // Ajustar las creencias con los indiv. influ-
yentes
{P} := Modi f icar(P, in f luir(B)); // Modificar los individuos con las creen-
cias
g := g + 1;
{P} := Seleccionar(P, f );
until terminacion
{xbest } := SeleccionarMe jor(P, f ); // Seleccionar la mejor solución encontrada
end

B es el espacio de creencias,

Aceptar es la función de aceptación y determina el protocolo de comunica-


ción entre el espacio de creencias y la sociedad (en el sentido sociedad →
creencias),

A justar es un operador del espacio de creencias que actualiza las creencias e

In f luir es un conjunto de funciones de influencia que afectan al operador de


variación Vc . Determinan el protocolo de comunicación entre el espacio de
creencias y la sociedad (en el sentido sociedad ← creencias).

En las versiones más sencillas de CA [265], la primera componente se corres-


ponde con una implementación de un algoritmo genético cualquiera, de tal forma
que el mecanismo de selección S y de variación (cruce y mutación) Vc equivalen
a sus correspondientes genéticos. En estos primeros modelos [266], el espacio de
creencias contiene únicamente un operador cultural que aprende la idoneidad de usar
un determinado operador genético sobre la población, de forma que la probabilidad
de aplicarlo aumenta o disminuye en función del efecto producido sobre la calidad
100 M ETAHEURÍSTICAS P OBLACIONALES

Figura 6.3: Esquema general para un algoritmo cultural.

de los individuos. En este modelo, la función de aceptación es del 100 %, de modo


que se acepta cualquier mejora. Además se permite que cualquier individuo pueda
modificar el espacio de creencias.
En una segunda evolución de la metaheurística, se introduce en el espacio de
creencias un conocimiento sobre las estructuras de alta calidad que aparecen en la
población [303]. En este modelo, la función de aceptación es del orden del 50 %, con
lo que no todos los individuos pueden modificar el espacio de creencias. La función
de influencia modifica la calidad del individuo en lugar de su estructura.
En la tercera versión se generaliza el algoritmo para poder abordar problemas de
optimización de funciones reales. En esta versión, la implementación del espacio de
soluciones es bastante más compleja. En [268] se puede encontrar una descripción
detallada de este método.
En la cuarta y última generación de CA, tanto la población como el espacio de
creencias utilizan estructuras de subgrafos. Éstas, se interpretan como estructuras de
decisión que interactúan entre sí para encontrar una solución al problema. El espacio
de creencias está formado por estructuras de subgrafo, que se caracterizan por apa-
recer en los individuos válidos. En este caso, la función de aceptación es del orden
del 20 %. La función de influencia se diseña de tal forma que se reduzca la probabi-
lidad de que el cruce pudiera destruir sub-estructuras que aparecen en el espacio de
creencias.
I NTELIGENCIA DE ENJAMBRE Y OPT. POR ENJAMBRE DE PARTÍCULAS 101
6.7. Inteligencia de enjambre y opt. por enjambre de partí-
culas

La inteligencia de enjambre (Swarm Intelligence - SI) se inspira en la forma


colectiva de actuar de sociedades muy poco complejas, compuestas por individuos
muy poco sofisticados. En la naturaleza se pueden encontrar numerosos ejemplos de
este tipo de sociedades, como los bancos de peces, las colonias de hormigas o las
bandadas de pájaros, que se comportan como si fueran un único individuo. Actual-
mente, se estudian los modelos biológicos de estos enjambres para entender cómo
actúan, consiguen objetivos o evolucionan. Este enfoque general se ha concretado
en la optimización por colonias de hormigas (Ant Colony Optimization - ACO) pro-
puesta por M. Dorigo en 1992 [82] (ver sección 7.5) y la optimización por enjambre
de partículas (Particle Swarm Optimization - PSO), propuesta por J. Kennedy y R.
Eberhart en 1995 [175].
El principio de operación en el que se basa SI es el siguiente:
La inteligencia de enjambre es una propiedad que poseen ciertos sistemas bio-
lógicos compuestos por agentes sencillos (hormigas, peces, pájaros, etc.) en los que
el comportamiento colectivo viene descrito por la interacción local entre agentes, de
tal forma que se obtiene un funcionamiento global coherente
Desde un punto de vista algorítmico, un enjambre está compuesto por agentes
que establecen relaciones de cooperación para conseguir un objetivo determinado.
Cada agente utiliza un conjunto de reglas sencillas (locales) de forma relativamente
independiente a los demás (salvo la cooperación entre agentes próximos), donde no
existe un líder que determine la estrategia a seguir. En estas condiciones, emerge
una inteligencia colectiva del conjunto de agentes, dando lugar a fenómenos de auto-
organización. Aunque los agentes sean simples, el resultado de su interacción global
puede llegar a ser muy complejo (como la realización de movimientos prácticamente
al unísono o estrategias de protección frente a depredadores). En el algoritmo 6.8 se
muestra un pseudocódigo de alto nivel para PSO.
PSO se inspira en la sociabilidad de los individuos que componen un sistema
biológico [176]. La exploración del espacio de búsqueda se realiza utilizando una
población de individuos llamados partículas. Las partículas se distribuyen sobre el
espacio de búsqueda, de forma que su posición, determinada por unas coordenadas

→x i , representa los valores que toman las variables de decisión del problema. Cada
partícula produce una salida de error que es función de la posición actual y de la
posición esperada. En cada iteración, el algoritmo modifica la posición del individuo
utilizando un vector de velocidad − →
v i asociado a la partícula:



x i (t) = →

x i (t − 1) + −

v i (t − 1) (6.2)
102 M ETAHEURÍSTICAS P OBLACIONALES

Algoritmo 6.8 Optimización por enjambre de partículas


{xbest } =PSO(N, V , D: integer; f : TipoFuncionObjetivo)
var
/*N es el número de partículas*/
/*V es el número de vecindades*/
/*D es el número de dimensiones*/
p, x: array [1 . . . N] of TipoSolucion;
v: array [1 . . . N] of TipoVecindad; // Población de vecindades
xb est: TipoSolucion;

begin
g := 0; // Inicializar el número de generación
{pi } := InicializarParticulas(N); // Inicializar los elementos de la población
repeat
for i := 1 to N do
{p[i]} := ActualizarMe jorParticula(p[i], f ); // Almacenar el mejor valor
de cada partícula
for n := 1 to V do
{v[n]}:=ActualizarMe jorParticula(p[n], p[i], f ); // Almacenar el mejor
valor de cada vecindad
end for
g := g + 1
for d := 1 to D do

→v ig = →

v ig−1 + ρ1 (−

p i−− →v ig−1 ) + ρ2 (−

p n−−
→v ig−1 ); // Actualizar la velo-
cidad

→x ig = −

x ig−1 + ρ1 (−

v ig ; // Actualizar la posición
end for
end for
until terminacion
xbest := SeleccionarMe jor(p, f ); // Seleccionar la mejor solución encontrada
end
I NTELIGENCIA DE ENJAMBRE Y OPT. POR ENJAMBRE DE PARTÍCULAS 103
Las partículas del enjambre producen una señal de error en cada iteración con
el objetivo de modificar su velocidad, cambiando de posición y describiendo una
trayectoria en el espacio de soluciones. Si −

p i es la mejor posición que ha encontrado

→i
en esa trayectoria, la distancia d entre la posición actual − →x i y la mejor posición
encontrada viene dada por:


→i −
d =→
p i−−

xi (6.3)
que determina la dirección y la distancia que la partícula debería tener para regresar al
mejor valor conocido. El algoritmo de enjambre de partículas utiliza esta diferencia
para establecer el valor del vector de velocidad. Su descripción matemática se puede
expresar mediante la siguiente ecuación:



v i (t) = −

v i (t − 1) + ρ1 (−

p i−−

x i (t − 1)) (6.4)
donde ρ1 es un número aleatorio cuyo límite superior está prefijado (habitualmente
ρ1max = 2).
La ecuación (6.4) describe una tendencia a volver hacia la mejor solución conoci-
da. Este hecho se interpreta como el deseo de los organismos (partículas) por repetir
comportamientos pasados o volver a situaciones exitosas (algo parecido a la “nostal-
gia”) [177][176].
La interacción social se modela por medio de la definición de vecindad, de modo
que cada partícula sólo interacciona con sus vecinas. Existen diferentes definiciones
de vecindad [177][176] que se pueden utilizar en el contexto de SI. Aunque todos los
individuos del enjambre realizan la búsqueda simultáneamente, a cada uno solamente
le afecta su vecindad, de modo que los individuos de esa vecindad contribuyen en la


búsqueda de un mejor valor para las coordenadas. Si pg es la mejor posición que se

→ −

ha encontrado en esa vecindad, la dirección y distancia d g entre la posición actual xi
de cada individuo de esa vecindad y la mejor posición encontrada viene dada por:


→g −
d =→
p g−−

xi (6.5)

Como en el caso anterior, este valor también se aleatoriza para modificar la ve-
locidad. En [177][176] se interpreta como la tendencia que tienen los individuos a
imitar los éxitos de los demás. Finalmente, el vector velocidad, considerando los dos
efectos descritos anteriormente se puede calcular como:

v i (t) = −

→ →
v i (t − 1) + ρ1 (−

p i−−

v i (t − 1)) + ρ2 (−

p g−−

v i (t − 1)) (6.6)
Capítulo 7

Metaheurísticas Constructivas

7.1. Introducción

Las metaheurísticas constructivas son aquéllas que utilizan métodos constructi-


vos. Este tipo de métodos construyen iterativamente paso a paso una solución del
problema, usualmente de forma determinista y suelen estar basados en la mejor elec-
ción en cada iteración [196]. En general, las soluciones obtenidas con estos métodos
suelen ser de una calidad moderada y es necesario aplicar un algoritmo de mejora a
las soluciones construidas. Las metaheurísticas constructivas suelen tener en común
estas dos etapas: construcción y mejora. En el presente capítulo se describen las me-
taheurísticas constructivas más sobresalientes.

7.2. Métodos multi-arranque

Los métodos multi-arranque o MS (Multi-Start) son un conjunto de procedimien-


tos que intentan evitar quedar atrapados en óptimos locales re-arrancando de nuevo
el procedimiento, lo que permite la diversificación de la estrategia de búsqueda. El
principio de operación de esta técnica es el siguiente:
Un procedimiento multi-arranque es un algoritmo iterativo en el que cada itera-
ción tiene dos fases. En la primera fase se genera una solución (ya sea aleatoriamen-
te o a través de un heurístico constructivo). En la segunda fase, la solución generada
se mejora (aunque no es necesario).
El enfoque más sencillo de procedimiento multi-arranque [34] viene descrito por
el pseudo-código mostrado en el algoritmo 7.1. Esta propuesta puede ser considerada
como el primer diseño de método multi-arranque de búsqueda, el cual está dividido

105
106 M ETAHEURÍSTICAS C ONSTRUCTIVAS
Algoritmo 7.1 Multi-Start Methods
{x: TipoSolucion} = MSM(M: integer; f : TipoFuncionObjetivo)
var
i: integer;
xtrial : TipoSolucion;

begin
for i := 1 to M do
/*Construir una solución a través de cualquier heurístico o proc. aleatorio*/
{xtrial } := ConstruirSolucion();
{xtrial } := Me jorarSolucion(xtrial , f );
{x} := ActualizarSolucion( f , x, xtrial )
end for
end

en dos partes bien diferenciadas. Los procedimientos que se pueden utilizar para
implementar la primera parte van desde los métodos que construyen una solución
aleatoria hasta los métodos constructivos más elaborados. Con respecto a la segunda
fase ocurre exactamente lo mismo. Por lo tanto, que la búsqueda local puede ir desde
un procedimiento de búsqueda basada en el gradiente hasta las metaheurísticas más
elaboradas.
Los procedimientos multi-arranque adquieren una relevancia importante en los
métodos que utilizan algún tipo de memoria adaptativa, ya que esta estructura de
memoria puede retener algunas características ”buenas” de las soluciones de alta
calidad, permitiendo utilizar esta información en la fase constructiva y/o de mejora
[197][192]. En [197][198][288] se pueden encontrar revisiones muy exhaustivas de
los procedimientos multi-arranque que aparecen en la literatura. En estos trabajos se
apunta que esta metodología se ha aplicado con éxito principalmente a dos clases de
problemas:

Optimización no lineal: la generación de soluciones suele ser aleatoria y la


fase de búsqueda local habitualmente está implementada con métodos basados
en el gradiente. Los métodos que se encuentran en esta clase se diferencian
en la forma de generar los puntos de arranque. Estos métodos además suelen
presentar propiedades de convergencia asintótica hacia un óptimo local.

Optimización combinatoria: en este caso, tanto la generación de la solución


inicial como la fase de búsqueda local se pueden acometer mediante cualquier
heurística o metaheurística. En general, los métodos MS son fáciles de imple-
mentar y de hibridar con otras técnicas. Como consecuencia, éstos se pueden
encontrar solos o combinados con otras estrategias de búsqueda.
GRASP 107
Debido a la sencillez y potencia de estos métodos, en la literatura se pueden
encontrar diversos algoritmos que se basan en la combinación de métodos multi-
arranque y algoritmos heurísticos [197][198][288]. Un ejemplo de esta combinación
son los métodos multi-arranque adaptativos o AMS (adaptive multi-start methods)
[35]. Estos algoritmos están divididos en dos fases. En la primera se generan un con-
junto de soluciones aleatorias. Posteriormente se optimiza cada una de ellas a través
de un procedimiento de búsqueda local. En la segunda fase se construyen las solu-
ciones iniciales a partir del conjunto de óptimos locales obtenidos en la primera fase.
En [35][147] se pueden encontrar aplicaciones AMS. Otro ejemplo interesante de
método multi-arranque es el presentado en [12], denominado método de escalada es-
tocástica multi-arranque o MRHS (multiple restart stochastic hill-climbing), donde
se propone como método básico y con él se comparan varias implementaciones de
algoritmos genéticos.
Dos de los métodos multi-arranque más aplicados actualmente son GRASP [101]
[264] y la concentración heurística [277][278], que se tratan en detalle en secciones
sucesivas.

7.3. GRASP

El nombre de esta metaheurística viene de su acrónimo en inglés Greedy Ran-


domized Adaptive Search Procedure (GRASP), que en castellano se podría traducir
como procedimientos de búsqueda miope (constructiva, voraz o ávida), aleatorizados
y adaptativos [263]. Cada uno de los términos incluidos en el nombre se corresponde
con una característica distintiva de la metaheurística. GRASP se basa en el siguiente
principio de operación:
GRASP es un procedimiento multi-arranque en el que cada arranque se corres-
ponde con una iteración. Cada iteración tiene dos fases bien diferenciadas: la fase
de construcción, que se encarga de obtener una solución factible de alta calidad; la
fase de mejora, que se basa en la optimización (local) de la solución obtenida en la
primera fase.
Originalmente GRASP fue desarrollado por T. Feo y M. Resende como un al-
goritmo para resolver problemas de cubrimiento de conjuntos [99]. No fue hasta el
trabajo que se publicó en el año 1995 [101] cuando adquiere una terminología y for-
ma definitiva como metaheurística de propósito general. En [24][264][263] se pueden
encontrar trabajos actuales que describen con detalle esta metaheurística.
Los orígenes algorítmicos de GRASP provienen de la heurística semi-constructiva
(semi-constructive heuristic) propuesta en [156]. Esta técnica también se caracteriza
por ser un método multi-arranque basado en una construcción miope aleatorizada. La
108 M ETAHEURÍSTICAS C ONSTRUCTIVAS
Algoritmo 7.2 GRASP
{x: TipoSolucion} = GRASP(M: integer; f : TipoFuncionObjetivo)
var
i: integer;
xtrial : TipoSolucion;

begin
for i := 1 to M do
{xtrial } := ConstruccionAleatorizadaMiope();
{xtrial } := Me jorarSolucion(xtrial , f );
{x} := ActualizarSolucion( f , x, xtrial )
end for
end

diferencia fundamental con respecto a GRASP es que la primera técnica no utilizaba


un procedimiento de mejora (búsqueda local).
GRASP es un procedimiento multi-arranque [197][288], donde cada iteración es-
tá compuesta de dos fases: una fase constructiva y una fase de mejora. En el algoritmo
7.2 se muestra un pseudo-código de alto nivel para esta metaheurística.
La fase constructiva es un procedimiento iterativo encargado de construir una
solución elemento a elemento. Inicialmente, se parte de una semilla que es una com-
ponente o un conjunto de componentes1 que determinan una solución parcial. Las
componentes introducidas en ella se señalan como elementos no seleccionables. El
resto de componentes constituyen el conjunto de los elementos seleccionables. Pos-
teriormente, se ordenan todos los elementos seleccionables, utilizando para ello una
función voraz, constructiva o miope (greedy), que les asigna un coste relacionado
con el cambio que se produce en la función objetivo si se introduce cada uno de los
elementos en la solución parcial. Esta fase del algoritmo es la que le aporta el nombre
Greedy.
Una vez que se tienen ordenados todos los elementos seleccionables, se plantea el
problema de elegir uno ”bueno”. En el contexto de GRASP no se selecciona el mejor
candidato posible, ya que esta opción no asegura que se obtenga una solución óptima,
sino que se elige aleatoriamente un candidato de un conjunto de buenos candidatos.
Este conjunto recibe el nombre de lista de candidatos restringida o RCL (Restricted
Candidate List). Numéricamente, la RCL se construye utilizando los valores máximo
y mínimo del coste asignado a los elementos seleccionables en una iteración dada.
Si se supone que cmax y cmin son respectivamente los valores más alto y más bajo

1 Si se conoceque ciertas sub-estructuras forman parte de la solución óptima, éstas se pueden corres-
ponder con la semilla [137][79].
GRASP 109

Candidatos

RCL

Cmin cmin +a(cmax - cmin) Cmax


Valor de la Función miope

Figura 7.1: Lista de candidatos restringida para problemas de maximización.

del coste, la RCL estaría formada por todos aquellos elementos cuyo coste superase
(para problemas de maximización) el umbral dado por la siguiente expresión:

RCLumbral = (cmin + α × (cmax − cmin )) (7.1)


donde el parámetro α : 0 ≤ α ≤ 1 determina el tamaño de la RCL. Si α = 1 en la
RCL sólo estaría el mejor candidato (función miope pura). Por contra, si α = 0, es-
tarían todos los candidatos (función aleatoria pura). En implementaciones estándares
de GRASP el parámetro α se determina de forma aleatoria. En [264][251][252] apa-
recen varios estudios de cómo se comporta experimentalmente GRASP en función
de α. Se han propuesto diversas estrategias para elegir el valor de α, entre las que
destacan:

1. Seleccionar su valor aleatoriamente de acuerdo a una distribución uniforme de


probabilidad discreta (caso general) [264].
2. Auto-ajustar su valor según la calidad de las soluciones recientes obtenidas
(GRASP reactivo) [250][25].
3. Seleccionar su valor de una distribución no uniforme de probabilidad discreta
decreciente (mayor probabilidad para los mejores valores) [25][23].
4. Fijar su valor a un número concreto (próximo a la elección miope pura) [251]
[252].

En la figura 7.1 se muestra gráficamente el aspecto que tendría una RCL. El tama-
ño de la RCL está marcado por la línea punteada gruesa, que naturalmente depende
110 M ETAHEURÍSTICAS C ONSTRUCTIVAS
Algoritmo 7.3 Fase constructiva de GRASP
{x: TipoSolucion} = ConstruccionAleatorizadaMiope()
var
px : TipoElemento; //Elemento de la solución
L, RCL: list of TipoSolucion; // Lista y lista restringida de candidatos
C: list of real; // coste para cada candidato
α: real;

begin
{L} := CandidatosSeleccionables();
{C} := CalcularCoste(L);
repeat
{α} := rand(1);
{RLC} := ConstruirRLC(L,C, α);
{px } := Seleccionar(RLC); //Seleccionar un candidato aleatoriamente de
RCL
{L} := ActualizarCandidatosSeleccionables(L, px );
{x} := incluir(x, px );
{C} := CalcularCoste(L);
until EsFactible(x)
end

del valor de α, pudiendo pasar de la elección puramente aleatoria a la elección pura-


mente miope. Resaltar que esta fase es la que aporta la palabra Randomized.
Una vez que se ha seleccionado un candidato perteneciente a la RCL, éste se
introduce en la solución parcial y se marca como elemento no seleccionable. El resto
de elementos siguen siendo seleccionables; por consiguiente, para ellos se calcula
de nuevo (mediante la función miope) la variación que se produciría en la función
objetivo si se seleccionase cada uno de los elementos. Por lo tanto, según se van
introduciendo candidatos a la solución parcial GRASP, ésta se va adaptando al nuevo
escenario. A esta fase del procedimiento se debe el calificativo de Adaptive.
La fase constructiva termina cuando se dispone de una solución factible. En el
algoritmo 7.3 se muestra un pseudo-código de alto nivel para esta fase.
La solución construida en la primera fase no tiene por qué ser un óptimo local, ya
que existen bastantes elecciones estocásticas. En otras palabras, la fase constructiva
no garantiza una optimalidad de la solución con respecto a una estructura de vecindad
dada. Para resolver este problema, GRASP introduce una segunda fase, conocida
como fase de mejora, que consiste en un procedimiento de optimización local basado
en una función de búsqueda local o, incluso, en una metaheurística. Por lo general,
esta fase mejora la solución construida pero tampoco garantiza la optimalidad de
GRASP 111
la solución (aunque experimentalmente se ha comprobado que mejora bastante la
calidad).
En la implementación estándar de GRASP, la fase de mejora es un procedimiento
de búsqueda local; por lo tanto, habría que definir una estructura de vecindad, exa-
minarla y hacer un movimiento hacia el vecino que produzca alguna mejora en la
función objetivo. Este movimiento debe mantener intacto el hecho de que la solu-
ción sea factible. El proceso de búsqueda local se mantiene hasta que no se puede
encontrar una solución mejor en la vecindad utilizada.
En [264] se apuntan como factores determinantes que influyen en la búsqueda
local los siguientes:

Estructura de la vecindad (suele ser sencilla).

Algoritmo de optimización local para esa vecindad (usualmente basado en un


procedimiento de búsqueda local). En función del tipo de movimiento, los mé-
todos de mejora se clasifican en:

Primer movimiento de beneficio (First-Improvement): seleccionar el movi-


miento que conduzca al primer vecino que mejore la solución actual.
Mejor movimiento de beneficio (Best-Improvement): evaluar todos los mo-
vimientos hacia los vecinos y seleccionar aquél que produzca mayor be-
neficio.

En la práctica, las dos alternativas suelen conducir a la misma solución; por


lo tanto, puesto que el segundo método tiene asociado un coste computacional
más elevado, se suele utilizar el primero. Además, se ha observado empírica-
mente que con la segunda opción, GRASP converge con mayor probabilidad a
óptimos no globales.

Evaluación de la función de coste de los vecinos (GRASP utiliza vecindades


pequeñas si la evaluación es muy costosa).

De la propia solución inicial (GRASP construye soluciones de alta calidad para


minimizar, en la medida de lo posible, este hecho).

La segunda fase termina cuando no se pueda hacer ningún movimiento que me-
jore la solución actual. En el algoritmo 7.4 se muestra un pseudo-código de alto nivel
para esta fase.
Existen una serie de métodos que se pueden introducir en la implementación es-
tándar de GRASP que, para algunos problemas, pueden conseguir mejoras sustancia-
les. A continuación, se describen esquemáticamente los que se consideran de mayor
interés:
112 M ETAHEURÍSTICAS C ONSTRUCTIVAS
Algoritmo 7.4 Fase de mejora de GRASP
{x: TipoSolucion} = MejorarSolucion(x: TipoSolucion; f : TipoFuncionObjetivo)
var
vecindad: array [1...NV ] of TipoSolucion;
newSolution: boolean;

begin
repeat
newSolution := FALSE;
{vecindad} := GenerarVecindad(x)
{x, newSolution} := ActualizarSolucion( f , x, vecindad)
until not newSolution
end

GRASP reactivo: este método consiste en dotar a GRASP de memoria, de for-


ma que la elección de α no sea aleatoria, sino que tenga en cuenta la historia
pasada. En este marco, tendrían más posibilidades de ser seleccionados aque-
llos valores de α que hayan conducido a soluciones de alta calidad en el pasado.
En [250] se propone una regla de selección. En general, esta implementación
mejora los resultados estándares de GRASP [25].

Perturbación de costes: este método consiste en añadir un ligero ruido a los


costes de forma similar a los métodos ruidosos [56]. Esta opción añade flexi-
bilidad a la implementación GRASP, sobre todo en aquellos problemas que no
son muy sensibles a la aleatorización. También es útil cuando no se dispone de
una función miope que se pueda aleatorizar. En [270] se muestra un ejemplo
de este método para el problema de Steiner [238][70].

Funciones de desplazamiento (bias functions): esta técnica establece un crite-


rio de selección de candidatos en la RCL más inteligente, de tal forma que,
en lugar de ser todos los candidatos equi-probables, se utiliza una función de
distribución que enfatiza a unos candidatos sobre otros. En [43] se proponen
varias distribuciones de probabilidad y en [23] se aplican al problema de pla-
nificación de trabajos en una tienda (job shop scheduling)[238][70][23].

Construcción inteligente (memoria y aprendizaje): Este método consiste en


la introducción de una memoria a largo plazo en el esquema GRASP, de tal
forma que se tenga en cuenta la historia pasada a la hora de tomar una decisión.
Originalmente fue propuesto por Fleurent y Glover [107] como una estrategia
muy útil para todas las metaheurísticas multi-arranque.

POP en construcción: En [107] se propone una reinterpretación del principio


de optimalidad aproximada [127] en el contexto de GRASP. En ese trabajo se
C ONCENTRACIÓN HEURÍSTICA 113
sugiere que las imperfecciones introducidas durante la fase constructiva pue-
den ser ”limadas (ironed-out)” aplicando un procedimiento de búsqueda local
durante las fase de construcción. Debido a la relación que se establece entre la
eficiencia y la calidad no se suele aplicar en todos los puntos. En [23] se da un
ejemplo de esta implementación.

7.4. Concentración heurística

La concentración heurística o HC (Heuristic Concentration) es una metaheurís-


tica desarrollada por K.E. Rosing y C.S. ReVelle [278] cuyo principio de operación
es el siguiente:
Utilizando la información que proporcionan múltiples ejecuciones de un algorit-
mo heurístico, se puede construir una solución, que en general es mejor que la mejor
de todas las soluciones heurísticas.
HC es una metaheurística dividida en dos fases bien diferenciadas. La primera
fase consiste en la ejecución independiente de un algoritmo heurístico con distin-
tos argumentos, generando un grupo de soluciones C. Habitualmente, el algoritmo
que genera estas soluciones es una heurística de intercambio (heuristic interchange)
[276], que toma una solución inicial generada aleatoriamente (o a través de algún
criterio heurístico constructivo) y consigue un óptimo local.
Una característica que se puede observar en las soluciones que están en C es que,
por ejemplo, para problemas modelados con grafos en los que la solución es un sub-
grafo, los nodos que no pertenecen a la solución son la mayoría. Además, existen una
serie de nodos que habitualmente pertenecen a la solución. Este razonamiento permi-
te construir un conjunto denominado conjunto de concentración o CS (Concentration
Set), caracterizado por contener los subgrafos solución que se han obtenido durante
esta primera fase.
El CS se suele dividir en dos subconjuntos, a saber: CS = {CSopen ,CS f ree }. El
subconjunto CSopen contendría aquellos nodos que aparecen en todas las soluciones
encontradas en la primera fase. Se supone que, con una probabilidad alta, estos ele-
mentos forman parte de la solución. En el subconjunto CS f ree estarían el resto de
nodos (aparecen al menos una vez en alguna solución) y serían elementos seleccio-
nables para poder construir una buena solución.
La segunda fase de la metaheurística consiste en encontrar la mejor solución posi-
ble, restringiendo el espacio de búsqueda a CS. Esta búsqueda se puede hacer a través
de un algoritmo heurístico o un algoritmo exacto. Las implementaciones más exitosas
de HC [277][278] desarrollan este algoritmo de búsqueda mediante dos algoritmos
de programación lineal entera, cada uno de ellos operando sobre un subconjunto de
114 M ETAHEURÍSTICAS C ONSTRUCTIVAS
CS. Obsérvese que la idea fundamental de esta metaheurística reside en la elección
de los elementos miembros de CS. Además, esta elección debe ser heurística para ser
eficiente. Por este motivo se denomina a la metaheurística concentración heurística.

7.5. Optimización por colonias de hormigas

La optimización por colonia de hormigas o ACO (Ant Colony Optimization) es


un sistema multi-agente que se inspira en el comportamiento observado en hormi-
gas reales. El principio de operación de esta metaheurística se puede describir de la
siguiente manera:
ACO se basa en la comunicación indirecta que se produce por medio de rastros
de feromona artificial entre un conjunto de agentes denominados hormigas artifi-
ciales. La feromona artificial sirve como una información numérica distribuida que
utilizan los agentes para tomar probabilísticamente una decisión que les permita
construir una solución a un problema dado.
Desde un punto de vista biológico, ACO se inspira en el experimento con hormi-
gas reales de Goss et al. [83]. Este trabajo consistía en interponer entre el hormiguero
y una fuente de comida un puente con dos ramas, donde una rama era más larga que
la otra (figura 7.2). Cuando las hormigas hacían el camino del hormiguero a la fuente
de comida debían decidir la rama por la que pasar. Lógicamente, en el camino de
vuelta hacia el hormiguero también deberían decidir por qué rama pasar. Se compro-
bó empíricamente que después de un tiempo transitorio, la mayoría de las hormigas
seleccionaban la rama más corta para ir hacia la comida y volver. Es más, se obser-
vó que la probabilidad de seleccionar el camino más corto se acentuaba cuanto más
diferencia existía entre las dos ramas.
El comportamiento observado se debe a que cuando las hormigas realizan el ca-
mino hacia la comida depositan un rastro de feromonas, tanto en la intersección de
caminos como en el punto de destino. En estas circunstancias, cada hormiga toma
una decisión probabilística influida por la cantidad de feromonas que detectan. Al
principio no hay rastro de feromonas, con lo que cada hormiga elige un camino alea-
toriamente. Debido a la diferencia de longitud entre los caminos, las hormigas que
hayan elegido el camino más corto llegarán antes a la comida, de tal forma que en el
camino de vuelta detectarán el rastro de feromonas del camino más corto. Como con-
secuencia, las hormigas seleccionarán con mayor probabilidad el camino más corto,
dejando de nuevo más rastro de feromonas. De esta manera, el camino más corto se
va haciendo más atractivo. Desde un punto de vista algorítmico, se tendrá que la fre-
cuencia con la que se depositan feromonas en el camino más corto es mayor que la
frecuencia con la que se depositan en el camino más largo.
O PTIMIZACIÓN POR COLONIAS DE HORMIGAS 115

Hormiguero

Comida
Figura 7.2: Caminos del hormiguero a la comida.

La metaheurística ACO (originalmente se llamaba sistema de hormigas o Ant


Systems (AS)) fue introducida por M. Dorigo [82][86][87] y se basa en un conjunto
de agentes, conocidos como hormigas artificiales, donde cada una de ellas se encarga
de construir probabilísticamente una solución a un problema dado. En otras palabras,
una hormiga artificial iterativamente añade una componente de la solución teniendo
en cuenta lo siguiente:

Información heurística del problema.

Rastros de feromonas que cambian dinámicamente y que de alguna forma re-


flejan la experiencia de otras hormigas.

En esencia, ACO construye una solución a través del camino que genera una hor-
miga en un grafo determinado. Nótese que este método es mucho más elaborado que
un heurístico constructivo. Por ejemplo, en [87] se resaltan como ventajas fundamen-
tales de la metaheurística con respecto a las heurísticas voraces las siguientes:

La componente estocástica de ACO permite que las hormigas construyan una


amplia variedad de soluciones.

Se exploran muchas más soluciones.

El uso de información heurística (en cada decisión de una hormiga) guía a las
hormigas hacia soluciones mejores.

La experiencia de las hormigas se puede utilizar para construir mejores solu-


ciones en iteraciones futuras (aprendizaje reforzado [302]).

El hecho de utilizar una colonia de hormigas permite aumentar la robustez del


algoritmo.
116 M ETAHEURÍSTICAS C ONSTRUCTIVAS
Algoritmo 7.5 Optimización por Colonias de Hormigas
{xbest :hhormigai} = ACO(N: integer,F :hTrazo de Feromonasi)
var
/*N es el número de hormigas*/
/*F es el trazo inicial de feromonas*/
C: hEstructura de vecindad de una hormigai;
M: hEstructura de memoria colectiva de las hormigasi;
P: hEstructura de probabilidad para cada movimiento de una hormigai;
pos: hPosiciones de las hormigasi;

begin
repeat
/*Construir una solución para cada hormiga*/
for i := 1 to N do
{M} := ActualizarMemoria(M);
while not Solucionconstruida do
{C} := MovimientosPosibles(pos); // Mtos. posibles de una hormiga
{P} := EvaluarMovimientos(C, M); // Evaluar los movimientos
{pos} := MovimientoHormiga(P); // Nuevo movimiento de la hormiga
{F} := DepositarFeromonas(pos); // Depósito de feromonas
{x} := AnnadirComponente(pos); // Añadir componente a la solución
end while
{x} = ActualizarSoluciones(x);
end for
{F} := EvaporacionFeromonas(x, F );
{F} := AccionesDemonio(x, F );
until terminacion
{xbest } := SeleccionarMe jor(x); //Seleccionar la mejor solución encontrada
end

La definición de los rastros de feromonas es una tarea crucial para un problema


dado, tanto que una mala elección puede conducir a que las soluciones que se ob-
tengan con ACO sean de baja calidad. En [87] se apunta que aunque la elección del
método de depósito es crítico, habitualmente una elección intuitiva suele conducir a
buenas soluciones. Un esquema podría ser, por ejemplo, depositar en cada compo-
nente que forma una solución una cantidad de feromonas inversamente proporcional
a la calidad de dicha solución. Este enfoque se utilizó originalmente en los sistemas
AS [82][86] para el problema del TSP. Otro problema que presenta el depósito es
que, en ocasiones, puede conducir a que el algoritmo converja demasiado rápido a
una solución que no sea óptima. ACO intenta minimizar este problema por medio
de la evaporación del rastro de feromonas. Esta técnica suele estar descrita por una
POPMUSIC 117
distribución exponencial, donde la evaporación será mucho más intensa al principio
[87].
Como en cualquier metaheurística, ACO establece un compromiso entre la di-
versificación y la intensificación del procedimiento de búsqueda. Concretamente, se
realiza a través de la gestión del rastro de feromonas (tanto en el depósito como en la
evaporación). Dicho rastro describe una función de distribución de probabilidad so-
bre el espacio de búsqueda, determinando qué partes de dicho espacio de soluciones
se deben muestrear más intensamente. Esta distribución puede variar desde una dis-
tribución uniforme hasta una distribución que asigne probabilidad 1 a una solución y
0 al resto.
ACO es una metaheurística que tiene una inspiración biológica. Este hecho no
hace perder de vista el objetivo para el que fue diseñada, que es la optimización.
Por este motivo, para algunos problemas difíciles, ACO introduce una serie de pro-
cedimientos, denominados ”procedimientos demonio”, que no tienen ninguna inter-
pretación biológica pero que en algunos problemas pueden mejorar sustancialmente
el rendimiento de la metaheurística. Se suelen utilizar para modelar acciones cen-
tralizadas que no pueden llevar a cabo las hormigas sencillas. Dentro de este tipo
de procedimientos se encuentra, por ejemplo, la búsqueda local. Algunas de las im-
plementaciones más potentes de ACO aplican un algoritmo de búsqueda local a la
solución obtenida por la metaheurística, de tal forma que ACO hace una optimiza-
ción de grano grueso y la búsqueda local la hace de grano fino. En [35][85] se pueden
encontrar implementaciones que han conducido a resultados de alta calidad. La in-
clusión de conocimiento heurístico en ACO también se considera un procedimiento
demonio. Ejemplos típicos podrían ser que un camino partiese con una determinada
concentración de feromonas en los nodos o que en cada nodo se deposite una cantidad
extra. ACO también considera la posibilidad de introducir conocimiento heurístico en
la toma de decisiones. Naturalmente, esta información es muy dependiente del pro-
blema, pero en general se suele reducir drásticamente el espacio de búsqueda. En el
algoritmo 7.5 se muestra el pseudo-código de alto nivel para ACO.

7.6. POPMUSIC

El término POPMUSIC proviene de Partial OPtimization Metaheuristic Under


Special Intensification Conditions (metaheurística de optimización parcial bajo con-
diciones especiales de intensificación). Esta metaheurística fue desarrollada por Tai-
llard y Voss [305] y la idea básica es la siguiente:
POPMUSIC se basa en la división de un problema en partes, de tal forma que
cada parte se optimiza localmente por separado, mejorando (en general) la solución
global. El proceso continúa hasta que ninguna parte se puede optimizar.
118 M ETAHEURÍSTICAS C ONSTRUCTIVAS
Una forma típica de intentar resolver los problemas de optimización muy gran-
des consiste en dividirlos en partes más pequeñas, resolver el problema para cada
parte y finalmente combinar los resultados obtenidos en cada parte para obtener una
solución al problema original. Este esquema tan sencillo suele conducir a soluciones
sub-óptimas, debido fundamentalmente a que la partición del problema, en general, se
hace de forma arbitraria. Además, es bastante complicado encontrar una forma ade-
cuada, tanto para partir el problema en partes como combinarlas al final. POPMUSIC
supera este problema optimizando localmente cada parte del problema a posteriori;
es decir, mejorando cada parte, una vez que se conoce una solución al problema.

Algoritmo 7.6 POPMUSIC


{x: TipoSolucion} = POPMUSIC( f : TipoFuncionObjetivo, r, p:integer)
var
/*p es el número de partes de una solución y r es el número de subproblemas*/
parte: langleParte de una Solucionrangle;
O, x∗ : array [1, . . . , p] of langleParte de una Solucionrangle;
p: array 1, [. . . , p] of langleSimilitudes entre partesrangle;
Ri , R j : array [1, . . . , r] of langleSubproblemarangle; //r < p

begin
{x} := InicializarSolucion();
{x∗ } := DividirSolucionEnPartes(x);
O = [];
/*A través de una función distancia se establece una similitud entre partes*/
S = CalcularSimilitudes(x);
repeat
/*Se selecciona alguna parte con algún criterio heurístico*/
parte := seleccionarParte(O);
/*Construir un subproblema con las partes más parecidas*/
Ri := ConstruirSubproblema(r, x, S);
/*Mejora local del subproblema*/
R j := BsquedaLocal(Ri , f );
if f (R j ) >= f (Ri ) then
/*Actualizar la solución y las partes correspondientes*/
x := actualizar(x, R j );
else
O := O ∪ parte;
end if
until O = x∗
end
POPMUSIC 119
POPMUSIC es una metaheurística que sugiere cómo generar las vecindades que
mejor se adaptan a problemas combinatorios grandes. En general, suelen ser grandes
y no tienen por qué ser enumeradas, sino que son generadas implícitamente mediante
un método exacto o aproximado [304]. Considérese que x es la solución a un proble-
ma de optimización grande y que ésta se puede dividir en varias partes x = x1 , .., x p .
Supóngase que se puede dar una medida de la relación entre cada parte. En estas con-
diciones, POPMUSIC selecciona una parte del problema xi , denominada semilla, y
las r < p partes vecinas que más relación tienen con dicha semilla. Con estas r partes
seleccionadas se construye un subproblema. Si las partes y los sub-problemas están
bien definidos, cada mejora en el sub-problema se corresponde con una mejora en
el problema general. Por lo tanto, esta metaheurística lo que hace es transformar el
problema real en un problema más pequeño, que se resuelve con más facilidad. El
proceso terminará cuando no se pueda conseguir ninguna mejora para ningún sub-
problema. En el algoritmo 7.6 se muestra el pseudo-código de esta metaheurística.
Un campo de aplicación típico para esta metaheurística es el de la agrupación
(clustering). Para aplicar POPMUSIC a este problema, en primer lugar, se debe dis-
poner de una solución factible. En este ejemplo, se supone que se parte de la cla-
sificación dada en la figura 7.3, donde los círculos más grandes representarían los
centroides de cada clase y los círculos más pequeños con los elementos que se aso-
cian a una determinada clase. Para este ejemplo, se parte de 31 clases; por lo tanto, el
problema se divide en 31 partes (tantas como clases). Naturalmente, las partes en las
que se ha dividido el problema están relacionadas entre sí. Considérese las tres clases
marcadas en negro (clases s1, s2 y s3) en la figura 7.3. Las clases s1 y s2, resalta-
das en la parte superior de la imagen en negro, prácticamente no tienen relación con
otras clases, ya que están muy alejadas del resto de clases. Por lo tanto, ni s1 ni s2
se podrán utilizar como semilla para construir un sub-problema. Por el contrario, la
clase s3, sí que tiene bastante relación con las clases vecinas, ya que está mucho más
próxima al resto de clases (marcadas en la figura con un tono gris medio). En este
caso, s3 podría ser la semilla y las r clases que rodean a la semilla (5 clases marca-
das en tono gris medio en la figura 7.3) conformarían el sub-problema. POPMUSIC
trataría de optimizar el sub-problema compuesto exclusivamente por la semilla s3 y
sus r clases vecinas.
En [304] se apunta como una de las características más interesantes de POPMU-
SIC, que ésta actúa como marco genérico para otras metaheurísticas, como pueden
ser LNS [305], MIMAUSA [202], VNS [152], o los procedimientos heurísticos que
se presentan en [7][33].
120 M ETAHEURÍSTICAS C ONSTRUCTIVAS

s1
s2

s3

Figura 7.3: Ejemplo de dos clases muy poco relacionadas con el resto (parte de arri-
ba) y un sub-problema creado a partir de la semilla s3 y 5 clases muy relacionadas
(resaltadas en gris oscuro alrededor de la semilla).

7.7. Equipos asíncronos

Los equipos asíncronos o AT (Asynchronous Teams o A-Teams) es una metaheu-


rística multi-poblacional y multi-agente que resuelve problemas combinatorios difí-
ciles [309]. El principio de operación de esta metaheurística se puede describir en los
siguientes términos:
Un problema combinatorio determinado se puede dividir en subproblemas de tal
forma que cada uno de ellos mantenga una población de soluciones candidatas. Es-
tas poblaciones son modificadas por agentes, con el objetivo de mejorar la calidad
de dicha población. Finalmente, para enriquecer el comportamiento de la metaheu-
rística, se permite la circulación de individuos (emigración) de una población a otra.
Las primeras ideas de esta metaheurística fueron originalmente propuestas en
[309]. En [307][308] aparecen versiones definitivas de AT, así como aplicaciones
prácticas.
Los agentes en AT se caracterizan por los siguientes aspectos:

Son completamente autónomos.

Tienen el mismo ciclo de trabajo por iteración.


E QUIPOS ASÍNCRONOS 121
Agentes que mejoran Agentes construyen un 1-Arbol
un circuito a partir de un circuito

Destructores Destructores
Población de Población
Circuitos 1-Árboles

Agentes que generan un Agentes construyen un circuito


Agentes construyen un circuito de baja completo a partir de un 1-Arbol
subcircuito a partir de un circuito
calidad a partir de uno de alta calidad

Agentes construyen un circuito de alta


calidad a partir de uno de baja calidad
Destructores Destructores
Población de Población de
circuitos circuitos de baja
parciales calidad

Agentes construyen un circuito de baja


calidad a partir de un circuito parcial

Figura 7.4: AT para resolver el problema del TSP.

1. Seleccionar una solución de la población.


2. Modificar la solución seleccionada.
3. Insertar la nueva solución.

En el resto de aspectos los agentes pueden ser completamente diferentes, tanto


que unos agentes pueden ser programas y otros seres humanos [308]. Cada agente
trabaja de forma asíncrona, o lo que es lo mismo, cada uno de ellos trabajará a la
velocidad a la que pueda efectuar las tareas que tiene encomendadas. Como conse-
cuencia, unos pueden trabajar muy rápido y otros muy lentos. Este es el motivo por
el que la metaheurística recibe el nombre de equipos asíncronos.
Desde un punto de vista estructural, un agente se puede considerar que está com-
puesto por un sensor, un decisor y un actuador [308]. El comportamiento de un
agente viene determinado por una correspondencia entre un dominio (todo lo que
pueda percibir a través de los sensores) y un recorrido (todo lo que decide modificar
y modifica a través de los actuadores). En el contexto de AT, se dice que los agentes
son completamente autónomos. Es decir que no existe ningún supervisor que le diga
a cada agente qué es lo que tiene que hacer en cada momento o que organice el tra-
bajo conjunto de los agentes. En [308] se muestran algunas de las ventajas de utilizar
agentes completamente autónomos. Nótese que este comportamiento no implica que
los agentes no interaccionen entre sí, ya que entonces cada agente no podría utilizar
122 M ETAHEURÍSTICAS C ONSTRUCTIVAS
el trabajo que han realizado los demás. En este sentido, si cada agente no tuviese en
cuenta el contexto, se podrían dar situaciones muy ineficientes, como por ejemplo
que varios agentes trabajasen en la misma parte del problema.
En AT, los agentes se auto-organizan a través de la cooperación. Dicha coopera-
ción se puede dividir en dos niveles:

1. Nivel 1: se descompone el problema en varios subproblemas, asignándole una


población a cada uno de ellos.
2. Nivel 2: se asignan varios agentes a cada subproblema, de tal forma que estos
agentes mejoran la población.

Cada agente trabaja de forma autónoma y asíncrona utilizando sus propios mé-
todos. En estas condiciones, cada uno decide en cada momento cuándo trabajar, qué
soluciones debe seleccionar y cómo modificarlas. Es importante destacar que la coo-
peración entre los agentes no se produce de forma explícita, sino que es mediante
la modificación de una población que ya ha sido modificada por otros agentes. Esta
estrategia de cooperación es semejante a la comunicación por feromonas que aparece
en la las colonias de hormigas [87]. Desde un punto de vista biológico, esta forma de
cooperación se puede observar en insectos reales tales como las hormigas, las abejas
o incluso cierta clase de termitas. En [308] se explora más profundamente el símil
biológico.
Para algunos problemas difíciles se permiten estructuras organizativas más com-
plejas. Por ejemplo, se puede suponer que una agrupación de agentes forman parte
de una estructura más compleja denominada super-agente. A su vez, esta estructura
también puede formar parte de una más compleja (super-super-agente), y así suce-
sivamente. Este tipo de organizaciones se suele justificar debido a que cuando se
produce un agrupamiento de agentes se establece una sinergia entre ellos [308].
Desde un punto de vista algorítmico, el diseño de un AT se divide en cinco capas.
A continuación, se describen brevemente cada una de ellas:

1. Control de flujo: establece una estructura de árbol donde los nodos se corres-
ponden con agentes. Esta estructura permite definir una organización de los
agentes en capas, lo cual es muy útil en el caso de estructuras de super-agentes.
El árbol indica mediante sus arcos las relaciones de supervisión. Es decir, a
quien tiene que informar cada agente. Finalmente, por medio del peso de los
arcos, se expresa la autonomía que tiene cada uno.
2. Descomposición del problema: establece una estructura de grafo donde los
nodos representan cada subproblema y los arcos el acoplamiento entre dichos
subproblemas.
3. Asignación a subproblemas: establece una estructura de grafo con dos tipos
de nodos: un tipo que se corresponde con agentes y el otro con subproblemas.
E QUIPOS ASÍNCRONOS 123
La asignación consiste en resolver un problema de bipartición de grafos, deter-
minando qué agente se asigna a cada subproblema.
4. Flujo de datos: establece una estructura de grafo bipartito que determina qué
agentes se comunican y cómo lo hacen. Los nodos de este grafo son de dos
tipos: un tipo representa a los agentes; y el otro tipo representa a estructuras de
memoria. Los arcos del grafo representan las posibles comunicaciones, por un
lado entre distintos agentes y por otro lado entre agentes y una estructura de
memoria.
5. Planificación del trabajo: establece una estructura de grafo donde los nodos
representan las tareas y los arcos a las relaciones de precedencia entre las ta-
reas. Este grafo determina el orden en el que los agentes ejecutan las tareas
(iteraciones y comunicaciones).

Tal y como se ha planteado la metaheurística AT el espacio de búsqueda es muy


grande. En [308] se presentan algunas simplificaciones que se pueden hacer en las
capas de tal forma que sea posible reducir la complejidad del problema. En la figura
7.4 se muestra una posible implementación para el problema del TSP. Como se puede
observar, el problema se ha dividido en cuatro grandes bloques (circuitos, 1-árboles,
circuitos de baja calidad y circuitos parciales). A cada bloque se le asigna una pobla-
ción y un conjunto de agentes que modifican la población. Por ejemplo, se muestra
un conjunto de agentes que mejorarían las poblaciones del circuito (intensificación
de la búsqueda), otro grupo que a partir de un circuito de alta calidad construiría
uno de baja calidad (diversificación de la búsqueda), etc. También hay agentes en-
cargados de controlar cada una de las poblaciones (destructores), de tal forma que
se puedan eliminar individuos de la poblaciones, si fuese necesario. En [254][72] se
pueden encontrar aplicaciones de esta metaheurística a problemas de optimización
combinatoria.
Capítulo 8

Tendencias Actuales en
Optimización Metaheurística

8.1. Introducción

Hoy en día, la mayor parte de investigadores en el ámbito de las metaheurísticas


utilizan enfoques en los que las metaheurísticas colaboran entre sí de un modo u otro.
Destacan por su interés y proyección la construcción de metaheurísticas híbridas y
las hiper-heurísticas. Por otro lado, también se ha avanzado mucho en los últimos
años en la implementación eficiente de metaheurísticas. Este campo de investigación
se ha consolidado como un asunto de interés para la gran mayoría de los congre-
sos y revistas especializadas en optimización metaheurística. Se ha dedicado especial
atención al campo de las implementaciones paralelas de metaheurísticas. Además, se
empieza a despertar el interés de los investigadores por nuevos problemas relacio-
nados con la optimización mutiobjetivo o los problemas que cambian a lo largo del
tiempo (problemas dinámicos). Este capítulo está dedicado a presentar una panorá-
mica de los problemas y de las estrategias que empiezan a cobrar más importancia en
la actualidad dentro del campo de la optimización metaheurística.

8.2. Técnicas híbridas

Durante los últimos años, el interés en las metaheurísticas híbridas ha aumenta-


do considerablemente entre los investigadores en optimización combinatoria [306].
Prueba de ello es la aparición de números especiales en revistas (como el Special
Issue on Hybrid Metaheuristics del Journal of Mathematical Modeling and Algo-
rithms) y congresos especializados (como el International Workshop on Hybrid Me-

125
126 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA

Bajo Nivel { Serie


Metaheurísticas
Híbridas { Alto Nivel {
Paralelo
Serie
Paralelo

Figura 8.1: Clasificación jerárquica de las metaheurísticas híbridas (adaptado de


[306]).

taheuristics, que se celebra anualmente). Para algunos problemas prácticos y también


académicos, los mejores resultados se han obtenido utilizando algoritmos híbridos.
Talbi [306] presenta una taxonomía de metaheurísticas híbridas y propone dos clasi-
ficaciones para este tipo de métodos: jerarquizada (figura 8.1) y plana (figura 8.2).
Las diferentes hibridaciones de metaheurísticas pueden clasificarse de un modo
jerárquico en:

Combinación de bajo nivel: Los procedimientos heurísticos están embebidos


unos en otros, de tal forma que para dos procedimientos dados una función del
procedimiento continente se sustituye por el procedimiento embebido. Esta
combinación se divide en:
1. Serie (LRH - Low-level Relay Hybrid): Un método se introduce dentro
de otro como una función. Por ejemplo, proceso constructivo (miope)
puro al que se quiere introducir cierta aleatoriedad.
2. Paralelo (LTH - Low-level Teamwork Hybrid): Se tiene una población
de soluciones de tal forma que sobre cada solución actúa un método que
se caracteriza por contener a otro método. Por ejemplo, un algoritmo ge-
nético al que se introduzca un procedimiento de búsqueda local en sus
operadores.

Combinación de alto nivel: Los métodos heurísticos que se combinan están


auto-contenidos, de forma que no existe interacción entre ellos. Esta combina-
ción además se divide en:
1. Serie (HRH - High-level Relay Hybrid): Se tiene una única solución
de tal forma que un método se aplica después del otro. Por ejemplo, un
proceso constructivo seguido de una búsqueda local.
2. Paralelo (HTH - High-level Teamwork Hybrid): Se tiene una población
de soluciones de forma que cada método se aplica independientemente
T ÉCNICAS HÍBRIDAS 127

Combinación
{ Homogénea

{
Heterogénea

Metaheurísticas
Híbridas
Espacio de Búsqueda
{ Global
Parcial

Tipos de Problemas { General


Especializada

Figura 8.2: Clasificación plana de las metaheurísticas híbridas (adaptado de [306]).

a cada solución. Por ejemplo, en un GA que subdivide la población en


varias subpoblaciones, aplicando a cada una un procedimiento de cruce
distinto.

Además, las metaheurísticas híbridas pueden organizarse en una clasificación pla-


na como sigue:

Homogéneas o Heterogéneas
1. Homogénea: Todas los algoritmos combinados utilizan la misma me-
taheurística. Los algoritmos híbridos como el Modelo de Islas para Algo-
ritmos Genéticos [246] pertenece a esta clase de algoritmos.
2. Heterogénea: Los algoritmos combinados utilizan diferentes metaheu-
rísticas. El métodos GRASP puede verse como una combinación de alto
nivel serie (HRH) heterogéneo, en el que la búsqueda local se repite pa-
ra un número de soluciones iniciales generadas mediante una heurística
miope aleatorizada [100].

Globales o parciales
1. Global: En las hibridaciones globales, todos los algoritmos buscan en
todo el espacio de búsqueda. El objetivo es entonces explorar el espacio
más minuciosamente.
2. Parcial: En las hibridaciones parciales el problema se descompone en
sub-problemas, cada uno definido en su propio espacio de búsqueda. Ca-
da uno de los algoritmos se dedica a explorar uno de esos sub-espacios.
Los sub-problemas están relacionados entre sí a través de restricciones
entre las soluciones encontradas en cada uno. Por lo tanto, los algoritmos
se comunican entre ellos para respetar estas restricciones y construir una
solución global factible.
128 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
Especializados o generales
1. General: En la hibridación general, todos los algoritmos resuelven el
mismo problema de optimización.
2. Especializados: En ellas, se combinan algoritmos que resuelven diferen-
tes problemas.

8.3. Hiperheuristicas

Las hiper-heurísticas son procedimientos de búsqueda de muy alto nivel que se


sitúan por encima de las metaheurísticas. Estos procedimientos elevan la generali-
dad que tienen las metaheurísticas. Las hiper-heurísticas se encargan de seleccionar,
en cada momento y para cada problema, el método heurístico o metaheurístico más
adecuado. Esta selección se hace, por ejemplo, en función del tiempo que tarda cada
algoritmo o en función de la calidad de la solución que consigue cada uno de ellos.
Una hiper-heurística es un procedimiento de alto nivel (generalmente una me-
taheurística) que actúa sobre un conjunto de algoritmos, ya sean éstos heurísticos o
metaheurísticos.
En la mayoría de los casos, las metaheurísticas más optimizadas son demasia-
do dependientes del problema o al menos necesitan tener un elevado conocimiento
heurístico del problema [47]. La idea básica que reside detrás de las hiper-heurísticas
consiste en utilizar una población de métodos heurísticos/metaheurísticos que ac-
túan sobre un problema determinado, de tal forma que en cada momento la hiper-
heurística decide cuál es el mejor método para aplicar al problema, cambiando el
estado de dicho problema. A continuación, se presenta la plantilla general de una
hiper-heurística [47]:

1. Construir un conjunto H de heurísticas/metaherurísticas, las cuales se pueden


aplicar a un problema concreto.
2. Inicializar el problema a un estado conocido S0 .
3. Aplicar al estado actual Si del problema el algoritmo de H más adecuado, ha-
ciendo pasar el problema al estado S j .
4. Si el problema está resuelto, parar. En otro caso ir a 3.

En el fondo, la hiper-heurística planifica una serie de acciones que se ejecutan


sobre un determinado problema, realimentándose con los resultados obtenidos.
En [47] se presenta una implementación concreta de una hiper-heurística que se
ha aplicado con éxito a diversos problemas de optimización. Esta implementación,
en principio, no tiene ningún conocimiento del problema que va a resolver, tenien-
do sólo acceso a un conjunto de heurísticas/metaheurísticas, que naturalmente sí que
I MPLEMENTACIONES AVANZADAS 129

Hiper-Heuristica

Flujo de datos que no


dependen del dominio

Barrera del dominio

Flujo de datos que no


dependen del dominio

Conjunto de
Heurísticas|Metaheurísticas

h1 h2 ....... hn

Función de evaluación

Figura 8.3: Esquema general para una hiper-heurística.

son dependientes del problema. En estas condiciones, la hiper-heurística ”llama” a


cualquiera de los algoritmos que tenga disponible pero ésta no sabe absolutamente
nada sobre el propósito o función de cada uno de estos métodos. La ventaja que pre-
senta este enfoque es que, puesto que no depende del problema una vez que se haya
diseñado la hiper-heurística, ésta será válida para cualquier problema. Para aplicar la
hiper-heurística a un problema distinto, lo único que habrá que hacer será cambiar
el conjunto de heurísticas/metaheurístiaos, ya que éstos sí que son dependientes del
problema. Nótese que también sería necesario cambiar la función de evaluación que
indica la calidad de una solución, ya que ésta también es dependiente del problema.
En la figura 8.3 se presenta un esquema de esta implementación. En esta figura
se puede observar que existe una barrera entre la hiper-heurística y el conjunto de
heurísticas/metaheurísticas. En este marco, la hiper-heurística preguntaría cómo haría
cada algoritmo su trabajo, de tal forma que pueda decidir que algoritmo (o conjunto)
aplicar en cada momento.

8.4. Implementaciones avanzadas

En esta sección se describen algunas implementaciones que tienen relación di-


recta con las metaheurísticas debido a que aumentan la eficacia, la eficiencia o la
generalidad.
130 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
8.4.1. Análisis del espacio de búsqueda

Se puede considerar que un procedimiento de búsqueda, ya sea exacto, heurístico


o metaheurístico, es una estrategia que permite “navegar” sobre el perfil del espacio
de búsqueda (fitness landscape) [205] determinado por la función objetivo. El estu-
dio de este perfil, en algunos casos, puede ayudar a predecir el comportamiento del
procedimiento de búsqueda, permitiendo que su diseño sea mucho más elaborado.
Este estudio, por ejemplo, podría permitir seleccionar adecuadamente la estructura
de vecindad. También podría ayudar al diseño de nuevos operadores heurísticos. Para
un problema de optimización combinatoria, el perfil del espacio de búsqueda viene
determinado por las siguientes características [104]:

El conjunto de todas las soluciones posibles (espacio de búsqueda SS).


Una función objetivo que asigna a cada solución del espacio de búsqueda un
determinado valor.
Una estructura de vecindad que determina la distancia mínima entre dos solu-
ciones (topología).

La topología del perfil del espacio de búsqueda viene determinada por la estruc-
tura de vecindad que se utilice para explorarlo. A continuación, se muestran algunas
de las características que presenta dicho perfil, que en la mayoría de los problemas
tiene una gran influencia sobre el procedimiento de búsqueda:

Rugosidad: definida como la diferencia entre el valor de la función objetivo


para dos soluciones vecinas. Si existe una gran diferencia entre dos soluciones
próximas se dice que el espacio de búsqueda es rugoso.
Picos: cantidad de óptimos locales que aparecen en la hiper-superficie deter-
minada por la función objetivo.
Distribución: mide cómo se distribuyen los óptimos locales en el espacio de
búsqueda.
Topología: mide la forma de los cuencos de atracción de cada óptimo local.

Se han propuesto varios métodos para medir estas características. En [205] se


puede encontrar una descripción más detallada de estos métodos. En general, se ba-
san en medidas locales y globales, donde las medidas locales se basan en un análisis
de la autocorrelación, mientras que la estructura global se explora empleando medi-
das de la correlación. En [205][201][286][104] se pueden encontrar algunos ejemplos
exitosos de cómo aplicar el análisis del espacio de soluciones al diseño de procedi-
mientos de búsqueda local, estructuras de vecindad, operadores, etc.
I MPLEMENTACIONES AVANZADAS 131
8.4.2. Búsquedas multi-objetivo

La solución a un problema multi-objetivo o multi-criterio se caracteriza por ser


un vector cuyas componentes son funciones de optimización, que por lo general están
en conflicto entre sí. En [168][167][306] se puede encontrar una descripción mucho
más detallada. En la optimización multi-objetivo no existe un consenso universal de
qué significa óptimo [168]. En otras palabras, no se puede presentar una formulación
tan cerrada y acabada como la que tienen los problemas con un simple objetivo.
Realmente en la optimización multi-objetivo no se busca un óptimo, sino que lo que
se busca es una hiper-superficie conocida como superficie de Pareto [239] o superficie
de soluciones no dominadas. Las soluciones que pertenecen a esta hiper-superficie
se dice que son no dominadas. Es decir que ninguna solución factible comparada
con una solución en la superficie de Pareto puede mejorar un objetivo sin empeorar
simultáneamente otro objetivo.
Actualmente, la optimización multi-objetivo es una de las vertientes más activas
en el campo de las metaheurísticas, proponiéndose desarrollos de versiones de estos
algoritmos que puedan resolver este tipo de problemas. Las versiones multi-objetivo
de las metaheurísticas establecen algunos cambios conceptuales, sobre todo en la
definición de la función objetivo que se debe optimizar. Existen varias alternativas
para realizar esta tarea, entre las cuales se pueden destacar las siguientes:

Funciones de agregación.

Funciones no basadas en el concepto de Pareto.

Funciones basadas en el concepto de Pareto.

En [65] aparece una descripción detallada de estos tres enfoques, así como los
métodos que se encuadran en cada uno de ellos. Como en el caso de las metaheu-
rísticas con un único objetivo, existen dos alternativas para atacar los problemas de
optimización: a través de un enfoque trayectorial o a través de un enfoque poblacio-
nal. A continuación, se dan detalles de estos dos enfoques:

Metaheurísticas multi-objetivo trayectoriales: partiendo de una solución co-


nocida, el procedimiento intenta aproximarse a la frontera Pareto en una direc-
ción de búsqueda determinada. Este principio se repite para varias direcciones
diferentes, de tal forma que se pueda definir adecuadamente la frontera de so-
luciones no dominadas. La elección de la dirección puede estar predeterminada
de antemano, ser guiada o incluso aleatoria. Lógicamente, la eficiencia de este
enfoque es fuertemente dependiente de la elección de la dirección de búsqueda.
132 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
Metaheurísticas multi-objetivo poblacionales: partiendo de una población
de soluciones, el procedimiento intenta aproximarse a la frontera de soluciones
no dominadas. Este tipo de enfoque suele hacer una búsqueda más efectiva, ya
que ésta se hace de forma paralela. Además se pueden establecer mecanismos
de auto-adaptación (de la población) y de cooperación (entre los miembros de
la población).

En [95] se describen con detalle estos enfoques, así como las implementaciones
particulares de las metaheurísticas.

8.4.3. Implementaciones paralelas

El ámbito de aplicación de las metaheurísticas viene determinado por el conjun-


to de problemas, en general bastante difíciles de resolver, para los que un algoritmo
exacto no puede encontrar una solución en un tiempo razonable. De manera simi-
lar, los algoritmos heurísticos tampoco pueden encontrar soluciones de calidad. Las
metaheurísticas son procedimientos que se caracterizan por encontrar soluciones de
calidad en tiempos aceptables. Aún así, existen bastantes problemas en los que el
tiempo de cómputo empleado para su resolución sigue siendo muy elevado. Una al-
ternativa interesante para resolver este contratiempo consiste en la paralelización de
la metaheurística.
El objetivo fundamental de la computación paralela consiste en acelerar el tiem-
po de ejecución dividiendo la carga de trabajo entre varios procesadores. Desde un
punto de vista algorítmico, las estrategias de cálculo paralelo explotan el orden par-
cial que aparece en los algoritmos, donde se establece qué instrucciones se pueden
ejecutar concurrentemente sin modificar la solución obtenida. A la hora de intentar
paralelizar el algoritmo, existen dos posibilidades para sacar partido de este orden
parcial. La primera posibilidad consiste en realizar el paralelismo a nivel de datos (o
del dominio). En la segunda opción, el paralelismo se hace a nivel de instrucción (o
paralelismo funcional) [73].
Desde un punto de vista computacional, las metaheurísticas son algoritmos a los
cuales se les puede intentar extraer su paralelismo tanto a nivel de datos como a ni-
vel de instrucciones. El problema que presentan las metaheurísticas es que su orden
relativo es prácticamente secuencial. Por ejemplo, un procedimiento de búsqueda lo-
cal dentro de una metaheurística presenta una fuerte dependencia entre los datos de
iteración a iteración, ya que el procedimiento de búsqueda local es esencialmente
secuencial. Aún así, existen varias estrategias que permiten su paralelización. A con-
tinuación, se detallan algunas de estas estrategias [73]:
O PTIMIZACIÓN DINÁMICA 133
Tipo 1: el paralelismo se lleva a cabo dentro de una iteración y consiste en dis-
tribuir las distintas posibilidades de evaluar cada uno de los movimientos entre
los recursos que se tengan disponibles. Nótese que, en este caso, las soluciones
visitadas son las mismas que en la versión secuencial.

Tipo 2: establece una partición en el conjunto de las variables de decisión,


asignando a cada recurso una parte en la que se ha dividido el problema. En
este caso, cada recurso se ocupa de un subproblema, de forma que se reduce
sustancialmente el espacio de búsqueda. Nótese que aquí, las soluciones que
se visitan son distintas que en la versión secuencial.

Tipo 3: el paralelismo se obtiene por la exploración concurrente del espacio


de soluciones. Este tipo de enfoque es muy adecuado para las metaheurísticas
multi-arranque, donde cada iteración es independiente. En estas condiciones se
pueden conseguir niveles de paralelización muy elevados.

El enfoque presentado en esta sección es lo suficientemente general como para


poder aplicar prácticamente cualquier estrategia de paralelización a cualquier me-
taheurística. En [73][311][223][67][209][159][158][209][68][264] aparece descrip-
ciones mucho más detalladas, así como ejemplos concretos de mecanismos de para-
lelización para metaheurísticas concretas.

8.5. Optimización dinámica

En [257] se define un problema de optimización dinámica como aquél cuyos


datos y/o estructuras pueden cambiar durante el proceso de su resolución. Desde un
punto de vista formal, se puede definir un problema de optimización dinámica del
siguiente modo:

Definición 1 Un problema de optimización dinámico (Dynamic Optimization Pro-


blem - DOP) consiste en la optimización (minimización o maximización) de una
función objetivo f dependiente del tiempo y sujeta a una serie de restricciones. Es
decir: 
optimizar f (x,t)
DOP = (8.1)
su jeto a x ∈ F(t) ⊆ S, t ∈ T
donde:

t ∈ T representa la variable temporal.

S es el espacio de soluciones. En general S ⊆ Rn


134 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
f : S × T → R es una función de coste o función objetivo que asigna a cada
solución candidata (x ∈ S) un valor numérico ( f (x,t) ∈ R) en el instante t.
F(t) determina el conjunto de soluciones factibles x ∈ F(t) ⊆ S en el instante
t.

Los métodos de resolución de problemas dinámicos utilizan estrategias de adapta-


ción a los cambios producidos por las condiciones no estacionarias. En problemas di-
námicos, la clave del problema reside en cómo utilizar la información encontrada
durante la historia del proceso para obtener soluciones de alta calidad en instantes
posteriores, sin despreciar la información de los resultados parciales obtenidos desde
el inicio. Al contrario que en los problemas de optimización estacionarios, los diná-
micos suelen carecer de funciones de optimización bien definidas, referencias están-
dares (benchmarks) o criterios de comparación de soluciones [257][20][282][89]. Las
estrategias utilizadas más comúnmente han sido heurísticas específicas [257] y pro-
cedimientos manuales [282][22], aunque también se han propuesto soluciones me-
taheurísticas. De todas ellas destacan aquéllas que utilizan métodos constructivos
[257] y algoritmos genéticos [218][41]. Los métodos constructivos permiten ajus-
tar su solución a los cambios del entorno utilizando un proceso de descomposición
(deconstruction) y reconstrucción (reconstruction) de la solución encontrada en ins-
tantes previos [85]. Los algoritmos genéticos son muy flexibles y permiten ajustar la
diversidad de la población para adaptarla a los cambios en el entorno.
Cuando se intenta resolver un problema dinámico con metaheurísticas, existen
dos estrategias que se pueden tener en cuenta de forma inmediata [218]:

Restablecer el procedimiento de búsqueda desde cero: este enfoque puede ser


adecuado en los casos en que los cambios del sistema sean totalmente aleato-
rios y no se pueda establecer una relación entre instancias sucesivas.
Restablecer el procedimiento de búsqueda desde las mejores soluciones encon-
tradas: es aplicable si el cambio en el entorno es muy suave.

El primer enfoque procesa el problema derivado suponiendo que no está relacio-


nado con el anterior, de modo que se descarta información que puede ser útil para
reducir el tiempo de ejecución del algoritmo. Por otro lado, restablecer el cómputo a
partir de las mejores soluciones encontradas implica una pérdida de diversidad en el
conjunto de soluciones. En este sentido, las mejores soluciones encontradas en ins-
tantes anteriores, podrían estar cerca de óptimos locales en el instante siguiente y,
como consecuencia, el algoritmo podría quedar confinado en una región del espacio
de búsqueda alejada del óptimo global o de regiones de importancia.
Asumiendo que los cambios en el problema se producen suavemente, la locali-
zación de los conjuntos de buenas soluciones antes y después de los cambios deben
O PTIMIZACIÓN DINÁMICA 135
estar relacionadas entre sí. Por lo tanto, el proceso actual de búsqueda puede utilizar
el conocimiento adquirido previamente para realizar una búsqueda más eficiente. Sin
embargo, no es un problema trivial, encontrar un compromiso entre los dos enfoques
extremos presentados. De hecho, el diseño de algoritmos de optimización dinámica
asume frecuentemente que la diversidad es una propiedad deseable para conseguir
adaptabilidad. Sin embargo, un trabajo reciente [4] muestra que ésta es una versión
simplista del problema.
La mayor parte de la investigación en optimización está dedicada a problemas de
optimización estacionaria [39][41][257][89][282]. Sin embargo, una gran cantidad
de problemas de optimización reales y de un gran interés práctico son dinámicos, y
se necesitan métodos que permitan adaptar la solución continuamente a entornos en
constante cambio [257][283]. En esta sección se presentan algunas estrategias ela-
boradas por diferentes metaheurísticas poblacionales en la resolución de problemas
dinámicos de optimización.

8.5.1. Algoritmos evolutivos

El problema principal de los algoritmos evolutivos en sus implementaciones es-


tándares cuando se utilizan en problemas de optimización dinámica consiste en que,
para converger a una solución de calidad alta, necesitan perder diversidad con el obje-
tivo de intensificar la búsqueda sobre una región del espacio de estados. Esto conduce
a que EA pierda la capacidad para adaptarse a un cambio producido en el entorno
[41][39]. En el contexto de los problemas dinámicos con soluciones EA, el mante-
nimiento de la diversidad se ha considerado históricamente como un requisito indis-
pensable [218], ya que su pérdida reduce la capacidad de adaptación del algoritmo
a los cambios del sistema. Para solventar este problema, se han propuesto diferentes
enfoques en los últimos años, que se pueden agrupar en cuatro orientaciones diferen-
tes: incremento de la diversidad después de cambios, mantenimiento de la diversidad
a lo largo del tiempo, métodos basados en memoria y métodos multi-población.

Incremento de la diversidad después de cambios

La forma más simple de adaptarse es restableciendo la búsqueda desde el inicio.


Este enfoque ha sido utilizado por numerosos investigadores [141][178][247][256].
Si el cambio es completamente aleatorio, no existe ningún método mejor que éste.
Sin embargo, si el cambio es moderado, los óptimos en instantes sucesivos deben
estar relacionados. Un posible enfoque en estos casos es restablecer el procedimiento
de búsqueda desde las mejores soluciones encontradas o desde la población actual.
No obstante, se han propuesto otras estrategias más adecuadas.
136 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
La hipermutación (hypermutation) [75] mantiene la población después de un
cambio, pero incrementa la diversidad incrementando drásticamente la tasa de mu-
tación durante algunas generaciones. H. G. Cobb [64][63] propuso el método de Hi-
permutación Activada (Triggered Hypermutation) que permite incrementar la tasa de
mutación cuando disminuye el promedio temporal del rendimiento del algoritmo. En
el trabajo de F. Vavak [317], se propone una variante denominada Búsqueda Local
Variable (Variable Local Search - VLS), que incrementa la tasa de mutación gradual-
mente después de que se haya detectado un cambio en el sistema.
Cuando la dinámica del proceso de optimización afecta a la representación gené-
tica, no basta con sustituir simplemente los individuos antiguos por otros nuevos. Por
ejemplo, el hecho de que lleguen nuevas tareas en el problema de la Planificación de
Tareas (scheduling) debe reflejarse necesariamente en el genotipo.

Mantenimiento de la diversidad a lo largo del tiempo

J. J. Grefensette [140] propuso el método de los Immigrantes Aleatorios (Random


Immigrants) que reemplaza en cada iteración parte de la población por individuos
generados aleatoriamente. Este algoritmo únicamente afecta a parte de la población,
al contrario que los métodos basados en mutaciones intensas, de modo que introduce
diversidad sin interrumpir el curso actual del proceso de búsqueda.
N. Mori et al. [219] propusieron el Algoritmo Genético Termodinámico (Ther-
modynamical Genetic Algorithm - TDGA), en el que la selección se diseña de modo
que se mantiene explícitamente la diversidad de la población [221]. La idea del TD-
GA es controlar la diversidad utilizando una medida llamada “energía libre” (free
energy - F). Para un problema de minimización, esta energía se calcula del siguiente
modo
F = hEi − T H (8.2)
donde hEi se establece a partir del valor medio de la calidad (fitness) de la pobla-
ción y H es una medida de la diversidad de la población. La temperatura T , es un
parámetro del algoritmo que refleja el énfasis que se da a la diversidad (el problema
de su ajuste en problemas dinámicos se trata en [273]). Se preserva el mejor indivi-
duo de cada generación y, posteriormente, se emparejan n individuos para producir
el mismo número de hijos. Entonces, se aplica un operador de mutación tanto a los
padres como a los hijos. A partir del conjunto resultante de 2n + 1 individuos, se
selecciona la población para el siguiente instante. La selección se hace elemento a
elemento, de forma que el nuevo individuo se escoge para que se minimice la energía
F del conjunto. Más tarde, los mismos autores [220] propusieron una variante del
TDGA denominado Algoritmo Genético Termodinámico Retroalimentado (feedback
thermodynamical genetic algorithm - FTDGA), que realiza un control adaptativo de
la temperatura para regular el nivel de diversidad de la población.
O PTIMIZACIÓN DINÁMICA 137
W. Cedeno and V. R. Vemuri [53] utilizan un sistema de reemplazo llamado “el
peor entre los más parecidos” (worst among most similar), junto con un esquema
de selección que elige el segundo padre comparando su similitud con respecto al
primer padre. Los autores muestran que este enfoque permite mantener un conjunto
de soluciones diferentes que se adaptan a nuevos óptimos.
En [117] se sugiere la modificación de la función de calidad, teniendo en cuenta
la “edad” del individuo:

fmodi f icada = g( fantigua , edad) (8.3)

donde g se elige de forma que se favorezca a los individuos de mediana edad. Esta
estrategia consigue mantener la diversidad de la población.

Métodos basados en memoria

Un mecanismo de memoria permite a EA recordar buenas soluciones parciales


y desecharlas cuando sea necesario. Los enfoques basados en memoria son especial-
mente útiles en sistemas con cambios periódicos, en los que existen ocurrencias re-
petidas de un pequeño conjunto de situaciones. Además, las representaciones redun-
dantes pueden retrasar la convergencia y favorecer el mantenimiento de la diversidad.
El enfoque basado en memoria tiene dos variantes: (i) memoria implícita, utilizando
representaciones redundantes o (ii) memoria explícita, utilizando poblaciones inde-
pendientes.
El método más usual de memoria implícita está basado en poliploides1 (poly-
ploid) con un mecanismo de dominancia. Han sido propuestos varios trabajos basa-
dos en poliploides [135][292] [273][145].
Ryan [280] utiliza poliploidicidad, donde los genes que determinan un rasgo se
añaden para determinar el rasgo del fenotipo. El rasgo del fenotipo se convierte en
1 cuando se sobrepasa un determinado umbral b1 , 0 si el valor es menor que b2 y es
indeterminado en otro caso.
D. Dasgupta y D. R. McGregor [76] proponen representaciones redundantes más
sofisticadas utilizando una estructura multinivel para la representación. En este mé-
todo, cada nivel genético puede activar o desactivar los genes del nivel siguiente, de
modo que cada individuo tiene algunos genes activados y otros desactivados. De esta
forma, se obtiene una compleja estructura genética jerarquizada que permite almace-
nar información más redundante que en un enfoque diploide. El método está basado
en una teoría de evolución propuesta por K. Ohkura y K. Ueda [230].
1 Las células diploides son las que tienen un número doble de cromosomas que un gameto, es decir,

que poseen dos series de cromosomas. Las células poliploides son aquéllas que poseen tres o más
dotaciones cromosómicas.
138 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
Aunque las representaciones redundantes permiten a EA almacenar implícita-
mente información útil durante el proceso de búsqueda, no está claro que el algorit-
mo maneje esta memoria de un modo eficiente [41]. Como alternativa, existen otros
enfoques que utilizan memoria explícita, que almacena información específica y la
reintroducen en la población en generaciones posteriores.
Ramsey [256] introduce el razonamiento basado en casos en el esquema de EA.
Utiliza una base de conocimiento para memorizar individuos de calidad alta en una
memoria permanente. El sistema asume que las condiciones medioambientales se
pueden medir. A intervalos regulares, el mejor individuo se almacena en la base de
conocimiento y se indexa con datos que caracterizan las condiciones en cada instante.
Cuando se encuentra un nuevo medio ambiente, EA es reinicializado, de forma que
la mitad de los individuos se obtienen de la base de conocimiento de los que han sido
exitosos en entornos similares. Desafortunadamente, este enfoque sólo es aplicable
cuando las condiciones de entorno son medibles.
En el algoritmo TDGA [220][219] se considera una estrategia basada en memo-
ria, en cuanto que los mejores individuos se almacenan en la memoria y otros son
eliminados en función de su contribución a la diversidad de la memoria y su edad.
De un modo similar, Branke [40] compara diferentes estrategias de reemplazo para
insertar nuevos individuos en la memoria.

Métodos multi-población

Un problema general de las estrategias basadas en memoria consiste en que la


información almacenada, como la localización de los picos encontrados, se vuelve
obsoleta cuando ocurre un cambio en el entorno. Para atajar este problema, una po-
sibilidad consiste en mantener pequeñas sub-poblaciones en áreas prometedoras del
espacio de búsqueda, que pueden seguir los picos conforme éstos se mueven, actuan-
do como una especie de memoria auto-adaptativa. En [42] se propone un enfoque ba-
sado en Exploradores Auto-organizados (Self-Organizing Scouts). Cuando se detecta
un nuevo pico prometedor, una pequeña sub-población de exploradores se asigna ex-
clusivamente al área alrededor del pico, de modo que el espacio de búsqueda se divi-
de explícitamente en sub-regiones, como ocurre en el Algoritmo Genético Bifurcado
(Forking Genetic Algorithms) propuesto en [313]. Los exploradores se redistribuyen
constantemente sobre las áreas más prometedoras, mientras que una población de
base, mayor que ésta, mantiene una búsqueda de nuevos picos.
Una idea similar se explota por los Algoritmos Genéticos Multinacionales (Mul-
tinational Genetic Algorithms) [314], excepto por que las sub-poblaciones se forman
basadas en el “procedimiento de detección del valle de la colina” (hill valley detection
procedure). En este método, se explora sistemáticamente el fitness del paisaje entre
O PTIMIZACIÓN DINÁMICA 139
los mejores individuos de dos sub-poblaciones, para determinar si están separados
por un valle y, por tanto, forman poblaciones independientes.

8.5.2. Optimización por colonias de hormigas

Las hormigas naturales son agentes adaptativos que deben conseguir comida en
un entorno no estacionario y llevarla de vuelta al hormiguero. Las fuentes de comi-
da cambian constantemente, aparecen y desaparecen obstáculos que abren y cierran
rutas. Por lo tanto, las hormigas tienen una naturaleza dinámica [71].
ACO se ha aplicado a diversos problemas de optimización dinámicos, sobre todo
en problemas de telecomunicaciones [84]. Schoonderwoerd et al. [289] utilizan ACO
para minimizar el número de llamadas perdidas en una red de telecomunicaciones.
En su solución, las hormigas operan independientemente de las llamadas y viajan
entre un origen y un destino aleatorio, basándose en: (i) un depósito de feromona, (ii)
la distancia y (iii) la congestión en los nodos. Se escoge siempre el enlace con mayor
depósito de feromona. Este enfoque fue comparado con buenos resultados con los
métodos existentes en la prestigiosa empresa de telecomunicaciones British Telecom.
En el ámbito de la logística, ACO se ha aplicado al control de los movimientos
de aviones en aeropuertos. Por ejemplo, en la minimización de la diferencia entre el
“tiempo preferido de aterrizaje” (el que resulta más económico para el avión) y el
“tiempo real de aterrizaje” para cada avión, sujeto a las restricciones de separación,
debidas a las turbulencias producidas por los aviones al aterrizar. En el trabajo de
Beasley et al. [20] inspirado en la versión estática [21], se aplica la mejor planifica-
ción encontrada en instantes anteriores a la situación actual, con diferentes grupos de
aviones. El sistema de control de tráfico aéreo de Davis et al. [77] es un conjunto de
heurísticas particularizadas al aeropuerto Dallas/Fort Worth. El objetivo es minimi-
zar el tiempo entre aterrizajes de aviones respetando los estándares de seguridad. Ha
alcanzado un éxito moderado cuando trata con cambios en las condiciones atmosfé-
ricas de tiempo y/o periodos de máxima actividad.
También se ha aplicado ACO al Problema del Enrutamiento de Vehículos, en-
tendido como un problema dinámico en el que los pedidos de los clientes pueden
cambiar durante el reparto de mercancías. Por lo tanto, las rutas existentes cambian
continuamente para satisfacer los nuevos requisitos de los clientes. En el trabajo de
Kilby et al [179] se parte de una planificación construida a partir de requisitos cono-
cidos. Posteriormente, se utilizan operaciones de búsqueda local, de intercambio y de
cruce para construir la planificación inicial y los ajustes siguientes. Zhu y Ong [335]
tratan cada vehículo como un agente independiente y desarrollan una heurística para
gobernar la interacción entre los agentes y responder a nuevos requisitos.
140 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
Alguno de los problemas más comunes en manufacturado industrial son los de
planificación de tareas y secuenciación de procesos. En este tipo de problemas, cada
máquina realiza un trabajo y cada uno tiene unos requisitos de tiempo. En este con-
texto, el objetivo es encontrar una planificación de la secuenciación de los procesos,
de modo que se minimice el tiempo total de procesamiento. Existen varios trabajos
que resuelven estos problemas con ACO como los de Colorni et al. [69], Cicirello y
Smith [62] y Aydin y Öztemel [11].
Randall [257] propone una metodología para adaptar ACO a problemas dinámi-
cos, basándose en el siguiente conjunto de reglas generales:
1. Permitir que la metaheurística resuelva el problema mientras no se produzcan
cambios en el entorno que alteren su definición o sus datos. Las soluciones
mejoradas se envían al entorno de producción. Por ejemplo, la torre de control
es el entorno de producción en un aeropuerto.
2. Suspender la etapa anterior cuando se produzcan un determinado número de
perturbaciones lo suficientemente grandes. Estas decisiones son muy específi-
cas del problema que se está resolviendo.
3. Utilizar un proceso de “descomposición” de soluciones para determinar qué
componentes de una solución necesitan ser descartados para que se satisfaga
la factibilidad de la nueva instancia del problema y adaptar la solución a las
nuevas características de problema. El proceso ACO se restablece partiendo
de esta solución parcial. La mejor forma de proceder es calcular la solución
parcial a partir de la mejor solución actual y copiarla al resto de las hormigas
de la colonia. De esta forma se ahorran recursos computacionales y se evita
que las hormigas completen sus soluciones de manera asíncrona.
4. Volver a la etapa 1.
Es crítico que tercera etapa sea muy eficiente, de forma que el algoritmo no tenga
que detenerse mientras se ejecuta el proceso de deconstrucción y se evalúa el nuevo
conjunto de soluciones. La ventaja fundamental que se obtiene de esta estrategia
consiste en que el sistema no tiene que detenerse y restablecer el cómputo desde
el inicio. En [20] se justifica que la mejor solución actual al problema es un buen
punto de partida para la iteración actual. Para un análisis detallado del proceso de
descomposición puede consultarse el trabajo de Randall [257].

8.5.3. Algoritmos culturales

CA posee componentes auto-adaptativos que le convierten en un modelo adecua-


do para optimizar en entornos dinámicos [283]. Mediante el uso del conocimiento
del espacio de creencias, pueden adaptarse a las nuevas condiciones [283]. Los méto-
dos que utilizan técnicas de mutación auto-adaptativa se han mostrado más exitosas
O PTIMIZACIÓN DINÁMICA 141
que aquéllas que no las utilizan [5]. EA posee mecanismos de auto-adaptación en el
nivel de individuo, mientras que CA también permite la auto-adaptación, pero de la
población en su conjunto.
Stemberg [297] utilizó CA en entornos dinámicos para estudiar la adaptación de
un sistema experto de detección de fraude basado en reglas. Su objetivo principal es
caracterizar los atributos de una reclamación fraudulenta, de una no fraudulenta y
determinar falsos positivos y falsos negativos.
En el trabajo de S. Saleem y R. Reynolds [283] se considera la aplicación de
CA a problemas dinámicos en un sentido más amplio. Para ello, diseñan una fun-
ción de influencia dinámica que introduce diversidad en la población dependiendo
de la magnitud del cambio en el entorno dinámico. El marco de trabajo de CA se
puede utilizar para enriquecer alguna técnica de las discutidas en la sección 8.5.1 o
combinar las ventajas de varias técnicas para adaptarse a los cambios. En este traba-
jo se incorporan ideas como el “incremento de la diversidad después de cambios” o
la“incorporación de memoria” en el contexto de CA. Para el aumento de la diversidad
se utiliza el método hipermutación (hypermutation) propuesto por Cobb [63].
En el trabajo de B. Peng y R. Reynolds [245] se proponen diferentes funciones
de influencia para guiar a la población, una por cada estructura de conocimiento.
Se escoge un EA para el modelado de la población. La utilidad de las funciones
de influencia depende del comportamiento dinámico del sistema y del conocimiento
necesario para seguir este comportamiento. Para comportamientos dinámicos muy
complejos, el sistema podría necesitar más de un tipo de conocimiento y más de
una función de influencia. Se consideran cinco fuentes de conocimiento [245]: de
normas, de situaciones, de dominio, histórico y topográfico. Cada una de ellas tiene
una probabilidad de influir en el cambio de un individuo, basándose en la capacidad
para generar buenos individuos en instantes anteriores.

8.5.4. Inteligencia de enjambre

Los algoritmos PSO parecen ser apropiados para resolver problemas dinámicos
[241]. Las estrategias para adaptar PSO a los problemas dinámicos se pueden agrupar
en dos enfoques:

Recalcular el valor del fitness actual a partir del mejor vector de cada partícula
del enjambre cuando se detecta un cambio. Si es menor que el valor actual de
la partícula, se reemplaza por ésta. La motivación para este enfoque reside en
que en entornos dinámicos, el óptimo cambia de posición, por lo que es mejor
para las partículas olvidar las experiencias pasadas. Sin embargo, en lugar de
reemplazar todos los vectores − →x me jor por sus actuales posiciones, primero se
evalúa para saber si la experiencia sigue siendo válida. De este modo, las par-
142 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
tículas se ven parcialmente beneficiadas por la memoria. El trabajo de Carlisle
y Dozier [50] está inspirado en esta estrategia.

Realeatorizar una porción del enjambre. De esta forma, se consigue evitar que
el enjambre se quede atascado en una región reducida del espacio de estados.
Además, una porción de la población se reserva para seguir la misma historia
de búsqueda si el cambio producido es muy pequeño. Los trabajos de Eberhart
y Shi [93] y de Hu y Eberhart [164] se basan en este enfoque.

Eberhart y Shi [93] investigaron el uso de PSO en el seguimiento del pico de una
función cuya posición espacial cambiaba. No consideraron cambios en el tamaño y la
forma del pico. Los autores consideraron que era suficiente con adaptarse a un cambio
periódico ocurrido cada cien generaciones. Utilizaron un PSO estándar, consiguiendo
unos errores varios órdenes de magnitud menores que con GA.
Para adaptar PSO a sistemas dinámicos, Hu y Eberhart [164] sugirieron monito-
rizar el entorno para detectar cambios y actualizar las posiciones mejor y actual de
las partículas. De nuevo, consideraron el seguimiento de un solo pico. En esta misma
línea, Carlisle [50] introduce una modificación de PSO, denominada Optimización
Adaptativa por Inteligencia de Enjambre (Adaptive Particle Swarm Optimizer - AP-
SO) en la que se utiliza un punto fijo en el espacio de soluciones, llamado “centinela”,
para detectar cambios en el entorno. Después de cada iteración, el centinela evalúa su
nuevo fitness y lo compara con la evaluación previa. Como el punto es estacionario, si
su valor cambia, significa que el entorno ha cambiado, y el centinela alerta al enjam-
bre para que actualice su memoria de localización de las mejores soluciones. Cuando
se detecta un cambio en el entorno, cada partícula reemplaza su mejor localización
por su posición actual.
En [51] se refina APSO en varios aspectos importantes. En primer lugar, se re-
emplaza el centinela fijo con una o varias partículas aleatorias. Un centinela fijo sólo
detecta un cambio si éste afecta a la región donde está. En algunos entornos dinámi-
cos sólo se producen cambios locales, que pueden no ser detectados por un centinela
estacionario [140]. Utilizando una selección aleatoria entre varios centinelas se consi-
gue controlar toda la región del espacio de estados que alcanza el enjambre. Además,
si se necesita incrementar la probabilidad de detectar cambios en el sistema, se puede
elegir más de un centinela cada vez. Por otro lado, en lugar de sustituir el mejor valor
de cada partícula por su posición actual, es más ventajoso calcular, en primer lugar,
el fitness de la mejor solución para adaptarla al cambio del entorno y, posteriormen-
te, sustituirla por la posición actual sólo en el caso en que ésta tenga mejor fitness.
Con estas modificaciones se aprovecha la información de la historia del proceso que
continúa siendo útil.
O PTIMIZACIÓN DINÁMICA 143
8.5.5. Filtro de partículas metaheurístico

En [236][233] se propone una nueva metodología para el desarrollo de algoritmos


de optimización dinámica, denominada filtro de partículas metaheurístico (Metaheu-
ristic Particle Filter - MPF). Este método no es un metaheurística, sino un proce-
dimiento de construcción de algoritmos que hibridan metaheurísticas y algoritmos
aproximados de estimación secuencial, denominados filtros de partículas [138]. Se
puede consultar [9][52][191][88] para una visión en profundidad de estos métodos.
MPF parte de la siguiente hipótesis de trabajo:
“la combinación de estrategias de adaptación, predicción y optimización incre-
menta la eficiencia de la búsqueda de soluciones de alta calidad para problemas de
optimización dinámica”.
El problema fundamental que se plantea en optimización dinámica se puede re-
sumir en dos preguntas: ¿qué información de la historia del proceso es útil y se debe
tener en cuenta en instantes sucesivos? y ¿cómo se transfiere esta información entre
instantes sucesivos durante el proceso dinámico?. Puesto que existen algoritmos es-
pecializados en optimización y métodos orientados a la predicción en entornos diná-
micos, parece razonable abordar estos problemas utilizando características de ambas
metodologías. Las metaheurísticas son algoritmos aproximados que se han aplicado
con éxito a problemas de optimización. Sin embargo, por regla general, este tipo de
métodos no consideran la posibilidad de que la definición del problema cambie, y
por lo tanto, no están concebidas para adaptarse a la dinámica de un sistema. Por otro
lado, los filtros de partículas son métodos especializados en la resolución de proble-
mas dinámicos desde un punto de vista bayesiano. Desafortunadamente, los filtros
de partículas carecen de estrategias de optimización. El objetivo de MPF es explicar
cómo pueden hibridarse estos dos tipos de métodos para construir algoritmos de opti-
mización dinámica que utilicen las estrategias de optimización de las metaheurísticas
y las de predicción y adaptación de los filtros de partículas. de modo que MPF pue-
de definirse como una “metodología para la hibridación de métodos de estimación
secuencial y metaheurísticas poblacionales para su aplicación en la resolución de
problemas de optimización dinámica” [233].
Como ejemplos de aplicación de la metodología propuesta se han construido al-
goritmos como el filtro de partículas con búsqueda dispersa (Scatter Search Particle
Filter - SSPF) [234], filtro de partículas con reencadenamiento de trayectorias (Path
Relinking Particle Filter - PRPF) [237] o el filtro de partículas con búsqueda lo-
cal (Local Search Particle Filter - LSPF) [235]. Los algoritmos desarrollados se han
aplicado de manera efectiva a tres problemas de optimización dinámica: (i) al segui-
miento de objetos articulados en secuencias de imágenes 2D [237], (ii) al seguimiento
de uno o varios objetos en secuencias de imágenes 2D para su aplicación a las Inter-
faces de Usuario basadas en Visión Artificial [235] y (iii) al Problema Dinámico del
144 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
Viajante de Comercio [234]. En todos ellos, los algoritmos MPF han mostrado expe-
rimentalmente un comportamiento más eficiente y han obtenido soluciones de mejor
calidad que los algoritmos de estimación secuencial y metaheurísticas utilizadas in-
dependientemente.
Capítulo 9

Búsqueda dispersa aplicada al


MDP

9.1. Introducción

El problema de la máxima diversidad (MDP) consiste en seleccionar un conjunto


de elementos de una colección más grande de tal forma que los elementos selecciona-
dos tengan las características más variadas entre sí [184]. Un ejemplo de aplicación
de este problema aparece en la preservación de la biodiversidad. En este ámbito, se
dispone de un número limitado de recursos para salvar únicamente a un número de-
terminado de especies. En este escenario es más adecuado salvar a aquellas especies
que muestren el conjunto más variado de características.
Desde un punto de vista computacional, el MDP es un problema intratable, es
decir, no se conoce un algoritmo que garantice que se puede obtener una solución (y
se verifique que sea óptima) en una cantidad de tiempo de ejecución razonable. Por
este motivo, se hace necesario crear un algoritmo aproximado que lo resuelva. Desde
un punto de vista matemático, y siendo di j la distancia entre los elementos i y j, MDP
se puede formular como el siguiente problema cuadrático binario:
 n−1 n
max : ∑ ∑ di j xi x j





 i=1 j=i+1


MDP = s.a., (9.1)
n





 xi = m

 i=1
xi = {0, 1} | 1 ≤ i ≤ n

145
146 B ÚSQUEDA DISPERSA APLICADA AL MDP
En [184] se usa esta formulación para mostrar que el problema del clique (que
es NP − completo) es reducible al MDP. Como se indica en [184], el problema de la
máxima diversidad se presenta en una amplia variedad de problemas reales. Actual-
mente, muchas universidades de los Estados Unidos, cuando determinan las políticas
de admisión, van más allá de seleccionar mediante la nota académica y también con-
sideran otros factores en la búsqueda de un conjunto diverso de estudiantes. En la
planificación de mercado, frecuentemente es deseable maximizar el número y diver-
sidad de fuerzas en un perfil de marcas. Otros contextos en los que el problema de la
máxima diversidad se puede aplicar incluyen el cultivo de plantas, problemas socia-
les, preservación ecológica, diseño de productos, gestión de la mano de obra, diseño
de curriculum y en la gestión de recursos genéticos. La maximización de la diversidad
también es un aspecto importante en las siguientes áreas: experimentación química,
diseño experimental, investigación médica, exploración geológica, selección de car-
teras de inversión e ingeniería estructural.

No Sexo Raza Región Educación Clase Político


1 Mujer Blanco Oeste Mod. Superior Media Derechas
2 Hombre Blanco Este Universidad Media No partidista
3 Hombre Negro Oeste Instituto Media-Baja Izquierdas
4 Mujer Negro Centro Est. Básicos Media-Baja Derechas
5 Mujer Blanco Centro Universidad Alta No partidista
6 Hombre Negro Este Universidad Media No partidista
7 Hombre Blanco Oeste Mod. Superior Alta Izquierdas
8 Hombre Blanco Centro Instituto Baja Derechas
9 Hombre Blanco Este Mod. Superior Media Izquierdas
10 Mujer Negro Este Universidad Alta Derechas

Tabla 9.1: Habitantes caracterizados.

9.2. Ejemplo detallado

Para ilustrar el problema de la máxima diversidad, se va a mostrar un ejemplo


completo basado en [184]. Consideremos los habitantes de una cuidad caracterizados
por su sexo, raza, educación, etc., que aparecen en la Tabla 9.1. Para un encuestador
que sólo puede hacer un número determinado de encuestas, le es útil elegir a aque-
llos habitantes con las características más variadas entre sí. El problema planteado se
puede modelar como una instancia del MDP. El primer paso consiste en definir una
distancia entre cada par de habitantes. Para ello elegimos la codificación numérica
para cada característica tal como aparece en la Tabla 9.2.
E JEMPLO DETALLADO 147
Característica Valor 1 Valor 2 Valor 3 Valor 4
Sexo Hombre Mujer
Raza Blanco Negro
Región Este Centro Oeste
Educación Est. Básicos Instituto Mod. Superior Universidad
Clase Baja Media-Baja Media Alta
Político Izquierdas No partidista Derechas

Tabla 9.2: Codificación de características.

Aplicando esa codificación, los habitantes quedan definidos como vectores en un


espacio de siete dimensiones (una dimensión K por característica) como aparecen
en la Tabla 9.3. Si definimos sik como el valor de la dimensión k del elemento i,
y consideramos que lo distintos que son dos habitantes entre sí se corresponde con
la distancia euclídea de los vectores que los representan, definimos la distancia di j
como:

K
( ∑ (sik − s jk )2 )
p
di j = (9.2)
k=1

No Sexo Raza Región Educación Clase Político


1 2 1 3 3 3 3
2 1 1 1 4 3 2
3 1 2 3 2 2 1
4 2 2 2 1 2 3
5 2 1 2 4 4 2
6 1 2 1 4 3 2
7 1 1 3 3 4 1
8 1 1 2 2 1 3
9 1 1 1 3 3 1
10 2 2 1 4 4 3

Tabla 9.3: Representación de los habitantes como vectores en un espacio de 7 dimen-


siones
Por tanto, podemos calcular una matriz de distancias en la que aparezca la distan-
cia entre cada par de habitantes. Esta matriz aparece en la Tabla 4. Para este ejemplo
concreto vamos a seleccionar los 3 habitantes más variados; es decir, tenemos que
modelar el problema como un MDP con n = 10 y m = 3 y con la matriz de distancias
de la Tabla 9.4. El MDP consiste en elegir 3 habitantes de forma que la suma de las
distancias entre sí sea máxima. En este ejemplo, los 3 habitantes más diversos son el
6, 7 y 9 con el valor máximo para la suma de sus distancias, que es de 11,19.
148 B ÚSQUEDA DISPERSA APLICADA AL MDP
2 3 4 5 6 7 8 9 10
1 2,65 2,83 2,65 2 2,83 2,45 2,65 3 2,65
2 3,32 3,74 1,73 1 2,65 3,16 1,41 2
3 2,65 3,46 3,16 2,45 2,65 2,65 4,12
4 3,87 3,61 3,87 2 3,46 3,74
5 2 2 3,87 2,24 1,73
6 2,83 3,32 1,73 1,73
7 3,87 2,24 3,32
8 3,16 4
9 2,83

Tabla 9.4: Matriz de distancias de los habitantes

9.3. Aplicación de la búsqueda dispersa

Para aplicar un framework metaheurístico como la búsqueda dispersa a un proble-


ma concreto es necesario diseñar algunas partes del framework de forma específica
para él. En concreto, para el caso de la búsqueda dispersa, es necesario definir una
distancia entre soluciones, de forma que pueda ser usada cuando se seleccionan las
soluciones por diversidad. Además, se deben diseñar los métodos de generación de
soluciones diversas, generación de subconjuntos, combinación de soluciones y méto-
do de mejora.
Para determinar los métodos más adecuados se han implementado tres variantes
de la búsqueda dispersa para el MDP. Las diferencias entre estas variantes se basan
en los métodos usados para construir las soluciones diversas, combinar soluciones y
mejorarlas. En la Tabla 9.5 se indican los métodos usados en cada una de las configu-
raciones. El procedimiento denominado “Sin información” no utiliza ninguna infor-
mación específica del problema. El procedimiento denominado “Con información”
implementa varias estrategias específicas del MDP. El procedimiento “Con memo-
ria” usa, además de información sobre el problema, estructuras de memoria que son
típicas en las implementaciones de tabu search [127].
Con diversos experimentos preliminares, se ha decido usar un Re f Set de tamaño
12 y el porcentaje de soluciones del mismo que se incorporan por calidad es del 30 %.
En las siguientes subsecciones se define la distancia entre las soluciones y cada
uno de los métodos usados en cada una de las variantes. Además, en la última subsec-
ción se menciona una mejora realizada al esquema general de la búsqueda dispersa.
A PLICACIÓN DE LA BÚSQUEDA DISPERSA 149
Configu- Generación de So- Combinación Mejora
ración luciones
Sin Selección aleatoria Selección aleatoria de m Búsqueda Local (Local
informa- de m elementos de elementos de la unión de los Search, LS) de tipo “best
ción todos los n elemen- elementos de las soluciones improvement”
tos del problema que son combinadas
Con GRASP_D-2, basa- Aplicación de D-2 a la Búsqueda Local Mejora-
informa- do en la aleatoriza- unión de los elementos de da (Improved Local Sear-
ción ción de la heurística las soluciones que son com- ch, I_LS) de tipo “first im-
destructiva D-2 binadas provement”
Con me- Tabu_D-2, basado Aplicación de Tabú_D-2 a Búsqueda Local Búsque-
moria en la incorporación la unión de los elementos de da Tabú (Local Search Ta-
de estructuras de las soluciones que son com- bu Search, LS_TS) con
memoria a D-2 binadas memoria a corto plazo

Tabla 9.5: Variantes de la búsqueda dispersa

9.3.1. Distancia entre soluciones

La distancia se usa para medir cómo de diversa es una solución con respecto a
un conjunto de soluciones. Concretamente, para el MDP, se define xyi como el valor
de la i-ésima variable de la solución de referencia r ∈ Re f Set. También se define xti
como el valor de la i-ésima variable de la solución candidata t. La distancia entre
una solución candidata t y las soluciones en el Re f Set en la implementación de la
búsqueda dispersa que se propone, se define como:

b
distancia(t, Re f Set) = cmax − ∑ ∑ y
xi (9.3)
y=1 i:xti =1

La fórmula simplemente cuenta el número de veces que cada elemento seleccio-


nado en la solución candidata t aparece en cualquiera de las soluciones del Re f Set y
resta este valor de la cuenta cmax más grande. La máxima distancia ocurre cuando nin-
gún elemento que es seleccionado en la solución candidata t aparece en cualquiera de
las soluciones de referencia. Cuando se eligen soluciones para reconstruir el conjunto
de referencia, seleccionamos la solución candidata que tiene la máxima distancia a
las soluciones del Re f Set. Desde que las soluciones son incorporadas una cada vez,
el cálculo de las distancias tiene que ser actualizado antes de que la siguiente solución
sea seleccionada.
150 B ÚSQUEDA DISPERSA APLICADA AL MDP
9.3.2. Métodos de generación de soluciones diversas

En esta sección se describen los métodos usados en las diferentes configuraciones


para la generación de soluciones diversas.

Selección aleatoria

Este método consiste en seleccionar m elementos del total de n elementos del pro-
blema. La selección aleatoria no utiliza ninguna información del MDP, por ejemplo,
no usa la función objetivo para guiar el proceso constructivo. La única información
usada es el número m de elementos necesaria para construir una solución factible.

GRASP_D-2

El procedimiento GRASP_D-2 desarrollado por Duarte y Martí [90], está basado


en la aleatorización de la heurística destructiva desarrollada por Glover, Kuo y Dhir
[126]. D-2 comienza con una solución no factible para la que xi = 1 ∀ i. Es decir,
todos los n elementos están seleccionados inicialmente. Para reducir el conjunto de
elementos seleccionados hasta m, el procedimiento realiza m − n pasos. En cada paso,
el procedimiento deselecciona el elemento i∗ (es decir, xi = 0), donde i∗ es tal que:

D(i∗ ) = mini:xi =1 (D(i))


(9.4)
con D(i) = ∑ j di j xi x j

La aleatorización de D-2 que se emplea en GRASP_D-2 consiste en seleccionar


i∗ de una lista de candidatos reducida (Reduced Candidate List, RCL) formada por
todos aquellos elementos i tales que D(i) ≤ (1 − α)D(i∗ ) . El valor de α se establece
a 0.5 inicialmente y se decrementa en 0.1 después de que un tiempo de ejecución
predefinido se haya consumido sin obtener una solución de mejor calidad que las
anteriores. En nuestro caso, se ha establecido este valor al 20 % del tiempo de CPU
total de experimentación.

Tabu_D-2

El método Tabu_D-2 fue presentado en [90]. Se basa en la incorporación de es-


tructuras de memoria al método D-2. En cada paso del procedimiento, el elemento i∗
que se deselecciona es aquel que cumple:

D(i∗ ) = mini:xi =1 (D(i) − f recPond − qualPond) (9.5)


A PLICACIÓN DE LA BÚSQUEDA DISPERSA 151
donde  
f (i)
f recPond = β(range)
fmax
 
q(i)
qualPond = δ(range) ,y
qmax

range = maxi:xi =1 (D(i)) − mini:xi =1 (D(i))

En este cálculo modificado de la distancia, f (i) indica la frecuencia en la que el


elemento i ha aparecido en soluciones previas y q(i) es la calidad media (medida por
la función objetivo) de las soluciones previas que incluían al elemento i. Tanto fmax
como qmax son los máximos valores de f y q de todos los elementos. Los factores
de ponderación β y δ son respectivamente establecidos a 0.1 y 0.0001 en nuestros
experimentos.

9.3.3. Método de generación de subconjuntos

Se ha considerado el método más sencillo para la generación de subconjuntos.


Este método consiste en generar un subconjunto por cada pareja distinta de las solu-
ciones a combinar.

9.3.4. Métodos de combinación

En esta sección se describen los métodos utilizados para la combinación de solu-


ciones en cada una de las variantes de la búsqueda dispersa presentadas. Para ilustrar
los diferentes métodos se usará el ejemplo detallado presentado en la sección de
introducción al MDP. Supongamos que durante la ejecución del algoritmo dos so-
luciones de referencia, r1 y r2 tienen que ser combinadas. Para facilitar la notación,
presentamos cada solución como el conjunto de nodos seleccionados: r1 = {1, 4, 6}
y r2 = {1, 5, 10}. Los valores de la función objetivo asociados con estas soluciones
son 9.09 (2.65 + 2.38 + 3.61) y 6.38 (2 + 2.65 + 1.73), respectivamente.

Selección aleatoria

Este método consiste en seleccionar m elementos de la unión de los elementos


en ambas soluciones de referencia. En nuestro ejemplo, la unión de los elementos es
U = {1, 4, 5, 6, 10}. La selección aleatoria consiste en seleccionar 3 elementos de U .
Por ejemplo, la nueva solución candidata puede ser t = {1, 4, 10} cuyo valor de la
función objetivo es 9.04 (2.65 + 2.65 + 3.74).
152 B ÚSQUEDA DISPERSA APLICADA AL MDP
Selección D-2

Este método consiste en la aplicación de la heurística destructiva D-2 a la unión


de los elementos de las soluciones que son combinadas. El método comienza con la
selección de todos los elementos en la unión y deseleccionada un elemento cada vez
hasta que solo quedan m elementos seleccionados. El elemento i que es deselecciona-
do a cada paso es aquel que tiene el valor D(i) mínimo. En nuestro ejemplo, la unión
consiste de 5 elementos y por tanto el método realiza dos pasos únicamente. En el
primer paso, los valores D son:
D(1) = d(1, 4) + d(1, 5) + d(1, 6) + d(1, 10) = 2,65 + 2 + 2,83 + 2,65 = 10,13
D(4) = d(4, 1) + d(4, 5) + d(4, 6) + d(4, 10) = 2,65 + 3,87 + 3,61 + 3,74 = 13,87
D(5) = d(5, 1) + d(5, 4) + d(5, 6) + d(5, 10) = 2 + 3,87 + 2 + 1,73 = 13,22
D(6) = d(6, 1) + d(6, 4) + d(6, 5) + d(6, 10) = 2,83 + 3,61 + 2 + 1,73 = 10,17
D(10) = d(10, 1) + d(10, 4) + d(10, 5) + d(10, 6) = 2,65 + 3,74 + 1,73 + 1,73 =
9,85
El valor mínimo D corresponde al elemento 10 y por tanto este elemento es de-
seleccionado. La unión actualizada es U = {1, 4, 5, 6}. Para el siguiente paso, los
valores de D correspondientes son 7.48, 10.13, 7.87 y 8.44. Por tanto, el elemento 1
es deseleccionado y la solución candidata que resulta de la aplicación de este método
de combinación es t = {4, 5, 6} con un valor de la función objetivo igual a 9.48.

Selección Tabu_D-2

Consiste en aplicar el procedimiento Tabu_D-2 a la unión de los elementos de las


soluciones de referencia que tienen que ser combinadas. Este método utiliza infor-
mación sobre las soluciones generadas en el pasado así como información asociada
con esas soluciones combinadas. Para ilustrar el funcionamiento del procedimiento
se presenta una combinación basada en el ejemplo de la sección 9.2. Para ello, asu-
mimos que después de un número de iteraciones, la información de la Tabla 9.6 está
disponible.
Usamos la Tabla 6 para calcular los valores D modificados tal y como se describe
anteriormente para el método Tabu_D-2.
D(1) = 10,13 − (0,02)(13) + (0,000043)(7,73) = 9,87
D(4) = 13,87 − (0,02)(8) + (0,000043)(9,37) = 13,71
D(5) = 13,22 − (0,02)(45) + (0,000043)(6,64) = 12,32
D(6) = 10,17 − (0,02)(17) + (0,000043)(7,71) = 9,83
A PLICACIÓN DE LA BÚSQUEDA DISPERSA 153
Elemento Frecuencia Calidad
1 13 7.73
2 19 7.25
3 17 8.69
4 8 9.37
5 45 6.64
6 17 7.71
7 16 8.42
8 16 9.09
9 19 7.44
10 13 8.50

Tabla 9.6: Información sobre soluciones anteriores

D(10) = 9,85 − (0,02)(13) + (0,000043)(8,50) = 9,59


El mínimo valor D corresponde al elemento 10 y por tanto, este elemento es
deseleccionado. La unión actualizada es U = {1, 4, 5, 6}. Para el siguiente paso, los
valores correspondientes son 7.30, 10, 7.24 y 8.20. Por tanto, el elemento 5 es de-
seleccionado y la solución candidata que resulta de la aplicación de este método de
combinación es t = {1, 4, 6} con un valor de la función objetivo igual a 9.09.

9.3.5. Métodos de mejora

En esta sección se describen los métodos utilizados para la mejora de soluciones


en cada una de las variantes de la búsqueda dispersa presentadas.

Búsqueda Local (LS)

El método de búsqueda local (Local Search, LS) [118] recorre el conjunto de


elementos seleccionados buscando el mejor intercambio para reemplazar un elemen-
to seleccionado con un elemento no seleccionado. El método realiza movimientos
siempre que el valor de la función objetivo aumente. Finaliza su ejecución cuando no
se encuentra ningún intercambio de elementos que mejore. Este método de mejora
se clasifica en los métodos que aplican el movimiento que más mejora, es decir, el
mejor movimiento (best improvement).

Búsqueda Local Mejorada (I_LS)

El método de la búsqueda local mejorada (Improved Local Search, I_LS) [90]


selecciona el elemento i∗ (xi∗ = 1) que proporciona la menor contribución al valor de
154 B ÚSQUEDA DISPERSA APLICADA AL MDP
la función objetivo de la actual solución. A continuación, busca un elemento j (x j =
0) para ser intercambiado con i∗ . El primer elemento j que resulte en un movimiento
de mejora se selecciona y el intercambio se realiza sin examinar el resto de elementos
sin seleccionar. Si no se encuentra ningún movimiento de mejora que intercambie j
por i∗ , se examina el elemento con la siguiente menor contribución. Este proceso
continúa hasta que no se encuentre ningún movimiento de mejora.

Búsqueda Local Búsqueda Tabú (LS_TS)

El método de mejora empleado en la configuración Búsqueda Tabú Híbrida se ba-


sa en el método de búsqueda local búsqueda tabú (Local Search Tabu Search, LS_TS)
[90]. Éste implementa un método de búsqueda tabú a corto plazo basado en intercam-
bios. Una iteración de este método comienza con una selección del elemento i (xi = 1)
con el menor valor de D(i). La lista de elementos no seleccionados es revisada y se
selecciona el primer movimiento de intercambio de los elementos i y j (x j = 0) que
mejore la función objetivo. Si no se ha encontrado ningún movimiento que mejo-
re, entonces se elige el movimiento que menos empeora. El intercambio elegido se
realiza y ambos elementos que participan en el intercambio se clasifican como tabú-
activos durante un número de iteraciones (conocido como permanencia tabú o tabu
tenure). A los elementos tabú-activos no se les permite participar en intercambios.
El método LS_TS finaliza si después de un número consecutivo de iteraciones en los
que la solución no ha sido mejorada.
El método original LS_TS fue modificado cuando fue añadido a nuestro fra-
mework de búsqueda dispersa. La modificación consiste en el uso de un tabu tenure
asimétrico en el que los elementos añadidos a la solución tienen un tabu tenure más
pequeño que el asignado a aquellos elementos que han sido eliminados de la solu-
ción. También, el tabu tenure y el máximo número de iteraciones han sido hechos
dependientes del número de elementos en la solución. De acuerdo a la experimen-
tación presente en [90], el tabu tenure de los elementos seleccionados se establece
en 0,28m iteraciones, mientras que el tabu tenure para los elementos no selecciona-
dos es de 0,028(n − m). El número máximo de iteraciones sin mejora se establece en
0,1(n − m).

9.3.6. Filtro en el método de mejora

En algunas pruebas iniciales del diseño del algoritmo se ha detectado que los mé-
todos de diversificación y combinación obtienen la misma solución más de una vez.
Para evitar que se aplique el método de mejora a una misma solución más de una vez,
se ha desarrollado una estructura de datos de tipo mapa hash. Esta estructura de datos
almacena todas las soluciones y su correspondiente mejora. Se indexa utilizando la
A PLICACIÓN DE LA BÚSQUEDA DISPERSA 155
función hash del algoritmo 9.1. Se ha seleccionado esta función hash debido a que
es la implementación por defecto para la codificación empleada en el lenguaje de
programación Java.

Algoritmo 9.1 Función hash


{hash} =calculaHash(xi : TipoSolucion)
begin
hash := 1
for i := 1 to n do
hash = 31hash + 1231xi + 1237(1 − xi )
end for
end

Este método es capaz de filtrar 0,5 % de soluciones en el procedimiento GRASP


Híbrido y un 82 % de las soluciones en el procedimiento Búsqueda Tabú Híbrida.
Antes de aplicar el procedimiento de mejora, se utiliza la función hash para buscar
si esa solución existe en la estructura de datos. En ese caso, se utiliza la solución
previamente mejorada que también se almacena en la estructura de datos.
Capítulo 10

Cuestiones de implementación

10.1. Introducción

Este capítulo está dedicado a la presentación de diferentes aspectos relaciona-


dos con la etapa de implementación para resolver un problema de optimización.
Para ilustrar esta discusión, se presenta la implementación en lenguaje Java del al-
goritmo de búsqueda dispersa mejorado para el Problema de la Máxima Diversidad
(que se presentó en el capítulo anterior). El primer apartado se dedica al diseño de
la aplicación, mostrando las responsabilidades de cada clase y las relaciones entre
las mismas. En el siguiente apartado se describen los detalles de implementación
considerados más interesantes. Por motivos de espacio, no se incluye todo el códi-
go de la aplicación, pero éste se encuentra disponible en la página web del libro
http://gavab.escet.urjc.es/libros/metaheuristicas.

10.2. Diseño

En la figura 10.1 se muestra las principales clases de la aplicación. A continuación


se describe brevemente la responsabilidad de cada una de ellas.

MDPSolution: los objetos de esta clase representan las soluciones candida-


tas que se manejan a lo largo de la ejecución de la metaheurística. Dispone de
métodos que permiten añadir, eliminar y cambiar nodos de la solución. Para
representar la solución se ha decidido utilizar dos estructuras de datos sincro-
nizadas. Por un lado se dispone de un array de valores lógicos denominado
nodesPresence, donde se codifica en cada posición la pertenencia o no de
ese nodo a la solución. Se debe notar que una estructura de tipo array es muy

157
158 C UESTIONES DE IMPLEMENTACIÓN

Figura 10.1: Diagrama de clases de la la metaheurísticas Scatter Search aplicada al


MDP.

apropiada para este cometido, puesto que permite el acceso directo a sus com-
ponentes. Una implementación adecuada de algoritmos de optimización debe
tener en consideración este tipo de detalles. Además, se dispone de una estruc-
tura de datos tipo lista denominada nodes que alberga los nodos presentes en
la solución. De esta forma, podemos comprobar rápidamente la presencia de
un nodo en la solución y también podemos recorrer la lista de nodos presentes
en un tiempo proporcional al número de nodos de la solución. En la elección
de esta estructura se ha tenido en cuenta que es más eficiente añadir y eliminar
elementos que en un array. Finalmente, se utiliza otra lista enlazada denomina-
da nodesDistance, que almacena, para cada nodo de la solución, la suma de
las distancias de ese nodo al resto de los nodos incluidos en la solución. Esta
D ISEÑO 159
estructura hace más eficiente aquellas tareas en las que es necesario recalcular
el peso de la solución, ya que se puede factorizar la contribución de cada nodo
al peso total de la solución. Por ejemplo, si se elimina un nodo, el peso de la
solución se calcula como el peso antes de la eliminación menos la contribución
del nodo eliminado. Cuando se hace uso de esta estructura de datos, se hace in-
necesario el concurso de estructura nodes, puesto que la información de esta
última estructura está contenida en nodesDistance.

MDPScatterSearch: cada objeto de esta clase representa un algoritmo SS


aplicado al problema MDP. En ellos, se pueden configurar los diferentes méto-
dos de generación de soluciones diversas, de mejora de soluciones y de com-
binación de las mismas.

Experiment: esta clase representa el programa principal. En ella se ejecu-


ta un experimento que compara de forma relativa las tres configuraciones del
Scatter Search. Básicamente, se encarga de cargar instancias del problema en
memoria, ejecutar la metaheurística con cada una de las configuraciones y de-
tener su ejecución a los 30 segundos mostrando por pantalla el peso de la mejor
solución encontrada.

Diversificator: sólo se ha implementado un algoritmo de diversifica-


ción, denominado NotUsedNodesDiv. Este método selecciona las soluciones
por diversidad, calculando la distancia entre soluciones. La clase NotUsed-
NodesDiv es hija de la clase Diversificator. Este diseño permite experimentar
con otros métodos de selección de soluciones diversas únicamente creando una
nueva clase hija de Diversificator.

Constructive: cada uno de los métodos constructivos de generación de so-


luciones diversas se ha implementado como una clase hija de Constructive.
El constructivo aleatorio está implementado en la clase RandomConstructive,
el constructivo GRASP_D2 en GRASPD2Constructive y el método Tabu_D2
en TabuD2Constructive.

ImprovingMethod: cada uno de los métodos de mejora se ha implementado


como una clase hija de ImprovingMethod. El método de búsqueda local (LS)
está implementado en la clase LocalSearch, el método de la búsqueda local
mejorada (I_LS) en ImprovedLocalSearch y el método de búsqueda local
búsqueda tabú (LS_TS) en LocalSeachTabuSearch.

Combinator: cada uno de los métodos de combinación se ha implementado


como una clase hija de Combinator. El método aleatorio está implementado
en la clase RandomCombinator, el método D2 en D2Combinator y el método
Tabu_D2 en TabuD2Combinator.
160 C UESTIONES DE IMPLEMENTACIÓN

Algoritmo 10.1 Búsqueda Dispersa Mejorada


{Re f Set[1]: TipoSolucion} = SS(N, b, SubsetSize: integer; f : TipoFuncionObjeti-
vo)
var
InitialSolutions, NewSolutions: array [1 . . . N] of TipoSolucion;
Re f Set: array [1 . . . b] of TipoSolucion;
Re f SetCombinations: array [1 . . . M] of TipoSolucion;
P: array [1 . . . M,1 . . . SubsetSize] of TipoSolucion;
i: integer;
ImprovedSolutions: hTabla Hashi;
condicionTerminacion: boolean;

begin
{InitialSolutions} := createSolutions(N);
Re f Set := [];
/*Mejora las soluciones del InitialSolutions e inicializa RefSet con las b/2 me-
jores soluciones*/
{InitialSolutions, Re f Set} := improveAndRe f reshRe f Set(InitialSolutions,
Re f Set, b/2, f );
/*completa el RefSet con las b/2 soluciones más diferentes a las ya insertadas
en el Re f Set*/
{Re f Set} := getDiversity(Re f Set, InitialSolutions, b/2, f );
{P} := GenerarGrupos(SubsetSize, Re f Set);
{Re f SetCombinations} := Combinar(P);
while not(condicionTerminacion) do
repeat
Re f SetOld := Re f Set;
{Re f Set} := improveAndRe f reshRe f Set(Re f SetCombinations, Re f Set,
b, f );
/*generamos los grupos de los elementos de Re f Set excepto aquellos que
se generaron con los elementos de Re f SetOld*/
{P} := GenerarGrupos(SubsetSize, Re f Set, Re f SetOld);
{Re f SetCombinations} := Combinar(P);
until Re f SetOld = Re f Set
Re f Set := Re f Set[1 : b/2];
{NewSolutions} := createSolutions(N);
/*completa el RefSet con las b/2 soluciones más diferentes a las ya insertadas
en el Re f Set*/
{Re f Set} := getDiversity(Re f Set, InitialSolutions, b/2, f );
/*genera los grupos de soluciones del RefSet que no hayan sido combinadas
previamente*/
{P} := GenerarGrupos(SubsetSize, Re f Set);
{Re f SetCombinations} := Combinar(P);
end while
end
D ISEÑO 161
MDPGraph: clase cuyos objetos representan una instancia del problema en
memoria. Mantiene los nodos, los pesos de las aristas que unen los nodos y el
número de elementos que han de seleccionarse por MDP.

Node: clase cuyos objetos representan los nodos de una instancia (representa-
da por objetos MDPGraph) o de una solución (representada por objetos MDPSolution).

Algoritmo 10.2 Mejora de soluciones y actualización del Re f Set


{Solutions: array [1 . . . N] of TipoSolucion; Re f Set: array [1 . . . b] of
TipoSolucion} = improveAndRefreshRefSet(Solutions: array [1 . . . N] of TipoSo-
lucion; Re f Set: array [1 . . . b] of TipoSolucion; NElem: integer; f : TipoFuncio-
nObjetivo; ImprovedSolutions: hTabla Hashi)
var
i: integer;
original, improvedSolution: TipoSolucion;

begin
for i := 1 to lenght(Solutions) do
if hImprovedSolutions no contiene Solutions[i]i then
original := Solutions[i]
{Solutions[i]} := improveSolution(original);
improvedSolution := Solutions[i]
hSe asocia original a Solutions[i] en ImprovedSolutionsi
else
improvedSolution := hla solución mejorada asociada a Solutions[i] en
ImprovedSolutionsi
end if
if f (improvedSolution) > f (Re f Set[b]) then
{Re f Set} := Actualizar(Re f Set, ImprovedSolution); // Actualizar Re f Set
end if
end for
end

MDPInstance: clase cuyos objetos representan las instancias del problema


desde un punto de vista físico en disco. Albergan información sobre el nombre
del fichero que contiene la información y mecanismos para leer la información
de disco y cargarla en memoria.

MDPInstancesManager: un objeto de esta clase mantiene una lista de las


instancias disponibles. Permite acceder a todas las instancias a la vez o selec-
cionar una de ellas.
162 C UESTIONES DE IMPLEMENTACIÓN

10.3. Detalles de implementación

En este apartado se muestra, a modo de ejemplo, la implementación de algunas


partes del algoritmo.

10.3.1. Algoritmo ScatterSearch

El algoritmo principal de ScatterSearch para el MDP se ha implementado siguien-


do los pseudocódigos 10.1 y 10.2, que constituyen una implementación avanzada del
algoritmo SS original. En el siguiente código se muestra la implementación de este
pseudocódigo en Java. Los aspectos más relevantes del código se exponen a través de
comentarios:

1 package ssmdp;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import ssmdp.combinator.Combinator;
9 import ssmdp.combinator.D2Combinator;
10 import ssmdp.combinator.RandomCombinator;
11 import ssmdp.combinator.TabuD2Combinator;
12 import ssmdp.constructive.Constructive;
13 import ssmdp.constructive.GraspD2Constructive;
14 import ssmdp.constructive.RandomConstructive;
15 import ssmdp.constructive.TabuD2Constructive;
16 import ssmdp.diversificator.Diversificator;
17 import ssmdp.diversificator.NotUsedNodesDiv;
18 import ssmdp.graph.MDPGraph;
19 import ssmdp.improving.ImprovedLocalSearch;
20 import ssmdp.improving.ImprovingMethod;
21 import ssmdp.improving.LocalSearch;
22 import ssmdp.improving.LocalSearchTabuSearch;
23 import ssmdp.tabuD2.TabuD2Calculator;
24 import ssmdp.util.BoundedSortedList;
25 import ssmdp.util.Combinations;
26
27 public class ScatterSearchMDP {
D ETALLES DE IMPLEMENTACIÓN 163
28
29 // Enumerado usado para seleccionar la configuración
30 public enum InformationMode {
31 WITHOUT_INF, WITH_INF, WITH_MEMORY
32 }
33
34 // Constantes del algoritmo
35 private static final int NUM_INITIAL_SOLUTIONS = 100;
36 private static final int NUM_BEST_SOLUTIONS = 5;
37 private static final int NUM_DIVERSE_SOLUTIONS = 5;
38
39 // Método de generación de soluciones diversas
40 private Constructive constructive;
41
42 // Método de mejora
43 private ImprovingMethod improvingMethod;
44
45 // Método de combinación
46 private Combinator combinator;
47
48 // Método de diversificación
49 private Diversificator diversificator = new NotUsedNodesDiv();
50
51 // Generador de combinaciones de elementos
52 private Combinations combinations = new Combinations(2,
53 getRefSetSize());
54
55 // Conjunto de referencia (RefSet)
56 private BoundedSortedList<MDPSolution> refSet;
57
58 // Estructura de tipo tabla hash que guarda las soluciones
59 // previamente mejoradas
60 private Map<MDPSolution, MDPSolution> improvedSolutions;
61
62 public ScatterSearchMDP(MDPGraph graph,
63 InformationMode informationMode) {
64
65 switch (informationMode) {
66 case WITHOUT_INF:
67 constructive = new RandomConstructive(graph);
68 combinator = new RandomCombinator();
69 improvingMethod = new LocalSearch();
164 C UESTIONES DE IMPLEMENTACIÓN

70 break;
71 case WITH_INF:
72 constructive = new GraspD2Constructive(graph);
73 combinator = new D2Combinator();
74 improvingMethod = new ImprovedLocalSearch();
75 break;
76 case WITH_MEMORY:
77 TabuD2Calculator tD2C = new TabuD2Calculator(graph);
78 constructive = new TabuD2Constructive(tD2C);
79 combinator = new TabuD2Combinator(tD2C);
80 improvingMethod = new LocalSearchTabuSearch();
81 break;
82 }
83 }
84
85 public MDPSolution calculateSolution(long millisTimeout) {
86
87 //Se inicializa la tabla hash para guardar las soluciones
88 //que se van mejorando, para no tener que hacerlo de nuevo
89 improvedSolutions = new HashMap<MDPSolution, MDPSolution>();
90
91 //Se inicializa el RefSet
92 refSet =
93 new BoundedSortedList<MDPSolution>(NUM_BEST_SOLUTIONS);
94
95 //Cáculo del momento de finalización del algoritmo
96 long finishTime = System.currentTimeMillis() + millisTimeout;
97
98 //Creación de las soluciones iniciales
99 List<MDPSolution> initialSolutions =
100 constructive.createSolutions(NUM_INITIAL_SOLUTIONS);
101
102 //Mejora de las soluciones e incorporación al RefSet
103 improveAndRefreshRefSet(initialSolutions);
104
105 //Se seleccionan las soluciones diversas
106 List<MDPSolution> diverseSolutions =
107 diversificator.getDiverseSolutions(NUM_DIVERSE_SOLUTIONS,
108 initialSolutions, refSet.getList());
109
110 //Se prepara el RefSet para albergar las soluciones
111 //diversas además de las soluciones por calidad
D ETALLES DE IMPLEMENTACIÓN 165
112 refSet.setMaxSize(getRefSetSize());
113
114 //Se añaden las soluciones diversas al refSet
115 refSet.addAll(diverseSolutions);
116
117 //Se crean los grupos de soluciones
118 List<List<MDPSolution>> groups =
119 combinations.getGroups(refSet.getList());
120
121 //Se combinan los grupos de soluciones
122 List<MDPSolution> refSetCombinations =
123 combinator.combineGroups(groups);
124
125 do {
126
127 //Declaración de la lista que guardará las posiciones
128 //de las nuevas soluciones del RefSet
129 List<Integer> newSolPositions;
130
131 do {
132
133 // Mejora de las soluciones e incorporación al RefSet
134 improveAndRefreshRefSet(refSetCombinations);
135
136 // Se calculan las nuevas soluciones del refSet
137 newSolPositions = getNewSolutionsPositions();
138
139 // Si hay nuevas soluciones...
140 if (newSolPositions.size() > 0) {
141
142 // Se obtienen los grupos que contienen a esas nuevas
143 // soluciones
144 groups = combinations.getGroupsContainingIndexes(
145 newSolPositions, refSet.getList());
146
147 // Y se combinan dichos grupos
148 refSetCombinations = combinator.combineGroups(groups);
149 }
150
151 // Si se ha sobrepasado el tiempo límite, se sale del
152 // algoritmo
153 if (System.currentTimeMillis() > finishTime) {
166 C UESTIONES DE IMPLEMENTACIÓN

154 return refSet.getBiggest();


155 }
156
157 } while (newSolPositions.size() > 0);
158
159 // Se queda el RefSet con las mejores soluciones
160 refSet.retain(NUM_BEST_SOLUTIONS);
161
162 // Se crean soluciones nuevas
163 List<MDPSolution> newSolutions =
164 constructive.createSolutions(NUM_INITIAL_SOLUTIONS);
165
166 // Se seleccionan las más diversas
167 diverseSolutions = diversificator.getDiverseSolutions(
168 NUM_DIVERSE_SOLUTIONS, newSolutions, refSet.getList());
169
170 // Y se añaden al RefSet
171 refSet.addAll(diverseSolutions);
172
173 // Se calculan las nuevas soluciones
174 newSolPositions = getNewSolutionsPositions();
175
176 // Se obtienen los grupos con esas nuevas soluciones
177 groups = combinations.getGroupsContainingIndexes(
178 newSolPositions, refSet.getList());
179
180 // Y se combinan esos grupos
181 refSetCombinations = combinator.combineGroups(groups);
182
183 } while (true);
184
185 }
186
187 private List<Integer> getNewSolutionsPositions() {
188
189 //Obtiene las posiciones en el RefSet de las nuevas
190 //soluciones. Para ello, cada solución alberga la posición
191 //en el RefSet o -1 si es nueva.
192
193 List<Integer> indexes = new ArrayList<Integer>();
194 int index = 0;
195 for (MDPSolution solution : refSet.getList()) {
D ETALLES DE IMPLEMENTACIÓN 167
196 if (solution.getRefSetPosition() == -1) {
197 indexes.add(index);
198 }
199 solution.setRefSetPosition(index);
200 index++;
201 }
202 return indexes;
203 }
204
205 private void refreshRefSetIndexes() {
206
207 //Actualiza las posiciones de las soluciones del RefSet
208
209 int index = 0;
210 for (MDPSolution sol : refSet.getList()) {
211 sol.setRefSetPosition(index);
212 index++;
213 }
214 }
215
216 private void improveAndRefreshRefSet(
217 List<MDPSolution> solutions) {
218
219 refreshRefSetIndexes();
220
221 for (MDPSolution solution : solutions) {
222
223 MDPSolution improvedSolution;
224
225 if (!improvedSolutions.containsKey(solution)) {
226 MDPSolution original = new MDPSolution(solution);
227 improvingMethod.improveSolution(solution);
228 improvedSolutions.put(original, solution);
229 improvedSolution = solution;
230
231 } else {
232 improvedSolution =
233 new MDPSolution(improvedSolutions.get(solution));
234 }
235 refSet.add(improvedSolution);
236 }
237 }
168 C UESTIONES DE IMPLEMENTACIÓN

238
239 public int getRefSetSize() {
240 return NUM_BEST_SOLUTIONS + NUM_DIVERSE_SOLUTIONS;
241 }
242
243 }

10.3.2. Algoritmo de diversificación

El algoritmo de diversificación se ha implementado como una clase hija de la


clase Diversificator que se muestra a continuación:

1 package ssmdp.diversificator;
2
3 import java.util.List;
4 import ssmdp.MDPSolution;
5
6 public abstract class Diversificator {
7
8 public abstract List<MDPSolution> getDiverseSolutions(
9 int numDiverseSolutions,
10 List<MDPSolution> solutions,
11 List<MDPSolution> selectedSolutions);
12
13 }

El algoritmo de diversificación presentado en el capítulo anterior calcula la dis-


tancia de una solución a un conjunto de soluciones previamente seleccionadas. Para
ello, en primer lugar calcula el número de veces que aparece cada elemento de una
solución en el conjunto de soluciones seleccionadas. Una solución será más pare-
cida a las soluciones seleccionadas cuanto mayor sea el número de elementos que
comparte con ellas (sección 9.3.1).
Cada vez que una solución se incorpora al conjunto de soluciones seleccionadas,
debe actualizarse el cálculo de las distancias antes de que la siguiente solución sea
seleccionada. Este algoritmo se ha implementado como sigue:

1 package ssmdp.diversificator;
D ETALLES DE IMPLEMENTACIÓN 169
2
3 import java.util.ArrayList;
4 import java.util.HashSet;
5 import java.util.List;
6 import java.util.Set;
7
8 import ssmdp.MDPSolution;
9 import ssmdp.graph.Node;
10
11 public class NotUsedNodesDiv extends Diversificator {
12
13 public List<MDPSolution> getDiverseSolutions(
14 int numDiverseSolutions, List<MDPSolution> solutions,
15 List<MDPSolution> selectedSolutions) {
16
17 // Creamos la lista para albergar las soluciones diversas
18 List<MDPSolution> diverseSolutions =
19 new ArrayList<MDPSolution>();
20
21 // Obtenemos el número de nodos del grafo
22 int numNodes = solutions.get(0).getGraph().getNumNodes();
23
24 // Creamos la estructura de datos que albergará el número de
25 // apariciones del nodo i-ésimo en las soluciones
26 // seleccionadas
27 int[] selectedNodesCount = new int[numNodes];
28
29 // Contamos los nodos ya seleccionados
30 for (MDPSolution mdpGraph : selectedSolutions) {
31 refreshNodeCount(selectedNodesCount, mdpGraph);
32 }
33
34 // Guardamos en otherSolutions aquellas soluciones que no
35 // se encuentran en selectedSolutions
36 Set<MDPSolution> otherSolutions =
37 new HashSet<MDPSolution>(solutions);
38
39 otherSolutions.removeAll(selectedSolutions);
40
41 // Si el número de soluciones es menor o igual que el
42 // número de soluciones diversas que hay que seleccionar,
43 // devolvemos las que tenemos.
170 C UESTIONES DE IMPLEMENTACIÓN

44 if(otherSolutions.size() <= numDiverseSolutions){


45 diverseSolutions.addAll(otherSolutions);
46 return diverseSolutions;
47 }
48
49 // Mientras no hayamos seleccionado todas las soluciones
50 // diversas
51 while (diverseSolutions.size() < numDiverseSolutions) {
52
53 int minSimilarity = Integer.MAX_VALUE;
54 MDPSolution minSimilaritySol = null;
55
56 if(otherSolutions.size() == 0){
57 throw new Error();
58 }
59
60 for (MDPSolution solution : otherSolutions) {
61
62 int similarity = calculateSimilarity(selectedNodesCount,
63 solution);
64
65 if (similarity < minSimilarity) {
66 minSimilarity = similarity;
67 minSimilaritySol = solution;
68 }
69 }
70
71 // Añadimos la solución más diferente en la la lista de
72 // soluciones diversas
73 diverseSolutions.add(minSimilaritySol);
74
75 // Borramos esa solución de las candidatas para ser
76 // seleccionadas
77 otherSolutions.remove(minSimilaritySol);
78
79 // Actualizamos la cuenta de nodos con la nueva solución
80 refreshNodeCount(selectedNodesCount, minSimilaritySol);
81 }
82 return diverseSolutions;
83 }
84
85 private int calculateSimilarity(int[] selectedNodesCount,
D ETALLES DE IMPLEMENTACIÓN 171
86 MDPSolution solution) {
87
88 int similarity = 0;
89 for (Node node : solution) {
90 similarity += selectedNodesCount[node.getIndex()];
91 }
92 return similarity;
93 }
94
95 private void refreshNodeCount(int[] selectedNodesCount,
96 MDPSolution solution) {
97
98 for (Node node : solution) {
99 selectedNodesCount[node.getIndex()]++;
100 }
101 }
102
103 }

10.3.3. Generación de soluciones diversas. Selección aleatoria

Los algoritmos de generación de soluciones diversas se han implementado como


clases hijas de la clase Constructive. La implementación de esta clase se muestra a
continuación:

1 package ssmdp.constructive;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import ssmdp.MDPSolution;
6 import ssmdp.graph.MDPGraph;
7
8 public abstract class Constructive {
9
10 protected MDPGraph graph;
11
12 public Constructive(MDPGraph graph) {
13 this.graph = graph;
14 }
172 C UESTIONES DE IMPLEMENTACIÓN

15
16 public MDPGraph getGraph() {
17 return graph;
18 }
19
20 public List<MDPSolution> createSolutions(int numSolutions) {
21 List<MDPSolution> solutions = new ArrayList<MDPSolution>();
22 for(int i=0; i<numSolutions; i++){
23 solutions.add(createSolution());
24 }
25 return solutions;
26 }
27
28 public abstract MDPSolution createSolution();
29
30 }

Se ha elegido la selección aleatoria como ejemplo de implementación de un mé-


todo de generación de soluciones diversas. Este es el método más sencillo y consiste
en seleccionar de forma aleatoria los nodos de la solución de entre el total de nodos.
La implementación se muestra a continuación:

1 package ssmdp.constructive;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import ssmdp.MDPSolution;
7 import ssmdp.graph.MDPGraph;
8 import ssmdp.graph.Node;
9 import ssmdp.util.RandomList;
10
11 public class RandomConstructive extends Constructive {
12
13 public RandomConstructive(MDPGraph totalGraph) {
14 super(totalGraph);
15 }
16
17 @Override
18 public MDPSolution createSolution() {
D ETALLES DE IMPLEMENTACIÓN 173
19
20 // Se crea la lista que albergará los nodos seleccionados
21 // de forma aleatoria
22 List<Node> nodes = new ArrayList<Node>();
23
24 // Se usa la clse RandomList para recorrer de forma aleatoria
25 // los elementos de una lista. En este caso es la lista de
26 // nodos del grafo
27 for (Node n : RandomList.create(graph.getNodes())) {
28
29 // Se añade el nodo seleccionado aleatoriamente
30 nodes.add(n);
31
32 // Si el número de nodos seleccionados corresponde con el
33 // número de nodos de una solución, se sale del bucle
34 if (nodes.size() == graph.getNumSolutionNodes()) {
35 break;
36 }
37 }
38
39 // Se construye una solución con los nodos seleccionados y se
40 // devuelve
41 return new MDPSolution(nodes, graph);
42 }
43
44 }

10.3.4. Método de combinación. Selección D-2

Todos los métodos de combinación se han implementado como clases hijas de la


clase Combinator. Esta clase se muestra a continuación:

1 package ssmdp.combinator;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import ssmdp.MDPSolution;
7
174 C UESTIONES DE IMPLEMENTACIÓN

8 public abstract class Combinator {


9
10 public List<MDPSolution> combineGroups(
11 List<List<MDPSolution>> groups) {
12
13 List<MDPSolution> combinedSolutions =
14 new ArrayList<MDPSolution>();
15
16 for (List<MDPSolution> group : groups) {
17 MDPSolution solution = combineGroup(group);
18 combinedSolutions.add(solution);
19 }
20
21 return combinedSolutions;
22 }
23
24 public abstract MDPSolution combineGroup(
25 List<MDPSolution> group);
26
27 }

El método elegido para mostrar una implementación del método de combinación


ha sido el método de Selección D-2. Como se describe en la sección 9.3.4 , este
método consiste en la aplicación de la heurística destructiva D-2 a la unión de los
elementos de las soluciones que son combinadas. El método parte de una solución
no factible que contiene todos los elementos de las soluciones a combinar, y descarta
elementos iterativamente hasta que sólo quedan m elementos seleccionados. El ele-
mento i-ésimo que es descartado en cada iteración es aquél que tiene el valor D(i)
mínimo. La implementación se muestra a continuación:

1 package ssmdp.combinator;
2
3 import java.util.ArrayList;
4 import java.util.HashSet;
5 import java.util.Iterator;
6 import java.util.List;
7 import java.util.Set;
8
9 import ssmdp.MDPSolution;
10 import ssmdp.graph.MDPGraph;
D ETALLES DE IMPLEMENTACIÓN 175
11 import ssmdp.graph.Node;
12 import ssmdp.util.Weighted;
13
14 public class D2Combinator extends Combinator {
15
16 //Atributo que albergará el nodo con la distancia
17 //mínima
18 private Weighted<Node> worstWNode = null;
19
20 @Override
21 public MDPSolution combineGroup(List<MDPSolution> solutions) {
22
23 // Se obtiene el grafo de las soluciones
24 MDPGraph graph = solutions.get(0).getGraph();
25
26 // Se insertan en un conjunto los nodos de las soluciones
27 Set<Node> nodes = createUnion(solutions);
28
29 //Se calculan las distancias entre dichos nodos
30 List<Weighted<Node>> nodesDistance =
31 calculateDist(nodes);
32
33 // Mientras la lista de nodos tenga más nodos de los
34 // necesarios en una solución
35 while (nodesDistance.size() > graph.getNumSolutionNodes()) {
36
37 Node oldNode = worstWNode.getElement();
38 worstWNode = null;
39
40 // Recorremos la lista de nodos con un iterador
41 for (Iterator<Weighted<Node>> it =
42 nodesDistance.iterator(); it.hasNext();) {
43
44 Weighted<Node> wn = it.next();
45
46 // Si el nodo es el peor, le eliminamos
47 if (wn.getElement() == oldNode) {
48 it.remove();
49 } else {
50
51 // Actualizamos el peso de los nodos restando el
52 // valor de la distancia al nodo eliminado
176 C UESTIONES DE IMPLEMENTACIÓN

53 wn.setWeight(wn.getWeight()
54 - wn.getElement().getDistanceTo(oldNode));
55
56 worstWNode = Weighted.min(worstWNode,wn);
57 }
58 }
59 }
60
61 return new MDPSolution(graph, nodesDistance);
62 }
63
64 private List<Weighted<Node>> calculateDist(Set<Node> nodes) {
65
66 // Se crea una lista que albergará cada nodo asociado a la
67 // suma de las distancias con el resto de los nodos
68 List<Weighted<Node>> nodesDistance =
69 new ArrayList<Weighted<Node>>(nodes.size());
70
71 for (Node node : nodes) {
72
73 // Se calcula la suma de las distancias de un nodo al resto
74 // de nodos
75 float distance = 0;
76 for (Node otherNode : nodes) {
77 distance += node.getDistanceTo(otherNode);
78 }
79
80 // Se crea un nodo asociado a su distancia
81 Weighted<Node> wn = new Weighted<Node>(node, distance);
82
83 // Se añade a la lista de distancias
84 nodesDistance.add(wn);
85
86 // Se actualiza el nodo con menos distancia
87 worstWNode = Weighted.min(worstWNode,wn);
88 }
89 return nodesDistance;
90 }
91
92 private Set<Node> createUnion(List<MDPSolution> solutions) {
93 Set<Node> nodes = new HashSet<Node>();
94 for (MDPSolution solution : solutions) {
D ETALLES DE IMPLEMENTACIÓN 177
95 for (Node node : solution) {
96 nodes.add(node);
97 }
98 }
99 return nodes;
100 }
101
102 }

10.3.5. Método de Mejora. Búsqueda Local Mejorada

Todos los métodos de mejora se han implementado como una clase hija de Im-
provingMethod. Su implementación se muestra a continuación:

1 package ssmdp.improving;
2
3 import ssmdp.MDPSolution;
4
5 public abstract class ImprovingMethod {
6
7 public abstract void improveSolution(MDPSolution solution);
8
9 }

El método de combinación elegido como ejemplo de método de combinación


ha sido la Búsqueda Local Mejorada (I_LS). Como se describe en la sección 9.3.5,
selecciona el elemento i* (xi* = 1) que proporciona la menor contribución al valor de
la función objetivo de la actual solución. A continuación, busca un elemento j (xj = 0)
para ser intercambiado con i*. El primer elemento j que resulte en un movimiento de
mejora se selecciona y el intercambio se realiza sin examinar el resto de elementos
sin seleccionar. Si no se encuentra ningún movimiento de mejora que intercambie
j por i*, se examina el elemento con la siguiente menor contribución. Este proceso
continúa hasta que no se encuentre ningún movimiento de mejora.
La implementación se muestra a continuación:

1 package ssmdp.improving;
2
178 C UESTIONES DE IMPLEMENTACIÓN

3 import java.util.Collections;
4 import java.util.List;
5
6 import ssmdp.MDPSolution;
7 import ssmdp.graph.MDPGraph;
8 import ssmdp.graph.Node;
9 import ssmdp.util.Weighted;
10
11 public class ImprovedLocalSearch extends ImprovingMethod {
12
13 @Override
14 public void improveSolution(MDPSolution solution) {
15
16 MDPGraph graph = solution.getGraph();
17
18 // Variable que controla la condición de parada. Indica
19 // si se ha intercambiando algún nodo
20 boolean nodeChanged;
21
22 do {
23
24 nodeChanged = false;
25
26 //Obtenemos la lista de distancias de cada nodo
27 List<Weighted<Node>> nodeDistances =
28 solution.getNodesDistance();
29
30 //Ordenamos de menor a mayor la lista de distancias
31 Collections.sort(nodeDistances);
32
33 // Recorremos la lista ordenada de menor a mayor
34 for (Weighted<Node> oldWNode: solution.getNodesDistance()){
35
36 // Tomamos un nodo como candidato para ser eliminado
37 Node oldNode = oldWNode.getElement();
38
39 // Calculamos el peso que tendría la solución si
40 // quitásemos ese nodo
41 float weightWithoutOld = solution.getWeight()
42 - oldWNode.getWeight();
43
44 // Recorremos la lista de nodos del grafo
D ETALLES DE IMPLEMENTACIÓN 179
45 for (Node newNode : graph.getNodes()) {
46
47 // Si el nodo no se encuentra en la solución
48 // consideramos que es candidato para ser
49 // intercambiado por oldNode
50 if (!solution.contains(newNode)) {
51
52 // Calculamos la distancia del newNode al resto de
53 // los nodos considerando que oldNode no está en
54 // la solución
55 float contribution = solution
56 .calculateDistanceWithoutNode(oldNode, newNode);
57
58 // Calculamos el peso que tendría la
59 // solución en caso de intercambio
60 float newWeight = weightWithoutOld + contribution;
61
62 // Si el peso posible de la solución es mayor que el
63 // peso actual
64 if (newWeight > solution.getWeight()) {
65 // Cambiamos el nodo
66 solution.changeNode(oldNode, newNode);
67 nodeChanged = true;
68 break;
69 }
70 }
71 }
72 }
73 } while (nodeChanged);
74
75 solution.calculatePreciseWeight();
76 }
77 }
Apéndice A

Especificación de la Sintaxis del


Lenguaje Algorítmico

En este apéndice se presenta una especificación no estrictamente formal del len-


guaje utilizado en los algoritmos presentados a lo largo del documento.

A.1. Tipos de datos básicos

Los tipos de datos básicos considerados son integer, real, char y boolean. En esta
sección se presenta el rango y las operaciones y funciones asociadas a cada uno de
ellos.

A.1.1. Integer

El rango del tipo de dato integer se representa por Z, y viene dado por todos los
números enteros comprendidos en el intervalo [−∞ . . . ∞].
Los operadores del tipo de datos integer son los siguientes:

Suma + : Z×Z → Z
Diferencia − : Z×Z → Z
Multiplicación ∗ : Z×Z → Z
División entera div : Z × Z → Z
Resto de la división mod : Z × Z → Z
Potencia ˆ: Z × Z → Z
Cambio de signo −:Z→Z

181
182 A PÉNDICE A. E SPECIFICACIÓN DE LA S INTAXIS DEL L ENGUAJE
A LGORÍTMICO
Y las funciones predefinidas:

Valor absoluto abs : Z → Z


Raíz cuadrada sqr : Z → Z
Predecesor pred : Z → Z
Sucesor succ : Z → Z

A.1.2. Real

El rango del tipo de dato real se representa por R, y viene dado por todos los
números reales comprendidos en el intervalo [−∞ . . . ∞].
Los operadores del tipo de datos real son los siguientes:

Suma + : R×R → R
Diferencia − : R×R → R
Multiplicación ∗ : R×R → R
División / : R×R → R
Potencia ˆ: R × R → R
Cambio de signo −:R→R

Y las funciones predefinidas:

Valor absoluto abs : R → R


Raíz cuadrada sqr : R → R
Exponencial exp : R → R
Logaritmo natural ln : R → R
Aleatorio con distribución uniforme entre 0 y 1 rand : N → R
(el argumento indica el número de aleatorios generado)
Aleatorio con distribución normal (media=0 y desv=1) randn : N → R
(el argumento indica el número de aleatorios generado)

También existen funciones de real a integer:

Redondeo al entero más próximo round : R → Z


Redondeo al entero superior ceil : R → Z
Redondeo al entero inferior f loor : R → Z

A.1.3. Char

El rango del tipo de datos char se representa por C, y viene dado por todos los
caracteres del juego de caracteres ascii.
A.2. C OMENTARIOS 183
En este lenguaje algorítmico no se definen operadores internos de tipo char. Las
funciones predefinidas son:

Predecesor pred : C → C
Sucesor succ : C → C

A.1.4. Boolean

El rango del tipo de dato boolean se representa por B, y viene dado por los valores
[T RU E, FALSE].
Los operadores del tipo de datos boolean son los siguientes:

Y lógico and : B × B → B
O lógico or : B × B → B
Negación lógica not : B → B

Y las funciones predefinidas:

Predecesor pred : B → B
Sucesor succ : B → B

A.1.5. Operadores de relación

Se utilizan para comparar elementos del mismo tipo y devuelven un valor boo-
leano como resultado de la comparación. Los tipos de dato integer y real se pueden
comparar, a pesar de que no son del mismo tipo.

Igualdad =
Distinto 6 =
Mayor >
Menor <
Mayor o igual ≥
Menor o igual ≤

A.2. Comentarios

Los comentarios permiten añadir al algoritmo notas y textos que deben ignorarse
cuando se ejecuta el pseudocódigo. Se utilizan dos formatos de comentarios:
184 A PÉNDICE A. E SPECIFICACIÓN DE LA S INTAXIS DEL L ENGUAJE
A LGORÍTMICO
comentarios de una sola línea: empiezan con los caracteres “//” y continúa
hasta el final de la línea.

comentarios de varias líneas: comienzan con la cadena “/*” y terminan con


“*/”.

A.3. Estructura de un algoritmo

En cada algoritmo pueden distinguirse tres partes fundamentales:

Cabecera,

Sección de declaraciones y definiciones, y

Cuerpo del algoritmo.

Estas secciones se organizan según muestra el algoritmo A.1.

Algoritmo A.1 NombreAlgoritmo


{. . .} = NombreAlgoritmo(. . .)
var
/*Sección de declaración de variables*/

begin
/*Cuerpo del algoritmo*/
end

A.3.1. Cabecera

La cabecera de un programa establece su identificación y su sintaxis es la siguien-


te:
{sal1:TipoS1; sal2:TipoS2; . . .}= NombreAlgoritmo(entr1:TipoE1; entr2:TipoE2;
. . .)
En primer lugar, se escriben los parámetros de salida entre corchetes, indicando el
tipo de la variable. A continuación, se coloca un signo “=”, el nombre del algoritmo
y el listado de entradas entre paréntesis. Si un parámetro es de entrada y de salida,
debe aparecer en ambas secciones.
A.4. I NSTRUCCIONES 185
A.3.2. Declaración de variables

Las variables se declaran en la sección de declaración de variables que tiene la


cabecera var. Cada linea de declaraciones tiene la siguiente estructura:
variable1, variable2, . . . : tipo1;

A.3.3. Cuerpo del algoritmo

El cuerpo del algoritmo contiene el conjunto de sentencias ejecutables entre las


marcas de inicio (begin) y final (end). Cada instrucción se separa de la siguiente por
un punto y coma.

A.4. Instrucciones

Se contempla la posibilidad de utilizar los siguientes tipos de instrucciones: la


instrucción de asignación, instrucciones en lenguaje natural, instrucciones de selec-
ción y de repetición y llamadas a otros algoritmos. En esta sección se presenta la
sintaxis general de todas ellas.

A.4.1. Instrucción de asignación

La instrucción de asignación tiene la siguiente sintaxis general:


variable := expresión;

A.4.2. Instrucciones en lenguaje natural

En el cuerpo de un algoritmo se pueden incluir sentencias ejecutables en lenguaje


natural, escritas entre los símbolos “h” y “i”. La sintaxis general es:
h Instrucción en lenguaje natural i;

A.4.3. Estructuras de selección

Se dispone de la estructura de selección IF, que tiene la siguiente sintaxis:


if condición then
InstruccionThen1;
186 A PÉNDICE A. E SPECIFICACIÓN DE LA S INTAXIS DEL L ENGUAJE
A LGORÍTMICO
...
InstruccionThenN;
else
InstruccionElse1;
...
InstruccionElseM;
end if

A.4.4. Estructuras de repetición

Se dispone de las estructuras de repetición, while, repeat, for all y for. A conti-
nuación, se muestra la sintaxis general de cada una de ellas.

While

La sintaxis de la estructura de repetición while es la siguiente:


while condición do
Instruccion1;
...
InstruccionN;
end while

Repeat

La sintaxis de la estructura de repetición repeat es la siguiente:


repeat
Instruccion1;
...
InstruccionN;
until condición
A.5. T IPOS DE DATOS DERIVADOS 187
For all

La sintaxis de la estructura de repetición for all es:


for all elemento in conjunto do
Instruccion1;
...
InstruccionN;
end for

For

Y finalmente, La sintaxis de la estructura for es:


for contador := inicio to f inal do
Instruccion1;
...
InstruccionN;
end for

A.4.5. Llamadas a otros algoritmos

En el cuerpo de un algoritmo puede haber llamadas a otros algoritmos. La sintaxis


general de éstas es la siguiente:
{salida1, salida2, . . .}:= NombreAlgoritmoLlamado(entrada1, entrada2, . . .);

A.5. Tipos de datos derivados

A.5.1. Arrays

Los tipos de datos array se definen con la siguiente sintaxis:


NombreArray = array [1 . . . N, . . ., 1 . . . M] of tipo;
Y para declarar una variable de este tipo, se utiliza la siguiente instrucción:
188 A PÉNDICE A. E SPECIFICACIÓN DE LA S INTAXIS DEL L ENGUAJE
A LGORÍTMICO
varArray: NombreArray;
El acceso a los elementos individuales de un array se realiza usando el nombre de
la colección seguido de uno o varios índices entre corchetes y separados por comas
que indican la posición del dato dentro del array. El número de índices necesarios
para el acceso a un elemento es función de las dimensiones del array:
varArray[i1,. . .,iD];
En un array bidimensional, se puede acceder a todos los elementos de la fila i a
través de la siguiente sintaxis:
varArray[i,:];
De forma equivalente, se accede a todos los elementos de la columna j:
varArray[:,j];
Además, es posible acceder a un sub-array a través del operador “:”. Se accede a
los elementos entre el i y el j de un array unidimensional:
varArray[i:j];
De forma similar, el acceso desde el inicio hasta el elemento i de un array unidi-
mensional:
varArray[:i];
Por último, el acceso desde el elemento i hasta el final de un array como el
anterior:
varArray[i:];

A.5.2. Registros

Los tipos registro se definen con la siguiente sintaxis:


NombreRegistro = record
NombreCampo1 : tipo1;
...
NombreCampoN : tipoN;
end;
Y para declarar una variable de este tipo, se utiliza la siguiente instrucción:
varRegistro: NombreRegistro;
El acceso a un campo de una variable de tipo registro se realiza usando el nombre
A.5. T IPOS DE DATOS DERIVADOS 189
de la colección seguido del operador punto “.” y a continuación el identificador del
campo:
varRegistro.nombreCampo;

A.5.3. Listas

Los tipos lista se definen con la siguiente sintaxis:


NombreLista = list of tipo;
Y para declarar una variable de este tipo, se utiliza la siguiente instrucción:
varLista: NombreLista;
o también:
varLista: list of tipo;
El acceso a los elementos de una variable de tipo list se realiza mediante una
sintaxis equivalente a la del acceso a los elementos de un array unidimensional.
Apéndice B

Definición de Tipos de Datos

En este apéndice se declaran los tipos de datos utilizados en los diferentes pseu-
docódigos que ilustran los algoritmos presentados a lo largo del documento.

B.1. TipoComponente

Una componente es cada uno de los elementos en los que se puede factorizar una
solución. Se define el tipo de dato que almacena una componente de una solución del
siguiente modo:
Definición de Tipo: TipoComponente
TipoComponente = ...;

B.2. TipoSolucion

Una solución está descrita como un vector de RD , siendo D la dimensión del


espacio de soluciones. Se define el tipo de dato que alberga una solución del siguiente
modo:
Definición de Tipo: TipoSolucion
TipoSolucion = array [1,. . .,D] of TipoComponente;

B.3. TipoOperador

Los algoritmos meméticos permiten la aplicación de operadores de optimización


local que se definen como operadores iterativos que actúan sobre un agente con el

191
192 A PÉNDICE B. D EFINICIÓN DE T IPOS DE DATOS

objetivo de mejorar la calidad de la solución o soluciones que contiene dicho agente,


hasta que no se pueda mejorar más (Por ejemplo, búsqueda dispersa). Se define el
tipo de dato TipoOperador de la siguiente forma:
Definición de Tipo: TipoOperador
TipoOperador = hIdentificador de un operador de optimización locali;

B.4. TipoFuncionObjetivo

En el contexto de las metaheurísticas, se asume que se dispone de una medida


que permite establecer relaciones de calidad o idoneidad entre diferentes soluciones.
Se define el tipo de dato TipoFuncionObjetivo de la siguiente forma:
Definición de Tipo: TipoFuncionObjetivo
TipoOperador = hIdentificador de una expresión que se utiliza como función
objetivoi;
El resultado de aplicar un tipo TipoFuncionObjetivo sobre un dato del tipo Tipo-
Solucion devuelve como resultado una medida de la calidad de la solución conside-
rada.
Apéndice C

Tabla de acrónimos

Generalmente, las metaheurísticas se suelen nombrar por su acrónimo. A modo


de resumen, en la siguiente tabla se ordenan alfabéticamente por su acrónimo (en
inglés), algunas de la metaheurísticas que con más éxito se han aplicado a una colec-
ción de problemas relativamente amplia. También se introducen las referencias más
relevantes para cada una de ellas, donde se pueden encontrar descripciones, aplicacio-
nes, operadores avanzados o tendencias de las metaheurísticas incluidas en esta tabla.

Nombre Método Ref.


ACO Optimización por colonias de hormigas (Ant [86][87]
Colony Optimization)
AMP Programas de memoria adaptativa (Adaptive Me- [304][294]
mory Programming)
AT Equipos asíncronos (Asynchronous Teams) [308][309]
CA Algoritmos culturales (Cultural Algorithms) [268][267]
EA Algoritmos evolutivos (Evolutionary Algorithms) [295][204]
EDA Algoritmos de estimación de distribución (Estima- [187][194]
tion Distribution Algorithms)
FANS Búsqueda por entorno adaptativo borroso (Fuzzy [30][29]
Adaptive Neighborhood Search)
GA Algoritmos Genéticos (Genetic Algorithms) [160][136]
GHC Métodos de escalada generalizados (Generalized [166]
Hill-Climbing algorithms)
GLS Búsqueda local guiada (Guided Local Search) [319][322]
GRASP Procedimientos de búsqueda miope, aleatorizada y [264][101]
adaptativa (Greedy Adaptive Randomized Search
Procedure)

193
194 A PÉNDICE C. TABLA DE ACRÓNIMOS

Nombre Método Ref.


HC Concentración heurística (Heuristic Concentra- [277]
tion)
ILS Búsqueda local iterativa (Iterated Local Search) [193][19]
MA Algoritmos meméticos (Memetic Algorithms) [224][222]
MSM Métodos multi-arranque (Multi-Start Methods) [197]
NM Métodos ruidosos (Noising Methods) [56]
PR Re-encadenamiento de caminos (Path Relinking) [131][132]
POPMUSIC
Metaheurística de optimización parcial bajo condi- [304]
ciones especiales de intensificación (Partial OPti-
mization Metaheuristic Under Special Intensifica-
tion Conditions
SA Recocido Simulado (Simulated Annealing) [157][2]
SI Inteligencia de enjambre (Swarm Intelligence) [36][177]
SS Búsqueda dispersa (Scatter Search) [133][186]
SSA Análisis del espacio de búsqueda (Search Space [207]
Analysis)
TAM Métodos de Aceptación de umbral (Threshold Ac- [91]
cepting Methods)
TS Búsqueda Tabú (Tabu Search) [115][127]
VNS Búsqueda de entorno variable (Variable Neighbor- [152][149]
hood Search)
Bibliografía

[1] E.H.L. Aarts and J. Korst. Simulated Annealing and Boltzmann Machines: A
Stochastic Approach to Combinatorial Optimizationa and Neural Computing.
John Wiley and Sons, 1989.

[2] E.H.L. Aarts and J.K. Lenstra. Local Search in Combinatorial Optimization.
Jonh Wiley and Sons, 1997.

[3] M. Agrawal, N. Kayal, and N. Saxena. Primes is in P. Annals of Mathematics,


160:781–793, 2004.

[4] M. Andrews and A. Tuson. Diversity does not necessarily imply adaptabi-
lity. In Proceedings of the Workshop on Evolutionary Algorithms for Dynamic
Optimization Problems, 2003.

[5] P.J. Angeline. Tracking extrema in dynamic environments. In Proceedings of


the International Conference on Evolutionary Programming, 1997.

[6] D. Applegate, R. Bixby, V. Chvatal, and W. Cook. Finding tours in the tsp.
www.keck.caam.rice.edu/concorde.html, 2000.

[7] D. Applegate and W. Cook. A computational study of the job-shop scheduling


problem. ORSA Journal on Computing, 3:149–156, 1991.

[8] H.M. Ardof and M.D. Jonhston. A discrete stochastic neural network algo-
rithm for constraint satisfaction problem. In Proceedings of International Joint
Conference on Neural Networks, 1990.

[9] S. Arulampalam, S. Maskell, N. Gordon, and T. Clapp. A tutorial on particle


filters for on-line nonlinear/non-gaussian bayesian tracking. IEEE Trans. on
Signal Processing, 50(2):174–188, 2002.

[10] G. Ausiello, P. Crescenzi, G. Gambosi, V. Kann, A. Marchetti-Spaccamela,


and M. Protasi. Complexity and Approximation: Combinatorial optimization
problems and their approximability properties. Springer, 1999.

195
196 BIBLIOGRAFÍA
[11] M. Aydin and E. Öztemel. Dynamic jobshop scheduling using reinforcement
learning agents. Robotics and Autonomous Systems, 33:169–178, 2000.

[12] S. Baluja. An empirical comparison of seven iterative and evolutionary func-


tion optimization heuristics. Technical report, Carnegie Mellon University,
1995.

[13] S. Baluja. Genetic algorithms and explicit search statistics. Advances in Neural
Information Processing Systems, 9:319–325, 1997.

[14] F. Barahúnda, M. Grötschel, M. Jürgen, and G. Reinelt. An application of


combinatorial optimization to statistical optimization and circuit layout design.
Operations Research, 36:493–51, 1988.

[15] R. Barr, B.L. Richard, A. Golden, J.P. Kelly, M.G.C. Resende, and W.R.
Stewart. Designing and reporting on computational experiments with heuristic
methods. Journal of Heuristic, 1:9–32, 1995.

[16] R. Battiti. Reactive Search: Toward Self-Tunning Heuristic, chapter 4 in Mo-


dern Heuristic Search Methods, pages 61–83. Jonh Wiley and Sons, 1996.

[17] R. Battiti and G. Tecchiolli. The reactive tabu search. ORSA Journal on Com-
puting, 6(2):126–140, 1994.

[18] E.B. Baum. Iterated descent: A better algorithm for local search in combina-
torial optimization problems. Technical report, Caltech, Pasadena, CA, USA,
1986.

[19] J. Baxter. Local optima avoidance in depot location. Operational Research


Society, 32:815–819, 1981.

[20] J. Beasley, M. Krishnamoorthy, Y. Sharaiha, and D. Abramson. The displace-


ment problem and dynamically scheduling aircraft landings, 2002.

[21] J. Beasley, M. Krisnamoorthy, Y. Sharaiha, and D. Abramson. Scheduling


aircraft landings - the static case. Transportation Science, 34:180–197, 2000.

[22] J. Beasley, J. Sonander, and P. Havelock. Scheduling aircraft landings at lon-


don heathrow using a population heuristic. Journal of the Operational Resear-
ch Society, 52:483–493, 2001.

[23] S. Binato, W.J. Hery, D. Loewenstern, and M.G.C. Resende.

[24] S. Binato and G.C. Oliveira. Essays and Surveys in Metaheuristic, chapter
GRASP: An Annotated Bibliography for Transmission Network Expansion
Plannig, pages 325–367. Kluwer Academic Publishers, 2002.
BIBLIOGRAFÍA 197
[25] S. Binato and G.C. Oliveira. A Reactive GRASP for Transmission Network
Expansion Plannig, chapter 3 in Essays and Surveys in Metaheuristic, pages
81–100. Kluwer Academic Publishers, 2002.

[26] M. Birattari, L. Paquete, T. Stüztle, and K. Varrentrapp. Clasification of me-


taheuristic and design of experiments for the analysis componentes. Technical
report, Darmstadt University of Technology, Germany, 2001.

[27] A. Blanco, D. Pelta, and J.L. Verdegay. Introducing fans: A fuzzy adaptive
neighborhood search. In Proceedings of 8th IPMU’00 Conference, volume 2,
pages 594–597, 2000.

[28] A. Blanco, D.A. Pelta, and J.L. Verdegay. Applying a fuzzy sets-based heu-
ristic to the protein structure prediction problem. International Journal of
Intelligent Systems, 17:629–643, 2002.

[29] A. Blanco, D.A. Pelta, and J.L. Verdegay. A fuzzy valuation-based local search
framework for combinatorial problems. Journal of Fuzzy Optimization and
Decision Making, 1(2):177–193, 2002.

[30] A. Blanco, D.A. Pelta, and J.L. Verdegay. Fans: A fuzzy adaptive neighbor-
hood search method for optimization problems. Inteligencia Artificial, 2003.

[31] A. Blanco, D.A. Pelta, and J.L. Verdegay. Pattern search in molecules with
fans: Preliminary results. In Proceedings of EvoBio’03 Conference, 2003.

[32] C. Blum and A. Roli. Metaheuristics in combinatorial optimization: Overview


and conceptual comparison. ACM Computing Surveys, 35(3):268–308, 2003.

[33] H. Bündenbender, T. Grünert, and H.J. Sebastian. An hybarid tabu sear-


ch/branch and bound algorithm for the direct flight network design problem.
Technical report, Institut für Wirtschaftswissenschaften, Aachen, Germany,
1999.

[34] C.G.E. Boender, A.H.G. Rinnooy, L. Stougie, and G.T. Timmer. A stochastic
method for global optimization. Mathematical Programming, 22:125–140,
1982.

[35] K.D. Boese, A.B. Kahng, and S. Muddu. A new adaptive multi-start technique
for combinatorial global optimisation. Operations Research Letters, 16:103–
113, 1994.

[36] E. Bonabeau, M. Dorigo, and G. Theraulaz. Swarm Intelligence: From Natural


to Artificial Systems. Oxford University Press, 1999.
198 BIBLIOGRAFÍA
[37] J.S. De Bonet, C.L. Isabell, and P. Viola. Mimic: Finding optima by estimating
probability densities. Advances in Neural Information Processing Systems, 9,
1997.
[38] G.E.P. Box. Evolutionary operation: a method of increasing industrial produc-
tivity. Applied Statistics, 10:81–101, 1957.
[39] J. Branke. Evolutionary approaches to dynamic optimization problems - a
survey. In GECCO Workshop on Evolutionary Algorithms for Dynamic Opti-
mization Problems, pages 134–137, 1999.
[40] J. Branke. Memory enhanced evolutionary algorithm for changing optimi-
zation problems. In Proc. of the Congress on Evolutionary Computation -
CEC’99, pages 1875–1882, 1999.
[41] J. Branke. Evolutionary approaches to dynamic optimization problems - up-
dated survey. In GECCO Workshop on Evolutionary Algorithms for Dynamic
Optimization Problems, pages 27–30, 2001.
[42] J. Branke, T. Kaussler, and H. Schmidt. A multi-population approach to dyna-
mic optimization problems. In Adaptive Computing in Design and Manufac-
turing, 2000.
[43] J.L. Bresina. Heuristic-biased stochastic sampling. In Proceedings of
Thirteenth National Conference on Artificial Intelligence, pages 271–278,
Portland, USA, 1996.
[44] J. Brimberg, P. Hansen, N. Mladenovìc, and É. Taillard. Improvements and
comparison of heuristic for solving the multisource weber problem. Operation
Research, 48(3):444–460, 2000.
[45] P. Brucker, J. Hurink, and F. Werner. Improving local search heuristics for
some scheduling problems: Part i. Discrete Applied Mathematics, 65:97 122,
1996.
[46] P. Brucker, J. Hurink, and F. Werner. Improving local search heuristics for
some scheduling problems: Part ii. Discrete Applied Mathematics, 72:47–69,
1997.
[47] E. Burke, G. Kendall, J.Ñewall, E. Hart, P. Ross, and S. Schulenburg. Hyper-
Heuristic: An Emerging Direction in Modern Search Technology, chapter 16
in Handbook of Metaheuristic, pages 457–474. Kluwer Academic Publishers,
2003.
[48] P. Calégari, C. Coray, A. Hertz, D. Kobler, and P. Kuonen. A taxonomy of
evolutionary algorithms in combinatorial optimization. Journal of Heuristic,
5:145–158, 1999.
BIBLIOGRAFÍA 199
[49] M.F. Cardoso, R.L. Salcedo, and S.F. Azevedo. Nonequilibrium simulated
annealing: A faster approach to combinatorial minimization. Industrial Engi-
neering and Chemical Research, 33:1908–1918, 1994.

[50] A. Carlisle and G. Dozier. Adapting particle swarm optimization to dynamic


environments. In Proceedings of the 2000 ICAI, pages 429–434, 2000.

[51] A. Carlisle and G. Dozier R. Tracking changing extrema with particle swarm
optimizer. Technical report, Auburn University Technical Report CSSE01-08,
2001.

[52] J. Carpenter, P. Clifford, and P. Fearnhead. Building robust simulation-based


filters for evolving data sets, 1999.

[53] W. Cedeno and V. R. Vemuri. On the use of niching for dynamic landsca-
pes. In Proceedings of the 4th IEEE International Conference on Evolutionary
Computation, 1997.

[54] V. Cerny. Thermodynamical approach to the travelling salesman problem: An


efficient simulated annealing. Journal of Optimization Theory and Applica-
tions, 45:41–45, 1985.

[55] K.C. Chang and D.-Z. Du. Efficient algorithms for layer assignment problems.
IEEE Transaction on Computer-Aided Design, 6:67–78, 1987.

[56] I. Charon and O. Hudry. The noising method: A new method for combinatorial
optimization. Operation Research Letters, 14:133–137, 1993.

[57] I. Charon and O. Hudry. Variations on the noising schemes for a clustering
methods. In Proceedings of MIC’99 Conference, pages 147–150, 1999.

[58] I. Charon and O. Hudry. Application do the noising method tod the travelling
salesman problem. European Journal of Operational Research, 125:266–277,
2000.

[59] I. Charon and O. Hudry. The noising method: A generalization of some me-
taheuristic. European Journal of Operational Research, 135:86–101, 2001.

[60] H.M. Cheh, J.B. Goldberg, and R.G. Askin. A note on the effect of
neighborhood-structure in simulated annealing. Computers and Operations
Research, 79:117–128, 1991.

[61] R. Chen, Y. Kajitani, and S. Chan. A graph-theoretic via minimization algo-


rithm for twolayer printed circuit boards. IEEE Transaction on Circuits and
Systems, 30:284–299, 1983.
200 BIBLIOGRAFÍA
[62] V. Cicirello and S. Smith. Ant colony control for autonomous decentralized
shop floor routing. In Proceedings of the 5th International Symposium on
Autonomous Decentralized Systems, pages 74–83, 2001.

[63] H.G. Cobb. An investigation into the use of hypermutation as an adaptive ope-
rator in genetic algorithms having continuous time-dependent nonstationary
environments. In NRL memorandum report 6760, 1990.

[64] H.G. Cobb and J.J Grefensette. Genetic algorithms for tracking changing en-
vironments. In proceedings of the 5th ICGA, volume 5, 1992.

[65] C.A. Coello. A comprehensive survey of evolutionary-based multiobjective


optimization techniques. Knowledge and Information Systems, 1(3):129–156,
1998.

[66] H. Cohn and M. Fielding. Simulated annealing: Searching for an optimal


temperature schedule. SIAM Journal on Optimization, 9:779–802, 1999.

[67] J. Cohoon, S. Hedge, W. Martin, and D. Richards. Punctuated equilibria: A


parallel genetic algorithm. In In Proceedings of 2nd International Conference
on Genetic Algorithms and their Applications, pages 148–154, 1987.

[68] R.J. Collins. Studies in Artificial Evolution. PhD thesis, Univertity of Califor-
nia, 1992.

[69] A. Colorni, M. Dorigo, V. Maniezzo, and M. Trubian. Ant system for job-shop
scheduling. JORBEL Belgian Journal of Operations Research, Statistic and
Computer Science, 34:39–53, 1994.

[70] W.J. Cook, W.H. Cunningham, W.R. Pulleyblank, and A. Schrijver. Combina-
torial Optimization. Wiley-Interscience, 1998.

[71] Dorigo M. Corne, D. and F. Glover, editors. New Ideas in Optimization. Mc-
Graw Hill, 1999.

[72] R.C. Correa, F.C. Gomes, C.A.S. Oliveira, and P.M. Pardalos. A parallel im-
plementation of an asynchronous team to the point-to-point connection pro-
blem. Parallel Computing, 29(4):447–466, 2003.

[73] T.G. Crainic and M. Toulouse. Parallel Strategies for Meta-Heurstic, chapter
17 in Handbook of Metaheuristic, pages 475–514. Kluwer Academic Publis-
hers, 2003.

[74] P. Crescenzi and V Kann. A compendium of np optimization problems.


BIBLIOGRAFÍA 201
[75] D. Dasgupta. Incorporating redundancy and gene activation in mechanism in
genetic search. In Practical Handbook of Genetic Algorithms, volume 2, pages
303–316, 1995.

[76] D. Dasgupta and D.R. McGregor. Nonstationary function optimization using


the structured genetic algorithm. In Proc. Parallel Problem Solving from Na-
ture, volume 2, pages 145–154, 1992.

[77] T. Davis, D. Isaacson, J. Robinson, W. den Braven, K. Lee, and B. Sanford.


Operational test results of teh passive final approach spacing tool. In IFAC 8th
Symposium on Transportation Systems, 1997.

[78] R. Dawkins. The Selfish Gene. Clarendon Press, Oxford, UK, 1976.

[79] A. Díaz, F. Glover, M. H. Ghaziri, J. L. González, M. Laguna, and F. T. TT-


seng. Optimización Heurística y Redes Neuronales. Paraninfo, Madrid, 1996.

[80] K.A. De Jong. An Analysis of the Behavior of a Class of Genetic Adaptive


Systemes. PhD thesis, University of Michigan, Ann Arbor, 1975.

[81] O. Dolezal, T. Hofmeister, and H. Lefmann. A comparison of approximation


algorithms for the maxcut-problem. Technical report, Universität Dortmund,
1999.

[82] M. Dorigo. Optimization, Learning and Natural Algorithms. PhD thesis, Di-
partimento di Elettronica, Politecnico di Milano, Itali, 1992.

[83] M. Dorigo, E. Bonabeau, and G. Theraulaz. Ant algorithms and stigmergy.


Future Generation Computer Systems, 16(8):851–871, 2000.

[84] M. Dorigo and G. Di Caro. The ant colony optimization metaheuristic. In New
Ideas in Optimization, pages 11–32, 1999.

[85] M. Dorigo and L.M. Ganbardella. Ant colony system: A coopertaive learning
approach to the travelling salesman problem. IEEE Transaction on Evolutio-
nary Computation, 1(1):53–66, 1997.

[86] M. Dorigo, V. Maniezzo, and A. Colorni. The ant system: Optimization by


a colony of cooperationg agents. IEEE Transaction on Systems, Man and
Cybernetics-Part B, 26(1):1–13, 1996.

[87] M. Dorigo and T. Stützle. The Ant Colony Optimization Metaheuristic: Algo-
rithms Applications and Advances, chapter 9 in Handbook of Metaheuristic,
pages 251–286. Kluwer Academic Publishers, 2003.

[88] A. Doucet, J.F.G. de Freitas, and N.J. Gordon. Sequential Monte Carlo Met-
hods in Practice. Springer Verlag, 2001.
202 BIBLIOGRAFÍA
[89] M. Dror and W. Powell. Stochastic and dynamic models in transportation.
Operations Research, 41:11 – 14, 1993.

[90] A. Duarte and R. Martí. Tabu search and grasp for the maximum diversity
problem. European Journal of Operational Research, to appear.

[91] G. Dueck and T. Scheuer. Threshold accepting: A general purpose optimiza-


tion algorithm. Journal of Computational Physics, 90, 1990.

[92] W. Durham. Co-Evolution: Genes, Culture and Human Diversity. Stanford


University Press, 1991.

[93] R.C. Eberhart and Y. Shi. Tracking and optimizing dynamic systems with par-
ticle swarms. In Proceedings of the 2001 Congress on Evolutionary Compu-
tation, CEC2001, pages 94–100, 2001.

[94] E.W. Eglase. Simulated annealing: A tool operational research. Journal of


Operational Research, 46:271–281, 1990.

[95] M. Ehrgott and X. Gandibleux. An annotated bibliography of multiobjecti-


ve combinatorial optimization. Technical report, Universitat Kaiserslautern,
2000.

[96] S. Eilon. More against optimization. Omega, 5, 1977.

[97] C. Eyckelhof and M. Snoek. Ant systems for a dynamic tsp: Ants caught in
a traffic jam. In Proceedings of Third International Workshop ANTS 2002,
LNCS 2463, pages 88–99, 2002.

[98] U. Faigle. Some convergence results for probabilistic tabu search. ORSA
Journal on Computing, 4:32–37, 1992.

[99] T.A. Feo and M.G.C. Resende. A probabilistic heuristic for a computationally
dificult set covering problem. Operations Research Letters, 8:67–71, 1989.

[100] T.A. Feo and M.G.C. Resende. A greedy randomized adaptive search proce-
dure for maximum independent set. Operations Research, 42:860–878, 1994.

[101] T.A. Feo and M.G.C. Resende. Greedy randomized adaptive search procedu-
res. Journal of Global Optimization, 6:109–133, 1995.

[102] P. Festa, P.M. Pardalos, M.G. Resende, and C.C. Ribeiro. Randomized heu-
ristics for the max-cut problem. Optimization Methods and Software, 7:1033–
1058, 2002.

[103] M. Fielding. Simulated annealing with an optimal fixed temperature. SIAM


Journal of Optimization, 11:289–307, 2000.
BIBLIOGRAFÍA 203
[104] M. Finger, T. Stützle, and H. Lourenço. Exploiting fitness distance correlation
of set covering problems. Applications of Evolutionary Computing, Volume
2279 in Lecture Notes in Computer Science, pages 1–71, 2002.

[105] A. Fink and S. Voss. Metaheuristic Class Libraries, chapter 18 in Handbook


of Metaheuristic, pages 515–535. Kluwer Academic Publishers, 2003.

[106] M.A. Fleischer. Generalized Cybernetic Optimizatio: Solving Continuos Va-


riable Problems, chapter An Introduction to Variable Neighborhood Search,
pages 403–418. Kluwer Academic Publishers, 1999.

[107] C. Fleurent and F. Glover. Improved constructive multistart strategies for the
quadratic assignment problem using adaptive memory. INFORMS Journal on
Computing, 11:198–204, 1999.

[108] L. Fogel, A. Owens, and M. Walsh. Artificial intelligence through a simulation


of evolution. In Biophysics and Cybernetic Systems: Proceedings of the 2nd
Cybernetic Sciences Symposium, pages 131–155, 1965.

[109] L. Fogel, A. Owens, and M. Walsh. Artificial Intelligence through Simulated


Evolution. John Wiley and Sons, 1966.

[110] B.L. Fox. Integrating and acceletating tabu search, simulated annealing and
genetic algorithms. Annals of Operations Research, 41:47–67, 1993.

[111] A.S. Fraser. Simulation of genetic systems by automatic digital computers.


Australian Journal of Biological Science, 10:484–491, 1957.

[112] R. Friedberg. A learning machine, part i. IBM Journal of Research and Deve-
lopment, 10:2–13, 1958.

[113] R. Friedberg, B. Dunham, and J. North. A learning machine, part ii. IBM
Journal of Research and Development, 3:282–287, 1959.

[114] M.R. Garey and S.J. Johnson. Computers and Intractability: A Guide to the
Theory of NP-Completeness. Freeman, San Francisco, USA, 1979.

[115] M. Gendreau. Handbook of Metaheuristic, chapter An Introduction to Tabu


Search, pages 37–54. Kluwer Academic Publishers, 2003.

[116] M. Gendreau and J.-Y. Potvin. Metaheuristic in combinatorial optimization.


Technical report, Département d’informatique et de Recherche opérationnelle,
Université de Montreal, 2003.

[117] A. Ghosh, S. Tstutsui, and H. Tanaka. Function optimization in nonstationary


environment using steady state genetic algorithm with aging of individuals. In
204 BIBLIOGRAFÍA
Proceedings of the IEEE International Conference on Evolutionary Compu-
tation, pages 666–671, 1998.

[118] J. B. Ghosh. Computational aspects of the maximum diversity problem. Ope-


rations Research Letters, 19:175–181, 1996.

[119] F. Glover. Parametric Combinations of Local Job Shop Rules, chapter 4 in


ONR Research Memorandum. Number 117. Carnegie Mellon University,
1963.

[120] F. Glover. Heuristic for integer programming using surrogate constraints. De-
cision Sciences, 8:533–549, 1977.

[121] F. Glover. Future paths for integer programming and links to artificial intelli-
gence. Computers and Operations Research, 13:533 549, 1986.

[122] F. Glover. Tabu search-part i. ORSA Journal on Computing, 1:190–206, 1989.

[123] F. Glover. Tabu search-part ii. ORSA Journal on Computing, 2:4–32, 1990.

[124] F. Glover. A template for scatter search and path relinking. In Artificial Evo-
lution, Lecture Notes in Computer Science, pages 14–53, 1998.

[125] F. Glover and G. Kochenberger. Handbook of metaheuristics. Kluwer Acade-


mic Publishers, 2002.

[126] F. Glover, C. C. Kuo, and K. S. Dhir. Heuristic algorithms for the maxi-
mum diversity problem. Journal of Information and Optimization Sciences,
19(1):109–132, 1998.

[127] F. Glover and M. Laguna. Tabu Search. Kluwer Academic Publishers, Boston,
Hardbound, 1997.

[128] F. Glover, M. Laguna, and R. Martí. Fundamentals of scatter search and path
relinking. Control and Cybernetics, 29(3):653–684, 2000.

[129] F. Glover, M. Laguna, and R. Martí. Scatter Search and Path Relinking: Ad-
vances and Applications, chapter 1 in Handbook of Metaheuristic, pages 1–35.
Kluwer Academic Publishers, 2003.

[130] F. Glover, M. Laguna, and R. Martí. Scatter search and path relinking: Founda-
tions and advanced designs. In New Optimization techniques in Engineering,
2003.

[131] F. Glover, M. Laguna, and R. Martí. New Optimization Techniques in Engi-


neering, chapter New Ideas and Applications of Scatter Search and Path Re-
linking. Springer-Verlag, 2004.
BIBLIOGRAFÍA 205
[132] F. Glover, M. Laguna, and R. Martí. New Optimization Techniques in Enginee-
ring, chapter Scatter Search and Path Relinking: Foundations and Advanced
Designs. Springer-Verlag, 2004.

[133] F. Glover and B. Meilán. Búsqueda tabu. Revista Iberoamericana de Inteli-


gencia Artificial, (19):29–48, 2003.

[134] M.X. Goemans and D.P. Williams. Improved approximation algorithms for
max-cut and satisfiability problems using semidefinite programming. Journal
of the ACM, 42:1115–1142, 1995.

[135] D. E. Goldberg and R. E. Smith. Nonstationary function optimization using


genetic algorithm with dominance and diploidy. In Proceedings of the 2nd
International Conference on Genetic Algorithms, pages 59–68, 1987.

[136] D.E. Goldberg. Genetic Algorithms in Search, Optimization and Machine


Learning. Addison Wesley Longman Inc., 1989.

[137] J.L. Gonzalez. Mathematical Models of Hitch Assignament in International


Transportation. PhD thesis, University of Texas, Austin, Texas, USA, 1990.

[138] N.J. Gordon, D.J. Salmond, and A.F.M. Smith. Novel approach to
nonlinear/non-gaussian bayesian state estimation. Radar and Signal Proces-
sing, IEE Proceedings F, 140.

[139] W. Gosti, G.Ñguyen, M. Wan, and M. Zhou. Approximation algorithms for


the max-cut problem. Technical report, Departament of Electrical Engineering
and Computer Science. University of California, 1995.

[140] J.J Grefensette. Genetic algorithms for changing environments. In Problem


solving from nature 2, volume 2, 1992.

[141] J.J Grefensette and C.L. Ramsey. An approach to anytime learning. In Pro-
ceedings of the 9th Int Conf on Machine Learning, pages 189–195, 1992.

[142] J.J. Grefenstette. Optimization of control parameters for genetic algorithms.


IEEE Transaction on Systems, Man and Cybernetics, 16(1):122–128, 1986.

[143] P. Greistorfer and S. Voss. Controlled pool maintenance in combinatorial op-


timization. In Conference on Adaptive Memory and Evolution: Tabu Search
and Scatter Search, 2001.

[144] G. Gutin and A. Punnen. The traveling salesman problem and its variations.
Kluwer Academic Publishers, 2004.
206 BIBLIOGRAFÍA
[145] B. Hadad and C. Eick. Supporting poliploidy in genetic algorithms using do-
minance vectors. In Proceedings of the Sixth International Conference on
Evolutionary programming, vol. 1213 of LNCS, pages 223–234, 1997.

[146] F.O. Hadlock. Finding a maximum cut of a planar graph in polynomial time.
SIAM Journal on Computing, 4:221–225, 1975.

[147] L.W. Hagen and A.B. Kahng. Combining problem reduction and adaptive
multi-start: A new technique for superior iterative partitioning. IEEE Transac-
tions on CAD, 16:709–717, 1997.

[148] B. Hajek. Cooling schedules for optimal annealing. Mathematics of Opera-


tions Research, 13:311–329, 1988.

[149] P. Hansen and N. Mladenovìc. Metaheuristic: Advanced Trends in Local Sear-


ch Paradigms for Optimization, chapter An Introduction to Variable Neighbor-
hood Search, pages 433–458. Kluwer Academic Publishers, 1999.

[150] P. Hansen and N. Mladenovìc. J-means: A new local search heuristic for mi-
nimum sum-of-squares clustering. Pattern Recognition, 34:401–415, 2001.

[151] P. Hansen and N. Mladenovìc. Variable neighborhood decomposition search.


Journal of Heuristic, 7(4):335–350, 2001.

[152] P. Hansen and N. Mladenovìc. Handbook of Metaheuristic, chapter Variable


Neighborhood Search, pages 145–184. Kluwer Academic Publishers, 2003.

[153] P. Hansen, N. Mladenovìc, and J.A. Moreno. Búsqueda de entorno variable.


Revista Iberoamericana de Ineligencia Artificial, 19(4):77–92, 2003.

[154] J.-K. Hao. Meta-heuristic for combinatorial optimization. Technical report,


Université d’Angers, France, 2001.

[155] G. Harik. inkage learning in via probabilistic modeling in the ecga. Technical
report, Report 99010, IlliGAL Technical Report, 1999.

[156] J.P. Hart and A.W. Shogan. Semi-greedy heuristic: An empirical study. Ope-
rations Research Letters, 6:107–114, 1987.

[157] D. Henderson, S.H. Jacobson, and W.A. Jonhson. Handbook of Metaheuris-


tic, chapter The Theory and Practice of Simulated Annealing, pages 287–319.
Kluwer Academic Publishers, 2003.

[158] F. Herrera and M. Lozano. Gradual distributed genetic algorithms. Technical


report, ETS de Ingeniería Informática. Universidad de Granada, 1997.
BIBLIOGRAFÍA 207
[159] F. Herrera, M. Lozano, and C. Moraga. Hierarchical distributed genetic al-
gorithms. Technical report, ETS de Ingeniería Informática. Universidad de
Granada, 1997.

[160] J.H. Holland. Adaptation in Natural and Artificial Systems. The University of
Michigan Press, 1975.

[161] E. Horowitz and S. Sahni. Fundamentals of Computer Algorithms. Computer


Science Press, 1978.

[162] http:heur.uv.es. Red española de procedimientos metaheurísticos, 2004.

[163] T.C. Hu, A.B. Kahing, and C.W.A. Tsao. Old bachelor acceptance: A new
class of non-monotone threshold accepting method. ORSA Journal on Com-
puting, 7:417–425, 1995.

[164] X. Hu and R. C. Eberhart. Adaptive particle swarm optimization: detection


and response to dynamic systems. In Proceedings of the IEEE Congress on
Evolutionary Computation, CEC2002, pages 1666–1670, 2002.

[165] S.H. Jacobson. Analyzing the Performance of Local Seach Algorithms Using
Generalized Hill Climbing Algorithms, chapter 20 in Essays and Surveys on
Metaheuristics. Kluwer Academic Publishers, 2002.

[166] S.H. Jacobson, K.A. Sullivan, and A.W. Johnson. Discrete manofacturing pro-
cess design optimization using computer simulation and generalized hill clim-
bing algorithms. Engineering Optimization, 31:247–260, 1998.

[167] A. Jaszkiewicz. A comparative study of multiple-objective metaheuristic on


the bi-objective set covering probem and the pareto memetic algorithm. Tech-
nical report, Poznan University of Technology, 2001.

[168] A. Jaszkiewicz. Multiple objective metaheuristic algorithms for combinatorial


optimization. Technical report, Poznan University of Technology, 2001.

[169] D.S. Johnson. Local optimization and the travelling salesman problem. Pro-
ceedings of the 17th Colloquium on Automata, Languages, and Programming,
volume LNCS, 433:446–461, 1990.

[170] T. Jones. One operator, one landscape. Technical report, Santa Fe Institure,
California, USA, 1995.

[171] A.W. Jonhson. Generalized Hill Climbing Algorithms for Discrete Optimiza-
tion Problems. PhD thesis, Department of Industria and Systems Engineering,
Virginai Polytechcnic and State University, Blacksburg, VA, USA, 1996.
208 BIBLIOGRAFÍA
[172] A.W. Jonhson and S.H. Jacobson. On the convergence of generalized hill
climbing algorithms. Discrete Applied Mathematics, 119:37–57, 2002.

[173] R. Karp. Reducibility among combinatorial problems. In R. Miller and J.


Thatcher (eds.): Complexity of Computer Computations. Plenum Press, pages
85–103, 1972.

[174] J.P. Kelly and I.H. Osman. Meta-Heuristic: Theory and Applications. Kluwer
Academic Publisher, 1996.

[175] J. Kennedy and R. Eberhart. Particle swarm optimization. In Proceedings of


IEEE International Conference on Neural Networks, volume 4.

[176] J. Kennedy and R.C. Eberhart. The Particle Swarm: Social Adaptation in
Information Processing Systems, chapter 25 in New Ideas in Optimization,
pages 379–387. McGraw Hill, 1999.

[177] J. Kennedy and R.C. Eberhart. Swarm Intelligence. Morgan Kaufmann Pu-
blishers, 2003.

[178] M.D. Kidwell and D.J. Cook. Genetic algorithm for dynamic task scheduling.
In 13 IEEE Int Phoenix Conf on Computers and Communications, pages 61–
67, 1994.

[179] P. Kilby, P. Proser, and P. Shaw. Dynamic vrps: a study of scenarios. Technical
report, Report APES-06-1998, University of Strathclyde, 1998.

[180] S. Kirkpatrick, J.C.D. Gelatt, and M.P. Vecchi. Optimization by simulated


annealing. Science, 220:671–680, 1983.

[181] J. Kleinberg and E. Tardos. Algorithm Design. Pearson International Edition,


2006.

[182] J.R. Koza. Genetic Programming: on the programming of computers by means


of natural selection. MIT Press, 1992.

[183] J.R. Koza. Genetic Programming: Automatic Synthesis of Topologies and Nu-
merical Parameters, chapter 4 in Handbook of Metaheuristic, pages 83–104.
Kluwer Academic Publishers, 2003.

[184] C.C. Kuo, F. Glover, and K. S. Dhir. Analyzing and modeling the maximum
diversity problem by zero-one programming. Decision Sciences, 24.

[185] M. Laguna. Global Optimization and Meta-heuristics, chapter in Encyclope-


dia of Life Support Systems, Theme 6.5, Topic 2. Eolss Publishers Co. Ltd,
2002.
BIBLIOGRAFÍA 209
[186] M. Laguna and R. Marti. Scatter Search methodology and implementations in
C. Kluwer Academic Publishers, 2003.

[187] P. Larrañaga and J.A. Lozano, editors. Estimation of Distribution Algo-


rithms:A New Tool for Evolutionary Computation. Kluwer Academic Publis-
hers, 2001.

[188] P. Larrañaga, J.A. Lozano, and H. Mühlenbein. Algoritmos de estimación de


distribuciones en problemas de optimización combinatoria. Revista Iberoame-
ricana de Inteligencia Artificial, (19):149–168, 2003.

[189] T.L. Lau. Guided Genetic Algorithm. PhD thesis, Department of Computer
Science. University of Essex, Colchester, UK, 1999.

[190] J.K. Lenstra, A.H.G. Rinnooy, and K.P. Van Emde Boas. An appraisal of
computational complexety for operations research. European Journal of Ope-
rational Research, 11, 1982.

[191] J.S. Liu and R. Chen. Sequential monte carlo methods for dynamic systems.
Journal of the American Statistical Association, 93.

[192] A. Lokketangen and F. Glover. Metaheuristics: Theory and Applications,


chapter Probabilistic Move Selection i Tabu Search for 0/1 Mixed Integer Pro-
gramming Problems, pages 467–488. Kluwer Academic Publishers, 1996.

[193] H.R. Lourenço, O.C. Martin, and T. Stützle. Iterated Local Search, chapter 11
in Handbook of Metaheuristic, pages 321–354. Kluwer Academic Publishers,
2003.

[194] J.A. Lozano and P. Larrañaga. Optimization by learning and simulation of


probabilistic graphical models. In A tutorial in the Parallel Problem Solving
from Nature - PPSN VII, 2002.

[195] J. Ma and J.E. Straub. Simulated annealing using the classical density distri-
bution. Journal of Chemical Physics, 101:533–541, 1994.

[196] R. Martí. Procedimientos metaheurísticos en optimización combinatoria. Ma-


temátiques, 1(1):3–62, 2000.

[197] R. Martí. Multi-Start Methods, chapter 12 in Handbook of Metaheuristic, pa-


ges 355–369. Kluwer Academic Publishers, 2003.

[198] R. Martí and M. Laguna. Scatter search: Diseño básico y estrategias avanza-
das. Revista Iberoamericana de Inteligencia Artificial, 2003.

[199] O. Martin and S.W. Otto. Combining simulated annealing with local search
heuristics. Annals of Operations Research, 63:57–75, 1996.
210 BIBLIOGRAFÍA
[200] O. Martin, S.W. Otto, and E.W. Felten. Large-step markov chains for the
traveling salesman problem. Journal of Complex Systems, 5(3), 1991.

[201] D.C. Mattfeld and C. Bierwirth. A search space analysis of the job shop sche-
duling problem. Baltzer Journals, 1996.

[202] T. Mautor and P. Michelon. Mimausa: A new hybrid method combining exact
solutions and local search. In Proceedings of 2nd MIC’97 Conference, 1997.

[203] S. McKee and M.B. Reed. An algorithm for the alignment of gas turbine
components in aircraft. IMA Journal of Mathematics in Management, 1:133–
144, 1987.

[204] A. Menon. Frontiers of Evolutionary Computation. Kluwer Academic Publis-


hers, 2004.

[205] P. Mertz and B. Freisleben. Fitness landscape and memeitc algorithm des-
ign. Technical report, Dept. of Electrical Engineering and Computer Science,
University of Siegen, 1999.

[206] N. Metropolis, M. Rosenbluth, A. Teller, and E. Teller. Equation of state cal-


culations by fast computing machines. Journal fo Chemical Physics, 21:1087–
1092, 1953.

[207] P. Metz and B. Freislebe. Fitness landscapes and memetic algoirthms design.
Technical report, University of Siegen, 2003.

[208] H. Mühlenbein and G. Paass. From recombination of genes to the estimation


of distributions i. binary parameters. In LNCS 1411: pararel problme solving
from nature PPSN IV, pages 178–187, 1996.

[209] H. Mühlenbein, M. Schomisch, and J.J. Born. The parallel genetic algorithm
as funciton optimizerd. In In Proceedings of 4td International Conference on
Genetic Algorithm, pages 271–278, 1991.

[210] Z. Michalewicz. Genetic Algorithms + Data Structure = Evolution Programs.


Springer-Verlag, Berlin, Heidelberg, Germany, 1996.

[211] Z. Michalewicz and D.B. Fogel. How to Solve it: Modern Heuristic. Springer-
Verlag, Berlin, Heidelberg, Germany, 2000.

[212] P. Mills and E.P.K. Tsang. An empirical study of extended guided local sear-
ch on the quadratic assignment problem. In ECAI-2000 Workshop on Local
Search for Planning and Scheduling, 2000.

[213] P. Mills and E.P.K. Tsang. Guided local search for solving sat and weighted
max-sat problems. Journal of Automated Reasoning, 24:205–233, 2000.
BIBLIOGRAFÍA 211
[214] N. Mladenovìc, J. Petrovìc, V. Kovacevìc, and M. Kangalovìc. Solving spread
spectrum radar polyphase code design problem by tabu search and varaible
neighborhood search. Journal of Heuristic, 2004.

[215] N. Mladenovic and P. Hansen. A variable neighbohhood algorithm: A new


metaheuristic for combinatorial optimization. In Abstract for Papers presented
at Optimization Days, page 112, Montreal, 1995.

[216] N. Mladenovic and P. Hansen. Variable neighbohhood search. Computers


Operation Research, 24:1097–1100, 1997.

[217] H. Müller-Merbach. Heuristic and their design: A survey. European Journal


of Operation Research, 8:1–23, 1981.

[218] N. Mori and H.; Kita. Genetic algorithms for adaptation to dynamic envi-
ronments - a survey. In 26th Annual Conf of the IEEE Industrial Electronics
Society, 2000. IECON 2000, volume 4, pages 2947 – 2952, 2000.

[219] N. Mori, H. Kita, and Y. Nishikawa. Adaptation to a changing environment by


means of the thermodynamical genetic algorithm. In Proc. of the 4th Parallel
Problem Solving from Nature, volume 4, pages 513–522, 1996.

[220] N. Mori, H. Kita, and Y. Nishikawa. Adaptation to a changing environment by


means of the thermodynamical genetic algorithm. In Proc. of the 5th PPSN,
volume 5, pages 149–158, 1998.

[221] N. Mori, J. Yoshida, H. Tamaki, H. Kita, and Y. Nishikawa. A thermodynami-


cal selection rule for the genetic algorithm. In Proc. of the 2nd Int IEEE Conf
on Evolutionary Computation, pages 188–192, 1995.

[222] P. Moscato. On evolution, search, optimization genetic algorithms and mar-


tial arts: Towards memetic algorithms. Technical report, Caltech Concurrent
Computation Program, Report 826, California Institute of Technology, Pasa-
dena, California, USA, 1989.

[223] P. Moscato. An introduction to population approaches for optimization and


hierarchical objective functions: A discussion on the role of tabu search. An-
nals of Operations Research, 41:85–121, 1993.

[224] P. Moscato and C. Cotta. A Gentle Introduction to Memetic Algorithms, chap-


ter 5 in Handbook of Metaheuristic, pages 105–144. Kluwer Academic Pu-
blishers, 2003.

[225] P. Moscato and C. Cotta. Una introducción a los algoritmos meméticos. Re-
vista Iberoamericana de Inteligencia Artificial, 2003.
212 BIBLIOGRAFÍA
[226] P. Moscato and J.F. Fontanari. Convergence and finite-time behaviour of si-
mulated annealing. Advances in Applied Probability, 18:747–771, 1990.

[227] T.Ñicholson. Optimization in Industry, volume 11. Longman Press, 1971.

[228] Y.Ñourani and B. Andresen. A comparison of simulated annealing cooling


strategies. Journal of Physics A- Mathematical and General, 31:8373–8385,
1998.

[229] F.A. Ogbu and D.K. Smith. The application of the simulated annealing al-
gorithms to the solution of th c/m/cmax flowshop problem. Computers and
Operations Research, 17:143–253, 1990.

[230] K. Ohkura and K. Ueda. Genetic algorithm for nonstationary function optimi-
zation problems. Trans SICE, 8(6):269–276, 1995.

[231] J.W. Ohlmann and J.C. Bean. Compressed annealing: Simulated annealing
under preassure. Technical report, Department of Industrial and Operations
Engineering, Univerity of Michigan, Ann Arbor, Michigan, 2000.

[232] J.E. Orosz and S.H. Jacobson. Analysis of static simulated annealing algo-
rithms. Journal of Optimizatio Theory and Application, 2004. En prensa.

[233] J.J. Pantrigo. Resolución de Problemas de Optimización Dinámica mediante


la Hibridación entre Filtros de Partículas y Metaheurísticas Poblacionales.
PhD thesis, Universidad Rey Juan Carlos, Móstoles, Spain, 2005.

[234] J.J. Pantrigo, A. Duarte, A. Sánchez, and R. Cabido. Scatter search particle
filter to solve the dynamic travelling salesman problem. In EvoCOP, pages
177–189, 2005.

[235] J.J. Pantrigo, A.S. Montemayor, and A. Sánchez. Local search particle filter
applied to human-computer interaction. In 4th International Symposium on
Image and Signal Processing and Analysis (ISPA 2005), pages 279–284, 2005.

[236] J.J. Pantrigo and A. Sánchez. Hybridizing particle filters and population-based
metaheuristics for dynamic optimization problems. In Fifth International Con-
ference on Hybrid Intelligent Systems (HIS’05). Aceptado, 2005.

[237] J.J. Pantrigo, A. Sánchez, K. Gianikellis, and A. Duarte. Path relinking particle
filter for human body pose estimation. In SSPR/SPR, pages 653–661, 2004.

[238] C.H. Papadimitriou and K. Steiglitz. Combinatorial Optimization. Dover Pu-


blications, INC, 1998.

[239] V. Pareto. Cours D’Economie Politique. Vol i and Vol. II. F. Rouge, 1896.
BIBLIOGRAFÍA 213
[240] K.K. Parhi. VLSI Digital Signal Procesing Signal: Design and Implementa-
tion. Wiley-Interscience, New York, USA, 1999.

[241] D. Parrot and X. Li. A particle swarm model for tracking multiple peaks in
a dynamic environment using speciation. In Proceedings of the Congress on
Evolutionary Computation, CEC2004, pages 98–103, 2004.

[242] J. Pearl. Heuristic: Intelligent Search Strategies for Computer Problem Sol-
ving. Addison-Wesley, Reading, 1984.

[243] M. Pelikan and H. Mühlenbein. The bivariate marginal distribution algorithm.


Advances in Soft Computing-Engineering Design and Manufacturing, pages
521–535, 1999.

[244] D. Pelta, N. Krasnogor, A. Blanco, and J.L. Verdegay. F.a.n.s. for the protein
folding problem: Comparing encodings and search modes. In Proceedings of
MIC’01 Conference, 2001.

[245] B. Peng and R. Reynolds. Cultural algorithms: Knowledge learning in dyna-


mic environments. In Proceedings of the Congress on Evolutionary Compu-
tation, CEC2004, pages 1751–1758, 2004.

[246] C.B. Petty87, M.R. Leuze, and J.J. Grefensette. A parallel genetic algorithm.
In Poceedings 2nd Int. Conf. on Genetic Algorithm, pages 155–161, 1987.

[247] G. Pipe, T.C. Fogarty, and A. Winfield. Hybrid adaptive heuristic critic ar-
chitectures for learning in mazes with continuous search spaces. In Parallel
problem solving from naure, 866 in LNCS, pages 482–491, 1994.

[248] S. Poljak and Z. Tuza. The Max-Cut problem: A survey, chapter in Special Year
on Combinatorial Optimization. DIMACS Series in Discrete Mathematics and
Computer Science. American Mathematical Society, 1995.

[249] G. Polya. How to Sove it? Priceton University Press, 1957.

[250] M. Prais and C.C. Ribeiro. Reactive grasp: An application to a matrix de-
composition problem in tdma assignment problem. INFORMS Journal on
Computing, (164-176), 12.

[251] M. Prais and C.C. Ribeiro. Parameter variation in grasp implementation.


In Third Metaheuristic International Conference, pages 375–380, Angra dos
Reis, 1999.

[252] M. Prais and C.C. Ribeiro. Parameter variation in grasp procedures. Investi-
gación Operativa, 1:1–20, 2000.
214 BIBLIOGRAFÍA
[253] A. P. Punnen. The Traveling Salesman Problem and its Variations, chapter
The Traveling Salesman Problem: Applications, Formulations and Variations,
pages 1–28. Kluwer, 2004.

[254] C.S. Rabak and J.S. Sichman. Using a-teams to optimize automatic insertion
of electronic components. Advanced Engineering Informatics, 17(2):95–106,
2003.

[255] RAE. Diccionario de la Lengua Española. ESPASA-CALPE, 2003.

[256] C.L. Ramsey and J.J Grefensette. Case-based initialization of genetic algo-
rithms. In proceedings of the 5th ICGA, pages 84–91, 1993.

[257] M. Randall. Constructive meta-heuristics for dynamic optimization problems,


2002.

[258] I. Rechenberg. Evolutionsstrategie: Optimizierung Technischer Systeme nach


Prinzipien der Biologischen Evolution. Frommann-Holzboog, 1973.

[259] C. Reeves. Modern Heuristic Techniques for Combinatorial Problems. Mc-


Graw Hill, UK, 1995.

[260] C. Reeves. Genetic Algorithms, chapter 3 in Handbook of Metaheuristic, pages


55–82. Kluwer Academic Publishers, 2003.

[261] C. Reeves and I.H. Osman. Modern Heuristic Techniques for Combinatorial
Problems. Blackwell Scientific Publicactions, 1993.

[262] G. Reinelt. The linear ordering problem: Algorithms and applications. Re-
search and Exposition in Mathematics, 8, 1985.

[263] M.G.C. Resende and J.L. Gonzalez-Velarde. Grasp: Procedimientos de bús-


queda miopes aleatorizados adaptativos. Revista Iberoamericana de Inteligen-
cia Artificial, (19):61–76, 2003.

[264] M.G.C. Resende and C.C. Ribeiro. Handbook of Metaheuristic, chapter


Greedy Randomized Adaptive Search Procedures, pages 219–249. Kluwer
Academic Publishers, 2003.

[265] R.G. Reynolds. An Adaptive Computer Model of the Evolution of Agriculture.


PhD thesis, University of Michigan, Ann Arbor, 1971.

[266] R.G. Reynolds. An Adaptive Computer-Model for the Evolution of Plant


Collecting and Early Agriculture in the Eastern Valley of Oxaca, chapter Gui-
la Naquitz: Archaic Foraging and Early Agriculture in Oxaca, pages 439–500.
Academic Press, 1986.
BIBLIOGRAFÍA 215
[267] R.G. Reynolds. An introduction to cultural algorithms. In A.V. Sebald and L.J.
Fogel, editors, Proceedings of the Third Annual Conference on Evolutionary
Programming, pages 131–139, 1994.

[268] R.G. Reynolds. Cultural Algorithms: Theory and Applications, chapter 24 in


New Ideas in Optimization, pages 367–377. McGraw-Hill, 1999.

[269] C. Ribeiro and C. Souza. Variable neighborhood descent for the degree-
constrained minimum spanning tree problem. Discrete Applied Mathematics,
2001. En prensa.

[270] C. Ribeiro, E. Uchoa, and R. Werneck. A hybrid grasp with perturbations for
the steiner problem in graphs. INFORMS Journal on Computing, 14:228–246,
2002.

[271] C.C. Ribeiro and P. Hansen, editors. Essays and Surveys in Metaheuristic.
Kluwer Academic Publishers, 2002.

[272] E. Rich and K. Knight. Inteligencia Artificial. McGraw Hill, 1994.

[273] K. P. Ng and K. C. Wong. A new diploid scheme and dominance change


mechanism for nonstationary function optimization. In Proceedings of the
Sixth International Conference on Genetic Algorithms, pages 159–166, 1995.

[274] E. Rolland. A tabu search method for constrained real-number search: Appli-
cations to portfolio selection. Working Paper, The Gary Anderson Graduate
School of Management, University of California, Riverside 1996.

[275] F. Romeo and A. Sangiovanni-Vicentelli. A theoretical framework for simula-


ted annealing. Algorithmica, (6):302–345, 1991.

[276] K.E. Rosing. An empirical investigation of the effectiveness of a vertex substi-


tution heuristic. Environment and planning B: Palnning ans design, 24(1):59–
67, 1997.

[277] K.E. Rosing and C.S. ReVelle. Heuristic concentration: Two stage solution
construction. European Journal of Operational Research, 97:75–86, 1997.

[278] K.E. Rosing and C.S. ReVelle. Heuristic concentration and tabu search: A head
to head comparison. European Journal of Operational Research, 104:93–99,
1998.

[279] S. Russell and P.Ñorvig. Inteligencia Artificial. Un Enfoque Moderno. Prentice


Hall, 1996.

[280] C. Ryan. Diploidy without dominance. In Proceedings of the 3rd Nordic


Workshop on Genetic Algorithms, pages 63–70, 1997.
216 BIBLIOGRAFÍA
[281] N. Rychtyckyj, D. Ostrowski, G. Schleis, and R.G. Reynolds. Using cultural
algorithms in industry. In Proceedings of IEEE Swarm Intelligence Sympo-
sium, 2003.
[282] N. Sadeh and A. Kott. Models and techniques for dynamic demand-responsive
transportation planning, 1996.
[283] S. Saleem and R. Reynolds. Cultural algorithms in dynamic environments. In
Proceedings of the Congress on Evolutionary Computation, pages 1513–1520,
2000.
[284] Salvat. Enciclopedia Salvat. Salvat Editores, 2000.
[285] A. Sangiovanni-Vincentelli. j. Algoritmia, 6(3):295–301, 1991.
[286] T. Schiavinotto and T. Stützle. Search space analysis of the linear ordering
problem. Applications of Evolutionary Computing, volume 2611 in Lecture
Notes in Computer Science, 2003.
[287] C.L. Schmitt, L.M. Nehaniv, and R.H. Fujii. Linear analysi s of genetic algo-
rithms. Theoretical Computer Science, 200:101–134, 1998.
[288] F. Schoen. Two Phase Methods for Global Optimization, chapter 5 in Hand-
book of Global Optimization 2: Heuristic Approaches, pages 151–178. Kluwer
Academic Publishers, 2002.
[289] R. Schoonderwoerd, O. Holland, J. Bruten, and L. Rothcrantz. Ant colony
optimization for virtual-wavelength-path routing and wavelength allocation.
Adaptive Behaviour, 5:169–207, 1996.
[290] H.P. Schwefel. Numerical Optimization of Computer Models. John Wiley and
Sons, 1981.
[291] E.A. Silver, R.V. Vidal, and D. De Werra. A tutorial on heuristic methods.
European Journal of Operational Research, 5, 1980.
[292] R. E. Smith. Diploid genetic algorithm for search in time varying environment.
In Proceedings of Annual Southeast Regional Conference of the ACM, pages
175–179, 1987.
[293] S.A. Solla, G.B. Sorkin, and S.R. White. Configuration space analysis for
optimzation problems. NATO ASI Series, Disordered System and Byological
Organizations, 20:283–293, 1986.
[294] L. Sondergeld and S. Voss. Cooperative Intelligence Search Using Adaptive
Memory Techniques, chapter 21 in Metaheuristics: Advanced Trends in Lo-
cal Search Paradigms for Optimization, pages 297–312. Kluwer Academic
Publishers, 1999.
BIBLIOGRAFÍA 217
[295] W.M. Spears. Evolutionary Algorithms: The Role of Mutation and Recombi-
nation. Springer Verlag, 2000.

[296] J.M. Stern. Simulated annealing with a temperature dependent penalty func-
tion. ORSA Journal on Computing, 4:311–319, 1992.

[297] M. Sternberg and R. Reynolds. Using cutural algorithms to support re-


engineering of rule-based expert systems in dynamic performance environ-
ments: A case study in fraud detection. IEEE Transactions on Evolutionary
Computation, 1, 1997.

[298] J.E. Straub, J. Ma, and P. Amara. Simulated annealing using coarse grained
clasical dynamics: Smouuchowsky dynamics in the gaussian density approxi-
mation. Journal of Chemical Physics, 103:1574–1581, 1995.

[299] P.N. Strenski and S. Kirkpatrick. Analysis of finite length annealing schedules.
Algorithmica, 6:346–366, 1991.

[300] T. Stützle. Local Search Algorithms for Combinatorial Problems: Analysis,


Improvements and New Applications. PhD thesis, Department of Computer
Science, Darmstadt University of Technology, 1998.

[301] T. Stützle and H. Hoos. The MAX-MIN Ant System and Local Search for Com-
binatorial Optimization Problems: Towards Adaptive Tools for Combinatorial
Global Optimization, chapter Meta-Heuristics: Advances and Trends in Lo-
cal Search Paradigms for Optimization, pages 313–329. Kluwer Academic
Publishers, 1998.

[302] R.S. Sutton and A.G. Barto. Reinforcement Learning: An Introduction. MIT
Press, Cambridge, CA, USA, 1998.

[303] W. Sverdlik, R.G. Reynolds, and E. Zannoni. A self-tutoring algorithm for


concept learning in highly autonomous systems. In Proceedings of the 3rd
International Conference on Artificial Intelligence, Simulation and Planning
in High Autonomy Systems, 1992.

[304] E.D. Taillard, L.-M. Gambardella, M. Gendreau, and J.-Y. Potvin. Adaptive
memory programming: A unified view of meta-heuristics. European Journal
of Operational Research, 135(1):1–16, 2001.

[305] E.D. Taillard and S. Voss. POPMUSIC - Partial optimization metaheuristic


under special intensification conditions, chapter in Essays and surveys in me-
taheuristics, pages 613–630. Kluwer Academic Publishers, 2001.

[306] E. G. Talbi. A taxonomy of hybrid metaheuristics. Journal of Heuristics,


8:541–564, 2002.
218 BIBLIOGRAFÍA
[307] S.N. Talukdar, L. Baerentzen, A. Gove, and P. de Souza. Asynchronous teams:
Cooperation schemes for autonomous agents. Journal of Heuristics, 14(1):73–
102, 1998.

[308] S.N. Talukdar, S. Murthy, and R. Akkiraju. Asynchronous Teams, chapter 19


in Handbook of Metaheuristic, pages 437–556. Kluwer Academic Publishers,
2003.

[309] S.N. Talukdar, S.S. Pyo, and T. Giras. Asynchronous procedures for parallel
processing. IEEE Transaction on PAS, 102(11), 1983.

[310] P. Toth. The Vehicle Routing Problem. 2002.

[311] M. Toulouse, T.G. Crainic, and B. Sansó. Systemic behavior of cooperative


search algorithms. Parallel Computing, 30:57–79, 2004.

[312] C.A. Tovey. Simulated annealing. American Journal of Mathematical and


Management Sciences, 8:389–407, 1988.

[313] S. Tstutsui, Y. Fujimoto, and A. Ghosh. Forking genetic algorithm: Gas with
search space division schemes. Evolutionary Computation, 5(1):61–80, 1997.

[314] R.K. Ursem. Multinational ga optimization techniques in dynamic environ-


ments. In Evolutionary Computation Conference, pages 19–26, 2000.

[315] P.J.M. Van Larhooven and E.H.L. Aarts. Simulated Annealing: Theory and
Applications. Kluwer Academic Publishers, 1987.

[316] J.M. Varanelli and J.P. Cohoon. A fast method for generalized starting tempe-
rature determination in homogeneous twp-stage simulated annealing systems.
Computers and Operations Research, 26:481–503, 1999.

[317] F. Vavak, Fogarty, T.C., and K. Jukes. Learning the local search range for
genetic optimisation in nonstationary environments. In Proceedings of the 4th
IEEE International Conference on Evolutionary Computation, pages 355–360,
1997.

[318] S. Voss, S. Martello, I.H. Osman, and C. Roucairol, editors. Metaheuristic:


Advances and Trends in Local Search Paradigms for Optimization. Kluwer
Academic Publishers, Boston, 1999.

[319] C. Voudouris and E. Tsang. Guided local search. Technical Report CSM-247,
Department of Computer Science. University os Essex. Colchester. UK, 1995.

[320] C. Voudouris and E. Tsang. Solving the radio link assignment problems using
guided local search. In Proceedings of NATO Symposium on Frequency As-
signment, Sharing and Conservation Systems, 1998.
BIBLIOGRAFÍA 219
[321] C. Voudouris and E. Tsang. Guided local search and its application to the
travelling salesman problem. European Journal of Operational Research,
113(2):469–499, 1999.

[322] C. Voudouris and E. Tsang. Handbook of Metaheuristic, chapter Guided Local


Search, pages 185–218. Kluwer Academic Publishers, 2003.

[323] C. J. Wang and E. P. K. Tsang. Solving constraint satisfaction problems using


neural networks. In Proceedings of IEE Second Intermational Conference on
Artificial Neural Networks, pages 295–299, 1991.

[324] C. J. Wang and E. P. K. Tsang. VLSI for Neural Networks and Artificial In-
telligence, chapter A Cascadable VLSI Design for GENET, pages 197–196.
Plenum Press, New York, 1995.

[325] D.H. Wolpert and W.G. Macready. No free lunch theorems for optimization.
IEEE Transaction on Evolutionary Computation, 1:67–82, 1997.

[326] D.L. Woodroff. A class lybrary for heuristic search optimization. INFORMS
Computer Science Technical Section, pages 1–4, 1997.

[327] www.editorialmanager.com/heur/. Journal of heuristic, 2004.

[328] www.joc.pubs.informs.org/. Informs journal of computing, 2004.

[329] www.metaheuristic.net. Metaheuristic network website, 2004.

[330] D. Yan and H. Mukai. Sthocastic discrete optimization. SIAM Journal on


Control Optimization and Optimization, 30:594–612, 1992.

[331] H. Zanakis, J.R. Stelios, and A. Evans. Heuristic optimization: Why, when and
how to use it. Interfaces, 5(11):84–90, 1981.

[332] H. Zanakis, J.R. Stelios, A. Evans, and A. Vazacopoulos. Heuristic methods


and applications: A categorized survey. European Journal of Operation Re-
search, 43, 1989.

[333] H. Zhang-Can, H. Xiao-Lin, and C. Si-Duo. Dynamic traveling salesman pro-


blem based on evolutionary computation. In Proceedings of the 2001 Congress
on Evolutionary Computation, volume 2.

[334] A. A. Zhigljavsky. Theory of Global Random Search. Kluwer Academic Pu-


blishers, 1991.

[335] K. Zhu and K. Ong. A reactive method for real time dynamic vehicle routing
problem. In Proceedings of the 12th IEEE International Conference on Tools
with Artificial Intelligence, 2000.
220 BIBLIOGRAFÍA
[336] H.J. Zimmermann. Fuzzy Stes Theory and its Applications. Kluwer Academic
Publishers, 1996.

You might also like