Está en la página 1de 233

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/331196434

Optimización combinatoria - de la teoría a la práctica

Book · May 2018

CITATIONS READS
0 2,738

2 authors:

Mauricio Granada-Echeverri Jhon jairo Santa


Universidad Tecnológica de Pereira Universidad Tecnológica de Pereira
118 PUBLICATIONS   900 CITATIONS    9 PUBLICATIONS   96 CITATIONS   

SEE PROFILE SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Integra S.A. View project

Multi-areas power systems View project

All content following this page was uploaded by Mauricio Granada-Echeverri on 10 November 2020.

The user has requested enhancement of the downloaded file.


OPTIMIZACIÓN
COMBINATORIA

 
 
  
     


    

 

   
    
OPTIMIZACIÓN COMBINATORIA
- de la teoría a la práctica -

Mauricio Granada Echeverri

Programa de Ingeniería eléctrica


Universidad Tecnológica de Pereira, Colombia

Jhon Jairo Santa Chávez

Facultad de Ingenierías
Universidad Libre, Pereira, Colombia

Copyright © 2016
A mis hijas Salomé, Rafaella y Oriana.
Mauricio.

A mis hijos John y Marcela.


Jhon Jairo.
Contenido

1 Conceptos básicos 1
1.1 Problemas del mundo real . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Complejidad computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Solución de problemas NP-difícil . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Qué es una metaheurística ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5 Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 óptimo local y global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7 Optimización mono y multi-objetivo . . . . . . . . . . . . . . . . . . . . . . . 12

2 Problemas y codificación 17
2.1 Ejemplo de codificación: triqui . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.1 Algoritmo I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.2 Algoritmo II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.3 Algoritmo III . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Problemas de empaquetamiento . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.1 Empaquetamiento o corte rectangular 2-D . . . . . . . . . . . . . . . . 23
2.2.2 Problema de la mochila . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3 Problemas representados como grafos . . . . . . . . . . . . . . . . . . . . . . 32
2.3.1 Problema del Agente Viajero (PAV) . . . . . . . . . . . . . . . . . . . 32
2.3.2 Coloreado de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.4 Problemas de asignación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.4.1 Asignación generalizada . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.4.2 Asignación de horarios de clase . . . . . . . . . . . . . . . . . . . . . 43
2.5 Problemas de secuenciamiento . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.5.1 Secuenciamiento regular: flow-shop . . . . . . . . . . . . . . . . . . . 50
2.5.2 Secuenciamiento no regular: job-shop . . . . . . . . . . . . . . . . . . 52
2.6 Codificación binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.6.1 Codificación binaria directa . . . . . . . . . . . . . . . . . . . . . . . 58
2.6.2 Codificación binaria Gray . . . . . . . . . . . . . . . . . . . . . . . . 61
2.7 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.8 Algoritmos genéticos - AGs . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.8.1 Función de adaptación . . . . . . . . . . . . . . . . . . . . . . . . . . 72
2.8.2 Operadores de selección . . . . . . . . . . . . . . . . . . . . . . . . . 74

i
ii CONTENIDO

2.8.3 Operadores de variación . . . . . . . . . . . . . . . . . . . . . . . . . 83


2.8.4 Operadores de preservación de elitismo . . . . . . . . . . . . . . . . . 90
2.9 Optimización Multi-objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2.9.1 Optimización MOEA . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
2.9.2 Métodos para soluciones no dominadas . . . . . . . . . . . . . . . . . 96
2.9.3 Distancia de apilamiento . . . . . . . . . . . . . . . . . . . . . . . . . 105
2.9.4 Selección por torneo usando apilamiento . . . . . . . . . . . . . . . . 106
2.9.5 Método NSGA-II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2.9.6 MOEA para manejo de restricciones . . . . . . . . . . . . . . . . . . . 108
2.9.7 Algoritmo genético de Chu and Beasley . . . . . . . . . . . . . . . . . 118
2.10 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

3 OCH 123
3.1 Experimento de los dos caminos . . . . . . . . . . . . . . . . . . . . . . . . . 124
3.2 Algoritmo simple OCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3.2.1 Problema de la ruta de mínimo costo . . . . . . . . . . . . . . . . . . . 126
3.3 Algoritmo OCH para el PAV . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
3.4 Algoritmo OCH para el MDVRPB . . . . . . . . . . . . . . . . . . . . . . . . 137
3.4.1 Algoritmo propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
3.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

4 Recocido simulado 149


4.1 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

5 Búsqueda tabú 161


5.1 Estructura básica de BT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
5.2 Memoria adaptativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
5.3 Búsqueda tabú aplicada al VRPB . . . . . . . . . . . . . . . . . . . . . . . . . 171
5.3.1 Modelo matemático del VRPB . . . . . . . . . . . . . . . . . . . . . . 173
5.3.2 Codificación de la alternativa de solución. . . . . . . . . . . . . . . . . 175
5.3.3 Criterios de vecindad . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.3.4 Lista Tabú . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
5.3.5 Algoritmo propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
5.3.6 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

6 Apéndice: scripts en matlab 179


6.1 AG para el PAV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
6.2 ACO para el PAV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6.3 Espacios mono y multi-objetivo . . . . . . . . . . . . . . . . . . . . . . . . . 186
6.4 Caneca óptima por AG binario . . . . . . . . . . . . . . . . . . . . . . . . . . 187
6.5 Caneca óptima por AG Real . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
6.6 Empaquetamiento 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
6.7 Flow Shop utilizando SA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
6.8 Optimización multiobjetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
CONTENIDO iii

Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

Índice general 208


iv CONTENIDO
Índice de figuras

1.1 Clasificación de problemas según su complejidad . . . . . . . . . . . . . . . . 5


1.2 Grafos conectados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Óptimos locales y globales en R2 . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 Ejemplo de un problema multi-objetivo . . . . . . . . . . . . . . . . . . . . . 12
1.5 Espacio de soluciones de un problema multiobjetivo . . . . . . . . . . . . . . . 14
1.6 Espacio de soluciones de un problema mono-objetivo . . . . . . . . . . . . . . 14

2.1 Representación del tablero a través de un vector . . . . . . . . . . . . . . . . . 18


2.2 Una representación más eficiente . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 Cuadro mágico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 Posiciones en el vector solución . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 Empaquetamiento en 2-D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.6 Codificación de una alternativa de solución . . . . . . . . . . . . . . . . . . . 24
2.7 Algoritmo BL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.8 Dos secuencias diferentes usando el algoritmo BL . . . . . . . . . . . . . . . . 26
2.9 Vector de solución KP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.10 Problema del agente viajero . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.11 Heurística 2-opt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.12 Obtención de un vecino usando 2-opt . . . . . . . . . . . . . . . . . . . . . . 37
2.13 Problema simple de transporte . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.14 Coloreo de grafos planares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.15 Codificación del PAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.16 Codificación matricial del PPOHC . . . . . . . . . . . . . . . . . . . . . . . . 46
2.17 Codificación vectorial del PPOHC . . . . . . . . . . . . . . . . . . . . . . . . 46
2.18 Datos de entrada del ejemplo 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.19 Flujo en línea en un taller con m = 3 y n = 4. . . . . . . . . . . . . . . . . . . 51
2.20 Diagrama de Gantt del ejemplo 2.1. . . . . . . . . . . . . . . . . . . . . . . . 52
2.21 Datos de entrada del ejemplo 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.22 Flujo no regular de trabajos en un taller . . . . . . . . . . . . . . . . . . . . . 55
2.23 Diagrama de Gantt del ejemplo 2.2 . . . . . . . . . . . . . . . . . . . . . . . . 55
2.24 Grafo disyuntivo del ejemplo 2.2. . . . . . . . . . . . . . . . . . . . . . . . . 56
2.25 Diagrama parcial, tarea 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.26 Diagrama parcial, tareas 4 y 3. . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.27 Matriz C para el calculo de la función objetivo . . . . . . . . . . . . . . . . . 58

v
vi ÍNDICE DE FIGURAS

2.28 Discretización de la variable diámetro (d) . . . . . . . . . . . . . . . . . . . . 59


2.29 Población de alternativas binarias . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.30 Alternativa de solución para 2 variables de estado . . . . . . . . . . . . . . . . 61
2.31 Codificación Gray por reflejo. . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.32 Circuito lógico - código Gray. . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.33 Paleta y diferentes tipos de placas del ejercicio 2.1. . . . . . . . . . . . . . . . 65
2.34 Estructura fundamental de un AE . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.35 Genoma, genotipo y fenotipo . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.36 Algoritmo genético básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.37 Dos presentaciones de la selección por ruleta . . . . . . . . . . . . . . . . . . 79
2.38 Método universal de muestreo estocástico . . . . . . . . . . . . . . . . . . . . 79
2.39 Selección por torneo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
2.40 Selección de 10 padres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
2.41 Selección por ranking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
2.42 Recombinación de individuos . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
2.43 Cruzamiento multi-punto, nc = 3 . . . . . . . . . . . . . . . . . . . . . . . . . 88
2.44 Cruzamiento de un punto entre permutaciones . . . . . . . . . . . . . . . . . . 88
2.45 Cruzamiento PMX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
2.46 Dos funciones objetivo en conflicto . . . . . . . . . . . . . . . . . . . . . . . . 93
2.47 Mapa de relación entre dos espacios. . . . . . . . . . . . . . . . . . . . . . . . 94
2.48 Frente de Pareto óptimo y local . . . . . . . . . . . . . . . . . . . . . . . . . . 96
2.49 Cuatro diferentes escenarios multiobjetivos . . . . . . . . . . . . . . . . . . . 97
2.50 Ejemplo de obtención del conjunto no dominado . . . . . . . . . . . . . . . . 99
2.51 Soluciones distribuidas por frentes. . . . . . . . . . . . . . . . . . . . . . . . . 100
2.52 Individuos y valores de las funciones objetivo . . . . . . . . . . . . . . . . . . 101
2.53 Algoritmo para obtener todos los frentes . . . . . . . . . . . . . . . . . . . . . 103
2.54 Ejemplo de aplicación del método de Kung . . . . . . . . . . . . . . . . . . . 103
2.55 Árbol de divisiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.56 Recorrido final verificando dominancia . . . . . . . . . . . . . . . . . . . . . . 104
2.57 Frentes no dominados ordenados . . . . . . . . . . . . . . . . . . . . . . . . . 105
2.58 Distancia de apilamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
2.59 Esquema general del procedimiento NSGA-II . . . . . . . . . . . . . . . . . . 107
2.60 Problema mono-objetivo restricto . . . . . . . . . . . . . . . . . . . . . . . . 110
2.61 Método lexicográfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
2.62 Búsqueda de soluciones factibles . . . . . . . . . . . . . . . . . . . . . . . . . 115
2.63 Frente óptimo de Pareto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
2.64 Región objetivo intensificación . . . . . . . . . . . . . . . . . . . . . . . . . . 116
2.65 Padres y descendientes del ejercicio 2.10.10 . . . . . . . . . . . . . . . . . . . 121

3.1 Tres experimentos realizados en hormigas reales . . . . . . . . . . . . . . . . . 124


3.2 Solución construida por hormigas . . . . . . . . . . . . . . . . . . . . . . . . 127
3.3 Eliminación de ciclos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
3.4 Matriz de distancias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
ÍNDICE DE FIGURAS vii

3.5 Matriz neta, deposito-cliente y cliente-cliente . . . . . . . . . . . . . . . . . . 140


3.6 Matriz de feromonas deposito-cliente y cliente-cliente . . . . . . . . . . . . . . 141
3.7 Codificación de clientes Factibles linehaul . . . . . . . . . . . . . . . . . . . . 141
3.8 Codificación de clientes Factibles backhaul . . . . . . . . . . . . . . . . . . . 142
3.9 Codificación de clientes Factibles backhaul . . . . . . . . . . . . . . . . . . . 142
3.10 Matriz de rutas solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
3.11 Esquema de ruta linehaul-backhaul. . . . . . . . . . . . . . . . . . . . . . . . 144
3.12 Esquema de ruta linehaul. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
3.13 Esquema de ruta backhaul. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
3.14 Esquema de ruta backhaul. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
3.15 Ejemplo del PRMC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

4.1 Algoritmo Simulated Annealing . . . . . . . . . . . . . . . . . . . . . . . . . 154


4.2 Mejores alternativas encontradas . . . . . . . . . . . . . . . . . . . . . . . . . 158

5.1 Datos de entrada del ejemplo 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . 163


5.2 Estructura de memoria reciente . . . . . . . . . . . . . . . . . . . . . . . . . . 165
5.3 Actualización de memoria reciente . . . . . . . . . . . . . . . . . . . . . . . . 167
5.4 Memoria basada en lo frecuente . . . . . . . . . . . . . . . . . . . . . . . . . 169
5.5 Ejemplo VRPB 20 clientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
5.6 Codificación de una alternativa de solución . . . . . . . . . . . . . . . . . . . 175
5.7 Movimiento de acuerdo al primer criterio de vecindad . . . . . . . . . . . . . . 175
5.8 Movimiento de acuerdo al segundo criterio de vecindad. . . . . . . . . . . . . 176
5.9 Movimiento de acuerdo al tercer criterio de vecindad. . . . . . . . . . . . . . . 176
5.10 Diagrama de flujo del algoritmo propuesto. . . . . . . . . . . . . . . . . . . . 177
viii ÍNDICE DE FIGURAS
Índice de tablas

1.1 Relación de costos y recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . 3


1.2 Conjunto de alternativas de solución . . . . . . . . . . . . . . . . . . . . . . . 4

2.1 Tabla de verdad del operador xor . . . . . . . . . . . . . . . . . . . . . . . . . 63


2.2 Codificación binaria y Gray usando 4 bits . . . . . . . . . . . . . . . . . . . . 63
2.3 Características de los artículos . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.4 Analogía de Términos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
2.5 Población generada aleatoriamente para el PDORC . . . . . . . . . . . . . . . 80
2.6 Población ejemplo 2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
2.7 Restricciones ejemplo 2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
2.8 Violaciones considerando δ = 0.01 . . . . . . . . . . . . . . . . . . . . . . . . 114

3.1 Matriz de distancias entre ciudades . . . . . . . . . . . . . . . . . . . . . . . . 148

4.1 Tiempos de Procesamiento del ejemplo 4.2 . . . . . . . . . . . . . . . . . . . 158

5.1 Evaluación de la solución inicial . . . . . . . . . . . . . . . . . . . . . . . . . 164


5.2 Generación de todos lo vecinos posibles . . . . . . . . . . . . . . . . . . . . . 164
5.3 Datos del VRPB de 20 clientes . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.4 BT para el VRPB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

ix
Prefacio

La optimización combinatorial es una de las áreas más jóvenes y activas de las matemáticas
discretas. Su considerable crecimiento se debe probablemente a su gran campo de aplicación
dado que muchos problemas de la vida real pueden ser formulados como problemas abstractos
de optimización combinatorial. Adicionalmente, existe un gran interés de la comunidad
científica debido al hecho que aún quedan numerosos interrogantes por resolver. De hecho
el propio término metaheurística no ha sido definido con precisión.
Este libro describe algunas de las técnicas de optimización combinatorial más reconocidas
en la literatura y utilizadas en aplicaciones prácticas. Además, incluye aspectos básicos de la
teoría de grafos y hace énfasis en el estudio y descripción de algunos problemas combinatoriales
típicos en diferentes campos de la ingeniería.
Dentro del contenido del texto se proponen algoritmos en pseudo-código que pueden ser
fácilmente implementados en cualquier lenguaje de programación. El objetivo es proporcionar
al estudiante un punto de apoyo que facilite la implementación práctica de las diferentes técnicas
usando problemas típicos y reales. Estos algoritmos no están concebidos para alcanzar una
alta eficiencia computacional, la idea es que sean de fácil implementación. La optimización
computacional de estos pseudo-códigos es un paso que el estudiante puede dar en un nivel
posterior, más avanzado.
En cada capítulo se presentan ejemplos aplicados a casos y problemas reales. Además,
se plantean ejercicios al final de cada capítulo, diseñados para interiorizar los conceptos más
relevantes.
En el primer capítulo se presentan algunos conceptos básicos que permiten homogenizar
el lenguaje utilizado durante todo el texto. Es de especial interés la sección dedicada a definir
algunos conceptos de la teoría de grafos, debido a que la mayoría de problemas combinatoriales
pueden ser formulados como grafos. Además, algunas importantes técnicas de optimización
basan su funcionamiento en problemas presentados de esta forma.
El capítulo dos explica algunos problemas combinatoriales que se han clasificado en
cuatro grupos: problemas de empaquetamiento, problemas formulados a través de grafos,
problemas de asignación y problemas de secuenciamiento. Aunque existen problemas que
pueden pertenecer simultáneamente a varios de estos grupos, se han clasificado asi para mostrar
diferentes características que pueden ser aprovechadas de formas diferentes, según la técnica de
optimización utilizada. En este capítulo se resalta la importancia del esquema de codificación
usado para representar un problema. La definición de este esquema es reducida a tres tipos de
presentaciones: una cadena binaria, una secuencia o permutación y una codificación real. Se
estudian, para cada problema, cuatro aspectos básicos: la definición del espacio de búsqueda,

xi
la codificación o representación del problema, definición de la población inicial y la definición
de la estructura de vecindad.
El capítulo tres presenta las características generales de los algoritmos evolutivos,
haciendo énfasis en los algoritmos genéticos. Después se utilizan estos conceptos para
introducir algunas bases sobre optimización multiobjetivo.
El capítulo cuatro aborda el método de optimización usando colonia de hormigas, el
capítulo cinco presenta el método de recocido simulado y el capítulo seis estudia el método
de búsqueda tabú. Todos los métodos son ejemplarizados con problemas típicos.
Finalmente, en el apéndice se presentan la implementación de todos los pseudocódigos
en la plataforma de desarrollo Matlab (c).
Conceptos básicos
1
En el campo de la ingeniería no es suficiente encontrar la solución de un problema, sino que
es necesario encontrar la mejor solución posible. Dicha solución se denomina como la mejor
posible porque, generalmente, se tienen restricciones que limitan el espacio de búsqueda. Por tal
razón, las soluciones obtenidas pueden estar dentro de los límites impuestos por las restricciones
y pueden ser implementadas en la práctica (soluciones factibles). Otras soluciones pueden
tener un mejor valor de la función objetivo, pero por estar fuera de los límites no pueden ser
implementadas en la práctica (soluciones infactibles).
En ingeniería se habla de optimización cuando se desean resolver problemas complejos a
través de procedimientos que encuentran y comparan soluciones hasta que no es posible mejorar
la mejor solución encontrada (incumbente) .
La complejidad generalmente está asociada al tipo de problema o al tipo de solución que
se requiere alcanzar. Entre los diferentes tipos están los problemas de programación lineal, no
lineal, problemas de gran tamaño y problemas de variables continuas y/o enteras, entre otros.
Por otro lado, algunos problemas pueden requerir soluciones exactas o aproximadas.
Existen 5 formas básicas que se pueden usar para resolver este tipo de problemas:
analíticamente, numéricamente, algorítmicamente a través de heurísticas, algorítmicamente a
través de metaheurísticas o por simulación.
Las soluciones analíticas prácticamente sólo son posibles para problemas simples. Para
problemas más complejos o de gran tamaño es necesario un mayor esfuerzo computacional
para su solución. En este tipo de problemas es posible encontrar soluciones realizando
aproximaciones sucesivas usando métodos numéricos, siempre y cuando se cumplan una serie
de condiciones matemáticas.
La solución de problemas combinatoriales a través de metaheurísticas se presenta
como una alternativa para obtener soluciones aproximadas de buena calidad, en tiempos
computacionales razonables. Dentro de las metaheurísticas existentes se pueden mencionar

1
Capítulo 1. Conceptos básicos

los algoritmos genéticos, recocido simulado (simulated annealing), algoritmos meméticos,


búsqueda tabú, búsqueda usando vecindario variable, reencadenamiento de caminos (path
relinking), búsqueda dispersa (scatter search), algoritmo GRASP, optimización por colonia
de hormigas, inteligencia colectiva (swarm intelligence), entre muchos otros. Todos ellos,
paradigmas que pueden ser usados para resolver una gran cantidad de problemas de diversas
áreas de aplicación. Algunos de estos problemas son el ruteo de vehículos, asignación de
recursos, ubicación de dispositivos y corte de materiales.

1.1 Problemas del mundo real


La principal motivación para el crecimiento y desarrollo acelerado del área de la metaheurísticas
es que miles de problemas del mundo real pueden ser formulados como problemas abstractos de
optimización combinatorial. Para dar una idea de la complejidad computacional que involucra
la solución de este tipo de problemas se describe a continuación un ejemplo típico de asignación
de tareas. Adicionalmente se aprovecha este ejemplo para introducir algunos conceptos básicos,
tales como: problema combinatorial, solución factible e infactible, espacio de búsqueda,
alternativa de solución, entre otros.
La asignación generalizada de tareas (GAP, generalized assignment problem) es un
problema combinatorial clásico de investigación de operaciones. El problema consiste en
Problema de
asignación encontrar una distribución (asignación) adecuada de un número m de tareas para que sean
generalizada realizadas por un número n de personas o agentes. El objetivo principal es minimizar el costo
total de asignación. Cualquier agente puede realizar cualquier tarea a un costo especificado.
Este costo depende de muchas variables, sin embargo se podría asociar inicialmente al grado
de experticia de cada agente para realizar una tarea especificada − para una empresa es más
económico que un ingeniero de sistemas desarrolle software en vez de hacer reportes de
facturación −.
Ejemplo 1.1.

La Tabla1.1 contiene la información de los costos y de los recursos consumidos (tiempo


en horas) por 2 agentes para realizar 4 tareas en una empresa ficticia. Nótese que esta matriz
se puede descomponer en dos: una matriz de costos C y una matriz de recursos consumidos
R. El costo que tiene para la empresa, por ejemplo, asignar la tarea 2 al agente 1 es de $2
(costo C1,2 ). Además al agente 1 le tomaría un tiempo de 1 hora realizar dicha tarea (recurso
consumido R1,2 ). Así, el objetivo es encontrar la asignación tarea-agente que permita a la
empresa realizar todas las tareas al menor costo. Para este caso, se supone que un agente no
debe superar 8 horas de trabajo. Esta restricción es la que define qué alternativas de asignación
son factibles o infactibles y representa la capacidad total de recursos b de cada agente.

Así, un problema de optimización combinatorial puede ser de maximización o


minimización el cual tiene asociado un conjunto de alternativas de solución del problema. La
solución de dicho problema involucra encontrar los valores de las variables discretas tales que

2
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Tabla 1.1: Relación de costos [$] y recursos [h] entre tareas y agentes
Tarea 1 Tarea 2 Tarea 3 Tarea 4
[$] [h] [$] [h] [$] [h] [$] [h]
Agente 1 1 3 2 1 5 4 6 4
Agente 2 2 2 1 3 3 4 10 2

la solución óptima con respecto a la función objetivo es encontrada.


Una alternativa de asignación es, por ejemplo, que la tarea 1 sea asignada al agente 1,
la tarea 2 asignada al agente 2, la tarea 3 asignada al agente 2 y la tarea 4 asignada al agente
1. Esta alternativa implica que el costo total para la empresa, resultante de sumar los costos
de asignación C1,1 +C2,2 +C2,3 +C1,4 , que a la vez es la función objetivo del problema, es de
$11. El tiempo total consumido por el agente 1, resultante de sumar los recursos R1,1 +R1,4 , es
de 7 horas, para el agente 2 (R2,2 +R2,3 ) también es de 7 horas. Como ningún agente supera
la restricción de trabajar como máximo 8 horas diarias, la alternativa de asignación se puede
considerar factible.
En el campo de las metaheurísticas una definición oficial de optimización no ha sido
elaborada. Sin embargo,entre las que han sido propuestas existen algunas que han sobresalido,
dos de ellas son:
La optimización es el procedimiento de encontrar y comparar soluciones factibles hasta
que no se pueda encontrar una mejor solución. La optimización se refiere a encontrar una o más
Optimización
soluciones factibles las cuales corresponden a valores extremos de uno o más objetivos. combinatorial
Para el ejemplo 1.1, la alternativa óptima es aquella factible con menor costo de
asignación. Por el tamaño del problema, es posible enumerar de forma exhaustiva todas las
alternativas de asignación existentes, que en este caso son 16. Este conjunto de alternativas se
conoce con el nombre de espacio de búsqueda y se muestra en la tabla 1.2. Las columnas 6, 7
y 8 muestran, para cada alternativa, el costo de asignación en $ (valor de la función objetivo),
los recursos consumidos por el agente 1 (R1) y por el agente 2 (R2) en horas, respectivamente.
Revisando las columnas 7 y 8 de Tabla1.2 se nota que las alternativas 1, 5, 8, 9, 15
y 16 son infactibles porque existe violación en la restricción de 8 horas diarias de trabajo.
Entre las factibles, la alternativa 7 es la de menor costo de asignación de toda la región
factible de búsqueda y es el óptimo global. Esta búsqueda exhaustiva asegura que la mejor
solución encontrada es la solución óptima global. Sin embargo los tiempos computacionales
involucrados en el proceso podrían llegar a ser prohibitivos.
Para el problema propuesto de asignación generalizada, el número de alternativas posibles
NA obedece a la siguiente expresión:

NA = AgentesTareas = nm (1.1)
En empresas reales pequeñas, por ejemplo con 5 empleados, la cantidad de tareas llega a
ser del orden de 100 o más. En este caso la cantidad total de alternativas es del orden de 5100 =
7.88x1069 . Un computador actual de mediano desempeño tiene la capacidad de realizar 1x109
operaciones por segundo (1 GHz). Suponiendo que evaluar el costo de cada alternativa requiere

3
Capítulo 1. Conceptos básicos

Tabla 1.2: Conjunto de alternativas de solución


Tarea 1 Tarea 2 Tarea 3 Tarea 4 Costo R1 R2
Alternativa 1 Agente 1 Agente 1 Agente 1 Agente 1 14 12 0
Alternativa 2 Agente 1 Agente 1 Agente 1 Agente 2 18 8 2
Alternativa 3 Agente 1 Agente 1 Agente 2 Agente 1 12 8 4
Alternativa 4 Agente 1 Agente 1 Agente 2 Agente 2 16 4 6
Alternativa 5 Agente 1 Agente 2 Agente 1 Agente 1 13 11 3
Alternativa 6 Agente 1 Agente 2 Agente 1 Agente 2 17 7 5
Alternativa 7 Agente 1 Agente 2 Agente 2 Agente 1 11 7 7
Alternativa 8 Agente 1 Agente 2 Agente 2 Agente 2 15 3 9
Alternativa 9 Agente 2 Agente 1 Agente 1 Agente 1 15 9 2
Alternativa 10 Agente 2 Agente 1 Agente 1 Agente 2 15 5 4
Alternativa 11 Agente 2 Agente 1 Agente 2 Agente 1 13 5 6
Alternativa 12 Agente 2 Agente 1 Agente 2 Agente 2 17 1 8
Alternativa 13 Agente 2 Agente 2 Agente 1 Agente 1 14 8 5
Alternativa 14 Agente 2 Agente 2 Agente 1 Agente 2 14 4 7
Alternativa 15 Agente 2 Agente 2 Agente 2 Agente 1 12 4 9
Alternativa 16 Agente 2 Agente 2 Agente 2 Agente 2 16 0 11

solamente de una operación computacional, entonces en 1 año dicho computador puede evaluar
3.15x1019 alternativas de solución del problema propuesto. Esto quiere decir que para poder
evaluar todo la espacio de búsqueda con un computador de mediano desempeño se requieren
2.16x1050 años. Aquí vale la pena hacer notar, sólo para dar una idea de la magnitud de la cifra
anterior, que la edad estimada del universo es del orden de 20x109 años.

1.2 Complejidad computacional


La búsqueda exhaustiva, como se mencionó en la sección anterior, resulta ser un método
bastante robusto para encontrar la solución de problemas de optimización combinatorial.
Sin embargo, la enumeración de todas las posibles soluciones para escoger la mejor de
ellas en la mayoría de los casos es inviable porque el número de posibles soluciones crece
exponencialmente con el número de variables n del problema. En algunos problemas
específicos de optimización combinatorial, una adecuada codificación del problema y la
explotación de características específicas del mismo permiten definir algoritmos que encuentran
una solución óptima mucho más rápido que la búsqueda exhaustiva.
Cuando se aborda un problema de optimización combinatorial lo mínimo que se debe
saber sobre él, es qué tan difícil será encontrar una solución óptima. Una forma de medir
este grado de dificultad es dada por la noción de complejidad en el peor caso, que puede ser
explicada como sigue:
La función de complejidad de tiempo de un algoritmo para un problema particular Π
indica el tiempo máximo que el algoritmo necesita para encontrar una solución, considerando
Complejidad
en el peor alternativas de solución de tamaño n (número de variables del problema). Esto es lo que se
caso denomina complejidad de tiempo de un algoritmo en el peor caso. Se dice que un problema de
optimización combinatorial Π tiene una complejidad de tiempo en el peor caso de O(g(n)) si
el mejor algoritmo conocido para resolver Π encuentra una solución óptima en un tiempo t, tal
que:

4
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

t ≤ k · g(n), donde g(·) es una función cualquiera y k es una constante.


Se dice que un algoritmo es de tiempo polinomial si su función de complejidad de
tiempo es O(g(n)) para alguna función polinomial g(·). Si un algoritmo tiene una función de
complejidad de tiempo que no es polinomial, entonces éste es llamado un algoritmo de tiempo
exponencial.
Una importante clasificación que caracteriza la dificultad de los problemas
combinatoriales genera dos familias de problemas: los que pueden ser resueltos en tiempos
polinomiales y los que no. La primera familia se conoce como problemas de tipo P y la segunda
como problemas de tipo NP. Es claro que P ⊆ NP , mientras que nada se puede concluir sobre
si la igualdad P=NP es verdadera o no. Actualmente muchos investigadores trabajan en tratar
de probar que P=NP, ya que esta prueba implicaría que todos los problemas en NP pueden ser
resueltos en tiempos polinomiales.
Un procedimiento conocido como reducción de tiempo polinomial , básicamente,
transforma un problema, si es posible, en otro que puede ser resuelto en tiempos polinomiales.
Lo más interesante es que si un problema ΠA puede ser resuelto en un tiempo polinomial y un
problema ΠB puede ser transformado en ΠA usando el procedimiento de reducción de tiempo
polinomial, entonces la solución de ΠB también puede ser encontrada en un tiempo polinomial.
Un problema es NP-difícil (NP-hard), si cualquier otro problema en NP puede ser transformado
a éste por el procedimiento de reducción de tiempo polinomial. Por lo tanto, un problema
NP-difícil es por lo menos tan difícil como cualquiera de los otros problemas en NP . Sin
embargo, los problemas NP-difícil no necesariamente son NP.
Un problema NP-difícil que es NP se dice que es NP-completo. Por lo tanto, los
problemas NP-completos son los más difíciles dentro de los problemas NP. Entonces, si
Problemas
un algoritmo de tiempo polinomial puede ser encontrado para un problema NP-completo NP-completos
entonces todos los problemas clasificados como NP-completos podrían ser resueltos en tiempos
polinomiales. Por esta razón la respuesta a la pregunta P=NP ? permanecerá como uno de
los más importantes interrogantes dentro de la teoría de la ciencia de la computación. La
Figura 1.1 muestra la interacción entre los diferentes conjuntos de problemas originados según
su complejidad y resume las interacciones enunciadas anteriormente.

NP − difícil

NP − completo
NP
P

Figura 1.1: Clasificación de problemas según su complejidad

En la actualidad, una gran cantidad de problemas han podido ser clasificados


como NP-completos, incluyendo los problemas de asignación generalizada, agente viajero,
programación de horarios de clase, coloreo de grafos y árboles de decisión, entre otros.

5
Capítulo 1. Conceptos básicos

1.3 Solución de problemas NP-difícil


Existen dos clases de algoritmos para la solución de problemas de optimización combinatorial:
algoritmos exactos y algoritmos aproximados. En problemas de tipo NP-difícil, los
algoritmos exactos garantizan encontrar la solución óptima. El problema radica en que la
lgoritmos complejidad de tiempo del algoritmo es dependiente del tamaño del problema. En el peor de los
xactos
casos, los algoritmos requieren tiempos exponenciales para encontrar el óptimo. En los últimos
años y gracias al gran avance de la tecnología, ha sido posible encontrar, en tiempos bastante
altos, la solución exacta de algunos problemas específicos de tipo NP-difícil. Por tal razón, para
la mayoría de problemas de este tipo el desempeño de los algoritmos exactos no es satisfactorio.
Por ejemplo, para el problema de asignación generalizada, discutido en la sección anterior, el
actual estado del arte de los algoritmos exactos permite resolver problemas con dimensiones
que estén alrededor de m · n = 30.
Por ejemplo, la solución de un problema particular de asignación conocido como el
backboard wiring problem fue publicada por Steinberg (1961) para un caso denominado
“ste36a”. La solución exacta de este problema requirió 18 días de trabajo de un algoritmo
avanzado, ejecutándose en un computador pentium III de 800 MHz. El algoritmo tuvo que
considerar cerca de 1.8 billones de sub-problemas.
Los resultados anteriores pueden ser comparados con los resultados obtenidos por una
metaheurística denominada colonia de hormigas (ACO, ant colony optimization) el cual
requiere en promedio, para este caso particular, alrededor de 10 segundos para encontrar la
solución óptima en una máquina con iguales características.
Los algoritmos aproximados son comúnmente denominados métodos heurísticos (del
griego heuriskein que significa encontrar, descubrir, buscar) y tienen como objetivo encontrar
buenas soluciones (soluciones cercanas al óptimo) con un esfuerzo computacional relativamente
bajo.
Estas técnicas no tienen la capacidad de garantizar la optimalidad de la solución y se
basan en la aplicación de una estrategia de optimización basada en algún criterio lógico. Estos
Algoritmos
aproximados o
algoritmos pueden ser clasificados en dos grupos: los algoritmos constructivos y los algoritmos
heurísticas de búsqueda local.
Los algoritmos constructivos generan soluciones a través de un proceso iterativo que
empieza con una solución inicial vacía y paulatinamente suma componentes a dicha solución
Algoritmos
constructivos
hasta que ésta se completa. Este proceso de adición de componentes es un proceso guiado
a través de algún criterio adecuado. La solución encontrada por los constructivos requiere
menor tiempo computacional pero es de menor calidad que la encontrada por los algoritmos de
búsqueda local.
Esta característica los hace atractivos para ser usados como inicializadores de algoritmos
más sofisticados, es decir que son usados para obtener soluciones cercanas al óptimo y a
partir de allí un algoritmo de búsqueda local puede continuar el proceso de optimización. Los
constructivos son naturalmente aplicables a problemas que puedan ser modelados como grafos.
Por ejemplo, el problema del agente viajero y ruteo de vehículos, entre otros.
Un algoritmo de búsqueda local comienza desde una solución inicial y de forma iterativa

6
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

intenta mejorar la solución actual a través de cambios locales.


El primer paso en la aplicación de un algoritmo de búsqueda local consiste en la
definición de la estructura de vecindad sobre el conjunto de soluciones candidatas. Esto quiere
Algoritmos de
decir que es necesario definir qué es un cambio local para el algoritmo. búsqueda local
Escoger una adecuada estructura de vecindad es crucial para el desempeño de un
algoritmo de búsqueda local y es específica del problema y de la codificación implementada
para el mismo. La estructura de vecindad define el conjunto de soluciones que pueden Estructura de
ser consideradas en cada paso del algoritmo de búsqueda. Este concepto es precisamente vecindad
el que evita una exploración exhaustiva del espacio de búsqueda. La solución encontrada
por un algoritmo de búsqueda local, generalmente no es la solución óptima global. Así,
la búsqueda local es un método general para encontrar soluciones de buena calidad para
problemas combinatoriales difíciles en un tiempo razonable. La estructura de vecindad cobra
gran importancia a la hora de aplicar el operador de mutación que se discute en la sección
2.8.3.3, pág. 89.
Un algoritmo de búsqueda local también requiere la definición del esquema de aceptación
de vecinos el cual determina cómo la vecindad es explorada y cuáles soluciones vecinas son
Esquema de
aceptadas. Mientras que el vecindario puede ser explorado de muchas formas diferentes, en la aceptación de
gran mayoría de casos la regla de aceptación es la de mayor mejora, la cual consiste en escoger vecinos
la solución vecina que proporciona el mejoramiento más grande de la función objetivo. También
es bastante usada la regla del primer mejoramiento, la cual consiste en aceptar la solución vecina
que primero mejore la solución actual. La principal desventaja de estas reglas basadas en un
mejoramiento iterativo (reglas elitistas golosas) de las soluciones es que el algoritmo puede
converger a óptimos locales de baja calidad, es decir, puede converger prematuramente.
La mejor solución encontrada hasta la iteración actual del proceso recibe el nombre de
solución incumbente.
Solución
Las estrategias basadas en listas de candidatos juegan un papel importante en el diseño de incumbente
heurísticas eficientes de búsqueda local.
Cuando se explora el vecindario se debe determinar el número de vecinos que serán
evaluados. Una exploración de todos los vecinos, en algunos problemas particulares, puede
Listas de veci-
llegar a consumir tiempos computacionales prohibitivos. Es por esta razón que escoger nos candidatos
un conjunto de vecinos de interés es importante en este tipo de algoritmos ya que reduce
considerablemente el esfuerzo computacional. Por ejemplo, una lista de candidatos en un
problema modelado como un grafo corresponde a la asociación de un conjunto reducido de
nodos vecinos a cada nodo del grafo.

1.4 Qué es una metaheurística ?


La principal desventaja de los métodos constructivos y de búsqueda local es que ellos generan
un número muy limitado de soluciones diferentes y generalmente convergen a óptimos locales
de baja calidad. Este es el caso de las heurísticas basadas en reglas golosas o de mejoramiento

7
Capítulo 1. Conceptos básicos

iterativo. La solución obvia a este problema podría ser inicializar el proceso muchas veces desde
diferentes puntos iniciales. Sin embargo, esta estrategia no produce mejoras significativas en la
práctica. Es aquí donde surgen nuevos métodos que intentan resolver esta dificultad.
Estos métodos son denominados metaheurísticas y se basan en un conjunto de conceptos
algorítmicos que tienen como finalidad guiar procesos heurísticos para evitar la convergencia
Definición de
metaheurística
prematura y explorar regiones del espacio de búsqueda que contienen soluciones de alta
calidad. Una metaheurística puede ser aplicable a un conjunto amplio de diferentes problemas,
por lo cual es considerado un método heurístico de propósito general el cual puede ser
aplicado a diferentes problemas de optimización teniendo que hacerse relativamente pocas
modificaciones o adaptaciones al algoritmo para poder ser aplicado a un problema específico.
Las metaheurísticas funcionan adecuadamente en problemas donde las mejores alternativas
de solución están concentradas en regiones. Si las mejores alternativas están uniformemente
distribuidas en el espacio de búsqueda, las técnicas de optimización combinatorial no tienen la
posibilidad de llegar al óptimo, dado que la posibilidad de resolver el problema es cercana a
cero.
Es importante aclarar que en la actualidad existen poderosos algoritmos que mezclan
técnicas de matemática exacta con técnicas metaheurísticas y son conocidos como mateurísticas
y que no hacen parte del alcance de este libro. Sin embargo, si el lector desea ampliar la
información sobre este tipo de técnicas, aplicadas a problemas de ruteo y empaquetamiento,
puede consultar el trabajo presentado en (Escobar-Falcón et al., 2016b).
Para resolver un problema combinatorial particular se deben definir 4 aspectos
fundamentales:

1. Definición del espacio de búsqueda: este aspecto está asociado al tamaño del problema
y su complejidad computacional.

2. Codificación o representación del problema: este aspecto involucra la estructura


de una alternativa de solución y la evaluación de restricciones y función objetivo.
La definición del espacio de búsqueda y la codificación del problema son aspectos
diferente a la formulación del modelo matemático. Los modelos matemáticos de
problemas combinatoriales muchas veces se dan por razones de completitud y para evitar
ambigüedad en la definición, pero no se resuelven a través de métodos exactos.
En muchas aplicaciones de optimización combinatoria, el problema de interés no es
explícitamente formulado como:

min c(x)
(1.2)
s.a x ∈ X

En estos casos, esta formulación puede ser concebida como un código para otra
formulación. El requerimiento x ∈ X, por ejemplo, puede especificar condiciones lógicas
o interconexiones que serán difícil formular matemáticamente, y que es mejor dejarlas
como estipulaciones verbales (por ejemplo, en forma de reglas). En ocasiones, en estas
instancias, las variables son simplemente códigos para condiciones o asignaciones que

8
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

reciben un valor de uno (1) para codificar la asignación de un elemento u a una posición
v, y que recibe un valor de cero para indicar que no se produce tal asignación.

3. Población inicial: dado que las metaheurísticas comienzan la búsqueda del punto óptimo
a partir de alternativas existentes, entonces es necesario definir un conjunto de alternativas
iniciales, denominado población inicial. Generalmente se aplica una heurística o se
genera de forma aleatoria. El número de alternativas de esta población es dependiente
del problema y de la técnica de solución.

4. Definición de la estructura de vecindad: este aspecto define básicamente cómo es la


modificación que se debe realizar sobre la alternativa actual para obtener una nueva
alternativa candidata. Adicionalmente, la estructura escogida define el tamaño del
vecindario, es decir, se define el número de vecinos que se van a evaluar. Se debe escoger
una alternativa de solución que permita al algoritmo avanzar hacia el óptimo. Existen
muchas estrategias para escoger un vecino, entre las más conocidas están la del mejor
vecino y la del primer vecino que mejora la alternativa actual. Esta última estrategia tiene
la ventaja de que no necesariamente se debe explorar todo el vecindario de alternativas.
La exploración se realiza sólo hasta que se encuentre una alternativa vecina de mejor
calidad que la alternativa actual.

Algunos ejemplos de metaheurísticas incluyen: recocido simulado (SA, simulated


annealing), búsqueda tabú (TB, tabu search), búsqueda local iterativa, algoritmos evolucionarios
y optimización por colonia de hormigas. El uso de las metaheurísticas han incrementado
significativamente la habilidad de encontrar soluciones de alta calidad para problemas reales
de difícil solución, en tiempos computacionales razonables. Esta afirmación es particularmente
cierta para problemas de gran tamaño y alta complejidad.

1.5 Grafos
Esta sección presenta brevemente algunos aspectos fundamentales de la teoría de grafos. La
importancia de estos aspectos en la aplicación de metaheurísticas radica en que muchos de los
problemas de optimización combinatorial pueden ser formulados como problemas de grafos.
Tal es el caso de problemas como el agente viajero, coloreado de grafos, enrutamiento óptimo
y problemas de asignación, entre otros.
Un grafo G = {V, A} consiste de un conjunto finito de vértices V y un conjunto finito
de arcos A. Cada arco a ∈ A tiene dos vértices en sus extremos (vi y vj ) y es denotado por
Definición de
aij = {vi , vj }, como se muestra en la figura 1.2a. grafo
Los arcos de un grafo pueden tener pesos que pueden estar asociados a parámetros como
distancias y costos, entre otros.
El vértice v de un grafo es caracterizado por su grado (gv ). El grado de un vértice v en un Grado de un
vértice y Grafo
grafo G corresponde al número de arcos que inciden en v. Un vértice es aislado si gv = 0. orientado

9
Capítulo 1. Conceptos básicos

Se dice que un grafo es orientado o dirigido cuando se especifica en donde comienza


y termina cada arco del grafo (ver figura 1.2b). Los grafos que no poseen esta distinción se
denominan no dirigidos.

(a) Grafo (b) Grafo dirigido

(c) Circuito Hamiltoniano (d) Grafo completo

Figura 1.2: Grafos conectados

Un grafo es conectado si para todos sus vértices existe un camino que los conecte
con los demás. Es decir, no existen vértices aislados. De lo contrario el grafo se denomina
Grafo
desconectado.
conectado Un grafo es completo cuando todos los vértices están conectados entre sí. Es decir,
cuando cada una de los vértices es adyacente a todos los otros vértices (ver figura 1.2d).
Grafo Un grafo es simétrico cuando el peso asociado a todo arco ai,j es el mismo que el
completo asociado al arco aj,i . Un grafo asimétrico se conoce con el nombre de digrafo.
Un Circuito Hamiltoniano es un camino en un grafo no dirigido que visita cada vértice
Grafo
una única vez (Geoffrey, 1983). Un ciclo Hamiltoniano (o circuito) visita cada vértice del grafo
simétrico una única vez, terminando en el vértice de inicio (ver figura 1.2c). Determinar la existencia de
tales caminos (o ciclos) en un grafo es un problema NP-Completo. Un camino o trayectoria,
sobre un grafo, es un conjunto de vértices C = {v1, v2, ..., vi, ...vk−1, vk }. Un camino es
Circuito cerrado si v1 = vk .
Hamiltoniano

10
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Un árbol es un grafo sin circuitos donde todos los vértices (excepto el vértice raiz) son
de grado 1. El número de arcos en un árbol es igual al número de vértices disminuido en 1.
Árbol
Un conjunto de vértices X es estable si sus elementos (dos a dos) son no-adyacentes
entre si. Es decir, X es estable si ningún arco tiene sus dos extremos dentro de X.
Algunos de los problemas que pueden ser formulados a través de grafos y digrafos son: Conjunto esta-
ble de vértices
• Agente viajero (NP-difícil). (corte)

• Máximo conjunto estable (NP-difícil).


• Ruta más corta (NP-difícil en su forma más general y es de tipo P si se consideran sólo
pesos positivos).
• Ruteo de vehículos (NP-difícil).
• Asignación generalizada (NP-difícil) .
• Árbol mínimo (P).
• Obtención de un mapa planar (sin cruce de arcos) (P).
• Coloreo de grafos con mínimo número de colores - vértices o arcos (NP-difícil).
• Obtención del conjunto máximo de caminos sin arcos en común, que conecten dos
vértices dados en un grafo (P).
• Encontrar mínimo conjunto de arcos que al retirarse del grafo separen dos vértices dados
(corte mínimo ) (P).

1.6 óptimo local y global


El valor óptimo de una función f (x) en un intervalo [a, b] es conocido con el nombre de óptimo
local, dado que no es posible garantizar que ese valor sea el óptimo para el intervalo [−∞, ∞].
Óptimo local
Tradicionalmente las técnicas de búsqueda para óptimos locales son mucho más simples que
las de búsqueda de óptimos globales.
Cuando la función optimizada no es restringida a un intervalo específico de la función,
entonces se dice que el valor encontrado es un óptimo global. En este caso el intervalo del
Óptimo global
espacio de búsqueda es asociado con [−∞, ∞].
Una definición más formal de estos conceptos es la siguiente: si se considera un problema
de minimización f (x) sobre un espacio en Rn , y se tiene que x ∈ Rn , entonces si f (x) ≤ f (x)
para todo x ∈ Rn , entonces x es llamado un mínimo global. Por otro lado, si existe una
vecindad Nε (x) alrededor del punto x tal que se cumpla que f (x) ≤ f (x) para todo x ∈ Nε (x),
siendo x 6= 0 y para algún ε > 0, entonces x es llamado un mínimo local. Claramente un
mínimo global es también un mínimo local. La figura 1.3 permite una interpretación gráfica de
los conceptos anteriores en una función no líneal de dos dimensiones.

11
Capítulo 1. Conceptos básicos

Figura 1.3: Óptimos locales y globales en R2

1.7 Optimización mono y multi-objetivo


Las definiciones de óptimo local y global presentadas en la sección anterior se ajustan mejor
al campo de la optimización mono-objetivo. Este tipo de optimización es la más comúnmente
estudiada y su historia comienza con las funciones de una variable que son maximizadas o
minimizadas usando criterios de primera y segunda derivada. Estos conceptos pueden ser
extendidos fácilmente al manejo de funciones irrestrictas con múltiples variables donde reciben
el nombre de gradiente y Hessiana. Después la optimización mono-objetivo aborda problemas
de múltiples variables y con restricciones de igualdad y desigualdad que modelan de forma más
exacta los problemas de la vida real. Las técnicas involucradas en la solución de este tipo de
problemas pueden ser exactas o aproximadas. Sin embargo, los problemas prácticos de la vida
real generalmente tienen, aparte de muchas variables y restricciones de igualdad y desigualdad,
muchos objetivo, que pueden estar en conflicto y que se deben alcanzar buscando el mejor
compromiso entre ellos.

Figura 1.4: Ejemplo de un problema multi-objetivo

Un ejemplo típico de optimización multi-objetivo es el que se refiere al diseño de la barra


menos flexible y más liviana. Como se muestra en la figura 1.4 se tiene una barra de longitud
Barra menos
flexible y
L y diámetro d. La barra está asegurada en uno de sus extremos y en el otro es sometida a
más liviana una fuerza P . Existen por lo tanto dos variable de decisión (L y d) y dos funciones objetivo

12
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

correspondientes a la minimización del peso (f1 ) y a la minimización de la deflexión (f2 ) en el


extremo donde se aplica la fuerza P . La fuerza P es un valor que se asume conocido. Así, cada
una de las funciones objetivo puede ser expresada de la siguiente manera:

πd2
Minimizar f1 (d, L) = ρ L Peso (1.3)
4
64P L3
Minimizar f2 (d, L) = δ = Deflexión (1.4)
3Eπd4
donde ρ es la densidad del material y E el módulo de elasticidad de Young. Adicionalmente, se
pueden considerar dos restricciones:

σmax ≤ Sy (1.5)
δ ≤ δmax (1.6)

la primera restricción (eq. 1.5) garantiza que el máximo estrés desarrollado σmax sea menor que
el máximo estrés permitido Sy . La segunda (eq. 1.6), garantiza que la deflexión obtenida sea
menor que un límite de deflexión especificado δmax . Adicionalmente, las variables de decisión
poseen límites inferiores y superiores: dmin ≤ d ≤ dmax y Lmin ≤ L ≤ Lmax . El máximo
estrés se calcula de acuerdo a la siguiente expresión:
32P L
σmax = (1.7)
πd3
El problema anterior es un excelente ejemplo de optimización multi-objetivo debido a que la
primera función objetivo alcanza la solución óptima teniendo un valor pequeño de d y L, de
forma que el peso de la barra es minimizado. Así, si las dimensiones d y L son pequeñas, la
barra no será suficientemente rígida y la deflexión de la barra en el extremo donde se aplica la
fuerza P será grande. Por otro lado, para que la deflexión sea minimizada, la barra debe ser
más robusta y por lo tanto las dimensiones deben ser mayores haciendo que el peso sea también
mayor.
En muchos problemas de la vida real no es fácil identificar si dos o más funciones objetivo
del mismo problema están en conflicto o no. Por ejemplo, si para el problema (1.3)-(1.7) se
asumen 2000 valores aleatorios para d y L se puede obtener una adecuada impresión de cómo
es el espacio de soluciones del problema en función de las variables de estado, como se muestra
en la Figura 1.5a. Si se grafican los correspondientes puntos en el espacio de las funciones
objetivo, entonces se obtiene el espacio de soluciones mostrado en la figura 1.5b, en donde, por
estar minimizando las dos funciones objetivo, el frente de pareto de soluciones no dominadas
es el que se resalta en la Figura. Estos conceptos serán ampliados en la subsección 2.9.1 (Pág.
93). Las lineas punteadas muestran la relación entre un punto en el espacio de las variables y su
correspondiente ubicación en el espacio de las funciones objetivo.
Evidentemente, existen dos funciones objetivo en conflicto y el objetivo del proceso de
optimización sería encontrar el mejor compromiso entre las dos, de forma que se cumplan
con todas las restricciones. Es aquí donde surge la principal diferencia con respecto a la
optimización mono-objetivo, dado que en problemas con con más de un objetivo en conflicto

13
Capítulo 1. Conceptos básicos

1000 5

4.5
900

4
800
3.5
700

deflexion (mm)
longitud (mm)
3

600 2.5

500 2

1.5
400
1
300
0.5

200 0
15 20 25 30 35 40 45 50 0 5 10 15
Diametro (mm) peso (kg) 9
x 10

(a) (b)

Figura 1.5: Espacio de soluciones de un problema multiobjetivo

no existe una única solución. Existe un número de soluciones óptimas donde no es posible
determinar si una solución es mejor que otra. Lo anterior genera un nuevo problema, cuál
de estas soluciones óptimas debe escogerse como solución del problema?. La respuesta a
este dilema depende de otro tipo de información asociada a las ventajas y desventaja de cada
solución referentes a aspectos técnicos, económicos y en general, a información denominada
de alto nivel. Para el caso del ejemplo mostrado en la figura 1.4, la selección de una solución
podría ser, por ejemplo, teniendo en cuenta aspectos económicos. Esto no quiere decir que la
barra más económica sea la de mejor calidad. Siempre será interesante contar con un conjunto
amplio de posibilidades que den solución a un problema en particular.
Por otra parte, si se considera analizar el problema utilizando otros dos objetivos, tales
como: el estrés, dado por la ecuación (1.7) y la deflexión dada por la ecuación (1.4), entonces
las soluciones obtenidas en el espacio de las funciones objetivo son como se muestran en la
figura 1.6.
5

4.5

3.5
deflexion (mm)

2.5

1.5

0.5

0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45
Estres (MPa)

Figura 1.6: Espacio de soluciones de un problema mono-objetivo

Como se observa, en este caso no existe un frente de pareto ya que existe una única

14
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

solución que minimiza tanto la deflexión como el estrés del problema de la barra. En este caso
las funciones objetivo no están en conflicto y el problema se define como mono-objetivo. Este
tipo de análisis en el espacio de las funciones objetivo permite identificar si un problema es
realmente de naturaleza mono ó multi-objetivo.
En la sección 6.3 (pág. 186) se presenta el script en matlab que permite obtener los
espacios de solución mostrados en las figuras anteriores.

15
Capítulo 1. Conceptos básicos

16
Problemas y codificación
2
Cuando se aborda un problema combinatorial, uno de los aspectos más importantes a tener
en cuenta para su solución es cómo representar las variables del problema para que puedan
Esquema de
ser interpretadas por un algoritmo computacional. Esta representación permite encontrar codificación
soluciones en algunas regiones del espacio de búsqueda y recibe el nombre de esquema de
codificación del problema. Este esquema debe permitir evaluar el valor de la función objetivo
y el cumplimiento de las restricciones y además, debe representar adecuadamente el espacio de
búsqueda.
En algunos problemas, por ejemplo, no es necesario explorar las regiones infactibles
lo cual puede representar un ahorro importante en esfuerzo computacional. Esto sucede en
problemas donde el espacio de búsqueda tiene el mismo tamaño de la región factible y por
ende todo el proceso de búsqueda puede realizarse usando alternativas factibles. Este tipo de
características del problema deben ser tenidas en cuenta al momento de implementar el esquema
de codificación del problema.
La estructura de vecindad, el esquema de aceptación de vecinos, el proceso de evaluación
de la función objetivo y el esquema de codificación son características dependientes del
problema estrechamente relacionadas entre sí que determinan el tamaño y complejidad del
espacio de búsqueda.
Tradicionalmente, la codificación de las variables es realizada a través de códigos binarios
o números reales o enteros ubicados en arreglos vectoriales o matriciales que a través de
un proceso de interpretación suministran información necesaria sobre el valor de la función
objetivo y las restricciones.
En este capitulo se describen algunos problemas combinatoriales de importancia en
el estudio de metaheurísticas que serán citados durante todo el texto. Una características
importante de las metaheurísticas es que los problemas no requieren ser descritos a través de un
modelo matemático. Por tal razón algunos problemas serán formulados a través de su modelo

17
Capítulo 2. Problemas y codificación

matemático y otros no.

2.1 Ejemplo de codificación: triqui


Se presentan tres diferentes algoritmos para resolver este problema, conocido también como tres
en línea. Los algoritmos aumentan gradualmente en complejidad, en el uso de generalizaciones,
en la claridad de su conocimiento y en la posibilidad de ser escalables.
El ser humano posee la capacidad de entender a través de una explicación precisa el
funcionamiento, basado en reglas, de muchos problemas de la vida real. Así por ejemplo, para
el caso de este juego se puede decir lo siguiente:

El juego consiste en llenar un tablero de 9 posiciones como el mostrado en la figura


2.1. Se requieren dos jugadores, los cuales juegan en turnos alternados, de forma
que uno de ellos usará el símbolo × y el otro el símbolo ◦. El jugador ganador
será aquel que primero conforme una fila, columna o diagonal de su símbolo sobre
el tablero.

Figura 2.1: Representación del tablero a través de un vector

Esta explicación del juego está lejos de ser precisa y clara, ya que debería empezarse por
definir qué es una fila, una columna y una diagonal. Sin embargo, “el conocimiento”, “poder
de abstracción” y “sentido común” permiten que muchos lectores de esta explicación puedan
comprender lo suficiente para empezar el juego. Explicar este juego a una máquina no resulta
tan sencillo y es necesario diseñar una estrategia o algoritmo que así lo permita.

2.1.1 Algoritmo I
La codificación del juego usada para fines de interpretación computacional hace parte del
algoritmo de solución, así como la definición de matrices, vectores y variables. Por tal razón se
definen los siguientes aspectos:
Representación del Tablero: El tablero se representa por un vector de nueve
componentes, donde cada componente representa la posición del tablero, numeradas del 1
al 9 como se muestra en la figura 2.1. Cada componente del vector contiene un 0 si la
correspondiente casilla en el tablero está vacía, un 1 si contiene una “×” o un 2 si contiene un
“◦”. Es decir, una jugada actual sobre el tablero se representa como se muestra en la figura 2.1.

18
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Matriz de “jugadas_posibles”: Este algoritmo, al ser el más sencillo, requiere almacenar


todas las posibles jugadas que se pueden presentar en un instante dado. Por tal razón, si se
considera que se tienen 3 posibles estados (vacío, “×” y “◦”) y 9 casillas de juego, entonces se
conformar una matriz de posibles jugadas de 39 = 16693 filas y 9 columnas. Cada fila de esta
matriz es un vector solución como el mostrado en la figura 2.1.
Matriz de de “jugadas_correctas”: relaciona a cada estado posible del tablero las posibles
correctas jugadas.
Así, el algoritmo es:

Paso 1: Buscar la jugada actual en la matriz de “jugadas_posibles” y obtener la


posición.
Paso 2: Con la posición encontrada, ir a la matriz de “jugadas_correctas” y
escoger una aleatoriamente.
Paso 3: Actualizar el tablero con la jugada escogida en el paso anterior.
Los pasos anteriores se repiten hasta que exista un ganador o hasta que no existan
casillas vacías.

Este algoritmo es de fácil implementación y, en teoría, puede jugar triqui de forma


perfecta. Sin embargo, presenta las siguientes desventajas:
• Necesita gran cantidad de memoria para almacenar los tableros que definen
los movimientos correctos después de cada estado posible del mismo.
• Alguien debe realizar el difícil trabajo de grabar todas las “jugadas_posibles”.
Esto implica tener una gran posibilidad de error en el ingreso de la
información.
• Si se desea ampliar el juego, por ejemplo a 3 dimensiones, sería necesario
empezar de cero, y además, esta técnica necesitaría almacenar 327 posiciones
del tablero lo cual desbordaría la memoria de los computadores actuales.
Por lo anterior, este algoritmo de solución parece ser robusto pero no eficiente
computacionalmente.

2.1.2 Algoritmo II
Este algoritmo utiliza una codificación diferente del tablero. Cada componente del vector
contiene un 2 si la correspondiente casilla en el tablero está vacía, un 3 si contiene una × ó
un 5 si contiene un ◦, como se muestra en la figura 2.2.
La principal ventaja de esta codificación es que permite evaluar una posible victoria de un
jugador. Nótese que × = 3 en el vector. Por lo tanto una línea de × suma 9. De igual manera,
una línea de ◦ suma 15. En la codificación anterior, no era posible tener valores asociados a un
posible triunfo de cada jugador por tener elementos representados con los números 0 y 1. En
otras palabras, para la codificación anterior existen problemas con las operaciones de adición y
multiplicación por tener en la codificación elementos iguales a 0 y 1.

19
Capítulo 2. Problemas y codificación

Figura 2.2: Una representación más eficiente

Adicionalmente, el algoritmo incorpora una estrategia particular para cada jugada. Lo que
hace necesario la utilización de una variable que almacene el turno actual usando un entero que
indica qué movimiento va a ser realizado. Turno=1 indica el primer movimiento, Turno=9 el
último. Además se incorporan estrategias de moverse a una casilla específica para defenderse
de un ataque, evaluar un posible triunfo y atacar si es posible. Así el algoritmo requiere la
definición de tres funciones:

mover(n): Realiza una jugada en la casilla n de la siguiente manera: Actualiza el


tablero en la posición n con el número 3 (vectorn = 3) si Turno es impar o con 5
(vectorn = 5) si Turno es par. Turno=Turno+1.
PosibleTriunfo(Jugador): devuelve 0 si Jugador no puede ganar en el siguiente
movimiento. En caso contrario devuelve el número de la casilla en el que se
produce el movimiento ganador.
Atacar: Devuelve 5 si T ablero5 = 2, sino escoge cualquier casilla vacía que no
sea una esquina.

Los pasos del algoritmo son:

Paso 1: Se define que “×” corresponde a una jugada impar y “◦” a una par.
Paso 2: Turno=1 (“×”). mover(1) (esquina superior izquierda)
Paso 3: Turno=2 (“◦”). Si vector5 = 2 (vacío), entonces mover(5), sino mover(1).
Paso 4: Turno=3 (“×”). Si vector9 = 2 (vacío), entonces mover(9), sino mover(3).
Paso 5: Turno=4 (“◦”). Si PosibleTriunfo(×)6=0, entonces
mover(PosibleTriunfo(×)), sino mover(Atacar)
Paso 6: Turno=5 (“×”). Si PosibleTriunfo(×)6=0, entonces
mover(PosibleTriunfo(×)) y !VICTORIA!! de ×. Sino, si PosibleTriunfo(◦)6=0,
entonces mover(PosibleTriunfo(◦)), sino si vector7 = 2 (vacío), entonces
mover(7), sino mover(3).
Paso 7: Turno=6 (“◦”). Si PosibleTriunfo(◦)6=0, entonces
mover(PosibleTriunfo(◦)) y !VICTORIA!! de ◦, sino si PosibleTriunfo(×)6=0,
entonces mover(PosibleTriunfo(×)), sino mover(Atacar).

20
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Paso 8: Turno=7 (“×”). Si PosibleTriunfo(×)6=0, entonces


mover(PosibleTriunfo(×)), sino si PosibleTriunfo(◦)6=0, entonces
mover(PosibleTriunfo(◦)), sino jugar sobre cualquier casilla vacía.
Paso 9: Turno=8 (“◦”). Si PosibleTriunfo(◦)6=0, entonces
mover(PosibleTriunfo(◦)) y !VICTORIA!! de ◦, sino si PosibleTriunfo(×)6=0,
entonces mover(PosibleTriunfo(×)), sino jugar sobre cualquier casilla vacía.
Paso 10: Turno=9 (“×”). Lo mismo que Turno 7.

Este algoritmo, computacionalmente, es mucho más eficiente que el anterior. La principal


dificultad está en la verificación de un posible triunfo ya que se necesitan una gran cantidad de
reglas que evalúen esta posibilidad.

2.1.3 Algoritmo III


Este algoritmo es exactamente igual al anterior. La propuesta es diferente solamente en la
codificación del problema y consiste en utilizar las características de la matriz conocida como
cuadro mágico. Esta matriz cuadrada tiene la propiedad que el resultado de la suma de todos
los elementos de una fila, una columna o una diagonal es el mismo. La figura 2.3 muestra
la configuración de un cuadro mágico de dimensión 3. Nótese que la suma de cualquier fila,
columna o diagonal es 15. Cada elemento de esta matriz define la posición de cada elemento
del tablero en el vector de codificación como se muestra en la figura 2.4.

Figura 2.3: Cuadro mágico

Figura 2.4: Posiciones en el vector solución dadas por el cuadro mágico

Este simple cambio en el proceso de codificación simplifica la verificación de una posible


victoria de la siguiente manera: teniéndose como referencia una casilla vacía sobre la cual se

21
Capítulo 2. Problemas y codificación

pretende verificar una posible victoria, entonces se verifican, en el vector de solución, todas las
posibles parejas conformadas por esta casilla de referencia y las casillas del tablero asignadas
al jugador que posee el turno actual. Si la diferencia entre 15 y la suma de la pareja de casillas
seleccionada es negativa o mayor de 9 entonces la pareja de casillas no son vecinas y pueden ser
ignoradas. En caso contrario, la jugada sobre la casilla vacía conducirá al triunfo. Como ningún
jugador puede tener más de 4 casilla a la vez, el espacio de busqueda es mucho más reducido
que el esquema anterior.
Si se quisiera verificar si un movimiento en la posición 9 del vector mostrado en la
figura 2.4 es un posible triunfo para el jugador ◦, entonces es necesario verificar la suma de
las posiciones de las parejas posibles. Una pareja es 9 + 4 = 13, lo cual quiere decir que el
jugador actual gana la partida haciendo un movimiento en la casilla 9 del cuadro mágico, debido
a que 15 − 13 = 2 y 0 ≤ 2 ≤ 9. Lo mismo se puede concluir si se verifica la otra posible pareja
9 + 2 = 11. Las posibles parejas son conformadas por la posición 9 y todas las posiciones del
vector que contengan un ◦.
La idea de este ejemplo es mostrar la importancia de un adecuado esquema de
codificación. Además, es importante notar que la función objetivo del problema y el esquema
de codificación usado no pueden ser procesos independientes.

2.2 Problemas de empaquetamiento


Los problemas de empaquetamiento óptimo abarcan modelos en 1, 2 y 3 dimensiones. El
objetivo de todos ellos es almacenar en un lugar específico una determinada cantidad de
productos de diferentes tamaños y costos. El problema más simple, en una dimensión, es
denominado el problema de la mochila y el objetivo es introducir en una bolsa (mochila) el
máximo número de artículos posible maximizando el costo total de los artículos empacados.
Como la bolsa se adapta a la forma de los artículos, se considera que el problema es de una
dimensión dado que la suma de los volúmenes de los artículos no debe superar el volumen total
de la bolsa. Es decir, no se tiene en cuenta la forma del recipiente que almacena los artículos ni
la forma de los artículos, sólo interesa el volumen y costo de los mismos.
En dos dimensiones se tienen 3 problemas típicos de empaquetamiento o corte de piezas:
en el primero, el área donde se desea acomodar las piezas es constante y el objetivo es minimizar
el desperdicio de material. En el segundo, se tienen varias área de empaquetamiento iguales y
el objetivo es minimizar el número de áreas usadas de forma que se corten todas las piezas y el
desperdicio sea mínimo. El tercero considera que el área donde se desea acomodar las piezas
tiene una longitud variable (rollo de material). El objetivo es utilizar la mínima longitud posible
para ubicar todas las piezas.
En tres dimensiones, el problema más conocido consiste en ubicar cajas de diferente
volumen dentro de un contenedor de tamaño superior. El objetivo es disminuir el volumen
desperdiciado en el contenedor. Variaciones de este problema consideran formas cilíndricas
(tubos) y alturas variables del contenedor.
A continuación se describe detalladamente el problema de empaquetamiento en dos
dimensiones con área fija y el problema de la mochila.

22
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

2.2.1 Empaquetamiento o corte rectangular 2-D


El problema de corte rectangulares bidimensional (PCRB) de piezas pertenece a la familia
de problemas de corte y empaque y sus aplicaciones se pueden observar en industrias de
perfiles metálicos, corte de maderas, papel, plástico o vidrio en donde los componentes
rectangulares tienen que ser cortados desde grandes hojas de material. Es un problema
de tipo NP-completo, dado que los patrones de empaquetamiento (alternativas de solución)
incrementan exponencialmente con el número de rectángulos que deben ser empacados.
El problema descrito considera un alto grado de diversidad en los tipos de placas o
piezas rectangulares y una única paleta o superficie rectangular en donde las placas deben ser
ubicadas. Además, sin pérdida de generalización, se asume que todas las dimensiones son
enteros positivos.
En un problema de corte de rectángulos se dispone de un conjunto de piezas rectangulares
o placas con longitudes conocidas y se desean distribuir estas en un objeto rectangular de mayor
tamaño, denominado paleta, de forma que se minimice el área desperdiciada en la paleta. El
problema es abordado en su forma más simple, considerando únicamente placas rectangulares
con sus ejes x y y paralelos a los ejes x y y de la paleta, respectivamente.
Para una adecuada interpretación del problema, se definen los siguientes parámetros: n =
número total de placas y ri = i-ésima placa rectangular. Así, el problema consiste en que dado
un número finito n de piezas rectangulares ri y una placa rectangular de dimensiones l × h,
se requiere un patrón de empaquetamiento ortogonal en el cual se defina una ubicación de las
piezas rectangulares sobre la placa considerando que no deben existir traslapes y que los ejes
de las piezas deben ser paralelos a los de la placa.
La figura 2.5 muestra dos patrones de empaquetamiento con la misma área desperdiciada
(valor de la función objetivo). Sin embargo, el patrón de la derecha es de mejor calidad que el
de la izquierda si se tiene en cuenta que no contiene área desperdiciada no adyacente. En otras
palabras, para el patrón de la derecha existe la posibilidad de realizar una mejor utilización del
área desperdiciada porque no quedan regiones aisladas. Por lo anterior, es necesario construir
una función objetivo que incorpore el área no adyacente desperdiciada.

Figura 2.5: Empaquetamiento en 2-D

A continuación se definen los 4 aspectos básicos (ver sección 1.4) que se deben tener en
cuenta en la solución del problema de empaquetamiento bidimensional:

23
Capítulo 2. Problemas y codificación

1. Definición del espacio de búsqueda: El tamaño del espacio de búsqueda del problema
de empaquetamiento ortogonal es infinito, debido a que cada movimiento factible de una
placa dentro de un patrón de empaquetamiento crea un nuevo patrón de empaquetamiento.
Para reducir el espacio de búsqueda es necesario incorporar una estrategia que permita
asociar una alternativa de solución con la evaluación de la función objetivo y con la
conservación de la factibilidad. Como se verá más adelante esta estrategia se conoce
como abajo-izquierda y reduce significativamente el espacio de búsqueda.
El PCRB es una generalización natural del problema de la mochila. En consecuencia,
si todas las placas tienen la misma altura, los dos problemas coinciden exactamente
(ver sección 2.2.2). Por otro lado, si todas las placas tienen la misma anchura, el
problema corresponde a uno de secuenciamiento regular ó flowshop (sección 2.5.1).
Cada uno de estos problemas pertenece a la familia de los problemas NP-completos
(Garey and Johnson, 1979).

cadena de
secuencia o 2. Codificación o representación del problema: Una estrategia de codificación de una
permuta- solución del problema podría ser basada en coordenadas x y y que definan la posición
ción exacta de cada placa dentro de la paleta. Esta es una codificación simple de entender pero
de difícil implementación y que requiere mayor esfuerzo computacional. La verificación
de traslapes y la definición de una alternativa vecina es una tarea difícil y el manejo de
alternativas infactibles es abundante. Para el proceso de optimización, es una codificación
que se puede considerar ineficiente.
Una mejor estrategia es conocida como Abajo-Izquierda propuesta en Jakobs (1996)
(BL,bottom-left). Una alternativa de solución está compuesta por un vector de tamaño
n cuyos valores corresponden al índice i de la placa que será ubicada.
La posición k de cada elemento en el vector corresponde al orden en que será ubicada
cada placa, como se muestra en la figura 2.6

Figura 2.6: Codificación de una solución del PCRB

Así por ejemplo, si se tienen 4 tipos de placas a ser ubicadas, entonces, la alternativa de
solución [2, 4, 3, 1] significa que primero se ubicará dentro de la paleta la placa tipo 2,
después la tipo 4, después la tipo 3 y finalmente la placa tipo 1.
Es por esta razón que generalmente este tipo de codificación recibe el nombre de
secuencia o permutación. Surge entonces algunas preguntas: cómo se ubican las placas a
partir de un vector como el anterior de forma que no existan traslapes entre placas?. Esta

24
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

codificación produce soluciones infactibles ?. Cómo se define la estructura de vecindad


?.
El vector que representa la alternativa de solución, por sí solo, no permite obtener
una evaluación de la función objetivo y las restricciones del problema. Es necesario
acompañarlo de un proceso de interpretación o decodificación que permita realizar esta
labor. El algoritmo BL hace referencia a este proceso de decodificación. Consiste en
ubicar cada una de las piezas, dadas por el vector anterior, en la posición más abajo y más
a la izquierda que sea posible. La figura 2.7 muestra una alternativa de solución con la
secuencia [1, 2, 3, 4].

Figura 2.7: Algoritmo BL

El algoritmo BL tiene los siguientes pasos básicos para ubicar en la paleta una placa i:

(a) Paso 1: Ubicar la placa i en la esquina superior derecha de la paleta.


(b) Paso 2:Descender con la placa i lo máximo posible.
(c) Paso 3:Mover la placa a la izquierda hasta que: a) pueda descender nuevamente o
b) hasta que no pueda ir más a la izquierda. Si el caso es a), ir al paso 2. Si el caso
es b) continuar con la siguiente placa de la secuencia.

La principal ventaja de esta codificación es que, con ciertas consideraciones, sólo se


generan alternativas factibles y por lo tanto, para un problema con n placas, el espacio
de búsqueda es reducido a 2n n! posibles alternativas. Esto se debe a que el PCRB
usando la estrategia BL es un problema de permutación, por lo cual existen n! posibles
secuencias de placas. Además cada placa puede ser rotada 90º, existiendo así dos posibles
orientaciones para cada placa. En la práctica, el algoritmo BL genera un número menor
que 2n n! de posibles alternativas de solución. El tamaño del espacio de búsqueda usando
el algoritmo BL es mayor que el espacio generado por el problema del agente viajero.
La figura 2.8 muestra dos configuraciones obtenidas usando el algoritmo BL. La del
lado izquierdo corresponde a la secuencia [1, 2, 3, 4] y la del derecho corresponde a la
secuencia [2, 4, 3, 1].

25
Capítulo 2. Problemas y codificación

Figura 2.8: Dos secuencias diferentes usando el algoritmo BL

En este tipo de codificación una solución infactible sería aquella en la que la altura total
de las placas ubicadas es mayor que la altura h de la paleta (ver figura 2.5). Es decir, se
tiene una alternativa infactible cuando algunas placas se salen de la paleta. La solución a
este problema consiste en considerar sólo las posiciones del vector que no producen dicha
infactibilidad. Por lo tanto, para dar respuesta a las inquietudes formuladas anteriormente,
este tipo de codificación es mucho más eficiente ya que sólo produce soluciones factibles
y no se producen traslapes de una forma natural. Es decir, no se requieren procesos de
verificación de traslapes entre placas.
El algoritmo 2.1 muestra el pseudocódigo de una implementación sencilla de la estrategia
BL. Este algoritmo utiliza dos funciones adicionales de verificación: la primera es
denominada VerIz y tiene como objetivo verificar colisiones por el costado izquierdo de
la placa con posiciones de la paleta que ya han sido ocupadas. Las posiciones ocupadas
de la paleta se tienen en cuenta en el arreglo MatrizP aleta. En esta matriz las posiciones
que almacenan un 0 están vacías y las que tienen un 1 están llenas. La segunda función
es denominada VerAb y es la encargada de verificar colisiones por el costado inferior de
la placa. Los algoritmos 2.2 y 2.3 muestran cada una de estas funciones.

3. Población inicial: Puede ser generada de forma aleatoria. Es decir, se escoge una placa
aleatoria y se define su posición en el vector también de forma aleatoria. Sin embargo es
posible aplicar estrategias determinísticas basadas en ordenamientos previos que reducen
significativamente el esfuerzo combinatorial como se muestra en (Garey and Johnson,
1979).

4. Definición de la estructura de vecindad: Definir un vecino resulta particularmente


sencillo. En el capitulo anterior (ver página 8) se definió que un vecino corresponde
a un cambio local en la alternativa de solución actual. La forma como se realice este
cambio local constituye lo que se denomina la estructura de vecindad. Un cambio local
se puede interpretar como una alteración realizada a la alternativa en estudio de forma que
la alternativa resultante sea similar a la original (un vecino). Esta definición, por ser tan

26
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

// Fun ión BottomLeft


Datos de Entrada: NumPla as ← Número de placas;
Alternativa ← vector de tamaño 1 × N umP lacas;
DatosPla as: Arreglo con la siguiente información
de números enteros:
DatosPla as (i, 1) ← altura de la i-ésima placa.
DatosPla as (i, 2) ← ancho de la i-ésima placa.
AltoPaleta ← altura de la paleta (número entero).
An hoPaleta ← ancho de la paleta (número entero).
Datos de Salida : ValFunObj: Valor de la función objetivo (área desperdiciada en la paleta).
1 H ← AltoPaleta
2 L ← An hoPaleta
3 MatrizPaleta ← [0]H×L
4 for i ← 1 to NumPla as do
5 AltoPla ai ← DatosPla as (Alternativa(i), 1)
6 An hoPla ai ← DatosPla as (Alternativa(i), 2)
7 PosX ← L-An hoPla ai +1
8 PosY ← 0
9 [MovAb, PosY ] ← VerAb(PosX,PosY,MatrizPaleta,AltoPaleta,An hoPla ai)
10 if PosY- AltoPla ai ≥ 0 then
11 for k ← 1 to An hoPaleta-An hoPla ai do
12 [MovIz, PosX ] ← VerIz(PosX,PosY,MatrizPaleta,AltoPla ai)
13 [MovAb, PosY ] ← VerAb(PosX,PosY,MatrizPaleta,AltoPaleta,An hoPla ai)
14 if (MovIz = 1) and (MovAb = 1) then
15 break
16 end
17 end
18 for k ← (PosY-AltoPla ai +1) to PosY do
19 for l ← PosX to (PosX + An hoPla ai -1) do
20 MatrizPaleta (k, l) ← 1
21 end
22 end
23 end
24 end
25 AreaPaleta ← H × L
26 ValFunObj ← AreaPaleta- SumarUnos(MatrizPaleta)
Algorithm 2.1: Algoritmo de la función BottomLeft

27
Capítulo 2. Problemas y codificación

// Fun ión VerIz


Datos de Entrada: PosX ← posición inicial X de la placa;
PosY ← posición Y de la placa;

MatrizPaleta: matriz binaria

AltoPla ai ← altura de la placa (número entero).

Datos de Salida : MovIz ∈ {0, 1}


PosX ← posición final X de la placa;

1 MovIz ← 0

2 if PosX = 0 then
3 MovIz ← 1

4 PosX ← 1

5 break
6 end
7 else
8 for i ← PosY-AltoPla ai +1 to PosY do
9 if (MatrizPaleta (i,PosX −1) 6= 0) then
10 PosX ← (PosX)

11 MovIz ← 1

12 break
13 end
14 end
15 if MovIz = 0 then
16 PosX ← (PosX −1)

17 end
18 end
Algorithm 2.2: Algoritmo de la función VerIz

28
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

// Fun ión VerAb


Datos de Entrada: PosX ← posición X de la placa;
PosY ← posición inicial Y de la placa;

MatrizPaleta: matriz binaria

AltoPaleta ← altura de la paleta (número entero).

An hoPla ai ← ancho de la placa (número entero).

Datos de Salida : MovAb ∈ {0, 1}


PosY ← posición final Y de la placa;

1 PosY ← PosY +1

2 MovAb ← 0

3 if (PosY > AltoPaleta) then


4 MovAb ← 1

5 PosY ← (PosY −1)

6 break
7 end
8 for j ← PosX to PosX +An hoPla ai −1 do
9 if (MatrizPaleta (PosY,j) 6= 0) then
10 PosY ← (PosY −1)

11 MovAb ← 1

12 break
13 end
14 end
15 if MovAb = 1 then
16 break
17 end
18 else
19 [MovAb, PosY ] ← VerAb(PosX,PosY,MatrizPaleta,An hoPla ai )
20 end
Algorithm 2.3: Algoritmo de la función VerAb

29
Capítulo 2. Problemas y codificación

amplia, permite que muchas estructuras de vecindad puedan ser aplicadas, siendo unas
más eficientes que otras. Para este caso en particular una estrategia estaría conformada
por los siguientes pasos:

• Seleccionar, de forma aleatoria, dos posiciones (i y j) de la secuencia.


• Intercambiar el contenido de dichas posiciones (intercambiar ri con rj )

De esta manera la secuencia resultante sería un vecino de la secuencia original y por


lo tanto los pasos anteriores serían la estructura de vecindad del problema. El número
total de vecinos es (n − 1)! alternativas, resultantes de todos los posibles intercambios de
posiciones sobre la secuencia inicial.

2.2.2 Problema de la mochila


La frontera que divide los problemas tipo P y los NP está caracterizada por dos problemas
bastante conocidos. El primero de ellos es el problema de encaje perfecto de peso mínimo
(Minimum Weight Perfect Matching) el cual es considerado uno de los problemas “más difícil”
para el cual se conoce un algoritmo de solución en tiempo polinomial. Por otra parte el segundo,
conocido como el problema de la mochila (KP, knapsack problem), es considerado como el
problema de programación entera “más fácil” de tipo NP-difícil. Uno de los primeros reportes
en la literatura de este problema fue realizado por Dantzig (1957) y constituye un marco de
referencia de las técnicas de programación entera, optimización combinatorial y programación
dinámica. El KP es uno de los 21 problemas de tipo NP-completo presentados en Karp (1972).
Su formulación es extremadamente simple, sin embargo su solución es más compleja.
Una descripción informal de este problema puede hacerse desde la siguiente óptica:
supóngase que un ladrón está por asaltar una casa que tiene n objetos o artículos de interés.
Cada artículo j tiene asociado un valor cj y un volumén vj , j = 1, . . . , n. El ladrón posee una
mochila o bolsa con un capacidad máxima de volumen V que usará para transportar los objetos
que pretende robar. El objetivo del ladrón es llevar en la bolsa los artículos que representen el
mayor botín. Los datos manejados en el problema corresponden a los siguientes:

• Número total de artículos n.

• Vector de costos asociados a cada artículo {c1 , c2 , . . . , cn }.

• Vector de volúmenes asociados a cada artículo {v1 , v2 , . . . , vn }.

• Volumen máximo de la mochila V .

P Más formalmente,
P el objetivo es encontrar un subconjunto S ⊆ {1, 2, . . . , n} tal que
v
j∈S j ≤ V y c
j∈S j es máxima.

1. Definición del espacio de búsqueda: Considerando que un artículo puede tener sólo dos
estados (dentro o fuera de la mochila), entonces para n artículos una búsqueda exhaustiva
arroja 2n posibles alternativas de solución. Debido a estos dos posible estados de un

30
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

artículo el KP es también conocido como problema de la mochila 0-1 ó binario. Existen


muchas variables de este problema que aumentan su complejidad computacional, tales
como: KP canalizado, KP no lineal y KP multidimensional.
La factibilidad del problema puede ser manejada en el momento de generar la población
inicial y al momento de definir un vecino, buscando que siempre se obtengan alternativas
factibles (ver aspectos 3 y 4). También es posible penalizar la función objetivo de forma
que las alternativas que superen el volumen máximo de la mochila sean menos atractivas.
Esto se logra restando de la función de costo (por ser un problema de maximización) el
valor del volumen de exceso. Sin embargo, en este problema en particular, los mejores
resultados son obtenidos considerando únicamente alternativas factibles, lo cual, además,
reduce el espacio de búsqueda.
2. Codificación o representación del problema: Una alternativa de solución puede ser
representada por un vector binario X de tamaño n, donde cada elemento xj ∈ {0, 1} e
Cadena binaria
indica si el j-ésimo artículo está dentro (xj = 1) ó fuera (xj = 0) de la mochila (ver
figura 2.9).

Figura 2.9: Vector de solución KP

Un modelo matemático para el KP binario, en función de las definiciones anteriores,


puede ser formulado de la siguiente manera:

Pn
max j=1 cj xj (2.1)
s.a.
Pn
j=1 vj xj ≤V (2.2)
xj = {0, 1} (2.3)
j = 1, . . . , n (2.4)

3. Población inicial: Puede ser generada de forma aleatoria o utilizando una heurística
constructiva. Para problemas con pocos artículos se puede utilizar una estrategia voraz o
golosa para encontrar una solución de buena calidad y generalmente la alternativa óptima.
En problemas de gran tamaño esta misma estrategia puede ser usada para la construcción
de una población con mejores características que la obtenida de forma aleatoria. A partir
de este punto una metaheurística puede terminar el proceso de optimización.
Una heurística voraz consiste, por ejemplo, en introducir a la mochila los artículos que
tengan la mayor relación costo-volumen (cj /vj ). Es decir que se prefieren los artículos

31
Capítulo 2. Problemas y codificación

de mayor costo y menor volumen. Para garantizar la factibilidad, los artículos son
introducidos a la mochila mientras no se supere el volumen máximo de la misma.

4. Definición de la estructura de vecindad: Una alternativa vecina puede ser aquella


que incorpore o retire uno o más artículos a la alternativa actual. Generalmente para
este problema se acostumbra que la alternativa vecina se diferencie de la alternativa
original sólo en un artículo, escogido de forma aleatoria. Esto quiere decir, que en el
vector mostrado en la figura 2.9 se escoge una posición aleatoria y se conmuta el valor
encontrado en dicha posición. Entiéndase por conmutación la tarea de cambiar un 1 por
un 0 o viceversa.

2.3 Problemas representados como grafos


Realmente, la mayoría de problemas estudiados en este texto pueden ser presentados como
un grafo. Buscando tener una mejor caracterización de todos ellos, sólo se presentan dos en
esta sección: el problema del agente viajero y el problema de coloreo de grafos, por estar
relacionados explicitamente con la teoría de grafos. Sin embargo, se propone como un ejercicio
para el lector, representar como un grafo, si es posible, cada problema abordado en este libro.

2.3.1 Problema del Agente Viajero (PAV)


Este problema es ampliamente estudiado en la literatura y ha sido abordado por una gran
cantidad de investigadores para probar nuevas ideas y nuevos algoritmos de optimización
combinatorial y exacta. El PAV ha llamado la atención de investigadores de psicología
cognitiva, debido a que se ha observado que los seres humanos tienen una habilidad innata de
producir soluciones de buena calidad muy rápidamente. La idea de estos estudios es caracterizar
las variables y los algoritmos que el ser humano utiliza en la solución de este problema para
posteriormente establecer métodos computacionales inspirados en este tipo de comportamiento
neuronal.
El PAV un problema NP-completo y consiste, en el caso más general, en encontrar
el menor circuito Hamiltoniano (tour) que debe hacer un agente para visitar un conjunto
de ciudades interconectadas entre sí. Dicho circuito deberá terminar en la ciudad donde
comenzó (un circuito cerrado) pasando por todas y cada una de las ciudades una única vez
(ver sección 1.5, pág. 9).
En términos de un grafo, el problema consiste en que dado un grafo conectado y completo
G = {V, A} de n vertices con pesos en sus aristas dij , que representan la distancia Euclidiana
entre el vértice i y el vértice j, se debe encontrar el circuito Hamiltoniano más corto. En
el caso de un digrafo el problema es conocido como PAV asimétrico. Nótese que si el grafo es
no-completo, es posible adicionar nuevos arcos para conformar un grafo completo que produzca
la misma solución óptima que G. Esto se puede hacer asignando distancias muy grandes a los
nuevos arcos para garantizar que sean descartados en cualquier solución óptima.
A continuación se definen los 4 aspectos básicos (ver sección 1.4) que describen el PAV:

32
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

1. Definición del espacio de búsqueda: para un grafo conectado de n vertices (n > 2),
las posibles alternativas de solución que pueden ser obtenidas son (n − 1)!/2. Existen
algoritmos que permiten reducir el tamaño del espacio de búsqueda, tales como Separar
y Sondar (B&B, Branch and Bound), los cuales generan un circuito a la vez y utilizan la
mejor solución encontrada para sondar o limitar la exploración de un conjunto de futuras
alternativas. Empíricamente se ha establecido que esta estrategia reduce el espacio de
búsqueda a 1.26n . Muchas versiones del algoritmo B&B han sido propuestas y la mayoría
obtienen soluciones en tiempos aceptables para problemas de alrededor de 60 vértices o
ciudades.
Otra forma de reducir el espacio de búsqueda es encontrando casos especiales del
problema. Es decir, dividir el problema en subproblemas de menor complejidad
que pueden ser abordados a través de heurísticas que proporcionen soluciones
exactas(Dantzig et al., 1954). Esta técnica de reducción del espacio de búsqueda se
amplia más adelante, en el aspecto correspondiente a la definición de la estructura de
vecindad (ver estrategia k-opt).
2. Codificación o representación del problema: como se mencionó en la sección 1.4, la
codificación del problema y la definición del espacio de búsqueda son aspectos diferentes
a la formulación matemática del mismo. Sin embargo, es una práctica común presentar,
cuando es posible, el modelo matemático utilizando la codificación adoptada.
Generalmente, los datos del problema son dados como coordenadas (x, y) que
representan la ubicación de las ciudades en un plano bidimencional como se muestra
en la figura 2.10a.
Para efectos de presentar un modelo más compacto, el conjunto de coordenadas puede
ser convertido en una matriz simétrica D de dimensiones n × n, donde cada elemento
di,j ∈ D representa la distancia Euclidiana entre las ciudades i y j como se muestra en la
figura 2.10b.

De esta manera, el objetivo del problema es encontrar una secuencia π de ciudades


con el menor circuito Hamiltoniano . Esta secuencia π, que también se conoce como Codificación de
permutación, es una alternativa de solución y puede ser codificada como se muestra en una alternativa
la figura 2.10a. En donde la alternativa π = {5, 4, 2, 6, 3, 1} establece un circuito que de solución
comprende los arcos a5,4 , a4,2 , a2,6 , a6,3 , a3,1 y a1,5 . En consecuencia, la función objetivo para el PAV
es f (π) = d5,4 + d4,2 + d2,6 + d6,3 + d3,1 + d1,5. El algoritmo 2.4 muestra el pseudo-código
de la función ComputarLongitudTour que permite encontrar la longitud total del tour
(circuito).
El modelo matemático puede ser presentado de la siguiente forma:
n−1
P
min f (π) = dπ(i),π(i+1) + dπ(n),π(1) (2.5)
i=1
s.a.
π ∈ ir uito Hamiltoniano (2.6)
di,j = dj,i (2.7)

33
Capítulo 2. Problemas y codificación

(a) PAV euclidiano

(b) Datos de entrada

Figura 2.10: Problema del agente viajero

34
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

// Fun ión ComputarLongitudTour


Datos de Entrada: ← Circuito Hamiltoniano
D ← Matriz de longitudes de cada arco. [D]
n×n
n ← número de ciudades

Datos de Salida : l: Longitud total del circuito Hamiltoniano


1 l ←0
2 for i ← 1 to n −1 do
3 l ← l + D ( (i), (i+1))
4 end
/* In luir el último tramo entre la última iudad y la primera. */
5 l ← l + D ( (n), (1))

Algorithm 2.4: Función que calcula la longitud total de un circuito Hamiltoniano

Nótese que la alternativa es factible mientras se garantice que el circuito sea


Hamiltoniano.

3. Población inicial: Puede ser generada de forma aleatoria. Teniéndose en cuenta que el
circuito generado debe ser Hamiltoniano. Es decir, no se permite visitar una ciudad más
de una vez y la alternativa obtenida debe incluir todas las ciudades.
Una forma más eficiente es utilizar una heurística constructiva utilizando criterios
probabilísticos que den preferencia a los arcos con las distancias más cortas.

35
Capítulo 2. Problemas y codificación

Pueden ser algoritmos golosos (voraces) o basados en distribuciones probabilísticas,


como por ejemplo colonia de hormigas y recocido simulado, entre otros.

Heurísticas
2-opt y k-opt 4. Definición de la estructura de vecindad : La definición de la estructura de vecindad
es un aspecto bastante amplio en la descripción de un problema particular. Por esta
razón un gran número de propuestas pueden tenerse en cuenta a la hora de definir un
vecino del problema. Sin embargo, para el PAV existen unas estrategias, conocidas como
estrategias de mejoramiento iterativo, que han mostrado ser bastante eficientes y que
pueden aplicarse de forma general a problemas que se pueden representar a través de
grafos (Lin and Kernighan, 1973).

2-opt: Esta técnica es una heurística propuesta por Lin and Kernighan
(1973) y es un caso especial de la técnica k-opt. Consiste en remover
aleatoriamente dos arcos del grafo, que hacen parte del circuito actual, de
manera que éste queda dividido en dos regiones. Posteriormente se incorporan
dos nuevos arcos diferentes que reconecten las dos regiones, obteniéndose así
un vecino, como se muestra en la figura 2.11.

(a) Circuito original (b) Remoción de 2 arcos

(c) Circuito vecino

Figura 2.11: Heurística 2-opt

36
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

La estrategia anterior, aplicada al esquema de codificación adoptado,


es equivalente a seleccionar aleatoriamente dos posiciones del vector (dos
vértices) y rotar toda la franja comprendida entre los dos vértices, como se
muestra en la figura 2.12. Nótese que el vector obtenido en la figura 2.12
representa exactamente el circuito mostrado en la figura 2.11c. El algoritmo
2.5 corresponde a la función 2opt, la cual recibe como parámetro de entrada
un circuito Hamiltoniano y entrega como salida una alternativa vecina.

Figura 2.12: Obtención de un vecino usando 2-opt

// Fun ión 2opt


Datos de Entrada: Cir uito ← Circuito Hamiltoniano
n ← número de ciudades o vértices

Datos de Salida : Ve ino: Circuito Hamiltoniano vecino


1 Ve ino ← Cir uito

2 Contador ← 0

3 Aleatorio1 ← random (0,n)

4 Aleatorio2 ← random (0,n)

5 if Aleatorio1 > Aleatorio2 then /* Se garantiza que el primer aleatorio sea menor
que el segundo */
6 Temp ← Aleatorio1
7 Aleatorio1 ← Aleatorio2

8 Aleatorio2 ← Temp

9 end
10 for i ← Aleatorio1 to Aleatorio2 do
11 Ve ino (i) ← Cir uito (Aleatorio2 -Contador)

12 Contador ← Contador +1

13 end
Algorithm 2.5: Función para obtener un vecino usando 2-opt

k-opt: Esta heurística consiste en remover k arcos que estén mutuamente


separados. Esto produce k regiones que deben ser reconectadas con arcos
diferentes a los que fueron removidos en el paso anterior y sin dejar
sub-circuitos desconectados. El hecho de que los arcos estén mutuamente
separados garantiza que todas las regiones contienen dos o más ciudades.
Esta estrategia permite descomponer el PAV en sub-problemas de menor

37
Capítulo 2. Problemas y codificación

complejidad que pueden ser eventualmente resueltos con procedimientos de


búsqueda exhaustiva. Cuando el número de arcos k que son removidos se
considera variable, surge una técnica conocida como variable-opt.
Una observación muy importante es que cualquier movimiento k-opt (k >
Dos arcos 2) realizado sobre la alternativa actual es equivalente a una secuencia finita
son adya- de movimientos 2-opt. Lo anterior justifica que en la actualidad el método
centes cuando 2-opt sea el más usado y el que mejores resultados presenta en la literatura
tienen un especializada (Gutin and Punnen, 2002). Para el PAV Eucliadiano, el número
punto en
común de vecinos que produce el método 2-opt es n(n − 1)/2.

En la literatura especializada existe una gran cantidad de casos de prueba que son
utilizados para evaluar el desempeño de diferentes algoritmos que se proponen constantemente.
Una gran colección de estos casos y las mejores soluciones encontradas hasta el momento
pueden ser encontrados en la dirección de internet: http://www.iwr.uni-heidelberg.de/
groups/ omopt/software/TSPLIB95/tsp/.
Una modificación al PAV es el problema de enrutamiento (ruteo) óptimo de vehículos,
el cual se describe como sigue: sea G = {V, A} un digrafo donde V es el conjunto de vértices
Problema de
enrutamiento y A el conjunto de arcos que conectan los vértices. Uno de los vértices representa el deposito
óptimo de de donde parte una flota de m vehículos. Cada vehículo tiene una capacidad de transporte qv . A
vehículos cada vértice está asociada una demanda qi y un tiempo de descarga ti . A cada arco está asociado
un costo cij y un tiempo de transporte tij . El problema consiste en encontrar un conjunto de
rutas que cumpla las siguientes condiciones:

• Cada ruta inicia y termina en el deposito.

• Cada vehículo realiza una ruta diferente.

• La carga transportada por cada vehículo no excede su capacidad.

• La duración total de cada ruta (incluido transporte y descarga) no excede un tiempo


máximo Tmax .

• El costo total es minimizado y todas las demandas son satisfechas.

La versión más simple del problema de ruteo óptimo de vehículos es conocida como
problema simple de transporte, el cual se define de la siguiente manera:
Problema de
transporte
Considérese un conjunto I de productores y un conjunto J de consumidores.
Conocida (1) la demanda bj de cada consumidor j ∈ J, (2) la producción máxima
ai de cada productor i ∈ I, y (3) el costo por tonelada transportada de cada producto
cij desde el productor i hasta el consumidor j , entonces el problema del transporte
consiste en determinar la cantidad de producto a transportar de forma que el costo
total de transporte sea mínimo.

38
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

j=1
d11=2 km b1=100
i=1
a1=300

j=2

b2=200

i=2 j=3
a1=500 b3=300

Figura 2.13: Problema simple de transporte

Otra versión modificada del PAV es el Problema de la Ruta de Mínimo Costo. La


principal característica es que el recorrido no es un circuito Hamiltoniano. Existe un nodo
Problema de la
fuente y un nodo destino. El objetivo es encontrar los arcos del grafo que conectan estos dos ruta de mínimo
nodos de forma que el costo total de la ruta sea mínimo. La descripción detallada de este costo (PRMC)
problema se da en la sección 3.2.1, pág. 126.

2.3.2 Coloreado de grafos


La versión planar de este problema es conocida también como coloreado de mapas. El objetivo
de este problema consiste en asignarle distintos colores (o números enteros) a los vértices (o
arcos) de un grafo no dirigido, de manera que ningún par de vértices (o arcos) adyacentes
compartan el mismo color (o número).
En esta sección se presenta el problema NP-difícil de coloreado de vértices de un grafo
planar (cada vértice corresponde a una ciudad de un mapa). La determinación del número
Teorema de los
mínimo de colores necesarios para colorear un grafo planar ha sido un problema de interés 4 colores
por más de un siglo. Cerca de 1850, Francis Guthrie (1831-1899) se interesó en el problema
general después de mostrar la forma de colorear los condados del mapa de Inglaterra con sólo
cuatro colores. En 1878, la comunidad científica tomó conciencia del problema con el anuncio
de Arthur Cayley (1821-1895) en una reunión de la London Mathematical Society. En 1879,
Cayley enunció el problema en el primer volumen de los Proceedings of the Royal Geographical
Society. Poco después, el abogado y matemático aficionado Sir Alfred Kempe (1849-1922)
diseñó una demostración que permaneció incuestionable durante más de una década. Sin
embargo, en 1890 el matemático británico Persy John Heawood (1861-1955) encontró un error
en el trabajo de Kempe. El problema permaneció sin solución hasta 1976, cuando finalmente fue
resuelto por Kenneth Appel y Wolfgang Haken. Su demostración usó un complicado análisis
computacional de 1936 configuraciones y logro establecer un teorema fundamental asociado a
este problema, denominado teorema de los cuatro colores, que afirma que todo grafo planar G
puede colorearse con

39
Capítulo 2. Problemas y codificación

un máximo de 4 colores distintos.


En un grafo no planar (donde existe cruces de arcos) el número mínimo de colores k,
necesario para colorearlo, se denomina número cromático y se designa como X(G).Un grafo es
Número
cromático
llamado plano o planar si se pueden conectar sus vértices sin que sus arcos se crucen. Un grafo
G es k-coloreable si X(G) ≤ k.

1. Definición del espacio de búsqueda : haciendo uso del teorema de los 4 colores, en un
grafo conectado no dirigido de n vértices, las posibles alternativas de solución que pueden
ser obtenidas son 4n .
La factibilidad de este problema puede ser manejada a través de la minimización del
número de vertices adyacentes del mismo color. Es decir, las alternativas que posean un
mayor número de vértices adyacentes (vértices conectados por un arco) con el mismo
color deben ser menos atractivas que aquellas que no presentan esta situación. Además el
grafo debe ser planar.

2. Codificación o representación del problema : dado que sólo son necesarios 4 colores,
la codificación utilizada para una alternativa factible de solución es un vector V =
(v1 , v2 , ...vj , ..., vn ), donde n es el número total de vértices del grafo G. El elemento
vj del vector es un número entero ∈ {0, 1, 2, 3} y representa el color asignado al j-ésimo
vértice.
Por ejemplo, si se considera un mapa de 6 ciudades y una alternativa de solución V =
(3, 1, 0, 1, 0, 2) significa que el color 3 se asigna al vértice (o ciudad) 1, el color 1 al
vértice 2 y así sucesivamente.
Otro parámetro importante que se debe conocer es cómo están interconectadas las
ciudades (conectividad del grafo). Para esto se define una matriz simétrica de
conectividad A de dimensiones n × n, donde cada elemento ai,j ∈ {0, 1}. Si la ciudad Ci
es limítrofe con la ciudad Cj entonces ai,j = 1, de lo contrario ai,j = 0. Para un mapa de
6 ciudades la matriz de conectividad se muestra en la figura 2.14a. El grafo equivalente,
usando la matriz de conectividad y la alternativa de solución V = (3, 1, 0, 1, 0, 2) es
mostrado en la figura 2.14b.
Para evaluar la función objetivo se deben identificar todos las ciudades vecinas de cada
ciudad, para lo cual se utiliza la matriz A. Así por ejemplo, las ciudades vecinas de
la ciudad 1 (CV1 ), son CV1 = {2, 3, 6}, para la ciudad 2, CV2 = {1, 3, 4, 5, 6}, y así
sucesivamente para todos los CVj con j ∈ {1, 2, ...n}. Como la estructura del grafo no
cambia durante todo el proceso de optimización, este procedimiento se realiza sólo una
vez.
La función objetivo consiste en minimizar los vértices adyacentes con el mismo color,
para lo cual, según el teorema de los 4 colores, siempre es posible alcanzar una función
objetivo igual a cero en grafos planares.

40
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

C1 C2 C3 C4 C5 C6
C1 0 1 1 0 0 1
C2 1 0 1 1 1 1
A = C3 1 1 0 1 0 0
C4 0 1 1 0 1 0
C5 0 1 0 1 0 1
C6 1 1 0 0 1 0
(a) Matriz de conectividad (b) Grafo equivalente

Figura 2.14: Coloreo de grafos planares

n
X
min f (v) = aij (2.8)
j=1
i∈CVj
vj =vi

Una variante del problema incorpora costos a cada color, haciendo que la función objetivo
busque el menor número de colores y el uso de los más económicos.

3. Población inicial: Puede ser generada de forma aleatoria.

4. Definición de la estructura de vecindad : una mudanza de color aleatoria en cualquiera


de las ciudades.

2.4 Problemas de asignación


2.4.1 Asignación generalizada
Este problema fue descrito en el capitulo 1.1, página 2. En esta sección se presenta algunas
características adicionales del problema, así como su modelo matemático.
El problema de asignación generalizada (PAG) es un problema de optimización
combinatorial NP-completo. Y consiste en que dada una matriz de costos C de dimensiones
Modelo
m × n (ver tabla 1.2), donde Cij es el costo de asignar la tarea j al agente i, m es el número matemático
de tareas y n el número de agentes, se debe encontrar una asignación óptima de las m tareas a del PAG
los n agentes que minimice el costo total de asignación (Dorigo and Colorni, 1996). La función
objetivo puede escribirse de la siguiente manera:

41
Capítulo 2. Problemas y codificación

n X
X m
Cij πij (2.9)
i=1 j=1

Donde πi,j ∈ {0, 1} es el arco que conecta el agente i con la tarea j. El conjunto de arcos
πi,j , para i = 1, 2 . . . n y j = 1, 2 . . . m, conforman una matriz que representa una alternativa
de solución de dimensiones m × n. Por ejemplo, si la tarea k es asignada al agente l, entonces
el elemento πk,l = 1, mientras que los demás agentes disponibles para realizar esa misma tarea
tomarán un valor igual a cero (πk,i = 0 donde i 6= l). La representación de una alternativa
de solución a través de una matriz, sólo será usada a fin de formular el modelo matemático
como una simple operación entre matrices y vectores. Sin embargo, a la hora de implementar
un algoritmo que permita calcular el valor de la función objetivo, la codificación usada será a
través de un vector como el mostrado en la figura 2.15, el cual contiene la misma información
que la matriz mencionada anteriormente.

Figura 2.15: Codificación del PAG

Para asegurar que una tarea sea asignada sólo una vez a un único agente, se incorporan
las siguientes restricciones:

n
X
πij = 1 (2.10)
i=1
π ∈ {0, 1} (2.11)
Los agentes poseen recursos limitados para la realización de las tareas, algunos de los
recursos más comunes son: tiempo, materia prima, capital e infraestructura. Por lo tanto, se
define una matriz A de consumo de recursos, donde el elemento Ai,j representa los recursos
consumidos por el agente i al realizar la tarea j, y un vector b, donde el elemento bi representa
la capacidad total de recursos del agente i. De esta manera, el modelo matemático debe incluir
una restricción adicional que represente dicha limitación en consumo de recursos.

n
X
Aij πij ≤ bi i = 1, 2 . . . m (2.12)
j=1

Así, la región factible está enmarcada dentro de las restricciones (2.10), (2.11) y
(2.12). Por tener restricciones, el calculo de la función objetivo puede involucrar factores de

42
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

penalización. De esta manera, una alternativa infactible es menos atractiva que una factible.
El modelo matemático modificado con factores de penalización consiste en incorporar la
restricción (2.12) a la función objetivo:
 
n X
m  n
!
X X  X 
Cij πij + β λi
 Aij πij − bi  (2.13)
i=1 j=1 j=1
o 
i∈ restricciones
n
violadas | {z }
antidad de re ursos ex edidos

Donde β es el parámetro encargado de controlar el peso o la importancia relativa de la


restricción con respecto a la solución de costo actual y controla la influencia de la información
en el proceso de búsqueda. Este parámetro es el encargado de hacer perdurar una alternativa
por más o menos iteraciones dependiendo de su valor. β < 1, hace que la penalización sea un
porcentaje del costo total de los recursos excedidos.β = 1 implica que se penalice la violación
de recursos con el valor exacto del costo total de los recursos excedidos. beta > 1 incrementa la
penalización y hace que las alternativas infactibles sean menos atractivas (de peor calidad) que
las factibles. El factor λi tiene una importante interpretación económica ya que calcula el costo
por unidad de recurso del agente i, adicionalmente garantiza la correspondencia en unidades de
costo en la función objetivo y permite obtener el costo total de los recursos excedidos. Por lo
tanto, el parámetro λ corresponde a un multiplicador de Lagrange que se calcula de la siguiente
manera:

m
P
Cij πij
j=1
λi = (2.14)
bi
Es importante notar que todos los problemas estudiados hasta este punto tienen una
codificación idéntica. Lo anterior es evidente cuando se comparan las figuras 2.15, 2.12, 2.9,
2.6 y 2.1. La codificación de problemas a través de un vector es una práctica general en
la optimización combinatorial, debido a que presenta características favorables a la hora de
aplicar diferentes técnicas de optimización, como se verá más adelante. Lo importante aquí,
es tener presente que todo problema, además de su vector de codificación, tiene asociado un
proceso de interpretación de ese vector. De esta manera, toda metaheurística tiene la tarea
de relacionar las modificaciones realizadas en el vector a través de la estructura de vecindad
con las variaciones que esto produce en la función objetivo. En otras palabras, se establecen
indicadores de sensibilidad que permiten al algoritmo de optimización identificar alteraciones
favorables (vecinos de buena calidad) de la alternativa de solución actual.

2.4.2 Asignación de horarios de clase


El Problema de Programación Óptima de Horarios de Clase (PPOHC) que se presenta en esta
sección, corresponde a una versión simplificada, donde se consideran algunas restricciones de
las muchas posibles, así cómo un único recurso para ser asignado, los salones.

43
Capítulo 2. Problemas y codificación

La solución a este problema consiste en establecer una secuencia, en un período


determinado de tiempo (típicamente una semana), de sesiones, clases o eventos ofrecidos a
los estudiantes de forma que se cumpla un conjunto de restricciones de diferentes tipos. Es
considerado un problema combinatorial multidimensional NP-completo de difícil solución.
En la literatura especializada es común encontrar soluciones que dividen el problema
para posteriormente resolverlo de forma combinada e iterativa (Aubin and Ferland, 1989;
Problema
multi- Ferland and Roy, 1985). Generalmente, los sub-problemas resultantes de esta división
dimensional corresponden a uno de asignación de recurso único (programación de salones) y a otro de
programación de horarios. Después, estos dos sub-problemas se integran de forma iterativa
para encontrar la asignación de profesor y salón. Carter (1989) documenta un método iterativo
usado en la universidad de Waterloo para desarrollar programación de cursos.
Mulvey (1983) desarrolla un método de programación de asignación múltiple basado en
el uso del modelo general de redes. Posteriormente, Dinkel et al. (1989) reportó una aplicación
basada en el modelo de Mulvey donde se involucran 300 clases, 20 salones y 16 períodos de
tiempo, donde la solución fue obtenida usando un aplicativo comercial de programación entera.
El problema de programación óptima de horarios que se propone está conformado por
un conjunto de eventos o clases que deben ser programados en 45 bloques de tiempo (5 días
de 9 horas de clase cada uno), un conjunto de salones en los cuales se imparten las clases, un
conjunto de estudiantes los cuales asisten a las clases y un conjunto de características satisfechas
por los salones y requeridas por las clases. Cada estudiante asiste a un determinado número de
clases y cada salón tiene un tamaño. El objetivo es elegir un salón y un bloque de tiempo para
cada clase de forma que se maximicen las preferencias de los estudiantes sin crear conflictos en
la programación de estudiantes o salones.
Existen unas relaciones previas que deben ser respetadas: un conjunto de estudiantes
que asisten a las clases de cada asignatura y un conjunto de características requeridas por
las asignaturas y ofrecidas por los salones. Cada estudiante tiene programado un número
determinado de asignaturas y cada salón posee una capacidad limitada de estudiantes. Un
horario factible es aquel en el cual todas las asignaturas han sido asignadas a bloques de tiempo
y a salones de clase, considerando que:
• Los estudiantes no deben recibir más de una asignatura al mismo tiempo (estudiantes con
cruces de horario).

• La capacidad del salón debe ser suficiente para atender todos los estudiantes programados
y debe satisfacer todos los requerimientos de la materia. Algunas materias requieren
salones especiales como laboratorios y aquellas asistidas por computador, entre otras.

• Sólo una asignatura es impartida en cada salón en cualquier bloque de tiempo (cruce de
salones).
Adicionalmente, se debe procurar que:
• Un estudiante no tenga clase en el último bloque del día.

• Un estudiante no reciba 2 eventos consecutivos.

44
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

• Un estudiante no reciba sólo una clase al día.

Las consideraciones anteriores constituyen dos diferentes tipos de restricciones


denominadas duras y blandas, respectivamente. Estas restricciones pueden ser ampliadas según
las particularidades del problema que se quiera resolver. Por ejemplo, se puede considerar una
restricción adicional que involucre la preferencia de horarios de una materia, la preferencia
de un profesor por un salón y la distancia de desplazamiento de profesores y estudiantes,
entre otras. Las restricciones duras corresponden a aquellas que deben cumplirse para que
la alternativa de solución sea factible. Las restricciones blandas son aquellas cuya violación se
desea minimizar para buscar la optimalidad pero que no son de estricto cumplimiento.
La información involucrada en la construcción de un caso comprende los siguientes
arreglos:

• Conjunto de ns salones: S = {Sj : j ∈ J}, con J = 1, 2, . . . ns .

• Conjunto de nE eventos: E = {Ei : i ∈ I}, con I = 1, 2, . . . nE . Cada asignatura o


clase es un evento del problema. Un evento existe cuando tiene asignado al menos un
estudiante.

• Conjunto de nEs estudiantes: Es = {Esk : k ∈ K}, con K = 1, 2, . . . nEs . Un estudiante


existe cuando tiene asignado al menos un evento.

• Conjunto de nt períodos o bloques de tiempo: P = {Pt : t ∈ T }, con T = 1, 2, . . . nt .


En este caso nt = 45.

Los datos de entrada del problema involucran una matriz “Evento_Salon” en la


que se relaciona qué salones son propicios para un evento en particular. Un elemento
Evento_Salon(Ei ,Sj ) de esta matriz es 1 cuando el salon Sj cumple con las necesidades
impuestas por el evento Ei . En cualquiera de los otros casos, el elemento es 0.
Para que un salón haga parte de la solución del problema, éste debe ser apto, al menos,
para un evento. Esto quiere decir, que para un salón s se debe cumplir que:

nE
X
Evento_Saloni,s 6= 0 (2.15)
i=1

Debe existir también una matriz “Evento_Estudiante” que relaciona cada uno de los
estudiantes con cada uno de los eventos. Un elemento Evento_Estudiante(Ei ,Esk ) de esta
matriz es 1 cuando el estudiante Esk tiene matriculado el evento Ei . En cualquiera de los otros
casos, el elemento es 0.
Para que el estudiante k exista se debe cumplir que

nE
X
Evento_Estudiantei,k 6= 0 (2.16)
i=1

45
Capítulo 2. Problemas y codificación

Para que el evento i exista se debe cumplir que:

nEs
X
Evento_Estudiantei,k 6= 0 (2.17)
k=1

La figura 2.16 ilustra una propuesta de codificación para representar una alternativa de
solución del problema. Esta codificación consiste en construir nE vectores fila de 45 posiciones
Codificación
del
cada uno, correspondientes a cada bloque de tiempo de la semana. Cada uno de estos vectores
PPOHC está asociado a un evento en particular y los valores existentes en cada posición corresponden a
los salones asignados.
Bloque Bloque Bloque ⋯ Bloque
1 2 3 45

Evento1 3 0 0 ⋯ 0
Evento2 0 1 0 ⋯ ⋮
⋮ ⋮ ⋮ ⋮ ⋱ 0
EventonE 1 0 0 ⋯ 0

Figura 2.16: Codificación matricial del PPOHC

En la figura 2.16, se puede observar que el evento 1 se llevará a cabo en el salón 3 en


el bloque de tiempo 1. Las posiciones iguales a 0 indican que no se ha realizado ninguna
asignación para un evento y bloque de tiempo determinado. Adicionalmente para que una
alternativa sea factible, en este modelo en particular, sólo se asigna un salón por cada evento.
Este tipo de representación tiene el inconveniente de manejar una gran cantidad de información
dispersa (gran cantidad de ceros) en la alternativa de solución. Sin embargo, tiene la ventaja de
poder controlar con mayor facilidad el cumplimiento de algunas restricciones.
Otra propuesta de codificación consiste en una tripleta conformada por el salón, el evento,
y el período de tiempo. Esta tripleta puede ser codificada en una cadena binaria como la
mostrada en la figura 2.17. En este caso, la codificación con 5 bits permite manejar un problema
de 32 salones y 32 períodos de tiempo. Para un caso con hasta 512 eventos, 32 salones (5 bits)
y 16 períodos (4 bits) de tiempo, sería necesaria una cadena binaria de 512 × 5 × 4 = 10240
elementos. Por lo tanto, para este tipo de codificación, el espacio de búsqueda sería de tamaño
21 0240 = ∞.
El manejo de las restricciones se realiza penalizando la función objetivo.
Manejo de  Evento 1
  Evento nE
 
restricciones 1 1 1 0 0 1 1 1 0 0 ⋯ 0 1 1 0 1 1 0 1 0 0
   
Salón Período Salón Período

Figura 2.17: Codificación vectorial del PPOHC

El modelo matemático, penalizando la función objetivo con todas las restricciones (duras
y blandas), es presentado formalmente en (2.18), de la siguiente forma:

46
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

min (w1 · EsC + w2 · SRNS + w3 · SC ) + Modelo


| {z } matemático
Restricciones duras
del PPOHC
(w4 · EsUB + w5 · EsEC + w6 · EsUE )
| {z }
Restricciones blandas
s.a.
EsC = 0
(2.18)
SRN S = 0
SC = 0
nE
P
Evento_Estudiantei,k 6= 0
i=1
nP
Es
Evento_Saloni,k 6= 0
k=1

Donde EsC es el número total de cruces de horario que presentan los estudiantes en sus
materias (estudiantes que deben atender más de un evento al mismo tiempo).

nEs
45 X nE
! !
X X
EsC = Num_Cruces_Est (t, k, i) −1 (2.19)
t=1 k=1 i=1

El elemento Num_Cruces_Est(t,k,i) es 1 si Evento_Estudiantei,k × Alternativai,t ≥


1. En cualquier otro caso el elemento es 0.
SRN S es el número de asignaciones de eventos a salones que no cumplen con los
requerimientos exigido (requerimientos no satisfechos).
nE
45 X
X
SRN S = Num_Salones(t,i) (2.20)
t=1 i=1

Num_Salones(t,i) es 1 si Evento_Saloni,Alternativai,t = 0. En cualquier otro caso el


elemento es 0.
SC es el número de cruces de horarios entre salones, es decir aquellos que tienen más de
un evento asignado al mismo tiempo.

nS
45 X
X
SC = Num_Cruces_Salones(t, j) (2.21)
t=1 j=1

nE
P
Num_Cruces_Salones(t, j) = (Contador (t, j, i)) − 1, si y sólo si
i=1
nE
P
(Contador (t, j, i)) ≥ 1. En cualquiera de los otros casos Num_Cruces_Salones(t, j) =
i=1
0. El elemento Contador (t, j, i) = 1 si Sj = Alternativai,t , sino Contador (t, j, i) = 0.

47
Capítulo 2. Problemas y codificación

EsU B es el número total de estudiantes que tienen programado un evento en el último


bloque del día. Estos bloques pueden ser almacenados en un vector como el siguiente:
Ultimos_bloques_dia = {9, 18, 27, 36, 45}. En este vector también pueden ser almacenados
algunos otros bloques en los que preferiblemente no se deban programar eventos.

dias=5
X X nE
nEs X
EsU B = Est_Ultimo_Bloque (t, k, i) (2.22)
t=1 k=1 i=1

Est_Ultimo_Bloque (t, k, i) = 1, si y sólo si Evento_Estudiantei,k ×


Alternativai,U ltimos_bloques_diat ≥ 1. En cualquier otro caso el elemento es 0.
EsEC es el número total de estudiantes que reciben 2 eventos consecutivos.

nEs
44 X
X
EsEC == Eventos_Consecutivos (t, k) (2.23)
t=1 k=1

Eventos_Consecutivos (t, k) = 1 si se cumplen las siguientes dos condiciones:

nE
X
Evento_Estudiantei,k × Alternativai,t ≥ 1 (2.24)
i=1
nE
X
Evento_Estudiantei,k × Alternativai,t+1 ≥ 1 (2.25)
i=1

EsU E es el número total de estudiantes que tienen programado, en algún día de la semana,
sólo un evento.

nE X
X nEs
EsU E == Evento_Unico_Dia (i, k) (2.26)
i=1 k=1

Evento_Unico_Dia (i, k) = 1, si y sólo si:

dia_fin
X
Suma_Eventos (i, k, t) = 1 (2.27)
t=dia_inicio

Suma_Eventos (i, k, t) = 1, si y sólo si:


Evento_Estudiantei,k × Alternativai,t ≥ 1 (2.28)
En cualquiera de los otros casos estos elementos son 0. dia_inicio = {1, 1019, 28, 37}
y dia_f in = {9, 18, 27, 36, 45}. w1 , w2 , w3 , w4 , w5 y w6 son parámetros de ponderación
encargados de dar mayor o menor importancia al cumplimiento de una restricción en particular.
Por lo tanto, para garantizar el cumplimiento de las restricciones duras, los valores de w1 , w2 y
w2 deben ser altos (≥ 1000) y los parámetros asociados a las restricciones blandas se pueden
considerar alrededor de la unidad.

48
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

2.5 Problemas de secuenciamiento


Los diferentes procesos de producción involucrados en la fabricación de diferentes tipos de
artículos han sido clasificados de muchas maneras. Quizás la más difundida sea la clasificación
propuesta por Hayes and Wheelwright (1984), la cual hace énfasis en las pautas que siguen
los flujos de trabajo en una fábrica. La clasificación cubre cinco tipos de configuraciones
productivas bien definidas:

1. Proyecto.

2. Flujo de trabajo en línea (flow-shop).

3. Línea de ensamblaje (también denominada en serie, repetitiva o de producción en masa)

4. Taller de trabajo (job-shop).

5. Proceso continuo.

En esta sección se presentan dos de estas clasificaciones. En la configuración de taller o


job-shop, se fabrican muchos productos diferentes en volúmenes que varían entre la unidad y
pocas unidades de cada producto. Consiste en una fabricación no en serie, de lotes pequeños,
para pedidos únicos o de pequeñas cantidades. Por lo regular implica productos adaptados,
diseñados a la medida del cliente y de naturaleza muy poco repetitiva. Se requieren operaciones
poco especializadas, las cuales son realizadas por un mismo obrero o por un grupo pequeño de
ellos, los cuales tienen la responsabilidad de terminar todo o casi todo el producto. Como se
fabrican productos muy diferentes, los recursos son flexibles y versátiles. El flujo de material es
irregular y varía considerablemente de un pedido al siguiente. La tasa de producción depende
del producto particular que se fabrique, del número de operarios y de la eficacia del trabajo
en equipo de los operarios. Aunque los productos sean algo diferentes, son técnicamente
homogéneos, usando la misma instalación, personal y las mismas estaciones de trabajo, aunque
alguno de ellos pueda no pasar por alguna máquina que no le es necesaria. Esta configuración
es comúnmente denominada secuenciamiento no regular.
La segunda configuración que se presenta es el flujo regular de trabajo en línea
(flow-shop). Los equipos y procesos están organizados en una línea o líneas especializadas para
producir un pequeño número de productos diferentes o familias de productos. Estos sistemas se
usan sólo cuando el diseño del producto es estable y el volumen es lo suficientemente elevado
para hacer un uso eficiente de una línea especializada con capacidades dedicadas. Se fabrica
a una tasa constante, con un flujo automatizado e intensivo en capital. Los operarios realizan
tareas relativamente simples a un ritmo determinado por la velocidad de la línea. El control del
ciclo productivo está automatizado, existe alta estandarización y una elevada eficiencia en todo
el proceso. El flujo material es regular, variable de un pedido a otro, aunque existen pautas de
flujo para familias de productos y para grandes lotes. Es un sistema bastante utilizado.
Algunos casos de prueba de problemas de secuenciamiento (regular y no-regular) pueden
ser descargados en la siguiente dirección de internet: http://mistic.heig-vd.ch/taillard/

49
Capítulo 2. Problemas y codificación

2.5.1 Secuenciamiento regular - Problema flow-shop


En el problema flow-shop, un conjunto de n tareas deben ser procesadas en un conjunto de m
máquinas ubicadas en línea. Cada tarea debe pasar por todas las máquinas y todas las tareas
tienen el mismo orden de procesamiento. Es decir, la secuencia de tareas en cada máquina es la
misma. Cada máquina mi puede procesar sólo una tarea nj a la vez. El tiempo de procesamiento
es denotado por Pi,j , para i = {1, 2 . . . n} y j = {1, 2 . . . m}. Los tiempos Pi,j son elementos
de una matriz predefinida [P ]n×m .
El objetivo es encontrar una secuencia ó permutación π de tareas que minimice el tiempo
total de procesamiento Cmax de todas las tareas. El tiempo Cmax es el tiempo en el cual la
última tarea de la secuencia es completada en la máquina m. Así, el problema flow-shop es
totalmente descrito a través de los parámetros n, m y P y el resultado es dado a través de Cmax .
Es común definir las características del problema a través de la notación n/m/P/Cmax .
La codificación del problema a través de una permutación produce n! posibles alternativas
de solución (Yong and Sannomiya, 2000). Este espacio de búsqueda crece exponencialmente
con el incremento del número de tareas. Algunos autores proponen una reducción del espacio
de búsqueda. En Yong and Sannomiya (2000), por ejemplo, se considera que no es razonable
procesar algunas tareas antes que otras en una solución de buena calidad. Por lo cual, los autores
proponen incorporar algunas restricciones de precedencia entre trabajos.
Para encontrar el valor de la función objetivo, dada una secuencia π de tareas, se utiliza
una matriz auxiliar Cm×n en la cual se almacenan los diferentes tiempos de procesamiento en
forma secuencial. En la construcción de esta matriz se siguen los siguientes pasos:

1. Se obtiene el tiempo de procesamiento de la primera tarea en la primera máquina y se


almacena en la matriz C.

C1,1 = P1,π1 (2.29)

2. Se calcula el tiempo de procesamiento de todas las tareas en la primera máquina de la


línea de producción.

C1,j = C1,j−1 + P1,πj j ∈ {2, 3, . . . , n} (2.30)

3. Se calcula el tiempo de procesamiento de la primera tarea en cada una de las máquinas.

Ci,1 = Ci−1,1 + Pi,π1 i ∈ {2, 3, . . . , m} (2.31)

4. Con la información recogida, hasta el momento, en la matriz C se calcula el resto de


elementos de la matriz.

Ci,j = max {Ci,j−1, Ci−1,j } + Pi,πj (2.32)


j ∈ {2, 3, . . . , n} ; i ∈ {2, 3, . . . , m} (2.33)

50
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

También, es común incorporar restricciones en los tiempos de procesamiento de cada


tarea, a fin de cumplir con tiempos de entrega. En este caso se cuenta con la información de
tiempos máximos de entrega dados en un vector r de tamaño n. Una forma de evaluar la calidad
de una alternativa de solución, teniendo en cuanta estas restricciones, es penalizando la función
objetivo.
Ejemplo 2.1.
Encontrar el tiempo total de procesamiento Cmax involucrado en un problema de flow-shop
con 4 tareas y 3 máquinas. Los tiempos de procesamiento P y la secuencia π que se debe
evaluar, son presentados en la figura 2.18. Verificar si existe alguna violación en los tiempos
máximos de entrega definidos en r.

T1 T2 T3 T4
π= 4 3 1 2
M1 4 3 5 7
P= M2 7 7 5 9 r = 25 40 20 21
M3 3 3 4 1

Figura 2.18: Datos de entrada del ejemplo 2.1

R/: El problema de flow-shop que se está describiendo puede ser representado


gráficamente como se muestra en la figura 2.19. Donde 4 tareas son procesadas en una línea
de producción con 3 máquinas. En esta figura, las barras debajo de cada máquina representan,
proporcionalmente, los tiempos de procesamiento definidos en P .

T2 M1 T1 M2 T3 M3 T4

T1=4 T1=7 T1=3

T2=3 T2=7 T2=3


T3=5 T3=5 T3=4
T4=7 T4=9 T4=1

Figura 2.19: Flujo en línea en un taller con m = 3 y n = 4.

Para encontrar el Cmax de la secuencia π = [4, 3, 1, 2] se siguen los siguientes pasos:

• Obtener el tiempo de procesamiento de la primera tarea en la primera máquina:


C1,1 = P1,π1 = P1,4 = 7.

• Calcular el tiempo de procesamiento de todas las tareas en la primera máquina de la línea


de producción:
C1,j = C1,j−1 + P1,πj ⇒
C1,2 = C1,1 + P1,3 = 7 + 5 = 12
C1,3 = C1,2 + P1,1 = 12 + 4 = 16

51
Capítulo 2. Problemas y codificación

C1,4 = C1,3 + P1,2 = 16 + 3 = 19

• Calcular el tiempo de procesamiento de la primera tarea en cada una de las máquinas:


Ci,1 = Ci−1,1 + Pi,π1 ⇒
C2,1 = C1,1 + P2,4 = 7 + 9 = 16
C3,1 = C2,1 + P3,4 = 16 + 1 = 17

• Calcular el resto de elementos de la matriz C:


Ci,j = max {Ci,j−1, Ci−1,j } + Pi,πj ⇒
C2,2 = max {16, 12} + 5 = 21
C2,3 = max {21, 16} + 4 = 28
C2,4 = 35
C3,2 = 25
C3,3 = 31
C3,4 = Cmax = 38

En la figura 2.20 se muestra una representación gráfica de la información contenida en


la matriz C. En esta figura es fácil verificar cualquier violación de los tiempos máximos de
entrega. Por ejemplo, de la figura se nota que la tarea 1 es terminada en el tiempo C33 = 31.
Además, el tiempo máximo de procesamiento es r1 = 25. Por lo anterior se puede stablecer
que el tiempo máximo de procesamiento para la tarea 1 está siendo excedido y por lo tanto esta
alternativa es de peor calidad que otra con el mismo valor de Cmax sin restricciones violadas.
También se está violando el máximo tiempo de procesamiento de la tarea 3.

M1 T4=7 T3=5 T1=4 T2=3


C11 C12 C13 C14
M2 T4=9 T3=5 T1=7 T2=7
C21 C22 C23 C24
M3 T4 T3=4 T1=3 T2=3
C31 C32 C33

7 12 16 19 21 25 28 35 Cmax = 38

Figura 2.20: Diagrama de Gantt del ejemplo 2.1.

Finalmente, se presenta el pseudo-código del algoritmo que permite calcular la función


objetivo del problema flow-shop a partir de una secuencia de tareas π (ver algoritmo 2.6).

2.5.2 Secuenciamiento no regular - Problema job-shop


Se dispone de n tareas que deben ser procesadas en m máquinas. Las operaciones que debe
sufrir cada tarea tienen un orden establecido. Es decir, existe una secuencia sj de máquinas por
cada tarea, para j ∈ {1, 2 . . . n}. Cada tarea está asignada a una de las m máquinas y tiene una

52
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

// Fun ión FobjFlowShop


Datos de Entrada: m ← número de máquinas en línea.
n ← número de tareas a ser procesadas.

P ← Matriz de tiempos de procesamiento. [P ]m×n .


π ← vector de secuencia de tareas a ser realizadas.
Datos de Salida : Cmax : Tiempo total de procesamiento de todas las tareas
/* primera tarea en la primera máquina */
1 C (1,1) ← P (1,π (1))
/* todas las tareas en la primera máquina */
2 for j ← 2 to n do
3 C (1,j) ← C (1,j − 1)+ P (1,π (j))
4 end
/* primera tarea en ada una de las máquinas */
5 for i ← 2 to m do
6 C (i,1) ← C (i − 1,1)+ P (i,π (1))
7 end
/* primera tarea en ada una de las máquinas */
8 for i ← 2 to m do
9 for j ← 2 to n do
10 Canterior ← max {C (i,j − 1),C (i − 1, j)}
11 C (i,j) ← Canterior + P (i,π (j))
12 end
13 end
Algorithm 2.6: Cálculo de Cmax para el problema de flow-shop

53
Capítulo 2. Problemas y codificación

duración determinada y conocida. El objetivo es encontrar una secuencia de tareas cuyo tiempo
total de procesamiento Cmax , sea mínimo.
En comparación con la definición del problema de flow-shop, la diferencia radica en
la existencia de una secuencia predefinida de máquinas que debe seguir cada tarea. Esta
secuencia también define qué máquinas procesan una tarea, es decir, no todas las máquinas
tienen que procesar una tarea en particular. Así, el problema puede ser visto como uno con dos
restricciones: (i) la secuencia de maquinas para cada tarea y (ii) cada máquina puede procesar
sólo una tarea a la vez.
Para un problema Q con m máquinas y n tareas, codificado a través de una secuencia
o permutación, existen m 1 n! posibles alternativas de solución. En Choi and Yang (2003)
se presenta una técnica de descomposición que permite reducir el espacio de búsqueda del
problema. La técnica consiste en dividir el problema en dos tipos de subproblema: (i) el
primero es uno de asignación, de una sóla máquina, generado para cada máquina. (ii) El
segundo consiste en obtener un espacio de búsqueda de máquinas ordenadas usando una técnica
exacta.
De manera similar al problema de secuenciamiento regular, también es común incorporar
restricciones en los tiempos de procesamiento de cada tarea, dados en un vector r de tamaño n.
Ejemplo 2.2.
Encontrar el tiempo total de procesamiento Cmax involucrado en un problema de job-shop
con 4 tareas y 3 máquinas. Los tiempos de procesamiento P , la secuencia de máquinas de
cada tarea S y la secuencia de tareas π que se debe evaluar, son presentados en la figura 2.21.
Verificar si existe alguna violación en los tiempos máximos de entrega definidos en r.
s1 s2 s3 s4

4 3 5 7 1 3 3 2
P= 7 7 2 9 S= 3 1 1 1
3 3 3 5 2 2 2 3

π= 4 3 1 2 r = 25 40 20 21

Figura 2.21: Datos de entrada del ejemplo 2.2

R/: El problema de Job-shop que se está describiendo puede ser representado


gráficamente como se muestra en la figura 2.22.
En la figura 2.23 se muestra una representación gráfica usando bloques de tiempo, en la
cual es fácil verificar cualquier violación de los tiempos máximos de entrega.

El algoritmo para calcular el tiempo total de procesamiento Cmax es significativamente


más complejo que el presentado para el problema de flow-shop. El problema job-shop puede ser
Grafo
disyuntivo representado con un grafo disyuntivo G = {N, A, E} ,(Moraglio et al., 1999). En este grafo,
N es el conjunto de nodos que representan el total de operaciones (= n · m) involucradas en
el problema. A es el conjunto de arcos que conectan operaciones consecutivas de una misma

54
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

T1

M1

T3 T2

T4 M2 M3

T3 T2 T1 T4

Figura 2.22: Flujo no regular de trabajos en un taller con m = 3 y n = 4.

M1 T3 T4 T1 T2

M2 T4 T3 T1 T2

M3 T3 T2 T4 T1

9 16 24 31 38

Figura 2.23: Diagrama de bloques de tiempo (diagrama de Gantt) del ejemplo 2.2.

55
Capítulo 2. Problemas y codificación

tarea, y E es el conjunto de arcos disyuntivos que conectan las tareas realizadas por la misma
máquina. Estos arcos contienen información de la secuencia de máquinas asignada a cada tarea.
Por tal razón sirven para evaluar información anterior y posterior (disyuntiva y conjuntiva) de
las operaciones realizadas en cada máquina.
En la figura 2.24 se muestra un grafo que representa la alternativa de solución π =
{4, 3, 1, 2} para el problema de 3 máquinas y 4 tareas descrito en el ejemplo 2.2. Nótese que el
grafo posee 12 vértices, cada uno de los cuales representa una operación realizada a una tarea
en un máquina. Los nodos i y f son dos nodos especiales que representan el inicio (i) y el
fin (f ) de la alternativa de solución, respectivamente. Los arcos conjuntivos, representados por
flechas, muestran la secuencia de máquinas que sufre cada tarea. Por ejemplo, los arcos (4, 5)
y (5, 6) relacionan las máquinas {M3 , M1 , M2 } ∈ S3 , las cuale procesan la tarea 3.
Los arcos disyuntivos, representados por líneas punteadas, muestran las tareas que deben
ser realizadas en cada máquina. Por ejemplo, los arcos (1, 6), (6, 9), (9, 12) y (12, 1) relacionan
las tareas que deben ser realizadas en la máquina 2.

M2 M1 M3
π = {s4 , s3 , s1 , s2 } 1 2 3

S4
S3 4 5 6

i f
S1
7 8 9
S2

10 11 12

Figura 2.24: Grafo disyuntivo del ejemplo 2.2.

Con la información contenida en este grafo es fácil implementar un procedimiento


algorítmico que permita calcular el tiempo total de procesamiento Cmax :

1. Comenzando en el nodo 1 del grafo, identificar la máquina i y la tarea j asociadas a ese


nodo, con ayuda del vector π y la matriz S. En este caso i = 2 y j = 4. Calcular el
primer elemento de la matriz C: C1,1 = P2,4 = 9. Para mayor facilidad a la hora de
realizar comparaciones y con el fin de dar una mejor explicación del funcionamiento del
algoritmo, se considera almacenar el intervalo de tiempo involucrado en cada tarea, aún
cuando no es necesario almacenar explicitamente toda esta información. En este caso el
intervalo es [0, 9] y por lo tanto C1,1 = [0, 9].

2. Calcular el tiempo de procesamiento de la tarea π1 = 4 en cada una de las máquinas de


la primera secuencia.

C1,j = C1,j−1 + Pπ1 ,Si,π1 i ∈ {2, 3, . . . , m} (2.34)

56
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

En función de los intervalos, la primera fila de la matriz C sería: C1,2 = [9, 16] y C1,3 =
[16, 21]. En este punto se puede construir un diagrama parcial de bloques de tiempo como
el que se muestra en la figura 2.25.

M1 T4

M2 T4

M3 T4

9 16 21

Figura 2.25: Diagrama parcial, tarea 4.

3. El siguiente elemento de la secuencia π corresponde a la tarea 3, la cual debe ser


procesada en las máquinas M3 , M1 y M2 . En este paso se calcula el elemento C2,1 de
la matriz C, que corresponde al vértice 4 del grafo. Para eso, es necesario revisar la
información anterior usando los arcos disyuntivos del grafo conectados al vértice 4. La
idea, es realizar un recorrido desde el nodo i hacia el nodo f y desde la tarea superior
hacia la tarea inferior, sobre el grafo. De esta forma, la información anterior de un nodo
estará contenida en los arcos que conecten los nodos de tareas ubicadas por encima de él.
En el caso del nodo 4 la información anterior que debe ser revisada está relacionada con
el nodo 3 del grafo. Es decir con el elemento C1,3 . La información de este elemento
indica que sólo en el intervalo de tiempo [16, 21] la máquina 3 está ocupada. Por tal razón
es posible hacer C2,1 = [0, 3].
De forma similar, el elemento C2,2 , que corresponde al nodo 5 del grafo, tiene
información anterior relacionada con el elemento C1,2 (nodo 2 en el grafo) y con el
elemento C2,1 (nodo 4). La información de C2,1 = [0, 3] indica que la tarea actual (tarea 3)
debe ser procesada en la máquina 1, a partir de un tiempo t = 3. Además, La información
de C1,2 = [9, 16] indica que la máquina 1 está ocupada en este intervalo. Por tal razón es
posible utilizar la máquina 1 para realizar la tarea 3 en el intervalo C2,2 = [3, 8].
El elemento C2,3 , que corresponde al nodo 6 del grafo, tiene información anterior
relacionada con el elemento C1,1 (nodo 1) y con el elemento C2,2 (nodo 5). La
información de C2,2 indica la máquina puede ser utilizada a partir de t = 8. Sin embargo
la información de C2,2 muestra que la máquina estará ocupada hasta t = 9. Por tal razón
C2,3 = [9, 11].
En la figura 2.26, se muestra el diagrama de Gantt construido hasta el momento.

4. El siguiente elemento de la secuencia π corresponde a la tarea 1, la cual debe ser


procesada en las máquinas M1 , M3 y M2 . El elemento C3,3 , que corresponde al nodo
7 del grafo, tiene información anterior relacionada con los nodos 2 y 5. El tiempo de
procesamiento de la tarea 1 en la máquina 1 es de 4 unidades de tiempo. Verificando

57
Capítulo 2. Problemas y codificación

M1 T3 T4

M2 T4 T3

M3 T3 T4

9 16 21

Figura 2.26: Diagrama parcial, tareas 4 y 3.

la información anterior, es posible establecer que la tarea 1 puede ser realizada en la


máquina 1 en el intervalo C3,1 = [16, 20].

5. Siguiendo el recorrido por el grafo y verificando la información anterior se construye la


matriz C mostrada en la figura 2.27, donde el elemento C4,3 proporciona el valor de la
función objetivo Cmax .
π
s4 [0, 9] [9, 16] [16, 21]

s [0, 3] [3, 8] [9, 11]


C= 3
s1 [16, 20] [21, 24] [24, 31]
Cmax
s2 [4, 7] [20, 23] [31, 38]

Figura 2.27: Matriz C para el calculo de la función objetivo

2.6 Codificación binaria


En la práctica, es común encontrar problemas que combinan variables continuas y discretas.
La optimización combinatorial también puede ser utilizada para resolver, de forma aproximada,
problemas con variables continuas. Para realizar esta tarea, es necesario discretizar, a través
de un proceso de codificación, el espacio de las variables de decisión del problema. Entre los
métodos más comunes se encuentran la codificación binaria directa y la codificación binaria
Grey.

2.6.1 Codificación binaria directa

Para ilustrar las características de la codificación binaria, se plantea un problema de


programación no-lineal (PNL) correspondiente al diseño óptimo de un recipiente cilíndrico
Problema de
diseño óptimo (PDORC) con una restricción de volumen mínimo permitido. Este problema posee dos variables
recipiente de estado que son el diámetro d y la altura h. El objetivo del problema es minimizar el costo
cilíndrico c de material por cm2 involucrado en la construcción del recipiente. Las variables de decisión
(PDORC)
58
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

pueden tomar valores entre un máximo y un mínimo. El correspondiente problema de P NL es


planteado como sigue Deb (2004):

 
πd2
min f (d, h) = c + πdh (2.35)
2
πd2 h
s.a. g1 (d, h) ≡ ≥ Vmin (2.36)
4
dmin ≤ d ≤ dmax
hmin ≤ h ≤ hmax

De esta manera, surge una pregunta importante: ¿cómo representar una alternativa de
solución de este problema usando un arreglo vectorial, similar a los planteados en otros
problemas?. La respuesta es la codificación binaria. Supóngase que el diámetro d, que es una
variable continúa, varía entre 8 y 13 centímetros. Es decir, el espacio de búsqueda d ∈ [8, 13].
Así, lo primero que se debe definir es cuántas secciones discretas ns tendrá este espacio de
búsqueda y qué tamaño tendrá cada sección.

ns = 2#bits (2.37)

El número de bits corresponde al número de casillas que tendrá el vector correspondiente


a una alternativa de solución. Para una codificación con 5 bits el espacio de búsqueda será
discretizado en 31 secciones de tamaño ∆ ≈ 0.1613cm cada una como se muestra en la
figura 2.28.
∆ = 0,1613

8 8,1613 8,3226 8,4839 11.2260 13

Figura 2.28: Discretización de la variable diámetro (d)

La longitud ∆ de cada sección está dada por:

dmax − dmin
∆= (2.38)
ns
En esta representación el límite inferior y superior de la variable de decisión d es 0 y 31,
respectivamente. Es decir, la alternativa [0, 0, 0, 0, 0] equivale a 8 cm y es el límite inferior y
la [1, 1, 1, 1, 1] equivale a 13 cm y es el límite superior del espacio de búsqueda (figura 2.29).
Con 5 bits, para representar una variable de decisión, existen exactamente 32 alternativas de
solución diferentes equivalentes a números enteros pertenecientes al rango [0, 31].
Si se tiene un número decimal, correspondiente a un individuo de la población, y se
desea obtener su representación binaria, dentro del espacio de búsqueda, se utiliza la siguiente
expresión:

59
Capítulo 2. Problemas y codificación

 
Dado un nú - Número − dmin
mero decimal Binario = Bin (2.39)

pasar a un
binario Si se tiene un vector binario, correspondiente a un individuo de la población, y se desea
obtener su equivalente decimal, dentro del espacio de búsqueda, se utiliza la expresión:

Dada una ca- Número = (Dec(Binario) × ∆) + dmin (2.40)


dena binaria
pasar a un
número
decimal 0 0 0 0 0 0 8

1 0 0 0 0 1 8.3226

2 0 0 0 1 1 8.4839

⋮ ⋮
31 1 1 1 1 1 13

Figura 2.29: Población de alternativas binarias

Ejemplo 2.3.

a. Encontrar la cadena binaria, usando 5 bits, que representa un diámetro d = 11.2260 cm.
d ∈ [8, 13] cm.
R/:
Usando ∆ = 0.1613 (ver fig. 2.28):

 
11.2260 − 8
Binario = Bin = Bin(20) = [1, 0, 1, 0, 0] (2.41)
0.1613

b. Para el mismo problema anterior, encontrar el equivalente decimal de la cadena binaria


[1,1,1,0,0].
R/:
Dec ([1, 1, 1, 0, 0]) = 28
(2.42)
Numero = (28 × 0.1613) + 8 = 12.5164

Las expresiones 2.39 y 2.40 son también conocidas como funciones de codificación y
decodificación, respectivamente.

60
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Alternativa = 1 1 1 0 0 1 1 1 0 0
 
d h

Figura 2.30: Alternativa de solución para 2 variables de estado

Volviendo al problema de diseño planteado en 2.35, la codificación debe involucrar dos


variables de estado: el diámetro d y la altura h. Por lo tanto una alternativa de solución puede
estar representada por un único vector conformado por la unión de las representaciones binarias
para cada una de las variables de estado, como se muestra en la figura 2.30.
Si se quiere un mayor grado de precisión, es suficiente incrementar el número de bits.
Sin embargo tomar esta decisión aumenta el espacio de búsqueda y por lo tanto el esfuerzo
computacional. La estrategia consiste en encontrar un compromiso adecuado entre precisión y
eficiencia computacional.
Por ser una codificación binaria, los aspectos relacionados con la definición del espacio
de búsqueda, población inicial y estructura de vecindad son los mismos planteados para el
problema de la mochila.
Un aspecto interesante de este problema es que posee una restricción de desigualdad
asociada al volumen mínimo del recipiente. Se debe medir adecuadamente la calidad de
cada individuo teniendo en cuenta el valor de la función objetivo y el cumplimiento de las
restricciones. La función que permite obtener esta medida recibe el nombre de función de
adaptación y se discute en detalle en la sección 2.8.1 (página 72).

2.6.2 Codificación binaria Gray


La codificación binaria presenta unas características favorables en la codificación de una
variable de estado de un problema de optimización, entre ellas se destacan:

• Es posible utilizar cualquier grado finito de precisión simplemente cambiando el número


de bits utilizados.
• Cada una de las variables de decisión pueden utilizar grados de precisión diferentes.
• Las variables de decisión pueden tomar valores negativos y positivos.

Sin embargo, la codificación binaria presenta una dificultad relacionada con la definición
de la estructura de vecindad. A lo largo de este texto se ha mencionado que una alternativa
vecina se obtiene al aplicar pequeñas perturbaciones a la alternativa original. En otra palabras,
la diferencia entre la alternativa original y el vecino debe ser pequeña.
Cómo medir entonces qué tan diferente es la alternativa vecina de la original?. Existen
varias formas de realizar esta tarea, entre las cuales se destaca la distancia de Hamming. Esta
Distancia de
distancia cuantifica el número de elementos diferentes entre dos vectores. Es decir, mide el Hamming
número de substituciones que debe sufrir un vector para convertirse en el otro. Así por ejemplo,
la distancia de Hamming entre [1, 0, 1, 1, 1, 0, 1] y [1, 0, 0, 1, 0, 0, 1] es 2, debido a que sólo los
elementos de las posiciones 3 y 5 son diferentes.

61
Capítulo 2. Problemas y codificación

Cuando se tiene un problema donde, por ejemplo, el espacio de solución está dado
por números enteros pertenecientes al intervalo [0,512], es posible realizar una codificación
con 10 bits. Es claro que en el espacio de la función objetivo puede considerarse que una
alternativa con valor igual a 511 es vecina de una alternativa de valor 512. Sin embargo a nivel
de las cadenas formadas usando codificación binaria se tiene que 511 corresponde al vector
[0,1,1,1,1,1,1,1,1,1] y 512 corresponde a [1,0,0,0,0,0,0,0,0,0]. Lo cual evidencia que a nivel de
cadenas binarias no son alternativas vecinas porque la distancia de Hamming es muy grande.
Esta característica de la codificación binaria directa se conoce como “peñasco de Hamming”.
Nótese que se requieren 10 substituciones (mutaciones) para que a partir de uno de
los vectores se llegue al otro y considerando, por ejemplo, una tasa de mutación de 0.01 se
Peñasco de 20
Hamming necesitan, en el peor caso, 10 tentativas.
Para sortear esta dificultad de la codificación binaria directa existe otro tipo de
codificación binaria denominada código Gray. Esta codificación se caracteriza por ser cíclica.
Código Gray es decir, los cambios necesarios para pasar de un valor al siguiente sólo involucran 1 bit.
Dos números enteros adyacentes sólo difieren en 1 bit en código Gray y la transición de una
alternativa a la otra se puede hacer en sólo una substitución.
Por ejemplo, la tabla 2.2 muestra la codificación binaria Gray usando 4 bits. La
codificación Gray también se conoce como codificación binaria por reflejo, debido a que esta es
Códificación
binaria por
una de las formas de explicar su algoritmo. Para representar el conjunto de cadenas binarias en
reflejo código Gray usando 2 bits, se comienza reflejando (duplicando) la configuración más básica de
1 bit. Así, se obtiene un vector columna de cuatro elementos como se muestra en la figura 2.31.
El siguiente paso es concatenar el primer elemento de la cadena básica de un bit con cada uno
de los primeros dos elementos del vector columna y el segundo elemento de la cadena básica de
un bit con los últimos dos elementos del vector columna. De esta manera se obtiene el codigo
Grey para 2 bits.
Para obtener el código Gray usando 3 bits, se repite el esquema anterior reflejando el
código Gray obtenido para 2 bits.
Desde el punto de vista algorítmico, la codificación mostrada es equivalente a utilizar una
operación “or exclusiva” (xor) cuyo símbolo es ⊗. El bit más significativo (bms) de la cadena
binaria simple pasa directamente a la misma posición de la cadena binaria Gray. El segundo
elemento de la cadena binaria Gray es obtenido de la opración ⊗ entre el bms y el siguiente bit
de la cadena binaria simple. El tercer elemento elemento de la cadena binaria Gray es obtenido
de la opración ⊗ entre el segundo bms y el siguiente bit de la cadena binaria simple. El proceso
se repite hasta conformar todo el código Gray.
El algoritmo 2.7 muestra todo el proceso de codificación usando el operador ⊗ (ver
tabla 2.1).
El algoritmo 2.7 puede también ser representado por un circuito lógico de compuertas xor
como el que se muestra en la figura 2.32
Este tipo de problemas también puede ser codificado a través de números reales, es decir,
usando codificación real. Algunos operadores han sido diseñados para explorar el espacio de
búsqueda usando esta codificación (ver Deb (2004)).En la sección 2.9.6.1 se discute en detalle
los algoritmos genéticos con parámetros reales (pág. 117).

62
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

reflejo concatenar C ód.G ray 2bits


0 0 0 0
0 1 0 1 0 1
1 1 1 1 1 1
0 0 1 0
C ód.G ray 3bits
0 0 0 0 0 0 0
0 1 0 1 0 0 1
1 1 1 1 0 1 1
0 1 0 0 1 0 0 1 0
1 1 0 1 1 0 1 1 0
1 1 1 1 1 1 1
0 1 0 1 1 0 1
0 0 0 0 1 0 0

Figura 2.31: Codificación Gray por reflejo.

Tabla 2.1: Tabla de verdad del operador xor


0 ⊗ 0 = 0
0 ⊗ 1 = 1
1 ⊗ 0 = 1
1 ⊗ 1 = 0

Tabla 2.2: Codificación binaria y Gray usando 4 bits


Decimal Binaria Gray
0 0 0
1 1 1
2 10 11
3 11 10
4 100 110
5 101 111
6 110 101
7 111 100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000

63
Capítulo 2. Problemas y codificación

// Fun ión CódigoGray


Datos de Entrada: nbits ← número de bits
Binario ← Arreglo en codificación binaria directa

Binario (nbits) =bit más significativo

Datos de Salida : Gray ← Arreglo en codificación binaria Gray


1 Gray (nbits) ← Binario (nbits)

2 for i ← nbits to 2 do
3 Gray (i − 1) ← Binario (i) ⊗ Binario (i − 1)

4 end
Algorithm 2.7: Pasar de Binario a Gray

Bit más significativo


Código Gray
Binario

Bit menos significativo

Figura 2.32: Circuito lógico - código Gray.

64
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

2.7 Ejercicios

Ejercicio 2.1. Dadas las placas y la paleta mostradas en la figura 2.33, encontrar, para una
alternativa de solución π = {2, 1, 5, 1, 6, 6, 4, 7, 3, 4, 7, 2, 7, 6, 4, 5}:

a. el área desperdiciada de la alternativa, usando el algoritmo BottomLeft (Algoritmo BL, pág.


27). Con esta información, construir los arreglos y vectores necesarios para aplicar el
algoritmo.

b. el tamaño del espacio de búsqueda usando el algoritmo BL.

c. un vecino y calcular su área desperdiciada.

La paleta tiene dimensiones 24 × 38 (unidades de longitud) y el tipo, dimensiones y


cantidades disponibles de cada placas que se desean ubicar son mostradas en la figura 2.33. En
esta figura, por ejemplo, la expresión P lacaT9×3
ipo5
× 2 significa que existen 2 placas del tipo 5,
cuyas dimensiones son 9 u de altura y 3 u de ancho (u = unidades de longitud).

Placa14TIPO 1
×19 × 2

Placa 9TIPO
×3
5
×2 Placa10TIPO
×1
6
×4

Paleta 24×38
3
Placa 3TIPO
×6 ×2 Placa 6TIPO
×6
4
×4 Placa 9TIPO
×6
2
×2

Placa 3TIPO
×2
7
×4

Figura 2.33: Paleta y diferentes tipos de placas del ejercicio 2.1.

Ejercicio 2.2. Una persona gana un premio en un supermercado consistente en llevar, sin costo
alguno, todos los artículos que pueda empacar en una bolsa. La persona tiene acceso sólo a 20
artículos y cada uno de ellos tiene las características mostradas en la tabla 2.3.
La bolsa tiene una capacidad máxima de 100kg. Se requiere:

a. diseñar una estrategia para la recolección de los artículos, pensando en obtener el máximo
lucro posible.

65
Capítulo 2. Problemas y codificación

Tabla 2.3: Características de los artículos


Artículo Peso (kg) Costo ($)
1 40 40
2 80 10
3 15 8
4 50 80
5 12 10
6 35 15
7 45 20
8 50 20
9 30 10
10 40 30
11 60 10
12 25 30
13 10 10
14 2 10
15 10 4
16 70 15
17 20 12
18 40 20
19 1 10
20 30 60

b. usar la estrategia anterior para ayudar a esta persona con 4 alternativas diferentes (conjuntos
de productos) que puedan ser empacados dentro de la bolsa.

c. calcular el lucro que tendría esta persona con cada alternativa.

d. obtener el número de alternativas que deben ser evaluadas para encontrar el máximo lucro
posible para esta persona.

Ejercicio 2.3. Implementar en el lenguaje de preferencia una función que permita calcular la
función objetivo del problema de Job-Shop presentado en la sección 2.5.2 (pág. 52).
Ejercicio 2.4. Obtener la codificación binaria y la codificación Gray usando 5 bits.

66
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Los Algoritmos Evolutivos (AEs) imitan los principios evolutivos naturales para constituir
procedimientos de búsqueda y optimización. Parten de un hecho, observado en la naturaleza,
basado en que los organismos vivos poseen una destreza consumada en la resolución de los
problemas que se les presentan y obtienen sus habilidades, casi sin proponérselo, a través
del mecanismo de la evolución natural. Por lo anterior, Algoritmos Evolucionarios es un
nombre extremadamente ambicioso para una idea extremadamente simple: usar la teoría de
la evolución como un algoritmo.
Cualquier programa que use el ciclo básico mostrado en la figura 2.34 hace parte de
la familia de los AEs. Estos algoritmos metaheurísticos operan sobre poblaciones las cuales
Ciclo básico
son representadas por estructuras que codifican adecuadamente cada problema en particular. de un AE
Estas estructuras son conocidas como alternativas de solución y permiten evaluar el valor de la
función objetivo y el grado de infactibilidad, como se presento en la sección 1.1 (página 2).

Generar Población de
alternativas de
solución

Cumple si
criterio Parar
?

no
Evaluar la calidad de las
alternativas de solución

Seleccionar alternativas
para la reproducción

Producir nuevas
variaciones a las
alternativas seleccionadas

Reemplazar alternativas
existentes con las nuevas

Figura 2.34: Estructura fundamental de un AE

El número de iteraciones involucradas en el proceso hasta alcanzar algún criterio de


convergencia se denomina generaciones. Durante cada generación, una secuencia de operadores
Generaciones,
es aplicada a los individuos de una población (alternativas de solución) para generar la nueva hijos y padres
población de la siguiente generación. Cuando uno o más individuos son usados por un operador,
éstos son denominados padres. Los individuos resultantes de la aplicación de un operador son
sus descendientes ó hijos. De esta manera, cuando dos operadores son aplicados sucesivamente,
los hijos de una generación pueden llegar a ser padres de la siguiente.
El término Computación evolutiva, apareció en 1993 como el titulo de una nueva revista
publicada por el MIT-press. Luego el término fue usado para designar todas las técnicas basadas

67
Capítulo 2. Problemas y codificación

en la teoría de la evolución biológica. Sin embargo, algunos especialistas utilizan el término


Algoritmos Genéticos (AG) para referirse a cualquier técnica evolutiva, aún cuando ésta tenga
pocos puntos en común con la propuesta original de Holland (1975). Lo que sucede realmente
es que los AGs son los más populares dentro de los AEs.
Los AEs son aplicables a una inmensa cantidad de problemas pertenecientes a diversas
disciplinas y se adecúan perfectamente a problemas de optimización con un gran número de
soluciones factibles (explosión combinatorial). Son útiles para la solución de problemas que no
cumplen los requisitos básicos de tratabilidad con herramientas matemáticas convencionales.
Las técnicas clásicas de optimización presentan dificultades tales como:

• La convergencia a una solución óptima depende del punto inicial escogido.

• Por la misma razón, tienen mayor probabilidad de sufrir una convergencia prematura a
óptimos locales ó sub-óptimos.

• Un algoritmo que es eficiente en resolver un problema particular de optimización, puede


no serlo al momento de resolver un problema diferente.

• No son eficientes en el manejo de problemas que tienen espacios de búsqueda discretos.

• Este tipo de técnicas presentan una dificultad mayor al tratar de ser implementadas usando
procesamiento paralelo.

La principales razones del actual crecimiento y desarrollo de los algoritmos evolutivos


tienen que ver con su mayor aplicabilidad a diferentes tipos de problemas, su fácil comprensión
e implementación y su perspectiva global del problema. Además Resuelven problemas a través
de simples descripciones matemáticas que deben estar presentes en la solución, sin especificar
los pasos que se deben seguir para obtenerla.
Las primeras ideas, de las cuales se tiene registro, sobre evolución y transformación
surgen en Grecia. Aristóteles (384-322 aC) plantea la idea de que algunos animales pueden
surgir de materia no viva, espontáneamente. Heráclito de Efeso (545-480 aC) sugiere que todo
ser cambia continuamente y Anaximandro (610-577 aC) propone que el hombre tiene su origen
en una criatura diferente.
En 1672 es descubierto el óvulo y en 1675 es descubierto el espermatozoide. Estos dos
descubrimientos cambiaron drásticamente las ideas sobre la concepción y originaron una serie
de especulaciones sobre la evolución.
En 1750 Georges Louis Leclerc (Conde de Buffon) fue tal vez el primero en especular
(100 años antes que Darwin) que las especies se originaron entre sí. En 1800 El biólogo
francés Jean-Baptiste Lamarck enunció una teoría sobre la evolución. Según Lamarck, las
características (físicas) adquiridas por un organismo durante su vida podían ser transmitidas a
sus descendientes.
En 1859 se produce la primera divulgación de las leyes de selección natural de Darwin,
en las cuales se explica el proceso adaptativo natural. Darwin propone que la selección natural,
asociada a la diversidad podría explicar mejor la evolución del hombre.
Darwin propone las siguientes leyes :

68
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

• El hábitat del hombre no se mantiene estático, está en continua evolución.

• Una especie es más diferente entre más antigua sea.

• Los cambios no son súbitos, son graduales y continuos.

• Las especies descienden de un antepasado común.

• La evolución se fundamenta en la selección natural (variabilidad + supervivencia).

• El número de hijos tiende a ser mayor que el de los padres.

• El número de individuos de una especie tiende a ser constante.

• De las dos anteriores se concluye que existe una lucha por la supervivencia.

• Los individuos cuyas variaciones se adaptan mejor al ambiente tendrán mayor


probabilidad de sobrevivir y de reproducirse.

• Debe existir un proceso de variación continuada responsable de las nuevas informaciones.


No existe límite para las variaciones.

• La selección natural preserva las nuevas informaciones.


En 1866 el monje Agustiniano Gregor Mendel presenta las primeras pruebas concretas de
herencia y basa sus afirmaciones en experimentos realizados con plantas.
La primera teoría organizada de la evolución es presentada por Lamark y sostiene que los
organismos poseen mecanismos que los llevan a su propio perfeccionamiento. Indica también
que estos mecanismos se derivan de las necesidades impuestas por el medio ambiente las cuales
provocan: formación, desarrollo, atrofias y desaparición de órganos. Además plantea que estas
alteraciones o cambios, adquisiciones o perdidas, son heredables a próximas generaciones.
En 1958 Bremermann fue quizás el primero en ver la evolución como un proceso de
optimización, además de realizar una de las primeras simulaciones con cadenas binarias que se
procesaban por medio de reproducción (sexual o asexual), selección y mutación, en lo que sería
un claro predecesor del algoritmo genético
El concepto de algoritmo genético fue concebido inicialmente por John H. Holland a
principios de los años 60’s. Holland desarrolló los esquemas reproductivos y adaptativos
naturales en un intento por hacer que las computadoras aprendieran imitando el proceso de la
evolución. La técnica planteada en este trabajo sería reconocida, años después, como el primer
algoritmo genético (AG).
En 1970 Michael Conrad y H.H. Pattee, con el trabajo Evolution experiments with an
artificial ecosystem, son de los primeros en simular un ecosistema artificial jerárquico en el que
un conjunto de organismos estaban sujetos a competir para sobrevivir. Conrad propuso, en la
década de los 70’s, un "modelo de aprendizaje evolutivo" en el cual especuló sobre la posibilidad
de que el cerebro use el mismo tipo de mecanismos que usa la evolución para aprender.
Thomas S. Ray desarrolló a principios de los 1990s un simulador muy original en el que
evolucionaban programas en lenguaje ensamblador, los cuales competían por ciclos de CPU

69
Capítulo 2. Problemas y codificación

de una computadora, a la vez que intentaban copiarse a sí mismos en la memoria de dicha


computadora.
La mayoría de los primeros trabajos de investigación en esta área pueden encontrarse
en varias memorias de conferencias internacionales. Actualmente los AGs son el grupo de
algoritmos que más sobresale entre los AEs. Aunque todos los AEs presentan una configuración
similar existen diferentes clasificaciones tales como evolución simulada, algoritmos culturales,
Inteligencia colectiva o de partículas y algoritmos meméticos, entre otros. Por lo anterior, se
encuentra una gran cantidad de textos sobre algoritmos genéticos, entre los cuales se destacan
los realizados por Goldberg (1989); Gen and Cheng (1997); Holland (1975); Michalewicz
(1992); Mitchell (1996); Vose (1999) y Deb (2004).

2.8 Algoritmos genéticos - AGs


De acuerdo a C. Darwin (1859) el mecanismo original de la evolución de los seres vivos se
fundamenta en la competición, la cual selecciona los individuos mejor adaptados a su ambiente
y asegura su descendencia. De esta forma las características más usadas por los padres, que les
permitieron sobrevivir, son heredadas a los hijos. Este mecanismo de herencia es basado, en
particular, en la forma de cooperación implementada por la reproducción sexual.
Se debe tener en cuenta que la comunidad científica no ha tenido otra opción que asumir
que la teoría planteada por Darwin es correcta. Nadie ha podido demostrar que los mecanismos
evolutivos naturales han sido completamente comprendidos, aún teniendo en cuenta los avances
actuales de la genética. Sin embargo, el Neo-Darwinismo es la única teoría de la evolución que
permanece vigente y que ha superado todas las pruebas hasta el día actual.
En el contexto de los AGs, los individuos sometidos a la evolución son las alternativas de
solución, las cuales hasta ahora han sido representadas por arreglos vectoriales que comúnmente
Pseudo-cromo-
soma, genes, son denominados pseudo-cromosomas. Por ejemplo, para el problema de diseño del recipiente
alelos y cilíndrico planteado en la sección 2.6.1 (pág. 58), la alternativa de solución de 10 bits mostrada
genotipo en la figura 2.30 es un pseudo-cromosoma compuesto de genes. Cada gen puede tomar un valor
de un conjunto con muchos valores posibles. Los elementos de este conjunto de valores son
denominado alelos. Por ejemplo, el gen responsable por el color de los ojos en los cromosomas
de las personas puede tomar valores asociados a diferentes colores (negro, azul, café, verde,
etc). Cada valor que define un color es un alelo. Las características propias de cada individuo
de la población son determinadas por el valor de sus genes en el cromosoma, es decir, por lo que
se denomina el genotipo. Retomando el ejemplo del recipiente cilíndrico cuando el diámetro d
es variado, el recipiente se puede tornar “gordo” o “delgado”. Cuando se cambia el valor de la
altura h, el recipiente se torna “largo” ó “corto”. Estas características finales que el genotipo
imprime en el individuo es lo que se conoce como fenotipo. La figura 2.35 muestra la relación
entre algunos de estos conceptos (Thomas, 2007).
El punto de corte se refiere a un punto en el cual un gen específico puede ser encontrado
dentro del pseudo-cromosoma. Esta definición gana importancia a la hora de tener que dividir
Punto de
corte
el pseudo-cromosoma para realizar recombinaciones genéticas.

70
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Los intrones fueron descubiertos por Phillip Allen Sharp y Richard J. Roberts, lo que
les supuso ganar el Premio Nobel de Fisiología o Medicina en 1993. El término intrón fue
introducido por el bioquímico estadounidense Walter Gilbert en 1978.
Tradicionalmente se ha afirmado que los intrones son fragmentos de ADN carentes de
información. Sin embargo esta afirmación es cuestionada y actualmente goza de pocos adeptos.
Intrones
Se sabe que los intrones contienen varias secuencias pequeñas que son importantes para un
ajuste eficiente. En el contexto de los AGs, se refiere a la parte de un genotipo que no contribuye
al fenotipo.

Espacio de las
variables reales

Intrones
Gen
Punto de corte
Alelo=[11]

Genoma Genotipo Fenotipo

Figura 2.35: Representación artificial de genoma, genotipo y fenotipo

Un ejemplo de intrones se presenta en el problema de corte rectangular (sección 2.2.1,


pág. 23) cuando a la hora de calcular la función objetivo sólo se consideran las placas
que pueden ser ubicadas dentro de la paleta, aún cuando las placas existan en la secuencia
de ubicación (genotipo). Los intrones también pueden contener “información antigua”, es
decir, fragmentos de genes que probablemente se expresaban pero que actualmente no se
expresan (Thomas, 2007).
La tabla 2.4 resume una analogía de términos entre la genética natural y la artificial
comunmente aceptados.
El conjunto de estas alternativas hacen parte del espacio de búsqueda del problema de
optimización. El conjunto de individuos sometidos a un Algoritmo genético (AG) conforman
una población o genoma.
Esta población es procesada por el AG durante un número de iteraciones llamadas
generaciones, hasta alcanzar un criterio de parada o terminación. En cada generación los
Genoma
individuos se reproducen, sobreviven y desaparecen de la población bajo la acción de dos
operadores de selección:

• La selección para la reproducción, o simplemente selección, que determina cuántas veces


un individuo será reproducido en una generación.

• La selección para la desaparición o reemplazo en la población determina cuales


individuos tendrán que desaparecer de la población en cada generación para que sean

71
Capítulo 2. Problemas y codificación

Tabla 2.4: Analogía de Términos


Población Conjunto de individuos o cromosomas. Equivale a una
muestra aleatoria del espacio de solución o un conjunto
de soluciones alternativas.
Cromosoma Un cromosoma es un portador de la información genética
que transmite cada uno de sus genes. Una posible
solución.
Gen Cada uno de los rasgos o características que conforman
el cromosoma. También se les llama parámetros o
aspectos. Cada gen equivale a una variable del problema.
Genotipo En biología se le llama al paquete genético total en
su forma interna. En la terminología de AG será la
información genética de todo el cromosoma en forma
codificada.
Fenotipo Se le llama en genética al paquete genético tal y como
interactúa con el medio exterior. En los AG artificiales
serían los aspectos del cromosoma decodificados.
Locus Es la posición de un gen el cromosoma
Alelo Es el valor asociado a un gen

reemplazados por los nuevos. Esto garantiza que durante todo el proceso el tamaño de la
población permanezca constante o controlado según alguna política adoptada.

En concordancia con la corriente Darwinista, la selección de los individuos para la


reproducción debe tener preferencia por los mejores. De igual forma la selección de los
que deben desaparecer debe tener preferencia por los peores. Para poder aplicar estos dos
operadores de selección se hace necesario obtener una medida de la calidad de cada individuo.
La calidad de un individuo esta asociada al valor de la función objetivo y al cumplimiento de
las restricciones. La forma como se calcula esta métrica (medida) de calidad recibe el nombre
de función de adaptación. Un aplicación de los algoritmos genéticos al problema de TSP con
multiples agentes (m-TSP) puede ser consultada en (Granada et al., 2016a).

2.8.1 Función de adaptación


Cuando el problema que se está abordando es irrestricto o el tipo de codificación usada permite
obtener sólo alternativas factibles, la función objetivo es igual a la función de adaptación. Por
otro lado cuando el problema presenta la posibilidad de infactibilidades, se hace necesario
generar una medida de la calidad de las alternativas de solución. La calidad está determinada
por el grado de optimalidad y de factibilidad.
Así por ejemplo, para un problema de minimización, entre dos alternativas factibles
será de mejor calidad aquella con menor valor de la función objetivo. Entre dos alternativas
infactibles, desde el punto de vista práctico, será de mejor calidad la que tenga menor grado

72
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

de infactibilidad. Y, obviamente, entre una factible y una infactible será de mejor calidad la
alternativa factible.
De acuerdo a lo anterior, la función de adaptación tiene como finalidad hacer un
balance entre optimalidad y factibilidad. Una práctica común, en problemas de minimización,
consiste en cuantificar el grado de infactibilidad y usar este valor para penalizar la función
objetivo. Si el problema es de minimización se penaliza sumando a la función objetivo el
grado de infactibilidad. Si el problema es de maximización se penaliza restando el grado de
infactibilidad.
Por ejemplo, para el problema del recipiente cilíndrico presentado en la sección 2.6.1
(pág. 58), supóngase que se tiene una alternativa con d = 4cm y h = 10.0909cm, con
una precisión de 10 bits. Aplicando las expresiones ( 2.35) y ( 2.36) y asumiendo un costo
c =UM$0.065 (UM$=unidades monetarias), se obtiene que el costo f (d, h) de esta alternativa
es de 9.876 UM$ y el volumen del recipiente g1 es 126.8061cm3 . Como el volumen mínimo
permitido Vmin es 300cm3 se está violando la restricción ( 2.36) en 300cm3 − 126.8061cm3 =
173.1939cm3 . Por lo tanto, una adecuada función de adaptación fa , para este problema en
particular, podría ser:

 penaliza ión

 z }| {

f (d, h) + c (Vmin − g1 ) ⇔ (Vmin − g1 ) > 0
f= (2.43)


en los otros asos

f (d, h)

Una buena función de adaptación, asociada a una adecuada codificación del problema,
debe poder diferenciar entre todos los individuos de la población. Es decir, dos individuos
genéticamente diferentes no deben tener el mismo valor de la función de adaptación. Un
ejemplo de lo anterior puede ser ilustrado con el problema de corte en 2-D mostrado en la
figura 2.8(pág. 26). A pesar de que las dos secuencias de empaquetamiento son diferentes, el
área desperdiciada en la paleta (función objetivo) es la misma. Por lo tanto se hace necesario
incorporar un criterio diferenciador el cual es, en este caso, el área no adyacente desperdiciada.
La calidad de la función de adaptación influencia directamente la eficiencia de un algoritmo
genético (Dréo et al., 2003).

73
Capítulo 2. Problemas y codificación

Existen una variedad de métodos eficientes que permiten manejar restricciones en


problemas de optimización combinatorial, entre los cuales se destacan:
Métodos para
Manejo de
1. Métodos basados en preservar la factibilidad de las soluciones.
restricciones
2. Métodos basados en la penalización de la función objetivo.

3. Métodos basados en la preferencia de soluciones factibles sobre las infactibles.

4. Métodos híbridos

En general, en el caso de problemas industriales, la evaluación de la función de adaptación


consume grandes recursos computacionales durante el proceso de optimización. Puede
involucrar aplicación intensiva de métodos numéricos como: programación no lineal, método de
elementos finitos, programación lineal, etc. Para reducir el esfuerzo computacional involucrado,
se hace necesario usar estrategias como computación paralela, descomposición del problema y
métodos aproximados de solución, entre otros.
Para que el algoritmo pueda encontrar soluciones mejores que las existentes en la
población actual, es necesario modificar los individuos a través de la aplicación de operadores
de variación u operadores de búsqueda local, los cuales son clasificados en dos categorías:

• Operadores de mutación, los cuales modifican un individuo para obtener otro.

• Operadores de recombinación o cruzamiento, los cuales generan uno o más descendientes


a partir de la combinación de dos padres.

En la figura 2.36, se muestra el diagrama de flujo de un AG básico que integra todos los
tipos de operadores.

2.8.2 Operadores de selección


En general, la posibilidad que un individuo sea seleccionado para la reproducción o para su
reemplazo está directamente asociada a su función de adaptación. El operador de selección
tiene como objetivo primario duplicar las buenas soluciones y eliminar las malas soluciones en
una población, mientras mantiene la población en un tamaño constante. Esto se logra llevando
a cabo las siguientes tareas:

• Identificar buenas soluciones en la población.

• Hacer múltiples copias de las buenas soluciones.

• Reemplazar las malas soluciones en la población con las buenas soluciones.

Existe una gran cantidad de métodos para realizar estas tareas. Algunos métodos comunes
son: selección por torneo, selección proporcional, y selección por rango.

74
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

  
 

 




       
   
 

     

   

de parada ?

  




    

    

Figura 2.36: Algoritmo genético básico

2.8.2.1 Selección por torneo

Sobre este tipo de torneo existen dos versiones. La primera, presentada por Goldberg and Deb
(2004), plantea que en este tipo de selección se realizan torneos entre parejas de individuos
Torneo
determinístico
escogidos aleatoriamente y la alternativa de mayor calidad (mejor valor de la función de
versión 1 adaptación) es seleccionada para pasar su copia genética a la siguiente generación. Se debe
escoger, usando torneo, un número de alternativas igual al tamaño de la población. Por esta
razón, si el tamaño de la población es n, se deben realizar 2n torneos para conformar el total
de individuos. Esto quiere decir, en pro de la justicia, que cada individuo deberá participar en
2 torneos. En el caso de la mejor solución de toda la población, ésta ganará los dos torneos y
tendrá derecho a tener dos descendientes dentro de la nueva población, lo cual es considerado
como una estrategia elitista. De forma similar, la peor solución de toda la población perderá los
dos torneos y será eliminada de la población. En este orden de ideas, cualquier individuo de la
población tendrá cero, uno o dos descendientes en la nueva población. En Goldberg and Deb
(2004) se ha podido establecer que la selección por torneo tiene las mejores propiedades
de convergencia y complejidad computacional cuando se compara con otros operadores de
selección que existen en la literatura. Un interesante aspecto del operador de selección por
torneo es que permite manejar fácilmente problemas de minimización o maximización ya que
simplemente depende del operador de comparación. Es decir, en el caso de maximización, una
alternativa es mejor que otra si su función de adaptación tiene un valor mayor. En el caso de
minimización, una alternativa es mejor que otra si tiene una función de adaptación con un valor

75
Capítulo 2. Problemas y codificación

menor. El algoritmo 2.8 muestra el pseudo-código de la selección por torneo determinístico


planteado en Goldberg and Deb (2004).

// Fun ión Sele iónTorneo


Datos de Entrada: ValAdapta ion ← vector columna de valores de la función de
adaptación de cada individuo de la población
TamPobla ión ← Número de individuos de la

población
Datos de Salida : Sele Reprod: vector con la posición de los individuos
seleccionados para reproducción
1 Pos ← vector columna de permutación aleatoria de enteros

// PosT amP oblacion×1


2 for t ← 1 to TamPobla ión −1 do
3 Individuo1 ← ValAdapta ion (Pos (t))

4 Individuo2 ← ValAdapta ion (Pos (t+1))

5 if Individuo1 <Individuo2 then


6 Sele Reprod (t,1)← Pos (t)

7 end
8 else
9 Sele Reprod (t,1)← Pos (t+1)

10 end
11 end
12 t←t+1
13 Individuo1 ← ValAdapta ion (Pos (t))

14 Individuo2 ← ValAdapta ion (Pos (1))

15 if Individuo1 <Individuo2 then


16 Sele Reprod (t,1)← Pos (t)

17 end
18 else
19 Sele Reprod (t,1)← Pos (1)

20 end
Algorithm 2.8: Selección por torneo - Versión 1

La segunda versión, presentada en Dréo et al. (2003) sugiere que la selección consiste en
escoger aleatoriamente un número k de individuos de la población (k < n), y de ese subconjunto
Torneo
determinístico
escoger para la reproducción el individuo con mejor función de adaptación. El paso anterior es
versión 2 repetido, las veces que sean necesarias, para conformar el conjunto de individuos que tienen
derecho a reproducirse. Recuérdese que este conjunto tiene el mismo número de individuos
que la población original. Este método de selección es mucho más usado que el anterior por
su fácil implementación y ha mostrado tener un desempeño similar. A medida que k crece (se
aproxima a n) el proceso de selección se vuelve más determinístico. A medida que k disminuye
(se aproxima a 1) el proceso se vuelve más aleatorio.

76
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

El torneo estocástico es similar a la primera versión del torneo determinístico. La


diferencia consiste en que el mejor individuo, de los dos participantes en un torneo, es
Torneo
seleccionado para reproducirse con una probabilidad p que se encuentra en un rango entre 0.5 y estocástico
1. Por lo tanto, la probabilidad que el mejor individuo de la población sea seleccionado después
de un torneo es de p N2 , donde N es el número de torneos.
El torneo determinístico es el método de selección usado a lo largo de este libro. Sin
embargo, es importante discutir las características de algunos otros métodos de selección.

2.8.2.2 Selección proporcional


Este tipo de selección fue originalmente propuesta por Holland (1975) y es usada solamente
para la reproducción. El número esperado de selecciones λi de un individuo i es proporcional
al valor de su función de adaptación. Esto implica que la función de adaptación debe ser positiva
en el espacio de búsqueda y debe ser de maximización. Por lo tanto, cuando estas condiciones
no se cumplen es necesario implementar algunas pequeñas transformaciones que, entre otras
cosas, pueden influenciar el desempeño del algoritmo. Si la población es de tamaño n, entonces
λi puede ser expresado, en forma normalizada, como en (2.44)

fi
λi = Pn (2.44)
j=1 fj

Sin embargo, el número efectivo de descendientes debe estar dado en números enteros.
Por lo tanto, se requiere de un mecanismo que integre toda la información y la convierta a
números enteros. Esto se logra utilizando un procedimiento de muestreo estocástico, el cual
constituye el eje central de la selección proporcional. Existen dos técnicas bastante aplicadas:
el método de selección por ruleta y el método universal de muestreo estocástico (Baker, 1985).
Este método de selección consiste en dividir una ruleta en n secciones (n =número de
individuos), cada una de las cuales tiene un tamaño proporcional a la función de adaptación de
Selección por
cada individuo, como se muestra en la figura 2.37a. Por lo tanto, la ruleta es activada n veces ruleta
y cada vez se selecciona el individuo que indica el puntero de la ruleta. Los individuos con
mejor función de adaptación poseen secciones más grandes de la ruleta. Por tal razón, estos
individuos tiene mayor probabilidad de ser seleccionados para la reproducción.
Si las secciones de la ruleta son “desenrolladas” sobre un segmento de línea recta, la
selección de un individuo es equivalente a escoger, aleatoriamente, un punto del segmento con
una probabilidad uniformemente distribuida (ver fig.2.37b).
El algoritmo 2.9 corresponde a la función SeleccionRuleta. Esta función simula un
lanzamiento de la ruleta sobre secciones proporcionales a la función de adaptación y devuelve
la posición de la alternativa ganadora. El script de la función SeleccionRuleta en matlab es
presentado en el capítulo 6 (pág. 185).
La varianza de esta técnica es alta, lo cual significa que es posible que un individuo de
buena calidad nunca sea seleccionado. O el caso contrario, que un individuo de mala calidad
sea seleccionado muchas veces.

77
Capítulo 2. Problemas y codificación

// Fun ión Sele iónRuleta


Datos de Entrada: ValAdapta ion ← vector columna de valores de la función de
adaptación de cada individuo de la población
TamPobla ión ← Número de individuos de la población

Datos de Salida : Sele ionado: Posición del individuo ganador


1 Sele ionado ← 1

2 A umulado ← 0

3 Aleatorio ← random ∈ [0, 1]

4 for i ← 1 to TamPobla ión do


5 A umulado ← A umulado +ValAdapta ion (i)

6 if Aleatorio ≤A umulado then


7 Sele ionado ← i

8 break
9 end
10 end
Algorithm 2.9: Selección de un individuo usando ruleta

La forma de reducir este riego es generando poblaciones grandes. Adicionalmente,


se presenta un problema denominado de escalamiento cuando existe una solución con una
Problema de
alta varianza
función de adaptación muy superior a la de los demás individuos. Esta solución, comúnmente
y denominada super-solución, tiene una probabilidad cercana a la unidad de ser seleccionada para
escalamiento reproducirse y la población será dominada por esta solución produciendo una convergencia
prematura. Por otro lado se puede presentar también que todas las soluciones tengan valores
similares de la función de adaptación. Esto produce una probabilidad de selección similar para
todos los individuos lo cual es equivalente a no aplicar el operador de selección. Todos estos
problemas están asociados a la escala de los valores manejados que representan la función de
adaptación y es por esto que se denomina un problema de escalamiento. Este problema no
se presenta en la selección por torneo. Este inconveniente, también se puede superar con la
selección por rango.
Un mecanismo con menor varianza es el método universal de muestreo estocástico. Este
método es igual al de la ruleta hasta el punto de tener las secciones de la ruleta desenrolladas
Método univer-
sal de muestreo
como en la figura fig.2.37b. La diferencia consiste en que los individuos son seleccionados por
estocástico un conjunto de n puntos equidistantes (ver fig.2.38). En este método sólo un número aleatorio
es generado y es usado para encontrar el origen de la serie de puntos equidistantes. La varianza
de este método es menor que el de la ruleta y se asegura que los mejores individuos tengan por
lo menos un descendiente.

2.8.2.3 Selección por rango


En este método las soluciones son ordenadas de acuerdo a su función de adaptación, de forma
que la peor tiene el rango 1 y la mejor el rango n. Para cada miembro de esta lista ordenada

78
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

20%
i=9
2%
i = 10
12%
i =1
17%
i=8

17%
i=2

7%
i=7

2% 6%
i =3 4% i=6
i=4 14%
i=5
(a) Ruleta circular

Aleatorio
i=5

i=1 i=10

∑ λi = 1
(b) Ruleta en formato horizontal

Figura 2.37: Dos presentaciones de la selección por ruleta

Aleatorio: Origen de la serie de puntos equidistantes 1


∆=
n
∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆ ∆

i =1 i=2 i=5 i=7 i =8 i=9

i=3 i= 4 i= 6 i=10

Figura 2.38: Método universal de muestreo estocástico

79
Capítulo 2. Problemas y codificación

su función de adaptación será el rango obtenido. El paso final consiste en aplicar el operador
de selección proporcional para seleccionar los n individuos con derecho a reproducirse. Este
método no tiene el problema de escalamiento.
Ejemplo 2.4.

Retomando el problema de diseño óptimo de un recipiente cilíndrico (PDORC) planteado


en la sección 2.6.1 (pág. 58), se requiere:

a Generar una población aleatoria de individuos usando la codificación mostrada en la


figura 2.30.
R/: En la segunda columna de la tabla 2.5 se muestra la generación de la población
aleatoria en codificación binaria directa usando una precisión de 5 bits por variable.
La primera columna de esta tabla contiene un índice i de cada uno de los individuos
generados. Los parámetros usados son:

• dmin = 0 y dmax = 31
• hmin = 0 y hmax = 31;
• #bits = 5
• Tamaño de la población= 10
• Vmin = 300
• c = 0.065

Tabla 2.5: Población generada aleatoriamente para el PDORC


i Individuos d i hi g1 ( d i , hi ) f ( d i , hi ) Penal. f adap . λi
1 → 1 0 1 0 1 1 0 0 1 0 → 21 18 → 6234,5 122,22 0 122,22 0,11843
2 → 1 1 1 1 0 0 1 1 0 1 → 30 13 → 9189,2 171,53 0 171,53 0,16622
3 → 0 0 1 0 0 0 0 1 0 0 → 4 4 → 50,265 4,9009 16,233 21,134 0,02048
4 → 0 1 0 1 0 0 1 1 0 1 → 10 13 → 1021 36,757 0 36,757 0,035619
5 → 1 0 1 0 1 1 1 0 0 0 → 21 24 → 8312,7 147,95 0 147,95 0,14337
6 → 0 1 0 1 0 1 0 1 1 1 → 10 23 → 1806,4 57,177 0 57,177 0,055407
7 → 0 1 1 1 1 1 0 0 0 1 → 15 17 → 3004,1 75,045 0 75,045 0,072722
8 → 1 0 1 1 0 1 1 0 1 1 → 22 27 → 10264 170,71 0 170,71 0,16543
9 → 1 1 1 1 0 1 0 0 1 1 → 30 19 → 13430 208,29 0 208,29 0,20184
10 → 0 0 1 0 0 1 0 0 0 1 → 4 17 → 213,63 15,519 5,6142 21,134 0,02048

∑ 1031,9 1

b Evaluar, para cada individuo, el valor de la función de adaptación presentada en la


expresión(2.43).
R/: En la octava columna (fadap. ) de la tabla 2.5 se muestra el valor de la función de
adaptación de cada individuo. Las columnas 3 y 4 presentan la decodificación de la
cadena binaria para las variables de diámetro d y altura h. Las columnas 5 y 6 muestran el
volumen y el costo de cada recipiente cilíndrico de la población. Para aquellos recipientes
en que el volumen es menor a 300 cm3 se debe calcular el valor de la penalización, el cual
es mostrado en la columna 7. Todos estos valores son calculados usando la formulación
presentada en las expresiones (2.35), (2.36) y (2.43).

80
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

c Aplicar el operador de selección por torneo, usando el algoritmo 2.8, y obtener el conjunto
de individuos con derecho a reproducirse.
R/: La figura 2.39 muestra un vector de permutaciones aleatorias de los índices de cada
individuo. Sobre este vector se realiza cada uno de los torneos ti de forma secuencial,
similar a la construcción de un circuito Hamiltoniano (ver definición pág. 1.5). Así
por ejemplo, el torneo t4 enfrenta a los individuos 3 y 7. Como es un problema
de minimización y la función de adaptación de cada uno es fadapt. (3) = 21.1339 y
fadapt. (7) = 75.045, respectivamente, el torneo es ganado por el individuo 3. El
conjunto de individuos seleccionados para la reproducción esta conformado por el vector
[6, 6, 3, 3, 10, 10, 4, 4, 8, 1]. Se puede notar que el individuo 9, que es el de peor calidad,
desapareció de la población, mientras que los individuo 3 y 10, que son los mejores de
la población con fadapt. (3) = 21.134, adquieren el derecho de reproducirse 2 veces cada
uno. Esto es justamente lo que se busca en el proceso de selección. Nótese que en este
caso particular los individuos 3 y 10 son genéticamente diferentes pero con igual valor de
la función de adaptación.
   Individuo
  
 f adap . Torne o Ga na dor
 1 6
t1  t1
t2 t2 2 6
  3 3
 t3  t3
4 3
 t4  t4
t10 

t5
t6
≡ t10 

t5
t6
⇒ 5
6
7
10
10
4
 t7  t7 8 4
t8   t8 9 8
9
 t9   t9 10 1

Figura 2.39: Selección por torneo, aplicada a los individuos de la tabla 2.5

d Aplicar el operador de selección proporcional usando ruleta.


R/: El primer problema que se encuentra al intentar aplicar el método de la ruleta es que
el valor de la función de adaptación de un individuo determina el tamaño de la sección de
este individuo en la ruleta. Es decir, a mayor calidad, mayor tamaño de la sección. Por lo
tanto, la ruleta es concebida para problemas de maximización y con función de adaptación
siempre ≥ 0. Cuando el problema es de minimización, como en este caso, es necesario
transformar el problema a uno de maximización. Una forma de llevar a cabo esta tarea
es a través de una relación inversamente proporcional entre la función de adaptación y el
tamaño de la sección λi , como se muestra en la expresión 2.45, donde finuevo = 1/fi . De
esta manera el individuo con menor fadap. tendrá la mayor sección en la ruleta.

f nuevo
λi = Pn i nuevo (2.45)
j=1 fj
P P
Por lo tanto, nj=1 fjnuevo = nj=1 f1j = 0.1841. Las probabilidades λi de cada individuo,
así como la probabilidad acumulada son mostradas en la figura 2.40a. Diez números

81
Capítulo 2. Problemas y codificación

aleatorios son generados y ubicados en las secciones correspondientes de la ruleta.


Para este ejemplo, el conjunto de individuos seleccionados para la reproducción esta
conformado por el vector [3, 4, 4, 4, 5, 6, 6, 6, 7, 10]. En la figura 2.40b se aprecia más
claramente el tamaño de cada sección por individuo.

Prob.
Acumul. Números aleatorios
i λi Pi
1 2 3 5 5 6 7 8 9 10
1 0.044448 0.044448
2 0.031669 0.076117
3 0.25704 0.333157 0.22595
4 0.14779 0.480947 0.4235 0.33395 0.43291
5 0.036718 0.517665 0.51551
6 0.095007 0.612672 0.58279 0.57981 0.52982
7 0.072386 0.685058 0.64053
8 0.031821 0.716879
9 0.02608 0.742959
10 0.25704 1 0.76037

(a) Ubicación del número aleatorio en la sección correspondiente

i = 10
26%
i =1
4%
i=2 3% 3% i = 9
3% i = 8
7% i=7

i=3 26%

10%
i=6
4%
i =5
15%
i=4
(b) Representación circular

Figura 2.40: Selección de 10 padres usando ruleta

e Aplicar el operador de selección proporcional usando el método universal de muestreo


estocástico.
R/: El primer paso consiste en calcular la distancia equidistante ∆ = 1/n = 1/10 = 0.1.
El segundo paso, consiste en generar un único número aleatorio que indica el punto donde
se inicia la serie de puntos equidistantes, como se muestra en la figura 2.38. Considerando
un número aleatorio= 0.2091 se obtiene que el conjunto de individuos seleccionados para
la reproducción esta conformado por el vector [3, 3, 4, 5, 6, 8, 10, 10, 1, 3].

f Aplicar el operador de selección por rango.

82
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

R/: Este operador requiere un ordenamiento descendente (en el caso de minimización)


teniendo como referencia la fadap. de cada individuo, como se muestra en la figura 2.41.
Un rango es asignado según el ordenamiento y una selección por ruleta es implementada
basada en el rango de cada individuo. Es decir, el rango es la nueva fadap. que se debe
tener en cuenta a la hora de usar la ruleta. Usando el mismo conjunto de números
aleatorios usados en el numeral d (figura 2.40a), se obtiene el conjunto de individuos
seleccionados para la reproducción dado por el vector [1, 7, 7, 6, 4, 4, 4, 4, 4, 3], como se
muestra en la figura 2.41.
Ordenado Prob. Números aleatorios
i f adap . Rango
λi Acum ul.
Pi 1 2 3 5 5 6 7 8 9 10
9 208 1 0.018182 0.018182
2 172 2 0.036364 0.054546
8 171 3 0.054545 0.109091
5 148 4 0.072727 0.181818
1 122 5 0.090909 0.272727 0.22595
7 75.045 6 0.10909 0.381817 0.33395 0.43291
6 57.177 7 0.12727 0.509087 0.4235
4 36.757 8 0.14545 0.654537 0.58279 0.51551 0.57981 0.52982 0.64053
3 21.134 9 0.16364 0.818177 0.76037
10 21.134 10 0.18182 0.999997

(a) Ubicación de los n números aleatorios

18%
2%
4%
16%
5%

7%

15%
9%

11% 13%

(b) Ruleta usando el rango como fadap.

Figura 2.41: Selección por ranking

2.8.3 Operadores de variación


Los operadores de selección no tienen la capacidad de crear nuevas soluciones dentro de
la población. Solamente pueden hacer copias de las buenas soluciones a expensas de las
soluciones de menor calidad. La creación de nuevas soluciones es una tarea realizada por los
operadores de variación, cuyo objetivo es incorporar diversidad en el proceso de optimización,
construyendo descendientes únicos (individuales), que hereden parcialmente las características
de los padres.

83
Capítulo 2. Problemas y codificación

Estos operadores agrupan dos categorías:

• El operador de recombinación o cruzamiento que utiliza dos individuos de la población


actual (padres) para crear uno ó más descendientes.

• El operador de mutación, que transforma un individuo en otro.

Estos operadores deben tener la capacidad de balancear adecuadamente las dos funciones
más importantes en el proceso de búsqueda de un óptimo:
Exploración y
explotación
• La exploración del espacio de búsqueda, con el propósito de descubrir áreas de buena
calidad que pueden contener el óptimo global.

• La explotación de estas áreas de buena calidad, con el propósito de concentrar la búsqueda


en esta región y poder, eventualmente, encontrar el óptimo con la precisión requerida.

Una búsqueda totalmente aleatoria tiene excelentes cualidades de exploración, pero no


tiene la habilidad de descubrir un óptimo en un tiempo razonable. Un operador de búsqueda
local determinístico (Goloso) posee la habilidad de encontrar un óptimo en un área del espacio
de búsqueda, pero corre el riesgo de que este punto sea un óptimo local. Un buen algoritmo
de búsqueda es el que incorpora un adecuado compromiso o balance entre la explotación y la
exploración.
A través de numerosas publicaciones se ha logrado demostrar el correcto funcionamiento
de estos operadores en varios espacios de búsqueda usados comúnmente, entre los cuales se
destacan:

• El espacio de las cadenas binarias.

• La representación real en Rn .

• La representación de permutaciones (usada en una gran cantidad de problemas


combinatoriales).

• La representación de árboles sintácticos, para la resolución de problemas usando


programación automática.

2.8.3.1 Recombinación de cadenas binarias


La forma más utilizada para aplicar el operador de recombinación ó cruzamiento consiste en
escoger aleatoriamente dos cromosomas (individuos), del conjunto escogidos para reproducción
con el operador de selección, e intercambiar entre ellos porciones aleatorias de genes. Este
operador puede generar uno ó más descendientes.
Generalmente, el operador de recombinación respeta las siguientes propiedades:

• La recombinación de dos padres idénticos produce un descendiente idéntico a los padres.

84
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

• Dos individuos similares, en el espacio de búsqueda, generan un descendiente similar a


ellos.

Debido a que la construcción de un operador de recombinación no sigue un procedimiento


con regla precisas, Las propiedades descritas anteriormente son satisfechas por operadores
clásicos de recombinación y no son absolutas.

85
Capítulo 2. Problemas y codificación

Este operador puede o no ser aplicado sobre toda la población. Por tal razón existe una
tasa de cruzamiento tc ≤ 1 que determina la proporción de individuos que van a recombinarse.
Tasa de
cruzamiento Los individuos que no se someten a la recombinación pasan directamente a la siguiente
generación. Así, si se utiliza una tasa de cruzamiento tc , entonces 100tc % individuos de
la población son usados en la operación de recombinación y 100(1 − tc )% son simplemente
copiados a la nueva población.
Una recombinación es conocida como letal si los padres son de buena calidad y el
descendiente obtenido es de mala calidad. Una solución a este problema consiste en realizar
Recombina-
ción letal
cruzamientos entre individuos que sean vecinos. Para ello se utiliza una métrica de la diferencia
genética, por ejemplo la distancia de Hamming, y sólo se cruzan los individuos más similares.
Este valor que determina qué individuos son similares y cuales no, recibe el nombre de
proporción de restricción rc . Si este valor es muy pequeño, la proporción de cruzamientos
efectivos será también menor y esto podría ser perjudicial ya que se reduce el espacio de
búsqueda, se acentúa la búsqueda local y puede existir convergencia prematura. Escoger
un adecuado valor rc es dependiente del problema y afecta directamente el desempeño de
convergencia.
También es posible considerar un parámetro rc decreciente durante la evolución del
proceso de optimización.
El operador de cruzamiento puede realizarse en uno, dos ó más puntos. En el caso de
cadenas binarias es común realizar un cruzamiento uniforme.
El cruzamiento en un punto consiste en escoger aleatoriamente una pareja de individuos
y aplicarles los siguientes 2 pasos (Holland, 1992):
cruzamiento
en un punto
1. Escoger de forma aleatoria un mismo punto de corte (ver fig. 2.35) para los individuos
como se muestra en la figura 2.42a.

2. Cortar las dos cadenas e intercambiar los dos fragmentos localizados a la izquierda (fig.
2.42b).

La figura 2.42 ilustra el operador de recombinación de un punto aplicado a los individuos


1 y 10 de la tabla 2.5 (pág. 80).
Esta idea se puede generalizarse para un cruzamiento multi-punto, donde pueden ser
definidos aleatoriamente nc puntos de cruzamientos. El operador consiste en intercambiar de
Cruzamiento
multi-punto forma alternada los fragmentos de los individuos como se muestra en la figura 2.43.
El algoritmo 2.10 muestra el pseudo-código para el caso multi-punto. El caso extremo
se conoce con el nombre de recombinación uniforme. Este operador es generalmente aplicado
Cruzamiento en cadenas binarias y consiste en construir un cromosoma nuevo decidiendo si cada gen (bit)
uniforme
proviene del individuo uno o del individuo dos con una probabilidad ρ (generalmente ρ = 0.5).
Desde el punto de vista de la función de exploración, el cruzamiento de un punto
preserva al máximo la información genética de los padres en el descendiente. Esta información
desaparece a medida que se incrementan los puntos de cruzamiento.

86
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

// Fun ión Re ombina ión


Datos de Entrada: Padre ← primer individuo
Madre ← segundo individuo
NumGenes ← Número de genes
PuntosCruzamiento ← Número de puntos de
cruzamiento
Datos de Salida : Hijo1 ← primer hijo resultante
Hijo2 ← segundo hijo resultante
1 Aleatorios (1) ← 0
2 for i = 2 to PuntosCruzamiento +1 do
3 Aleatorios (i) ← random (1..NumGenes )
4 end
5 Aleatorios (PuntosCruzamiento +2) ←NumGenes
6 Aleatorios ←sort (Aleatorios )
7 Conmutador ←1
8 Hijo1 ← [φ]
9 Hijo2 ← [φ]
10 for i ← 1 to PuntosCruzamiento +1 do
11 if Aleatorios (i) 6= Aleatorios (i + 1) then
12 if Conmutador = 1 then
13 Conmutador ←0
14 end
15 else
16 Conmutador ←1
17 end
18 end
19 if Conmutador = 1 then
20 Hijo1 ← [ Hijo1 ∪ Padre (Aleatorios (i) + 1 . . .Aleatorios (i + 1))]
21 Hijo2 ← [ Hijo2 ∪ Madre (Aleatorios (i) + 1 . . .Aleatorios (i + 1))]
22 end
23 else
24 Hijo1 ← [ Hijo1 ∪ Madre (Aleatorios (i) + 1 . . .Aleatorios (i + 1))]
25 Hijo2 ← [ Hijo2 ∪ Padre (Aleatorios (i) + 1 . . .Aleatorios (i + 1))]
26 end
27 Conmutador ← Conmutador +1
28 end
Algorithm 2.10: Cruzamiento multi-punto

87
Capítulo 2. Problemas y codificación

Punto de corte
aleatorio

1 0 1 0 1 1 0 0 1 0 1 0 1 0 1 1 0 0 1 0

0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 0 1
(a) Punto de corte aleatorio (b) Corte e intercambio de fragmentos

0 0 1 0 1 1 0 0 1 0

1 0 1 0 0 1 0 0 0 1
(c) Nuevos descendientes

Figura 2.42: Recombinación de individuos 1 y 10 del ejemplo 2.4

Pc1 Pc 2 Pc 3
Descendientes
1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 1 0 0 1 1

0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 1 0 0 0 0

Figura 2.43: Cruzamiento multi-punto, nc = 3

2.8.3.2 Recombinación en cadenas de secuencias o permutaciones


Cuando la codificación de un individuo representa una cadena de permutaciones o una
secuencia, como en el caso del Problema del Agente Viajero (PAV), la aplicación del operador
de recombinación requiere de ciertos cuidados. Una cadena de permutaciones se caracteriza
porque todos los genes tienen un alelo diferente. Por ejemplo, en el PAV una restricción
del problema es que todas las ciudades se visitan sólo una vez. Esto implica que en el
pseudo-cromosoma dos genes no pueden tener el mismo valor. Cuando se aplica un operador
de recombinación como los estudiados en la sección 2.8.3.1, se puede presentar la situación
mostrada en la figura 2.44. En esta figura se nota que los descendientes tienen genes con alelos
iguales, lo cual significa para el PAV que el individuo NO es válido.
PC1

J1 J2 J3 J4 J5 J6 J7 J8 J9 J1 J2 J3 J4 J1 J9 J8 J3 J7

J2 J6 J4 J5 J1 J9 J8 J3 J7 J2 J6 J4 J5 J5 J6 J7 J8 J9

Padres Descendientes no válidos

Figura 2.44: Cruzamiento de un punto entre permutaciones

Una solución a este problema podría ser un pos-procesamiento o algoritmo de reparación


del pseudo-cromosoma para corregir la infactibilidad. Otra idea consiste en encontrar

88
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

representaciones en las cuales el cruce y la mutación tradicionales produzcan sólo individuos


válidos. Sin embargo, existen métodos más eficientes para obtener descendientes siempre
factibles cuando se trata de permutaciones, tales como el cruzamiento ordenado, cruzamiento
ciclico y cruzamiento de recombinación de aristas, entre otros. Entre estos métodos se destaca
el operador de recombinación de correspondencia parcial (PMX, Partially Matched Crossover)
sobre el cual se hace énfasis en esta sección.
El operador PMX puede ser visto como una recombinación de permutaciones
que garantiza que todos los alelos son encontrados sólo una vez en cada descendiente
Operador PMX
(Murata and Ishibuchi, 1995). En este operador, la creación de los dos descendientes se realiza
siguiendo los siguientes pasos:

1. Se generan aleatoriamente dos puntos de corte Pc1 y Pc2 .

2. Los genes que están fuera de la franja limitada por los dos puntos de corte son copiados
del padre1 al descendiente, conservando las mismas posiciones del padre1 .

3. Los genes faltantes en el descendiente son tomados del padre2 , conservando el orden en
el que se encuentran en el padre2 . Tal como se muestra en la figura 2.45.

4. De forma similar, la creación del segundo descendiente consiste en repetir el proceso


anterior intercambiando el padre1 por el padre2 .

Franja
64447444 8
PC1 PC 2

J1 J2 J3 J4 J5 J6 J7 J8 J9

J2 J6 J4 J5 J1 J9 J8 J3 J7

J1 J2 J6 J4 J5 J3 J7 J8 J9

Figura 2.45: Cruzamiento PMX

2.8.3.3 Mutación
El operador de mutación tiene como objetivo alterar un individuo localmente, modificando
aleatoriamente un alelo de un pseudo-cromosoma en un gen aleatorio, para obtener una solución
vecina de mejor calidad. Aunque no siempre la mutación genera un individuo mejor, si se realiza
con una baja probabilidad deja de ser una operación aleatoria debido a que el proceso favorece
la creación de pocas soluciones en el espacio de búsqueda (Deb, 2004).
Clásicamente, la probabilidad de aplicar el operador de mutación varía entre 0.01 y 0.1
por individuo. Esta probabilidad se conoce con el nombre de tasa de mutación tm .

89
Capítulo 2. Problemas y codificación

El concepto de mutación es completamente equivalente al concepto de generación de


un vecino, el cual se discutió para diferentes tipos de problemas en el capitulo 2 (pág. 17). Es
Tasa de
mutación de notar, que al igual que el operador de recombinación, la mutación requiere de estrategias
diferentes cuando se trata de cadenas binarias o de permutaciones.
En una cadena binaria, generalmente, la mutación consiste en escoger un gen aleatorio
y permutar su valor de 0 a 1 o viceversa. En una permutación como en el caso del PAV la
mutación consiste en aplicar, por ejemplo, la técnicas 2-opt y k-opt discutidas en la página 36.
La forma como se aplica el operador de mutación, al igual que el operador de cruzamiento,
es dependiente del problema y debe considerar que siempre se deben generar individuos válidos
(factibles).

2.8.4 Operadores de preservación de elitismo


Con el fin de preservar y poder usar las soluciones de buena calidad en generaciones
posteriores, se recomienda el uso de un operador que incorpore un grado de elitismo al proceso.
Adicionalmente, el uso de este tipo de operadores puede mejorar el desempeño del algoritmo
sobre problemas particulares. En un AG elitista la estadística de soluciones de calidad dentro
de la población no puede ser degradada con el paso de las generaciones.
Existen muchas formas de incorporar elitismo en AG. Las más común consiste en
conservar la mejor solución encontrada hasta el momento (incumbente) pasando de una
generación a otra directamente. Esto no sólo conserva la alternativa, sino que permite que
ésta interactúe con otras para generar nuevas alternativas.
Otra forma de introducir elitismo consiste en comparar dos alternativas hijas con las
alternativas padres y luego escoger las dos mejores como los descendientes definitivos. Una
modificación del procedimiento anterior consiste en crear una población de descendientes
usando los operadores genéticos tradicionales. Esta población es del mismo tamaño que la
población original. La población original y la de descendientes son mezcladas para formar
una sola población de 2 veces el tamaño original (2n). Finalmente se escogen los n mejores
individuos para conformar nuevamente la población. Este último método es muy usado en
optimización multiobjetivo.
Rudolph (1994) ha mostrado que un simple AG con un operador que preserve el elitismo
y una tasa de mutación diferente de cero (tm 6= 0) converge a la solución óptima global de un
problema particular. Sin embargo, en la ausencia de elitismo, el algoritmo pierde esta propiedad
de convergencia en algunos casos.

2.8.4.1 Por qué trabajan los algoritmos genéticos?

Es sorprendente que un mecanismo tan simple como los AGs permitan resolver problemas
complejos de optimización NP-difíciles. En la teoría de los AGs no se mencionan palabras
tales como gradiente, Hessiana o cualquier otra información auxiliar del problema, excepto el
valor de la función objetivo. A pesar de que la operación es simple, los AGs son altamente no
lineales, aplicables a muchos tipos de problemas, estocásticos y complejos.

90
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

En el ámbito de los AGs, es interesante notar que a pesar que toda información inicial de
un problema es generada aleatoriamente, un AG que utilice los tres operadores tradicionales
produce una búsqueda dirigida, la cual usualmente incrementa la calidad promedio de las
soluciones de una generación a otra.
Cuando se observa cuidadosamente las alternativas de solución que se crean de una
generación a otra en un problema cualquiera, se pueden observar similitudes entre la
información de ciertas posiciones de las cadenas. Estas similitudes son llamada esquemas
dentro de la literatura de los AGs.

Un esquema puede ser representado, para el caso de cadenas binarias, a través de tres
tipos de elementos (1′ s, 0′ s y ∗′ s). Un ∗ representa un 1 o un cero, es decir una posición
Representación
indefinida. Además, un esquema puede ser clasificado por su orden y por su longitud. de
un esquema
El orden de un esquema H corresponde al número de posiciones definidas dentro del
esquema y es representado como o(H). Un esquema con orden completo representa una cadena.
La longitud de un esquema δ(H) es definida como el número de posiciones entre las posiciones
definidas más distantes. En otras palabras, es equivalente al mayor número de ∗ consecutivos, Orden y longi-
tud de un
considerando que la última posición esta conectada con la primera posición del esquema. Por esquema
ejemplo, si H = [∗ ∗ 011 ∗ ∗ ∗ ∗001 ∗ ∗∗] la distancia δ(H) = 5 y el o(H) = 6. Un esquema
H1 = [1 ∗ ∗0 ∗ ∗] representa 16 cadenas con un 1 en la primera posición y un 0 en la tercera
posición. El número de cadenas que puede representar un esquema corresponde, en el caso
de cadenas binarias, a 2#P os.indef inidas = 2#∗ . Cuando una alternativa es de buena calidad su
esquema crece en la población debido a los operadores genéticos.

Como un esquema representa una familia de cadenas similares, entonces se puede


decir también que un esquema representa una región particular del espacio de búsqueda. Los
Bloques
esquemas que son de longitud pequeña, de bajo orden y buena calidad son conocidos como constructivos
bloques constructivos. A medida que los operadores genéticos son aplicados a la población,
algunos de estos bloques constructivos son fortalecidos y redefinidos en su longitud, orden y
calidad. Cuando un adecuado número de estos bloques constructivos están presentes en una
población, los operadores genéticos actúan sobre ellos haciéndolos crecer y fortalecerse unos
con otros para formar mejores y más grandes bloques constructivos. Este proceso finalmente
posibilita que el AG encuentre la solución óptima. Esta hipótesis es conocida como hipótesis
de bloques constructivos (Goldberg, 1989).
Lo más sorprendente es que los AGs resuelven problemas con otro tipo de codificaciones,
diferente a la binaria, tales como la codificación real, la codificación por secuencias
o permutaciones e incluso codificaciones matriciales. En una revisión cuidadosa del
funcionamiento de los esquemas sobre cadenas binarias, Goldberg (1989) revela que no toda
la teoría de esquemas propuesta por Holland (1975) para cadenas binarias, tiene la misma
importancia en problemas que tienen espacios de búsqueda continuos. Por lo tanto, los AGs
con parámetros reales requieren el diseño de nuevas estrategias de recombinación y mutación
como se muestra en la sección 2.9.6.1 (pág. 117).

91
Capítulo 2. Problemas y codificación

2.9 Optimización Multi-objetivo


En el proceso de fabricar un producto, o en el simple hecho de mejorar la calidad de vida
de algún individuo, se deben tomar decisiones basadas en una gran cantidad de variables con
características y comportamientos diferentes. Al tratar de encontrar una solución con este
enfoque se ingresa inevitablemente en el campo de la optimización matemática, el cual alberga
un conjunto bastante amplio de metodologías donde cada opción puede ser tan compleja como
el problema mismo. La mayor parte de los problemas de optimización del mundo real son
naturalmente multi-objetivo. Esto es, suelen tener dos o más funciones objetivo que deben
satisfacerse simultáneamente y que posiblemente están en conflicto entre sí. Sin embargo, a fin
de simplificar su solución, muchos de estos problemas tienden a modelarse como mono-objetivo
usando sólo una de las funciones originales y manejando las adicionales como restricciones.
Para introducir mejor el concepto de multi-objetivo, supóngase el problema de comprar un
vehículo. En este problema el comprador se enfrenta, básicamente, a dos objetivos en conflicto,
el costo y la comodidad del vehículo. Estos dos objetivos están en conflicto, debido a que
el comprador busca una mayor comodidad a un menor costo y lo que acontece realmente es
que a mayor comodidad, mayor es el costo del vehículo. En la figura 2.46 se representa esta
situación. Si el comprador se encuentra en una opción de compra definida por el punto C en
la gráfica, existen 3 posibilidades para cambiar esta opción. La primera posibilidad consiste
en encontrar cualquier otra opción situada en la zona A, ya que ésta será mejor que la actual
por tener mayor comodidad a un menor precio, es decir será una mejor oferta. En un contexto
ideal, el punto E sería la mejor opción, sin embargo las restricciones del mercado evita que esta
situación sea posible, dado que no existiría un retorno para el vendedor del vehículo, sino que
por el contrario existiría una pérdida. Por lo tanto, estas restricciones generan una barrera que
evita la posibilidad de estos puntos irreales, definiendo una zona factible de búsqueda, como se
muestra en la figura. El punto E podría definirse como un “regalo” y ningún participante del
mercado está dispuesto a asumir estos costos. La segunda posibilidad es buscar una opción de
compra en la zona D. Sin embargo, el punto actual C es mejor que cualquiera de las opciones
en esta zona. Por lo tanto está posibilidad puede ser descartada por el comprador. El punto
F puede ser considerado como una “estafa” y ningún participante del mercado está dispuesto
a incurrir en estos gastos. La tercera posibilidad, consiste en buscar opciones de compra en
las zonas B y C. Allí nada se puede concluir sobre si es una opción mejor o peor. Por lo
tanto son opciones que se pueden considerar igual de valiosas que la actual. En el ámbito de
la optimización multi-objetivo estas opciones se conocen como no dominadas. El conjunto
de opciones no dominadas que más se aproximen a la barrera impuesta por las restricciones
conforman lo que se denomina frente óptimo de Pareto. En la figura, los puntos A, D y B
hacen parte de este frente.
Los objetivos principales de un proceso de optimización multiobjetivo, son dos:
Objetivos de la • Encontrar un conjunto de soluciones lo más cercanas posibles al frente de pareto óptimo.
optimización
multiobjetivo • Encontrar un conjunto de soluciones tan diversas como sea posible.
Es verdad que la teoría y los algoritmos de la optimización mono-objetivo son

92
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Comodidad
Barrera impuesta por el mercado
Punto irreal para
90% el mercado

E B

D
Zona A:
Zona de Zona B:
búsqueda. Nada se puede concluir
Mayor confort a
menor precio
C
Zona D:
Zona C: Menor confort
Nada se puede concluir a mayor precio
40%
A F

10M 100M Costo

Figura 2.46: Dos funciones objetivo en conflicto en el problema de compra de un vehículo

completamente aplicables a la optimización de problemas multi-objetivos que usan un


función objetivo única transformada. Sin embargo, existe una diferencia fundamental
entre optimización mono y multi-objetivo que es ignorada cuando se usa el método de
transformación. Esta diferencia consiste, precisamente, en la obtención del frente óptimo
de Pareto, el cual es conformado por un conjunto de soluciones óptimas con los mejores
compromisos entre las diferentes funciones objetivo. Además, en problemas con más de una
función objetivo en conflicto no existen soluciones óptimas únicas.
Surge así, una de las principales inquietudes en optimización multiobjetivo: ¿Cuál opción
escoger?. En el caso del comprador de un automóvil: ¿Cuál automóvil debe comprar?. Tomar
esta decisión involucra otras consideraciones que tienen en cuenta informaciones denominadas
de alto nivel, tales como: disponibilidad financiera del comprador, tiempo diario de conducción,
características que debe tener el automóvil, número de pasajeros promedio, posición social,
entre otras. Se debe tener en cuenta que en este tipo de problemas, siempre será mejor tener un
abanico de posibilidades que tener una única alternativa de compra.

2.9.1 Optimización multi-objetivo usando Algoritmos evolutivos


La optimización multi-objetivo usando Algoritmos evolutivos (MOEA, Multi-objective
Optimization using Evolutionary Algorithms) es un método clásico para resolver problemas
con multiples funciones objetivo, de la forma:

min/ max fm (x) m = 1, 2, ..., M


s.a.
gj (x) ≥ 0 j = 1, 2, ..., J (2.46)
hk (x) = 0 k = 1, 2, ..., K
L U
xi ≤ xi ≤ xi i = 1, 2, ..., n

93
Capítulo 2. Problemas y codificación

Un vector de solución x = {x1 , x2 , ..., xn } es un vector de n variable de decisión las


cuales están canalizadas entre valores máximos y mínimos a través de la restricción xLi ≤ xi ≤
Espacio de U
decisión D xi . Estas variables canalizadas constituyen el espacio de variables de decisión D. El proceso
de optimización multi-objetivo busca encontrar un vector x que cumpla con las restricciones de
igualdad hk y las restricciones de desigualdad gj de forma que las funciones objetivo resultantes
fm sean optimizadas.
En el caso de existir restricciones de desigualdad que no cumplan con la forma canónica
del problema mostrada en el modelo (2.9.1) siempre es posible convertir una restricción con
Forma canó-
nica de un operador “≤” a una con operador “≥” multiplicando la restricción por -1 (Deb, 2004). Respecto
problema a las funciones objetivo, éstas también pueden ser adecuadas a la forma canónica del problema.
multi-objetivo Para ello, es posible usar el principio de dualidad el cual sugiere, en el contexto de optimización,
que un problema de maximización puede ser convertido en uno de minimización multiplicando
la función objetivo por -1.
El espacio de decisión, representado por todas las combinaciones posibles de las variables
x, genera un segundo espacio vectorial conocido como espacio objetivo Z. Es decir, para
Espacio
objetivo Z
cada solución x en el espacio de decisión existe un punto en el espacio objetivo, denotado por
f (x) = z = {z1 , z2 , ..., zM }. De esta manera se genera un mapa que relaciona los puntos
entre los dos espacios, el espacio n−dimensional D y el espacio M−dimensional Z, como se
muestra en la figura 2.47.

x2
D z = { z1 , z2 }
f2
Z
x = { x1 , x2 , x3 }

x3 f1
x1

Figura 2.47: Mapa de relación entre el espacio de decisión D (n = 3) y el espacio objetivo Z


(M = 2).

La generación de estos dos espacios es otra de las características que diferencia la


optimización multi-objetivo de la mono-objetivo.
Cuando se tratan problemas de optimización mono-objetivo, una alternativa de solución
se considera mejor que otra si ésta produce una solución objetivo de menor valor para el
Concepto de
Dominancia caso de minimización, o de mayor valor para el caso de maximización. En los problemas
multi-objetivo este criterio debe ser revaluado, ya que se considera al mismo tiempo funciones
en conflicto de minimización y de maximización. Además, el orden de magnitud de cada
función puede ser diferente, haciendo inviable una comparación directa. Por lo anterior, los
algoritmos multiobjetivo introducen el operador de dominancia, el cual define que una solución
x1 domina otra solución x2 si se cumplen las siguientes condiciones:

94
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

La solución x1 no es de menor calidad que la solución x2 en todos los


(2.47)
objetivos. Es decir, fj (x1 ) 6≻ fj (x2 ) ∀j
La solución x1 es estrictamente mejor que la solución x2 en al menos uno
de los objetivos. Es decir, fj (x1 ) ≺ fj (x2 ), por lo menos para un j ∈ (2.48)
{1, 2,..., M}.
Entre las diferentes formas de relacionar una solución con otra en el espacio de las
funciones objetivo se pueden mencionar las siguientes:

• Solución1 ≻ Solución2 : la solución 1 es dominada por (es peor que) la solución 2.

• Solución1 6≻ Solución2 : la solución 1 no es dominada por (no es peor que) la solución 2.

• Solución1 ≺ Solución2 : la solución 1 domina (es mejor que) la solución 2.

• Solución1 6≺ Solución2 : la solución 1 no domina (no es mejor que) la solución 2.

En la literatura es común encontrar la relación de dominancia x1 ≺x2 . Esta relación


significa que se está considerando la posibilidad de que la solución x1 puede ser igual a la
solución x2 en una de las funciones objetivo, como se presenta en la expresión (2.47). La
relación x1 ≺ x2 es utilizada para hacer referencia a una dominancia fuerte, es decir, x1 es
mejor que x2 en todos los objetivos. En este libro se considera que ≺ ≡ ≺.
Implícitamente, el concepto de dominancia explicado en las expresiones (2.47) y (2.48),
define las propiedades de dominancia entre dos soluciones cualquiera:

1. Relación de dominancia no-reflexiva: una solución cualquiera x1 no se domina así misma.


Esto se cumple debido a la expresión (2.48) de la definición de dominancia, la cual
específica que la solución x1 debe ser estrictamente mejor que la solución x2 en al menos
uno de los objetivos. En el caso de una comparación entre dos soluciones iguales, esta
condición nunca será cumplida.

2. Relación no simétrica: el hecho de que x1 ≺x2 no implica que x2 ≺x1 .

3. Relación transitiva: si x1 ≺x2 y x2 ≺x3 ⇒ x1 ≺x3

4. Relación uni-direccional: Si la solución x1 6≺ x2 , esto no implica que x2 ≺ x1 .

Aplicando iterativamente estas reglas sobre un conjunto cualquiera de soluciones de


un problema de optimización multiobjetivo, se puede establecer cuáles son las alternativas
Conjunto no
dominantes, conocidas como conjunto no dominado. Esto es, Dado un conjunto de soluciones dominado y
P , el conjunto de soluciones no dominadas P ′ son todos aquellas soluciones no dominadas por frente óptimo de
cualquier miembro del conjunto P . Pareto
Las soluciones restantes forman parte del conjunto de soluciones dominadas. Si se logra
establecer cuál es el conjunto de soluciones no dominadas a través de todo el espacio objetivo,

95
Capítulo 2. Problemas y codificación

entonces se habla de frente óptimo de Pareto. Esta noción de frente óptimo de Pareto es la más
aceptada en el contexto de problemas multiobjetivo y fue propuesta originalmente por Francis
Ysidro Edgeworth en 1881 y generalizada posteriormente por Vilfredo Pareto en 1896.
Un buen conjunto de soluciones no dominadas es caracterizado por tener individuos
distribuidos a lo largo de todo el frente, es decir, se caracteriza por tener mayor diversidad.
Como se mencionó anteriormente, el objetivo de un proceso de optimización es encontrar el
frente óptimo de Pareto con el mayor grado de diversidad posible.
Una definición más formal de frente de Pareto óptimo global y local se presentan en las
expresiones (2.49) y (2.50)

El conjunto no dominado de todo el espacio factible de búsqueda S es es el


(2.49)
conjunto de Pareto óptimo global (ver fig. 2.48).
Si para cada miembro x dentro de un sub-conjunto P ⊆ S no existe una
solución y que domine cualquier miembro de P , el conjunto P constituye (2.50)
un conjunto de Pareto óptimo local de S (ver fig. 2.48).

f 2 (min)
S
Pareto óptimo global

P
x1
x2
x3
x4
Pareto óptimo local

f1 (min)

Figura 2.48: Frente de Pareto óptimo y local

Cuando P = S el conjunto no dominado resultante es llamado conjunto óptimo de


Pareto. La figura 2.49 muestra cuatro diferentes escenarios posibles para una población con 12
individuos y 2 objetivos. Cada objetivo puede ser minimizado o maximizado. En la figura 2.49a
las dos funciones objetivos son de minimización y el conjunto óptimo de Pareto es conformado
por las soluciones 1 y 4. En la figura 2.49b la función f1 es de maximización y la f2 de
minimización, el conjunto óptimo de Pareto es conformado por las soluciones 1, 2 y 10. En
la figura 2.49c la función f1 es de minimización y la f2 de maximización, el conjunto óptimo
de Pareto es conformado por las soluciones 3, 11 y 9. Finalmente, en la figura 2.49d ambas
funciones son de maximización y el conjunto óptimo de Pareto es conformado por las soluciones
9 y 10.

2.9.2 Métodos para obtener el conjunto de soluciones no dominadas


Encontrar las soluciones no dominadas de un conjunto de individuos que conforman una
población se puede hacer a través de varios métodos. En esta sección se discuten el método

96
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

10
f1 (min)
10
f1 (max)
Conjunto óptimo de Pareto
10 10
9 9

8 8

7 7

6 Conjunto óptimo de Pareto 6


8 8
5 2 5
2
5 9 5 9
4 1 4
1
6 12 6
3 12 3

11 11
2 2 7
7
4 3 f 2 (min) 4 3 f 2 (min)
1 1
1 2 3 4 5 6 7 1 2 3 4 5 6 7

(a) min-min (b) max-min

10 10
f1 (min) 10 f1 (max) Conjunto óptimo de Pareto 10
9 9

8 8

7 7

6 Conjunto óptimo de Pareto 6

8 8
5 2 5 2
5 9 5 9
4 1 4 1
6 12 6
3 12 3

11 11
2 2 7
7
4 3 f 2 (max) 4 3 f 2 (max)
1 1
1 2 3 4 5 6 7 1 2 3 4 5 6 7

(c) min-max (d) max-max

Figura 2.49: Cuatro diferentes escenarios para una población de 2 objetivos

97
Capítulo 2. Problemas y codificación

exhaustivo y el método eficiente de Kung (Kung et al., 1975). El primero considerado de


fácil compresnsión e implementación, pero ineficiente computacionalmente. El segundo utiliza
conceptos de recursividad, por lo que el algoritmo es más complejo y de difícil implementación.
Sin embargo es considerado el más eficiente computacionalmente (Deb, 2004).
Método exhaustivo: En este método cada solución es comparada con todas las otras
soluciones usando el concepto de dominancia. Si se tiene una población de alternativas P con
dos funciones objetivo f1 y f2 y N individuos, Los pasos a seguir son:
1. Condición Inicial i = 1; P ′ =Conjunto Dominante = Φ.
2. Para una soluciónj ∈ P , con j 6= i: comprobar si la soluciónj ≺ solucióni . Si es así ⇒ ir
al paso 4.
3. Si existen más soluciones en P ⇒ j = j + 1 e ir al paso 2, de lo contrario i pasa a
pertenecer a P ′ y es retirado de P .
4. i = i+1. Si i = N ⇒ ir al paso 2, de lo contrario declarar P ′ como el conjunto dominante
y parar.
Analizando detalladamente los pasos anteriores, se puede observar que el método consiste
en seleccionar una solución i y compararla con todas las otras soluciones de la población
(representadas por el índice j), almacenadas en el vector P , verificando si una solución i es
dominada por alguna otra solución j. Si la solución actual i es dominada, pierde todo su interés
y se escoge otra solución, perteneciente a P , para que sea comparada de nuevo con toda la
población P . En el caso que la solución actual i sea no dominada, entonces esta solución es de
vital importancia y debe ser almacenada en un arreglo de soluciones no dominadas denominado
P ′ . Las soluciones que van siendo almacenadas en P ′ son retiradas del vector P , puesto que
son soluciones que ya han sido identificadas como no dominadas y pueden ser excluidas del
proceso.
Ejemplo 2.5.

Aplicar el método exhaustivo para obtener el conjunto no dominado de soluciones de la


población mostrada en la figura 2.50.
R/: Inicialmente, P = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} y P ′ = {Φ}. Aplicando el
concepto de dominancia, se verifica cada una de las soluciones de la siguiente manera:

i=1⇒ Se verifica si la solución 1 es dominada por alguna otra

Solución2 ≺
6 Solución1
Solución3 ≺ Solución1
Como la Solución3 ≺ Solución1 , entonces se revisa otra solución

i=2⇒ Se verifica si la solución 2 es dominada por alguna otra

98
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Solución1 ≺
6 Solución2
Solución3 ≺ Solución2
Como la Solución3 ≺ Solución2 , entonces se revisa otra solución

f1 (minimización)
10
f1 f2 10
i 9
1 1 4
2 2 5 8

3 5 1 7
4 1 1
5 4,5 4 6

6 4 3 2 8
5
7 3 1,5 1 5
4 9
8 6 5
12 6
9 7 4 3
10 7 10 11
2 7
11 6,5 2 3
4
12 2 3 1
1 2 3 4 5 6 7

f 2 (maximización)

Figura 2.50: Ejemplo de obtención del conjunto no dominado: población de 12 individuos y 2


funciones objetivo en conflicto

i=3⇒ Se verifica si la solución 3 es dominada por alguna otra

Solución1 6≺ Solución3
Solución2 6≺ Solución3
Solución4 6≺ Solución3
Solución5 6≺ Solución3
Solución6 6≺ Solución3
Solución7 6≺ Solución3
Solución8 6≺ Solución3
Solución9 6≺ Solución3
Solución10 6≺ Solución3
Solución11 6≺ Solución3
Solución12 6≺ Solución3
como ninguna solución domina la solución 3, ésta es NO dominada y debe ser
almacenada en el vector P ′ , adicionalmente debe ser retirada del vector P . Así,

P = {1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12} y P = {3}

De una manera similar, se verifica la dominancia sobre todas las soluciones, para llegar
al conjunto no dominado P ′ = {3, 11, 9}. La figura 2.51 muestra las soluciones no dominadas
de la población en diferentes frentes. Es posible encontrar los diferentes frentes, retirando de la

99
Capítulo 2. Problemas y codificación

población P las soluciones no dominadas ubicadas en el primer frente y ejecutando los pasos
nuevamente. Una vez encontrado el nuevo frente, estas soluciones son retiradas también y se
ejecuta el proceso para encontrar el tercer frente. Este proceso se repita las veces que sean
necesarias hasta que todas las soluciones queden ubicadas en un frente.

f1 (minimización)
10

7
frente de soluciones
6 no dominadas

5

1
1 2 3 4 5 6 7

f 2 (maximización)

Figura 2.51: Soluciones distribuidas por frentes usando el método exhaustivo

Método de Kung: El método discutido en Kung et al. (1975) propone una división
recursiva de la población. El primer paso consiste en ordenar descendentemente la población
P según la importancia del valor de la primera función objetivo. Posteriormente, la población
es dividida en dos sub-poblaciones I (izquierda) y D (derecha) de forma recursiva (ver líneas 4
y 5 del algoritmo 2.11). Lo anterior implica que la sub-población I es de mejor calidad que la
D desde el punto de vista de la primera función objetivo. Así, es posible verificar el criterio de
dominancia, respecto a la segunda función objetivo, entre la sub-población D y la I (el proceso
es aplicable para problemas con más de dos funciones objetivo). Las soluciones de D que no
son dominadas por cualquier miembro de I son combinadas con los miembros de I para formar
una población no dominada M (ver líneas 8 y 16). La conformación de la población M y la
verificación de dominancia tienen lugar en el momento en que el tamaño de I y de D sea igual a
1, es decir, hasta que las divisiones recursivas de las sub-poblaciones permitan comparar sólo un
individuo de la población I con uno de la población D. Este método es más difícil de visualizar
e implementar que el método exhaustivo, pero en problemas de gran tamaño es importante
disminuir el esfuerzo computacional invertido en la obtención de los frentes no dominados.
La figura 2.52 muestra un formato típico de la presentación de la población y los valores
de las diferentes funciones objetivo. Este formato es descompuesto en dos arreglos: un vector
P que contiene los índices de cada individuo de la población y una matriz V que contiene, por
columna, los valores de las diferentes funciones objetivos para cada individuo.
El algoritmo 2.11 corresponde a la función que divide recursivamente la población y
obtiene el frente no dominado. La figura 2.53 corresponde al diagrama de flujo del algoritmo
general que permite obtener todos los frentes ordenados de la población. Este algoritmo

100
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Individuo Fobj1 Fobj2 ⋯ FobjM


1 V1,1 V1,2 ⋯ V1, M
2 V2,1 V2,2 ⋯ V2, M
Población =
3 V3,1 V3,2 ⋯ V3, M
⋮ ⋮ ⋮ ⋱ ⋮
N VN ,1 VN ,2 ⋯ VN , M






VECTOR P MATRIZ [V ]

Figura 2.52: Individuos y valores de las funciones objetivo de la población

contempla la posibilidad de M funciones objetivo y puede ser aplicado para minimización y


maximización.
Ejemplo 2.6.
Aplicar el método de Kung para obtener el conjunto no dominado de soluciones de la población
mostrada en la figura 2.54.
R/: La población P ordenada de acuerdo a la primera función objetivo produce la
secuencia: P = {8, 4, 1, 10, 7, 2, 6, 5, 11, 9, 3, 12}. Cuando P entra por primera vez, como
parámetro, a la función FND_ordenado() su tamaño no es igual a 1. Esto quiere decir que no
es posible realizar ningún tipo de comparación. De acuerdo al método propuesto, la población
debe ser dividida en dos sub-poblaciones I = {8, 4, 1, 10, 7, 2} y D = {6, 5, 11, 9, 3, 12}. De
forma recursiva estas sub-poblaciones son ingresadas a la función FND_ordenado(), generando
el árbol de divisiones mostrado en la figura 2.55
Empezando del extremo inferior izquierdo, del nivel 5 del árbol, es posible establecer
dominancia respecto a la segunda función objetivo. Se puede decir que para P = {8, 4}, I =
{8} domina D = {4}, por lo cual la salida de la función F ND_ordenado(), con P = {8, 4},
es {8} y el individuo {4} es eliminado debido a que es dominado. Ahora es posible establecer
si I = {8} domina a D = {1}, en el nivel 4, comparando el mejor individuo de I con respecto
a f2 (en este caso 8) con el mejor de D con respecto a f2 (en este caso 1). Esta comparación de
los mejores individuos de {I} con los mejores de {D} se realiza en la línea 7, para el caso de
minimización y en la línea 15 para el caso de maximización, en el algoritmo 2.11.
Como 8 no domina a 1 la salida de la función F ND_ordenado(), con P = {8, 4, 1},
es {8, 1} que son los individuos, hasta hora, no dominados. En este punto, en el nivel 3, es
necesario comenzar con la siguiente rama del árbol para poder establecer la salida de la función
F ND_ordenado() para P = {8, 4, 1, 10, 7, 2}, en el nivel 2 . Por lo Tanto, empezando de
nuevo en el nivel 5, para P = {10, 7}, I = {10} no domina D = {7}, por lo cual la salida de la
función F ND_ordenado(), es {10, 7}. Para P = {10, 7, 2}, el mejor individuo de I = {10, 7}
es 7 el cual, respecto a la segunda función objetivo, no domina a D = {2}, de modo que la
salida de la función F ND_ordenado(), es {10, 7, 2}.
Para P = {8, 4, 1, 10, 7, 2}, en el nivel 2, el mejor individuo de I = {8, 1}, respecto a
f2 , es 1 el cual no domina al mejor individuo de D = {10, 7, 2} que es 2. La salida de la
función F ND_ordenado() para P = {8, 4, 1, 10, 7, 2} es entonces el conjunto no dominado

101
Capítulo 2. Problemas y codificación

// Fun ión FND_ordenado (V, P, TipoOpt, i);


Datos de Entrada: V: Matriz que contiene los valores de todas las funciones objetivo para cada uno
de los individuos de la población.;
P: Vector que contiene el número de cada individuo y
corresponde a la primera columna de la matriz
Población (ver fig. 2.52).;
N ← Número de individuos de la población.
M ← Número de funciones objetivo del problema.
TipoOpt: Vector que define el tipo de optimización
(minimización=0 o maximización=1) de cada una
de las funciones objetivo. Por ejemplo,
TipoOpt = [0, 1] significa que Fobj1 es de
minimización y Fobj2 es de maximización.
Datos de Salida : Frente ← Frentes Ordenados
1 N ← Tamaño (P)
2 ; PosDividir ← Redondear (N/2)
3 if N > 1) then /* Se divide el frente re ursivamente */
4 Iizq ← FND_ordenado (V, P {1..P osDividir} , TipoOpt, i)
5 Dder ← FND_ordenado (V, P {P osDividir+1..N } , TipoOpt, i)
6 if TipoOpt (i)= 0 then /* Si fi es de minimiza ión */
7 if V (Dder (Tamaño (Dder )),i) ≤ V (Iizq (Tamaño (Iizq )),i) then
8 M ←Iizq ∪Dder
9 end
10 else
11 M ←Iizq
12 end
13 end
14 if TipoOpt (i)= 0 then /* Si fi es de maximiza ión */
15 if V (Dder (Tamaño (Dder )),i) ≥ V (Iizq (Tamaño (Iizq )),i) then
16 M ←Iizq ∪Dder
17 end
18 else
19 M ←Iizq
20 end
21 end
22 Frente ←M
23 end
24 else
25 Frente ←P
26 end
Algorithm 2.11: Algoritmo del método recursivo de Kung

102
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Datos de entrada: V, P, M,
TipoOpt, L=1

Es Fobj1 de  TipoOpt[1]=0 no

minimización ?  ?

si
Ordenar P Ordenar P
descendentemente ascendentemente
según Fobj1 según Fobj1

Verificar si quedan elementos  P=Vacío si


 Salida:
de P que no han sido ubicados  ? Frentes
ordenados
en un frente 
 no

i=2
Borrar de P los elementos que
ya se ubicaron en el Frente[L].
L=L+1

i=M
Verifica si se han comparado  ?
 si
todas las funciones objetivo 
no

i=i+1
Llamar la función que permite obtener el
frente L no dominado:
Frente[L] =FND_ordenado(V,P,TipoOpt, i)

Figura 2.53: Algoritmo para obtener todos los frentes, considerando múltiples funciones objetivo
que pueden ser de maximización o minimización

30
Ve ctor P Ma triz [V]
4
Individuo Fobj1 Fobj2
25 8
1 0.2285 11.5128
2 0.3902 7.4299
3 0.7559 7.1822 20
4 0.1688 28.4664
Valor Fobj2

5 0.457 11.8462
Población = 6 0.4078 8.0556 15
7 0.3727 7.7673
8 0.1195 26.9118 5
9 0.7348 6.5577 10 1
10 0.2813 8.2604 10 726
11 0.6785 3.863 5 93
12 0.8121 3.5582
11 12
0
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
Valor Fobj1

Figura 2.54: Ejemplo de aplicación del método de Kung, con 12 individuos y 2 funciones
objetivos de minimización.

103
Capítulo 2. Problemas y codificación

8 4 1 10 7 2 6 5 11 9 3 12 nivel 1

8 4 1 10 7 2 6 5 11 9 3 12 nivel 2

8 4 1 10 7 2 6 5 11 9 3 12 nivel 3

8 4 1 10 7 2 6 5 11 9 3 12 nivel 4

8 4 10 7 6 5 9 3 nivel 5

Figura 2.55: Árbol de divisiones generado por la función FND_ordenado()

{8, 1, 10, 7, 2}.


Para encontrar el conjunto no dominado total se deben realizar las comparaciones
necesarias en las ramas restantes del árbol de decisiones. Siguiendo el mismo proceso se
obtiene que para P = {6, 5, 11, 9, 3, 12}, en el nivel 2, la salida de F ND_ordenado() es
{6, 11, 9, 12}. El conjunto no dominado total para P = {8, 4, 1, 10, 7, 2, 6, 5, 11, 9, 3, 12},
resulta de comparar el mejor, respecto a f2 , de I = {8, 1, 10, 7, 2} que es 2 con el mejor de
D = {6, 11, 9, 12} que es 12. Se nota que 2 no domina a 12, y por lo tanto el conjunto no
dominado es: f rente1 = {8, 1, 10, 7, 2, 6, 11, 9, 12}.
Sin embargo, como las comparaciones se hicieron siempre entre la mejor solución de
{D} y la mejor solución de {I}, es necesario realizar un último recorrido para verificar que
no existan soluciones que pueden ser dominadas. Esta verificación se realiza de izquierda a
derecha, una única vez, comparando la dominancia, con respecto a f2 , de la solución j con
la solución j + 1, como se muestra en la figura 2.56. Cuando se encuentra que la solución j
domina a la solución j + 1, entonces se verifica la dominancia entre la misma solución j y la
siguiente en el vector, es decir la solución j + 2, hasta que se encuentre una solución j + k no
dominada. Cuando esto sucede, se hace j = j + k y se continua el proceso de revisión en forma
lineal de izquierda a derecha, tal como se muestra en la figura 2.56. Nótese que la solución 2
domina la solución 6, pero no domina la solución 11. La solución 11 domina a la 9, pero no a
la 12. Finalmente, el frente no dominado es {8, 1, 10, 7, 2, 11, 12}.

Frente1 = 8 1 10 7 2 6 11 9 12

Figura 2.56: Recorrido final verificando dominancia respecto a f2

Si se quiere obtener los demás frentes, correspondientes a los individuos que no hacen
parte del conjunto no dominado, el procedimiento consiste en retirar de la población los
individuos que ya han sido ubicados en un frente y repetir el proceso de bisección recursiva
explicado anteriormente, como se explica en el algoritmo de la figura 2.53. En este caso,
retirando los individuos del f rente1 la población es P = {4, 6, 5, 9, 3} y el f rente2 = {4, 6, 9}.
Finalmente el f rente3 = {5, 3}, como se muestra en la figura 2.57.

104
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

30

25

20

Valor Fobj2
15

10

5
Frente no
dominado
0
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
Valor Fobj1

Figura 2.57: Frentes no dominados ordenados del ejemplo 2. 6

2.9.3 Distancia de apilamiento


Debido a que uno de los objetivos fundamentales de un proceso de optimización es encontrar el
frente óptimo de Pareto con el mayor grado de diversidad posible, se hace necesario establecer
una herramienta matemática que permita medir el grado de diversidad de cada individuo dentro
del frente.
La diversidad de los individuos está asociada directamente con la distribución de éstos
sobre el frente. Aquellos individuos que estén más apilados o juntos, contribuyen a la formación
de cúmulos o nichos indeseables cuando se está buscando mayor diversidad.
La distancia de apilamiento es la métrica que permite evaluar esta situación y representa
una medida de la densidad de individuos alrededor de una solución particular i. La idea consiste
en medir el semi-perímetro formado por las dos soluciones vecinas a la solución i, dentro del
frente en estudio. Nótese que cada una de las soluciones dentro de un frente tiene dos soluciones
vecinas, excepto aquellas que se encuentran en los extremos. De hecho, las soluciones de los
extremos son las que mayor grado de diversidad tienen y por consiguiente deben tener una
distancia de apilamiento muy grande (d → ∞).
El semi-perímetro de una alternativa Xi es la suma de las distancias d1 y d2 que se
muestran en la figura 2.58. En este caso, se tienen dos funciones objetivo de minimización
y tres rangos de dominancia para las 10 alternativas mostradas.

f2

X(i – 1)


 Xi
f 2X ( i +1) − f 2X ( i −1) d2 

 X( i +1)

d1

f 1X (i +1) − f1 X (i −1) f1

Figura 2.58: Distancia de apilamiento para la alternativa de solución Xi .

105
Capítulo 2. Problemas y codificación

El valor promedio de la distancia de apilamiento di , de la alternativa i, está dado por la


ecuación 2.51. Esta distancia es calculada para todos los individuos excepto los extremos,
los cuales tienen una distancia de apilamiento → ∞. Para un conjunto de soluciones en
competencia, la alternativa que introduce el mayor nivel de diversidad es aquella con la mayor
distancia de apilamiento.


f X(i+1) − f X(i−1) f X(i+1) − f X(i−1)
1 1 2 2
di = max min + max min (2.51)
f1 − f1 f2 − f2

2.9.4 Selección por torneo usando apilamiento (<c )


Con la incorporación de la distancia de apilamiento, es posible establecer un nuevo operador de
selección que aproveche esta información. En un problema multiobjetivo cada solución tiene
dos atributos: un rango de no dominación ri , asignado a todos los individuos del frente, y una
distancia local de apilamiento di .
Teniendo en cuenta estos dos atributos, un torneo entre dos soluciones i y j arroja como
ganadora la alternativa i si cumple con cualquiera de las siguientes dos condiciones:

1. Si i tiene mejor rango j, es decir, si ri < rj .

2. Si ambas tienen el mismo rango pero la alternativa i tiene mejor distancia de apilamiento
que la j, es decir, si di > dj .

2.9.5 Método NSGA-II


Los algoritmos multiobjetivo requieren, para su desarrollo, de métodos matemáticos de
optimización aplicados sobre una población de soluciones, por lo cual, se ha encontrado
en los algoritmos genéticos una propuesta firme, dadas sus características de diversidad y
confiabilidad. Sin embargo se debe mantener una mente abierta y posibilitar el uso de otros
mecanismos tales como las colonias de hormigas, partículas swarp y búsqueda tabú, entre otros.
En esta sección se presenta un algoritmo de optimización multiobjetivo basado en un
ordenamiento elitista no-dominado (NSGA, Non-Dominated Sorting Genetic Algorithm). Este
algoritmo es clasificado como de tipo elitista, ya que incorpora un mecanismo de preservación
de las soluciones dominantes a través de varias generaciones de un algoritmo genético
(Deb et al., 2000; Granada et al., 2014, 2015).
El proceso se inicia a partir de un conjunto de tamaño N de soluciones (Padres) obtenidas
aleatoriamente o a través de un constructivo suave. Las siguientes generaciones (Hijos) son
determinadas usando mecanismos modificados de selección, cruzamiento y mutación definidos
por el algoritmo genético clásico. La principal característica de este método es que las dos
poblaciones, de padres e hijos, son mezcladas para conformar una población de tamaño 2N. El
objetivo del procedimiento NSGA-II es hacer que el frente no dominado de esta población
sea mejorado iterativamente, usando como estrategia un ordenamiento no-dominado y los
operadores de un AG, hasta alcanzar el frente óptimo de Pareto.

106
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Cada individuo de la población es ubicado en el frente no dominado que le corresponde.


El ordenamiento no-dominado consiste en ordenar los individuos descendentemente, según la
calidad del frente. La nueva población de descendentes es conformada por los individuos de los
diferentes frentes, dando prioridad a los que pertenecen a los frentes de mejor calidad.
En la figura 2.59 se muestra el esquema básico del procedimiento NSGA-II. Una vez
se han reunido y clasificado en frentes, las dos poblaciones, se empieza a conformar la nueva
población de tamaño 2N con todos los individuos del primer frente, que es el de mejor calidad.
Si quedan faltando individuos para conformar la población, entonces se toman los individuos
del segundo frente y así sucesivamente hasta que se obtengan los N individuos de la nueva
población. Generalmente, existe un frente cuyos individuos no pueden pasar completamente a
la nueva población, como es el caso del frente 3 mostrado en la figura 2.59. En este caso, en este
último frente se deben “descartar” algunos individuos. Entonces, cuáles individuos descartar?.

Selección, cruce, Reunir y Frente 1


mutación clasificar

Frente 2

Frente 3

Padres Hijos Descendencia


Final

Rechazadas

Frente n

Figura 2.59: Esquema general del procedimiento NSGA-II

La respuesta a esta pregunta es encontrada al revisar los dos objetivos fundamentales de


un proceso de optimización multiobjetivo. El primero, consiste en encontrar el frente óptimo
de Pareto. Esta tarea es realizada, en este caso, por el operador elitista de ordenamiento no
dominado y el AG. El segundo, consiste en encontrar individuos distribuidos a lo largo de todo
el frente (mayor diversidad). Por lo anterior, los individuos que se deben eliminar del último
frente, que está conformando la nueva población, son aquellos que tienen la peor medida del
grado de distribución sobre el frente, es decir aquellos con menor distancia de “apilamiento”,
como se modtró en la sección 2.9.3.
Los pasos que resumen el procedimiento NSGA-II son:

Paso 1. Obtener un conjunto P k de tamaño N de soluciones (Padres) de forma aleatoria o a


través de un constructivo suave. El superíndice k corresponde a la generación actual, en
este caso k = 0.

Paso 2. Aplicar operadores tradicionales de selección, recombinación y mutación para obtener


una población Q de descendientes (hijos) de tamaño N.

Paso 3. Combinar padres e hijos en una única población R de tamaño 2N. Sobre esta población
realizar una clasificación por frentes y ordenar. Por ejemplo, si la población tiene 13

107
Capítulo 2. Problemas y codificación

frentes, entonces el mejor frente i obtiene un rango ri = 13 y el peor frente k obtiene


un rango rk = 1. Los demás frentes son clasificados según la posición ocupada en el
ordenamiento.

Paso 4. Mientras el número de individuos np de la nueva población sumado con el número de


individuos nf i del frente fi sea menor o igual que N, entonces es posible pasar a la nueva
población la totalidad de individuos del frente i. Es decir:

P k+1 = P k ∪ fi (2.52)

actualizar el número de individuos de la población: np = np + nf i .

Paso 5. Si np > N es necesario eliminar np − N individuos del frente actual fi . Para ello se
eliminan los individuos con menor distancia de apilamiento. Los individuos de los demás
frentes también son descartados.

Paso 6. Aplicar operadores de selección (<c ), recombinación y mutación para obtener una
población Q de descendientes (hijos) de tamaño N y volver al paso 3. El proceso se
repite hasta alcanzar un criterio de parada, como por ejemplo un número determinado de
generaciones.

2.9.6 Algoritmo Evolutivo multi-objetivo para optimización con


restricciones
Esta sección presenta una metodología de dos fases para resolver problemas de optimización
con restricciones usando una estrategia multiobjetivo, propuesta por el autor en (Granada et al.,
2009). En la primera fase de la metodología se concentra el esfuerzo en encontrar por lo
menos una solución factible, descartando completamente la función objetivo. En la segunda
fase se aborda el problema como uno biobjetivo donde se busca la optimización de la función
objetivo original y maximizar el cumplimiento de las restricciones. En la fase uno se propone
una estrategia basada en el endurecimiento progresivo de restricciones blandas para encontrar
soluciones factibles. El desempeño del algoritmo es validado a través de 11 casos de prueba
bastante conocidos en la literatura especializada.
La mayoría de los problemas del mundo real involucran restricciones de igualdad y
desigualdad. La formulación general de un problema de optimización de parámetros contínuos
Problema
restricto con restricciones es definido en (Venkatraman and Gary, 2005) de la siguiente manera:

Minimizarf (X), X = (x1 , x2 , · · · , xn ) ∈ ℜn (2.53)


gj (X) ≤ 0, (j = 1, . . . , q) (2.54)
hj (X) = 0 (j = q + 1, . . . , m) (2.55)

108
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

donde X ∈ F ⊆ S. La función objetivo f es definida sobre el espacio de búsqueda S ⊆ ℜn , y


el conjunto F ⊆ S define la región factible. La región factible F es restringida por un conjunto
de m restricciones (m ≥ 0) con q restricciones de desigualdad gj (X) y m − q restricciones de
igualdad hj (X). Las restricciones de desigualdad que toman el valor de 0 en el óptimo global
del problema son llamadas restricciones activas.
Los algoritmos evolutivos (AE) han sido ampliamente usados en la solución de
problemas de optimización. Estas técnicas, al ser comparadas con los métodos tradicionales
de programación no lineal, poseen la ventaja de manejar menor cantidad de información
(gradientes, hessianas y derivadas, entre otras), son de fácil implementación y son herramientas
de búsqueda global. Además, tienen una menor posibilidad de quedar atrapadas en
óptimos locales y pueden obtener respuestas de buena calidad en problemas de gran tamaño.
Los investigadores han desarrollado una gran cantidad de AE para resolver problemas de
optimización con restricciones (POR). Sin embargo, es posible enmarcar estos trabajos en
cuatro grandes grupos (Zixing and Yong, 2006):

1. métodos basados en funciones de penalización;

2. métodos basados en la preferencia de soluciones factibles sobre las infactibles;

3. métodos híbridos;

4. métodos basados en optimización multiobjetivo.

Este último grupo es actualmente de gran interés científico y conforma el estado del arte
de los algoritmos de optimización restricta.
La utilización de métodos de optimización multi-objetivo usando algoritmos
evolucionarios MOEA (acrónimo en inglés de Multi-Objective Evolutionary Algorithms) tiene
ventajas adicionales sobre los otros métodos al resolver problemas de optimización restricta,
como son:

• Las restricciones que maneja el problema pueden ser resueltas de una manera natural. Es
decir, no es necesario formular funciones objetivo penalizadas artificialmente.

• Por lo anterior, no se necesita de parámetros de penalización. Estos parámetros introducen


un componente subjetivo a la solución del problema.

• En los problemas del mundo real es poco común encontrar restricciones rígidas o duras.
Es decir, se permite un margen de violación a las restricciones (restricciones blandas) a
cambio de una ganancia importante en la función objetivo. Por lo tanto, el uso de MOEA
permite obtener un conjunto con los mejores compromisos entre las funciones objetivo
(pareto-óptimo) involucradas en el problema. Así, es posible encontrar soluciones que
violan las restricciones marginalmente o por mucho. En la Figura 2.60 se muestra un
problema mono-objetivo restricto abordado a través de una filosofía multi-objetivo donde
un objetivo es el grado de violación de las restricciones y el otro la función objetivo
original. También se muestra el frente óptimo de pareto del problema multiobjetivo, el

109
Capítulo 2. Problemas y codificación

punto mínimo restricto (punto A), el punto mínimo considerando restricciones blandas
a través de un margen de violación ε (punto B) y las soluciones factibles del problema
mono-objetivo original. Todas las soluciones del frente que están entre los puntos A y B
son de gran interés.

f(x)

Espacio de búsqueda

Soluciones factibles del


problema mono-objetivo
original
A

Frente óptimo de pareto


B

ε
Violación restricciones v(x)

Figura 2.60: Problema mono-objetivo restricto abordado a través de una filosofía multi-objetivo
con restricciones duras y blandas

El principio fundamental del algoritmo propuesto surge de los métodos de programación


por metas (en inglés goal programming), en donde la idea principal es encontrar soluciones
Programación
por metas
que alcancen una referencia (objetivo predefinido) para una o más funciones objetivo. Si no
existen estas soluciones, la tarea será encontrar soluciones donde la diferencia con la referencia
sea mínima. Por otro lado, si la solución con valor de función objetivo igual a la referencia
deseada existe, la tarea será identificar esta solución. Dentro de los métodos de programación
por metas está el método lexicográfico en donde las diferentes metas son categorizadas dentro
de muchos niveles de prioridad. De esta manera, primero se considera solamente las metas y las
correspondientes restricciones del primer nivel de prioridad y se resuelve el problema resultante.
Si existen multiples soluciones en el paso anterior otro problema de programación por metas es
formulado considerando el segundo nivel de prioridad. Las metas del primer nivel de prioridad
son usadas como restricciones de igualdad para asegurar que la solución del segundo problema
no viole las restricciones del primero. El procedimiento se repite secuencialmente para otros
niveles de prioridad.
En la Figura 2.61 se ilustra el principio de funcionamiento del método lexicográfico de
programación por metas para un problema de minimización con dos funciones objetivo f1 y
f2 . Si se considera que f1 es más importante que f2 , el procedimiento consiste en primero
minimizar el problema con f1 e ignorar f2 . De esta manera se encuentra el conjunto de
soluciones representado por los segmentos AB y CD para el primer nivel de prioridad. La
solución para el segundo nivel de prioridad será aquella que minimice a f2 y que haga parte de
f1 . En este caso la solución para el segundo nivel de prioridad será D y será la solución de todo

110
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

f2 A

B
C

E f1

Figura 2.61: Método lexicográfico de programación por metas

el problema de programación por metas lexicográficas. Es importante tener en cuenta que si se


considera a f2 más importante que f1 la solución del problema cambia a E.

2.9.6.1 Esquema propuesto de optimización restricta


La idea consiste en desarrollar una metodología, basada en la filosofía de programación por
metas lexicográfica, que permite convertir un POR en un problema biobjetivo en donde una
función objetivo es la original f (X) y la otra es el grado de violación en las restricciones v(X).
Es decir, una función objetivo considera la optimalidad y la otra la factibilidad.
El algoritmo se compone de dos fases. En la primera fase, la función objetivo original es
completamente descartada y el problema de optimización se concentra en minimizar el grado
de violación de las restricciones de las soluciones. Así, el algoritmo encuentra, eventualmente,
una solución factible porque la búsqueda es dirigida basándose solamente en la violación de
restricciones. La segunda fase, consiste en optimizar simultáneamente la función objetivo
original y el grado de violación de las restricciones usando una estrategia multiobjetivo
NSGA-II.
Fase I: Algoritmo de satisfacción de restricciones.
En esta fase la función objetivo es completamente descartada y todo el esfuerzo del
algoritmo es dirigido a encontrar una única solución factible. A cada individuo de la población
se le asigna una función de adaptación de acuerdo al grado de violación de restricciones que
posea. Posteriormente, se utiliza una estrategia elitista para asegurar que la solución con menor
violación de restricciones sea copiada a la siguiente generación. Esta fase permite obtener una
solución que satisface todas las restricciones (solución usable en el mundo real).
Esta técnica es apropiada para abordar problemas altamente restrictos, donde encontrar
una solución factible puede ser bastante difícil. Para encontrar el grado de violación de
restricciones de un individuo X en la j-ésima restricción, el primer paso de la estrategia
propuesta consiste en convertir las restricciones de igualdad en restricciones blandas usando
una tolerancia δ. Así, la violación de la restricción individual estará dada por:


max {0, gj (X)} j = 1, . . . , q
cj (X) = (2.56)
max {0, |hj (X)| − δ} j = q + 1, . . . , m

111
Capítulo 2. Problemas y codificación

donde || denota el operador de valor absoluto.


Para darle a todas las restricciones el mismo grado de importancia, cada violación
individual debe ser normalizada. Para esto, se divide cada violación individual por el valor
de la mayor violación de la población. Primero, se encuentra la máxima violación de cada
restricción en la población usando:

cmax (j) = max {cj (X)} (2.57)


X

Estos valores de máxima violación de cada restricción en toda la población son usados
para normalizar cada restricción violada calculada en (2.56). Finalmente, para producir un
grado de violación de restricciones (un escalar) para cada individuo de la población que varíe
entre 0 y 1, los valores de las violaciones normalizadas son sumados y divididos luego por el
número total de restricciones del problema:
m
P cj (X)
cmax (j)
j=1
v(X) = (2.58)
m

Ejemplo 2.7.
Obtención de la función de adaptación para la fase uno. Se considera el siguiente problema
de optimización restricta:

0.000002 3
min G5(X) ≡ 3x1 + 0.000001x31 + 2x2 + x2
3
s.a
r1 ≡ x3 − x4 − 0.55 ≤ 0
r2 ≡ x4 − x3 − 0.55 ≤ 0
r3 ≡ 1000sin(−x3 − 0.25) + 1000 sin(−x4 − 0.25) + 894.8 − x1 = 0 (2.59)
r4 ≡ 1000sin(x3 − 0.25) + 1000 sin(x3 − x4 − 0.25) + 894.8 − x2 = 0

r5 ≡ 1000sin(x4 − 0.25) + 1000 sin(x4 − x3 − 0.25) + 1294.8 = 0


r6 ≡ 0 ≤ xi ≤ 1200, i = 1, 2
r7 ≡ −0.55 ≤ xi ≤ 0.55, i = 3, 4

donde r1 , r2 , . . . , r7 son restricciones del problema.


Se genera de forma aleatoria una población de 5 individuos como se muestra en la Tabla
2.6. En el proceso de generación de la población se tiene especial cuidado con garantizar el
cumplimiento de las restricciones r6 y r7 de forma que el problema queda limitado solamente
por las 5 primeras restricciones (r1 , . . . , r5 ).
Evaluando cada individuo de la población en el problema (2.59) y descartando
completamente la función objetivo, se obtienen los datos registrados en la tabla 2.7, por
individuo y para cada una de las 5 restricciones. Aplicando (2.56) y asumiendo una tolerancia
δ = 0.01 se obtiene la Tabla 2.8. De esta forma es fácil obtener los términos del vector

112
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Tabla 2.6: Población generada aleatoriamente para el ejemplo 2.7


Variables
x1 x2 x3 x4
Individuos

X1 1156.4 133.69 0.14667 0.3424

X2 867.67 791.77 -0.33318 0.08332

X3 955.76 982.42 0.36467 0.01741

X4 722.69 153.13 0.37178 0.055625

X5 747.24 966.49 0.12927 -0.4855

cmax (j). Para mejorar el desempeño computacional del algoritmo se debe tener especial cuidado
al momento de calcular y actualizar este vector. La primera vez que se calcula, el procedimiento
se realiza sobre todos los individuos de la población.

Tabla 2.7: Valor de las restricciones para cada individuo del ejemplo 2.7
r1 r2 r3 r4 r5

X1 -0.74573 -0.35427 -1206.3 226.85 1332.8

X2 -0.9665 -0.1335 -216.97 -1065.9 1294.6

X3 -0.20274 -0.89726 -901.88 123.9 501.93

X4 -0.23384 -0.86616 -711.27 929.26 565.26

X5 0.064772 -11.648 10.647 164.62 -137.11

Después, cuando un individuo nuevo es generado, una comparación entre las violaciones
en las restricciones del individuo y las violaciones máximas calculadas en (2.57) permiten
mantener actualizaos los valores de este vector. Es conveniente generar un vector adicional
imax (j) que contenga los individuos generadores de cada cmax (j) actual. Así, por ejemplo, la
máxima violación a la restricción 1 es ocasionada por el individuo 5 (X5 ).
Finalmente, aplicando la expresión (4) a la tabla anterior se obtiene un vector de escalares
v(X) que cuantifica el grado de infactibilidad de cada individuo de la población v(X) =
[0.44256, 0.43024, 0.2481, 0.37711, 0.25322]T .
El vector v(X) corresponde a la función de adaptación de la fase
uno, el cual será usado en el proceso de selección. Para la búsqueda de
soluciones factibles se utiliza un Algoritmo genético (AG) tradicional con
codificación real incorporando endurecimiento progresivo de restricciones blandas.

113
Capítulo 2. Problemas y codificación

Tabla 2.8: Violaciones considerando δ = 0.01


c1 c2 c3 c4 c5

X1 0 0 1206.2 226.84 1332.8

X2 0 0 216.96 1065.9 1294.6

X3 0 0 901.87 123.89 501.92

X4 0 0 711.26 929.25 565.25

X5 0.064772 0 10.637 164.61 137.1

cmax ( j ) 0.064772 - 1206.2 1065.9 1332.8

imax ( j ) 5 - 1 2 1

Endurecimiento progresivo de restricciones blandas (EPRB) - Fase uno: En la figura


2.60 se muestra el manejo de restricciones blandas a través de un margen de violación ε. La
técnica usada para encontrar las soluciones factibles consiste en considerar un intervalo para
el margen de violación (εmin ≤ ε ≤ εmax ) de manera que el AG tiene como objetivo inicial
minimizar v(X), calculado en la expresión (2.58), considerando εmax . Es decir, inicialmente
el algoritmo trabaja con un alto margen de violación, por lo cual se espera que el AG alcance
su objetivo con un bajo esfuerzo computacional. Posteriormente, el margen de violación es
reducido cada vez que el AG alcanza un objetivo parcial hasta finalmente alcanzar un margen
de violación de restricciones menor o igual a εmin . En este punto el AG ha encontrado una
solución factible.
Como estrategia de reducción del margen de violación se propone usar: ε = (1 − τ ) ε.
El valor de εmin corresponde a la tolerancia δ usada para evaluar el cumplimiento de las
restricciones de igualdad (p.e. εmin = δ = 0.0001). El valor de εmax es un valor “señuelo” que
permite al AG encontrar fácilmente una población con un razonable margen de infactibilidad
(región factible inicial). A partir de esta población, el proceso de optimización guía la búsqueda
hacia la siguiente región factible de mejor calidad hasta encontrar una solución factible con
el grado de precisión deseado. La figura 2.62 muestra el proceso de búsqueda de soluciones
factibles para el problema del ejemplo 2.7, partiendo de una población aleatoria, con εmax = 0.4,
εmin = 0, 0001 y τ = 0.5. Los círculos blancos corresponden a la población inicial, los
asteríscos indican la evolución de la población después de varias generaciones y al momento de
alcanzar cada uno de los márgenes de violación.
Fase II: Algoritmo de optimización con restricciones.
Esta fase entra en ejecución cuando por lo menos una solución factible ha sido encontrada
por la fase uno. En la fase uno la función de adaptación correspondía al grado de violación de
las restricciones. En esta fase, la evolución de los individuos se hace con base en la calidad del
conjunto no dominado al cual pertenecen. En esta segunda fase la violación de restricciones y
la función objetivo original tienen que ser minimizadas simultáneamente dentro de un espacio
objetivo modificado como el mostrado en la figura 1 (espacio f − v). El individuo factible con
mejor función objetivo será la incumbente actual del espacio de búsqueda.

114
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

9000

8000

7000

6000

5000

4000

3000

2000

1000
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6
ε min = 0, 0001 ε max

Figura 2.62:Proceso de búsqueda de soluciones factibles. Evolución de los individuos de la


población para diferentes ε

La metodología que se presenta utiliza un AG y un operador elitista basado en un


ordenamiento no-dominado (Ver NSGA-II, sección 2.9.5, pág. 106 ). Además, para conservar
la diversidad en los individuos pertenecientes al conjunto de soluciones no dominadas se utiliza
un esquema de nichos basado en la utilización de la distancia Euclideana normalizada entre
dos vectores objetivo que será llamado operador de apilamiento (Ver 2.9.3, pág. 105). Los
algoritmos multiobjetivo introducen el operador de Dominancia (pág. 94), el cual define que
una solución X1 domina a otra solución X2 si se cumplen las siguientes condiciones:

• La solución X1 no es de menor calidad que X2 en todos los objetivos.

• La solución X1 es estrictamente mejor que X2 en al menos uno de los objetivos.

Aplicando iterativamente estas reglas sobre un conjunto cualquiera de soluciones de


un problema de optimización multiobjetivo, se puede establecer cuales son las alternativas
dominantes, conocidas como Conjunto No Dominado. Las soluciones restantes forman parte
del Conjunto de Soluciones Dominadas. Si se logra establecer cuál es el conjunto de Soluciones
Dominantes a través de todo el espacio objetivo, entonces se habla de Frente óptimo de Pareto.
Por lo tanto, la función del AG (o de cualquier otra técnica evolutiva) es hacer mover el frente
óptimo de pareto hacia regiones de mejor calidad. Para el ejemplo mostrado anteriormente, el
frente óptimo de Pareto obtenido usando NSGA-II es mostrado en la figura 2.63.
Diferentes estrategias pueden ser usadas para intensificar la búsqueda en la región de
interés tales como el método de dominación guiada, principio de dominancia por pesos y, en
general, modificaciones sobre el operador de apilamiento. A continuación se explica el método
de dominancia guiada propuesto por Deb (2004), el cual consiste en modificar el concepto
de dominancia a partir de la definición de funciones objetivo lineales que permiten delimitar
(acotar) alguna región ó zona de interés, como se muestra en la figura 2.63 . Las funciones
ponderadas se definen como:
M
X
Ωi (f (x)) = fi (x) + aij fj (x) , i = 1, 2..., M (2.60)
j=1,j6=i

115
Capítulo 2. Problemas y codificación

6000 5300

5200

5100

5000

5000 4900

4800

4700

0 0.005 0.01 0.015 0.02 0.025

4000

3000 Zona de interés

2000 Frente
inicial

1000 Frente final

0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4

Figura 2.63: Frente óptimo de Pareto y región de interés.

donde aij es una sensibilidad entre funciones objetivo que relaciona el valor de la ganancia en
la j-ésima función objetivo para una pérdida de una unidad en la i-ésima función objetivo. Esto
modifica el concepto original de dominancia de la siguiente manera:

Una solución X1 domina a otra solución X2 si Ωi (f (x1 )) ≤ Ωi (f (x2 )) para


todo i = 1, 2, . . . , M y se cumple estrictamente la desigualdad al menos para uno
de los objetivos.

Para un problema con dos funciones objetivo (M = 2) las funciones ponderadas son:
Ω1 (f1 , f2 ) = f1 + a12 f2 , Ω2 (f1 , f2 ) = a21 f1 + f2 . De esta manera la nueva definición de
dominancia hace referencia a una región de interés, definida por la escogencia adecuada de los
parámetros a12 y a21 , la cual es dominada por cualquier solución que cumpla con la definición
tradicional de dominancia aplicada a las funciones ponderadas, tal como se ilustra en la figura
2.64.
f2

Región objetivo de
búsqueda

a21
1 a21 f1

Figura 2.64: Región objetivo para búsqueda intensiva.

116
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Dentro de la fase II, la aplicación de la técnica NSGA-II requiere incorporar un AG que


mejore la calidad del frente de Pareto durante el proceso iterativo. Por simplicidad y sin pérdida
AG con
codificación de generalidad, en esta sección se propone utilizar un AG con las siguientes características:
real
Codificación real del problema: En este tipo de codificación un cromosoma es un vector de
números reales con un tamaño igual a la longitud del vector solución del problema, tal
como se muestra en la tabla 2.6. Los AGs basados en este tipo de codificación son bastante
adecuados para problemas con parámetros en dominios continuos.
Por el hecho de no utilizar una codificación de cadenas binarias o permutaciones es
necesario considerar un cambio en los operadores de recombinación y mutación.
Recombinación ó cruzamiento: En el caso de los AGs con codificación real, este operador
influye directamente sobre el nivel de diversidad en la población, por lo cual es un
factor determinante para evitar el problema de la convergencia prematura a óptimos
locales. A continuación se presentan algunas estrategias de cruzamiento para codificación
real a partir de considerar dos cromosomas padres: X = (x1 , x2 , . . . , xn ) y Y =
(y1 , y2 , . . . , yn ).

Cruzamiento plano: Se selecciona aleatoriamente una posición i ∈ {1, 2, 3, . . . , n},


entonces se obtiene un hijo H = (h1 , h2 , . . . , hn ) seleccionando aleatoriamente hi
del intervalo [xi , yi ], el resto de los componentes del hijo se toman de cualquiera de
los dos padres.
Cruzamiento simple: Se selecciona aleatoriamente una posición i ∈
{1, 2, 3, . . . , n − 1} y se construyen dos nuevos hijos: H1 =
(x1 , x2 , . . . , xi , yi+1 , yi+2 , . . . , yn ); H2 = (y1 , y2, . . . , yi , xi+1 , xi+2 , . . . , xn )
Cruzamiento aritmético: Se selecciona aleatoriamente una constante λ ∈ [0, 1] y
una posición i ∈ {1, 2, 3, . . . , n} y se obtienen dos hijos de la siguiente
forma: H1 = (x1 , x2 , . . . , xi − 1, λxi + (1 − λ) yi , xi+1 , . . . , xn ); H2 =
(y1 , y2, . . . , yi − 1, λyi + (1 − λ) xi , yi+1 , . . . , yn ).
La constante λ puede mantenerse constante durante todo el proceso, en cuyo caso se
trata de un cruzamiento aritmético uniforme, en caso contrario, es un cruzamiento
aritmético no uniforme.
Cruzamiento BLX-α: Pertenece a la familia de los operadores de cruce basados en
entornos, los cuales generan los genes de los descendientes a partir de valores
tomados del entorno asociado a los padres. El operador BLX-α se basa en una
distribución de probabilidad uniforme, sin embargo es posible utilizar otro tipo de
distribuciones tales como polinomial (SBX-η), triangular (FR-d) y normal (PNX-η).
El operador consiste en obtener un hijo H = (h1 , h2 , . . . , hi , . . . , hn ) donde hi
se selecciona aleatoriamente del intervalo [XYmin − I · a, XYmax + I · a], siendo
XYmax = max (xi , yi ) y XYmin = min (xi , yi ), I = XYmax − XYmin, α ∈
[−0.25, 1.25] y la posición i ∈ {1, 2, 3, . . . , n} se selecciona aleatoriamente. El
resto de los componentes del hijo se toman de cualquiera de los dos padres. El
cruzamiento plano corresponde al caso especial α = 0.

117
Capítulo 2. Problemas y codificación

Cruzamiento lineal: Se selecciona aleatoriamente una posición i ∈ {1, 2, 3, . . . , n} y se


generan 3 hijos así:
h1i = 12 xi + 12 yi
h2i 12 xi + 12 yi
h3i 21 xi + 12 yi
El resto de los componentes de los hijos se toman de cualquiera de los dos padres. En
este tipo de cruzamiento, de los tres hijos obtenidos se seleccionan los dos mejores.

Mutación aleatoria: Es el esquema más simple de mutación y consiste en crear una solución
vecina Yi de forma totalmente
 aleatoria teniendo en cuenta todo el espacio de búsqueda:
(U ) (L)
Y i = ri X i − X i . Donde ri es un número aleatorio entre [0,1] y los superíndices
U y L indican los límites superior e inferior, respectivamente, del espacio de búsqueda.

El método multiobjetivo presentado y el procedimiento propuesto de intensificación,


utilizando el concepto de dominancia guiada, fueron aplicados a 11 casos de prueba de la
literatura y los resultados y conclusiones son presentados por el autor en Granada et al. (2009).

2.9.7 Algoritmo genético de Chu and Beasley


La principal característica del AG propuesto por Chu and Beasley (1997) consisten en mantener
una alta diversidad en la población, evitando el ingreso de individuos ya existentes, además, en
cada iteración, se reemplaza sólo una alternativa de la población usando un eficiente mecanismo
de modificación de la misma. Dicho mecanismo busca beneficiar las alternativas menos
infactibles y de mejor calidad. En cada iteración la población es reemplazada sistemáticamente
por un único descendiente generado. Esta estrategia tiene la ventaja de permitir encontrar
múltiples soluciones de buena calidad.
Los investigadores han desarrollado una gran cantidad de algoritmos evolutivos para
resolver problemas de optimización con restricciones (POR). Sin embargo, es posible enmarcar
estos trabajos en cuatro grandes grupos (Zixing and Yong, 2006): 1) métodos basados
en funciones de penalización, 2) métodos híbridos, 3) métodos basados en optimización
multiobjetivo y 4) métodos basados en la preferencia de soluciones factibles sobre las
infactibles, que es precisamente el grupo al cual pertenece el método propuesto en esta sección.
El algoritmo se compone de los siguientes pasos:

Paso 1. Generar una población inicial de N individuos. Esta población se puede obtener de
forma aleatoria o a través de una heurística constructiva.

Paso 2. Obtener el valor de la función de adaptación de cada individuo de la población.


Una característica importante de esta propuesta, es que se debe cuantificar de forma
separada el valor de la infactibilidad. De esta manera, cada solución tiene asociados dos
valores: el valor de la función objetivo (optimalidad) y la cuantificación de la violación
de restricciones (factibilidad).

118
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Paso 3. Aplicar el operador de selección para seleccionar dos padres. En este paso se
recomienda usar una selección por torneo (ver 2.8.2.1, pág. 75). Además, Sólo se tiene
en cuenta el valor de la función objetivo sin penalización, es decir sólo el valor de la
optimalidad.

Paso 4. Usando el operador de recombinación se genera solamente un hijo. Este paso


diferencia el método de los otros AGs, debido a que sólo se genera un descendiente y
en los AGs tradicionales se generan dos.

119
Capítulo 2. Problemas y codificación

¡No aplicar
Tasa de
Paso 5. Sobre este único descendiente, aplicar el operador de mutación. Es importante resaltar
mutación! que en un AG básico la tasa de mutación es pequeña (generalmente menor al 2%) ya que
se aplica sobre la población y no sobre un individuo particular. Sin embargo, en el AG
de Chu-Beasley el operador de mutación debe ser visto como un operador de búsqueda
en el entorno de una alternativa particular, por lo cual este operador siempre debería ser
ejecutado, sin ser sometido a una probabilidad. En este caso, el concepto de vecindad (ó
mutación suave) no es definido por la tasa de mutación, sino más bien por el criterio de
vecindad seleccionado.

Paso 6. Implementar dos nuevos operadores enfocados a mejorar primero la factibilidad de la


solución actual (si ésta es infactible) y después mejorar la optimalidad de la solución
actual sin empeorar la factibilidad. Estos operadores son implementados una única vez
en el orden especificado.

1. Disminuir Infactibilidad.
2. Mejorar optimalidad.

Paso 7. Incorporar el hijo obtenido a la población usando una estrategia eficiente. Este paso es
la principal característica del método propuesto por Chu-Beasley. y consiste en incorporar
la siguiente estrategia:

• Si la alternativa actual es infactible y a su vez es menos infactible que la peor


infactible de la población, entonces reemplazar la peor infactible por la alternativa
actual.
• Si la configuración es factible y existe por lo menos una infactible en la población
actual, entonces reemplazar la peor infactible por la alternativa actual.
• Si la configuración es factible y toda las alternativas de la población actual son
factibles, entonces reemplazar la alternativa con peor función objetivo por la
alternativa actual. Lo anterior se realiza sólo si la alternativa actual es de mejor
calidad que la peor de la población.

La estrategia de modificación de la población actual se realiza cambiando sólo una


alternativa por iteración y teniendo en cuenta que no se admiten alternativas repetidas.
Por lo tanto, se busca preservar las mejores alternativas, asegurando factibilidad y
optimalidad. Adicionalmente se pueden obtener múltiples soluciones de un mismo
problema. A diferencia de los algoritmos genéticos tradicionales, no se modifica la
población de forma aleatoria.

120
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

2.10 Ejercicios

Ejercicio 2.5. Se necesita escoger un conjunto de artículos que produzcan el mayor lucro
posible y que no excedan el peso máximo permitido de 35 kg. Los datos de los artículos son
los siguientes:
costo($) = 4 1 3 2 5 8 4 6 10 7

peso(kg) = 6 5 7 3 8 4 10 4 8 5

a. Presentar un AG que permita resolver el problema.

b. Usar los datos presentados para ejecutar una iteración del AG. Escoger de form adecuada
todos los parámetros necesarios.

Ejercicio 2.6. Implementar un AG para resolver el problema de coloreo de grafos planteado


en la sección 2.3.2 (pág. 39).
Ejercicio 2.7. Implementar un AG para resolver el problema de asignación generalizada
planteado en la sección 2.4 (pág. 41).
Ejercicio 2.8. Implementar un AG con codificación real que permita resolver el problema
de diseño óptimo de un recipiente cilíndrico (ver sección 2.6.1, pág 58). Implementar
adecuadamente los operadores genéticos para este tipo de codificación. Consultar los
operadores de cruzamiento SBX-η, FR-d y PNX-η.
Ejercicio 2.9. Encontrar las distancias de apilamiento de cada uno de los individuos mostrados
en la población de la figura 2.54.

Ejercicio 2.10. Ejecutar una iteración del algoritmo NSGA-II para un problema con 2 variables
(x1 y x2 ) y dos funciones objetivo (f1 y f2 ). Utilizar las poblaciones de padres y descendientes
mostradas en la figura 2.65.

Padres P Descendientes
Solucion x1 x2 f1 f2 Solucion x1 x2 f1 f2
1 0.31 0.89 0.31 6.1 a 0.21 0.24 0.21 5.9
2 0.43 1.92 0.43 6.79 b 0.79 2.14 0.79 3.97
3 0.22 0.56 0.22 7.09 c 0.51 2.32 0.51 6.51
4 0.59 3.63 0.59 7.85 d 0.27 0.87 0.27 6.93
5 0.66 1.41 0.66 3.65 e 0.58 1.62 0.58 4.52
6 0.83 2.51 0.83 4.23 f 0.24 1.05 0.24 8.54

Figura 2.65: Padres y descendientes del ejercicio 2.10.10

121
Capítulo 2. Problemas y codificación

Ejercicio 2.11. Para el problema de asignación generalizada, planteado en la sección 2.4


(pág. 41), implementar el AG de Chu-Beasley. Usar como caso de prueba el caso denominado
A5×100 . Los datos de este caso pueden ser descargados de las siguientes direcciones en Internet:
http://mscmga.ms.ic.ac.uk/jeb/orlib/gapinfo.html
http://www-or.amp.i.kyoto-u.ac.jp/"yagiura/gap/.
Se sugiere utilizar como ayuda los trabajos publicados por Chu and Beasley (1997),
Granada et al. (2005) y Granada and Toro (2005).

122
Optimización usando Colonias de Hormigas
3
Las colonias de hormigas, y en general el comportamiento de insectos sociales, son sistemas
distribuidos que, a pesar de la simplicidad de sus individuos, presentan una gran organización
social estructurada. Como resultado de esta organización, las colonias de hormigas pueden
realizar tareas complejas que en muchos casos superan la capacidad individual de una única
hormiga.
La idea principal consiste en utilizar los principios auto-organizativos que permiten el
comportamiento altamente coordinado de las hormigas reales para coordinar poblaciones de
agentes artificiales que pueden resolver problemas computacionales.
Muchos de los comportamientos observados en sociedades de insectos han podido ser
explicados a través de modelos simples en donde sólo se considera una comunicación indirecta
entre individuos. Esta comunicación indirecta permite explicar cómo funciona el principio
auto-organizativo de los insectos sociales. Por lo tanto, las colonias de hormigas artificiales
usan una comunicación indirecta artificial para coordinar las actividades de agentes artificiales.
La capacidad visual de muchas especies de hormigas es desarrollada rudimentariamente
e incluso existen algunas especies de hormigas que son completamente ciegas. El tipo de
Comunicación
comunicación indirecta que utilizan las hormigas es basada en modificaciones del ambiente en indirecta a
el que se desenvuelven, usando sustancias químicas. Estas sustancias son llamada feromonas, y través de
son usadas para proporcionar información a los individuos de la colonia a través de los rastros rastros de
de feromonas. Estos rastros están compuestos por un tipo de feromona específica que algunos feromonas
tipos de hormigas usan para marcar los caminos por donde transitan, que llevan del hormiguero
a posibles fuentes de alimento. Las hormigas perciben estos rastros y los pueden seguir hasta
llegar a la fuente de alimento descubierta por otras hormigas. Este comportamiento colectivo
basado en marcar y seguir caminos y donde el comportamiento de una hormiga es influenciado
por el rastro químico dejado por otra hormiga es la fuente de inspiración del la Optimización
por Colonias de Hormigas (OCH).

123
Capítulo 3. OCH

3.1 Experimento de los dos caminos


Deneubourg et al. (1990), propuso un experimento particularmente interesante basado en
conectar un hormiguero y una fuente de alimento a través de dos caminos. Las hormigas
usadas correspondían a la especie Argentina Iridomyrmex humilis, cuya particularidad es ser
completamente ciega. El experimento consistía en variar la longitud de uno de los caminos de
forma que resultaron los siguientes tres versiones del experimento.

1. En la primera versión, los caminos son de igual longitud como se muestra en la figura
3.1a.

Hormiguero Alimento

60 0
Hormiguero Alimento

(a) Primer experimento: caminos de igual (b) Segundo experimento: Un camino 2 veces
longitud más largo que el otro

30 min

Hormiguero Alimento Hormiguero Alimento

(c) Tercer experimento: Concentración alta de feromona en el camino largo

Figura 3.1: Tres experimentos realizados en hormigas reales

Las hormigas se dejaron mover libres del hormiguera a la comida y el porcentaje de


hormigas que escogía uno u otro camino fue observado a lo largo del tiempo. Las
observaciones fueron las siguientes: a pesar que al comienzo, en la fase inicial, la
escogencia del camino fue realizada de forma aleatoria, con el tiempo todas las hormigas,
eventualmente, terminaban usando el mismo camino. La explicación de este fenómeno
se dio a través del concepto de comunicación indirecta.
Al principio del experimento, no existe feromona en ninguno de los caminos y la hormiga
tiene igual probabilidad de escoger uno u otro camino. En otras palabras, la escogencia
es aleatoria por la ausencia de información. Debido a fluctuaciones aleatorias, algunas
pocas hormigas escogieron un camino más veces que el otro y por consiguiente este
camino recibió un poco más de feromona que el otro.

124
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Esta información química depositada en los caminos hizo que las otras hormigas sintieran
preferencia por el camino con más feromona y al final, todas las hormigas terminaron
circulando por uno de los caminos. Este fenómeno es un proceso de retroalimentación
positiva o autocatalítico el cual corresponde a un comportamiento auto-organizativo de
las hormigas. El proceso empieza con un patrón microscópico que hace emerger un
comportamiento macroscópico. Esto es un ejemplo de comunicación indirecta, en la cual
las hormigas coordinan sus actividades a través de modificaciones del ambiente en el que
se mueven.

2. En el segundo experimento, la longitud de un camino es 2 veces la del otro, como se


muestra en la figura 3.1b. Esta vez se observó que la tendencia de las hormigas en el
tiempo era la de escoger el camino más corto. La explicación es similar a la del primer
experimento en la fase inicial.
Al principio los caminos no tienen depósitos de feromonas y la escogencia es aleatoria.
Es de esperarse que en promedio, la mitad de las hormigas escojan el camino corto y
la otra mitad el camino largo y por oscilaciones estocásticas se puede favorecer más un
camino que el otro. Sin embargo, en el segundo experimento un camino es mas corto
que el otro y las hormigas que circulan por el camino corto llegarán primero a la fuente
de alimento y podrán empezar su regreso al hormiguero. Es decir, el camino corto tiene
una mayor probabilidad de recoger una mayor cantidad de feromona que el camino largo,
debido a un mayor tránsito de hormigas por él.
Cuando las hormigas deben volver a decidir entre los dos caminos la decisión es tomada
en función de la cantidad de feromona depositada en cada uno. Un aspecto interesante
observado en el experimento es que no todas las hormigas, con el tiempo, terminan
escogiendo el camino corto. Un pequeño porcentaje sigue transitando por el camino
largo, lo cual puede ser interpretado como un tipo de exploración del vecindario, que
permite eventualmente, encontrar fuentes de alimento de mejor calidad.

3. El tercer experimento muestra la importancia de incorporar elementos naturales, tales


como la evaporación de los rastros de feromona, para simular adecuadamente la capacidad
que tienen las hormigas de encontrar soluciones de mejor calidad que la actual. El
experimento consistió en clausurar por 30 minutos el camino corto, de forma que la única
opción de las hormigas fuera el camino largo, como se ilustra en la figura 3.1c.
Después de 30 minutos se incorporó de nuevo el camino corto y se observo qué pasaba
en el tiempo. La mayoría de hormigas siguieron escogiendo el camino largo debido a la
mayor concentración de feromonas y el camino corto fue seleccionado esporádicamente.
La colonia quedó atrapada en el camino largo. Este fenómeno se presenta porque en
condiciones de laboratorio la evaporación de la feromona es muy lenta.
La evaporación favorece la exploración debido a que permite que la colonia “olvide”
caminos que son de menor calidad que otras alternativas disponibles. El tiempo de vida
de la feromona es comparable al tiempo de duración de un camino. Incorporar este
parámetro a un modelo artificial es indispensable para poder salir de óptimos locales.

125
Capítulo 3. OCH

3.2 Algoritmo simple OCH


El diseño de una hormiga artificial que se comporte de forma similar a las hormigas reales
utilizadas en el experimento de los dos caminos requiere definir algunas variables y parámetros
existentes en el fenómeno de optimización. Deneubourg et al. (1990) propuso un modelo
estocástico que describe adecuadamente la dinámica de las hormigas. En este modelo no se
consideró la evaporación de la feromona, se incorporó el tiempo en forma continua y se asumió
que las hormigas depositaban feromona tanto en el proceso de búsqueda de alimento, como en
el regreso al hormiguero.
Después, Dorigo and Stützle (2004) presentan un modelo que considera la evaporación y
discretiza el tiempo. Este modelo considera el comportamiento promedio del sistema y no el
comportamiento estocástico de las hormigas individuales. La discretización del tiempo evita
la utilización de complicadas ecuaciones diferenciales que estaban presentes en el modelo
de Deneubourg. Este modelo se base en el experimento de los dos caminos, en el cual es
posible identificar fácilmente elementos tales como: rutas, tiempo, rastros de feromona, toma
de decisiones, actualización de los rastros de feromona y evaporación. Todos estos elementos
pueden ser integrados en el problema de la ruta de mínimo costo, haciendo una analogía con
los experimentos de Deneubourg.
Finalmente, considerando que el tiempo de transito de las hormigas en cada camino es el
que determina la cantidad de feromona depositada. El modelo puede evitar el uso del tiempo si
se asocia la cantidad de feromona depositada a la calidad de la fuente de alimento.
Todos estos modelos resolvieron de forma artificial el problema de los dos caminos y
permitieron el desarrollo de lo que hoy se conoce como optimización usando colonias de
hormigas.

3.2.1 Problema de la ruta de mínimo costo (PRMC)


El problema de la ruta de mínimo costo (PRMC) es similar al problema de agente viajero
descrito en la sección 2.3.1 (pág. 32). La diferencia radica en que no se construye un circuito
Hamiltoniano sino una ruta con un nodo de partida y uno de llegada.
Supóngase un grafo conectado G = (N, A), no dirigido, como el que se muestra en la
figura 3.2. Donde N es el conjunto de nodos y A es el conjunto de arcos no dirigidos. Cuando
el valor de los arcos corresponde a la longitud del arco, entonces el problema es equivalente al
de ruta más corta. El objetivo del problema es encontrar la ruta de mínimo costo (o longitud)
entre el nodo fuente y el nodo destino.
A través de este problema es fácil explicar la estructura del algoritmo más simple basado
en OCH (OCH-S, OCH Simple). El algoritmo consiste de los siguientes siguientes pasos
básicos:

1. Ida: Caminar hacia el nodo destino (alimento) de forma probabilística y construir una
ruta que conecte el nodo fuente y el nodo destino.

2. Vuelta: Regresar al nodo fuente (hormiguero) de forma determinística y depositar un

126
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Fuente
0 1 2 3
1 0.5

3 1 0.5
1

4 5 6 7
1 1.5

1 1 1
1 1

2 1
8 9 10 11

Destino

Figura 3.2: Solución construida por hormigas

rastro de feromona proporcional a la calidad de la ruta establecida. Antes de depositar el


rastro de feromona se debe aplicar la evaporación a todos los rastros de feromona.

A continuación se amplían los aspectos a tener en cuenta en cada uno de los pasos
anteriores. A cada arco Ai,j del grafo se asocia una variable τi,j que representa la cantidad
de feromona depositada en ese arco. La cantidad de feromona depositada en cada arco es
proporcional a la calidad de la solución encontrada por la hormiga.

3.2.1.1 Trayecto de ida: construcción de rutas

En el trayecto de ida la hormiga artificial debe seleccionar, partiendo del nodo fuente, el
siguiente nodo del grafo que le permite avanzar, paso a paso, hacia al nodo destino. La
escogencia del arco se realiza de forma probabilística basándose en la cantidad de feromona
de cada arco. La probabilidad, abarca todos los nodos vecinos excepto el nodo anterior. Los
callejones sin salida son los únicos casos en los que es posible devolverse a un nodo ya visitado.
La situación anterior se presenta en grafos no completos.
El principal inconveniente que se presenta en la ida es la posibilidad de que se formen
ciclos o trayectorias cerradas. La formación de estos ciclos puede producir, eventualmente, que
la hormiga artificial quede atrapada en ellos. Si se considera la posibilidad de que la hormiga
deposite feromona en el trayecto de ida, estos ciclos pueden potenciar el efecto autocatalítico
de la feromona en los arcos que forman el ciclo, y la hormiga nunca saldrá de ellos. La solución
obvia es considerar que el deposito de feromona sólo se realice en el trayecto de vuelta al nodo
fuente. Aún así es necesario destruir los ciclos antes de empezar el trayecto de vuelta.
Inicialmente, todos los arcos del grafo deben tener la misma cantidad inicial de feromona
para que la probabilidad de escogencia sea igual para todos. Es común encontrar en la literatura
un valor inicial τi,j = 1, ∀(i, j) ∈ A.
La probabilidad de escogencia de un nodo vecino corresponde a una distribución por
secciones en una ruleta (ver sección 2.8.2.2, pág 77). La expresión (3.1) corresponde a la
Probabilidad de
probabilidad que tiene una hormiga k, estando posicionada en el nodo i, de ir a un nodo j, escoger un nodo
teniendo en cuenta los rastros de feromona de los arcos conectados al nodo i. vecino

127
Capítulo 3. OCH

( α
τij
P α
τil
si j ∈ Nik
pkij = l∈N k
i (3.1)
0 si j ∈
/ Nik
Donde Nik es el vecindario de la hormiga k que está ubicada en el nodo i. Es decir, el
conjunto de nodos directamente conectados al nodo i, excepto el nodo predecesor. Esta última
condición evita que la hormiga se devuelva al nodo anterior.
Cuando Nik = {Φ}, se refiere a un callejón sin salida como en el caso del nodo 8 en la
figura 3.2. Sólo en este caso es posible que la hormiga se devuelva al nodo anterior, o sea, que
este nodo es incluido en el conjunto Nik .
El parámetro α determina el grado de aleatoriedad del proceso de optimización. Para
valores α >> 1 la influencia de las fluctuaciones aleatorias iniciales es amplificada y si, por
ejemplo, el camino largo es inicialmente escogido, la colonia entera converge rápidamente a este
camino por las características auto-catalíticas (efecto de bola de nieve) del algoritmo. Con α =
1 la técnica de OCH se desempeña eficientemente en la mayoría de problemas y la escogencia
del nodo vecino se convierte en un proceso de selección proporcional usando la ruleta. Por lo
anterior, en este problema en particular, α = 1.
La hormiga avanza aplicando estas políticas, paso a paso, hasta que eventualmente
encuentra el nodo destino. Una vez esto suceda, la hormiga comienza su recorrido de vuelta al
hormiguero.
La evaporación decrementa los rastros de feromona con una velocidad exponencial. En
el algoritmo OCH-S la evaporación es realizada cada vez que la hormiga k se mueve al siguiente
Deposito de
feromona
nodo de acuerdo a las políticas anteriores. Es decir, en este algoritmo, de forma excepcional, la
evaporación es realizada en el trayecto de ida. Sin embargo, en forma general, la evaporación
es aplicada en el trayecto de vuelta justo antes de depositar la feromona y se puede realizar en
un solo paso, aplicando la expresión (3.2) a todos los arcos del grafo. Esta última estrategia es
la que se adopta en esta sección.
Los rastros de feromona, de todos los arcos, son evaporados aplicando la siguiente
ecuación:

τij = (1 − ρ) τij , ∀(i, j) ∈ A (3.2)

Donde ρ es un parámetro que controla el porcentaje de evaporación, denominado tasa


de evaporación (ρ ∈ (0, 1]). El proceso de evaporación puede ser visto como un mecanismo
Tasa de
evaporación ρ de exploración que evita la convergencia prematura de todas las hormigas a una solución local.
Adicionalmente, limita el valor máximo que pueden alcanzar los rastros de feromona.

3.2.1.2 Trayecto de vuelta: deposito de feromonas


Como existe la posibilidad de formación de ciclos en el trayecto de ida del nodo fuente al nodo
destino, el trayecto de vuelta comienza eliminando los ciclos existentes. El problema con los
ciclos es que los arcos que forman el ciclo pueden recibir feromonas muchas veces.

128
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Los ciclos pueden ser eliminados a través de un proceso simple de verificación de


repeticiones. El nodo en la i-ésima posición Pi , es buscado en el vector que representa la
Eliminación de
ruta, empezando desde la posición final, hasta la posición Pf del vector donde ocurra la primera ciclos
aparición de este nodo. Si Pf > Pi , la porción del vector comprendida entre la posición Pi + 1
y la posición Pf corresponde a un ciclo y se puede eliminar de la ruta trazada por la hormiga. El
proceso se aplica iterativamente hasta haber revisado todos los nodos ó hasta haber encontrado
un ciclo.
Ejemplo 3.1.
Supóngase que el conjunto de nodos que conforman la ruta trazada por la hormiga en su trayecto
de ida para el grafo mostrado en la figura 3.2, es el vector {0, 5, 6, 7, 2, 5, 6, 7, 11}, como se
muestra en la figura 3.3a. Eliminar el ciclo aplicando el método anterior.

Fuente Fuente
0 1 2 3 0 1 2 3
1 0.5 1 0.5

1 1
3 0.5 3 0.5
1 1

1 1

4 5 6 7 4 5 6 7
1 1.5 1 1.5

1 1 1 1
1 1 1 1 1 1

2 1 2 1
8 9 10 11 8 9 10 11

Destino Destino
(a) Ruta con un ciclo (b) Ruta sin ciclos

Figura 3.3: Eliminación de ciclos

R/: Se selecciona el nodo en la primera posición (posición inicial Pi ) del vector (nodo 0
en este caso) y se realiza una búsqueda de éste en el vector, empezando de la última posición
hasta la posición donde se encuentre la primera repetición del nodo (posición final Pf ). Cuando
el nodo sea encontrado en el vector se compara la posición donde fue encontrado Pf con la
posición inicial Pi . Si las posiciones son diferentes (Pf > Pi ) entonces se ha encontrado un
ciclo. En este caso Pi = Pf = 1. Como no se encontró un ciclo, se continúa el proceso con el
siguiente nodo de izquierda a derecha.
Se selecciona el nodo en la segunda posición del vector (nodo 5 en este caso) y se realiza
la búsqueda del nodo 5, empezando de la última posición hasta la posición donde se encuentre
la primera repetición. Se encuentra que para el nodo 5 Pi = Pf = 2. Como no se encontró un
ciclo, se continúa con el siguiente nodo.
Para el nodo 6, Pi = 3 mientras que pf = 7. Como Pf > Pi se ha encontrado un ciclo
entre las posiciones Pi + 1 = 4 y 7. Si se elimina el ciclo, la ruta definitiva es {0, 5, 6, 7, 11},
como se muestra en la figura 3.3b. El proceso se debe repetir hasta que no existan más ciclos
en la ruta.

129
Capítulo 3. OCH

Después de que los ciclos son eliminados, la hormiga comienza el trayecto de vuelta a
la fuente siguiendo la ruta construida en el trayecto de ida. Durante este viaje, la hormiga k
deposita sobre cada arco que pasa una cantidad ∆τ k de feromona. Por lo tanto, la actualización
de los rastros de feromona obedece a la siguiente expresión.

τij = τij + ∆τ k (3.3)

En el caso del PRMC, la cantidad ∆τ k puede ser un valor constante, debido a que el
problema es simple. Sólo considerar las diferencias de longitud entre las rutas encontradas, es
suficiente para que la hormiga encuentre el camino más corto. Sin embargo, de forma general, la
cantidad de feromona depositada ∆τ k debe estar asociada a la calidad de la solución encontrada
(función de adaptación). Esto establece una sensibilidad entre la función objetivo y cambios en
las variables del problema.
La aplicación de OCH es particularmente interesante en la solución de problemas
NP-difíciles representados a través de grafos. Entre las características particulares del método
OCH se destaca el hecho de que es una metaheurística constructiva basada en población que
explota de forma indirecta la memoria del desempeño previo del algoritmo. Esta combinación
de características no es encontrada en ninguna de las otras metaheurísticas (Dorigo and Stützle,
2004).
Algoritmos más sofisticados y eficientes son versiones mejoradas del algoritmo OCH-S.
Las mejoras se centran principalmente en la expresión probabilística, cantidades iniciales de
feromona y en los métodos usados para calcular la cantidad de feromona depositada. sin
embargo, los pasos básicos, en los cuales se construyen soluciones haciendo trayectos de ida y
vuelta, permanecen inalterados.

3.3 Algoritmo OCH para el PAV


El problema del agente viajero (PAV) fue descrito en la sección 2.3.1 (pág. 32), en donde
se discutieron aspectos tales como: codificación y estructura de vecindad, entre otros. A
continuación se implementa un algoritmo OCH aplicado al PAV considerando todas las ciudades
interconectadas entre si. Es decir se considera un grafo conectado, completo y simétrico. En la
vida real, los modelos de este tipo de problemas son grafos conectados no completos, lo cual
reduce la complejidad computacional del problema.
El algoritmo básico corresponde a un OCH-S, donde existen dos etapas fundamentales; un
recorrido de ida construyendo las soluciones y otro recorrido de vuelta depositando feromona
(actualizando la feromona). Adicionalmente, entre las dos etapas se puede introducir una etapa
de intensificación ó búsqueda local que generalmente mejora el desempeño del algoritmo. De
esta forma, los pasos básicos son como se muestran en el algoritmo 3.1.
El algoritmo 3.1 hace un llamado a tres funciones básicas: ConstruirSoluciones,
BusquedaLocal y ActualizarFeromona. Tanto la codificación del problema como la estructura
de vecindad son adoptados tal como se presentaron en la sección 2.3.1. A continuación se

130
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

// Fun ión OCHPAV


Datos de Entrada: D ← Matriz de longitudes de los arcos [D]n×n
m ← número de hormigas

n ← número de ciudades

o ← número de búsquedas locales

C nn ← Longitud del circuito determinístico


α←1
β ← [2 . . . 5]
ρ ← 0.5
τ ← Cmnn ∀ (i, j). Matriz de feromonas [τ ]n×n
Datos de Salida : In umbente: circuito más corto encontrada
C: matriz donde cada fila es un circuito

construido por cada hormiga. [C]m×n


L: vector con la longitud de los circuitos. [L]m×1

1 while No cumplir condición de parada do


2 τ
[ C, L ] ← ConstruirSolu iones( D, m, n, α, β )
3 [ C, L ] ← BusquedaLo al(o, D, n, C, L)
4 τ τ
← A tualizarτ ( , ρ, C, L, m, n)
5 end
Algorithm 3.1: Algoritmo principal para el PAV usando OCH

describe el pseudo-código de cada una de las funciones básicas, las cuales, a su vez, llaman
otras funciones que también serán descritas.
La línea 1, del algoritmo 3.2, inicializa en cero la matriz de memoria de las hormigas
[M]m×n . Esta matriz contiene información, que permite construir un circuito Hamiltoniano,
relacionada con las ciudades que ya han sido visitadas. Si el elemento Mi,j = 0 significa que
la ciudad j no ha sido visitada por la hormiga i. Si Mi,j = 1 significa que la ciudad j ya fue
visitada por la hormiga i.
La linea, 2 del algoritmo 3.2, utiliza la variable Paso como un contador del número
de ciudades que han sido visitadas. El ciclo comprendido entre las líneas 3 y 7 escoge
aleatoriamente, para cada hormiga, una ciudad y la asigna como la primera ciudad visitada.
Es decir, se está ubicando cada una de las hormigas en una ciudad aleatoria para empezar la
construcción del circuito.
Otro aspecto importante es incorporar en la expresión probabilística (3.1), usada en el
algoritmo OCH-S, información adicional que permita mejorar la sensibilidad del algoritmo, no
sólo con respecto a la función objetivo (distancia total del circuito) sino también con respecto a
la longitud de cada arco.
Incorporar este tipo de información determinística en el PAV mejora el desempeño de
cualquier metaheurística que aborde este problema específico (Dorigo and Stützle, 2004). De
esta manera se puede generar una expresión que establezca un compromiso adecuado entre la
información determinística dada por las longitudes de los arcos y la información probabilística

131
Capítulo 3. OCH

// Fun ión ConstruirSolu iones


τ
Datos de Entrada: , D, m, n, α, β
Datos de Salida : C, L
1 M ← 0 ∀ (m, n)

2 Paso ← 1

3 for k ← 1 to m do
4 r ← random {1 . . . n}
5 C (k,Paso)← r

6 M (k,r)← 1

7 end
8 while Paso < n do
9 Paso ← Paso +1

10 for k ← 1 to m do
11 CiudadIni ← C (k,Paso-1)

12 CiudadDest ← Es ogerCiudadDestino(k, M, CiudadIni, n, τ , α, β, D)


13 C (k,Paso)← CiudadDest

14 M (k,CiudadDest)← 1

15 end
16 end
/* Computar la longitud de ada ir uito k. */
17 for k ← 1 to m do
18 L (k) ← ComputarLongitudTour(C (k),D,N ) /* alg. 2.4, p.35 */
19 end
Algorithm 3.2: Algoritmo para construir soluciones

132
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

dada por los depósitos de feromona en los mismos. La expresión 3.4 involucra los dos tipos de
información en el proceso de optimización y le da un grado de importancia a cada uno a través
de los parámetros α y β .

[τij ]α [ηij ]β
pkij =P α β
sij ∈ Nik (3.4)
l∈N k [τil ] [ηil ]
i

Como en este caso se trata de un problema de minimización, los arcos con menor longitud
deben ser más atractivos que los de mayor longitud. Así, se establece una relación inversamente
proporcional a la distancia de cada arco, dada por ηij = 1/dij .
Nótese que si en (3.4) α = 0 el comportamiento del algoritmo tiende a ser determinístico,
ya que los nodos vecinos más cercanos al nodo actual tendrán mayor probabilidad de ser
escogidos. Este caso corresponde a un algoritmo goloso estocástico. Si β = 0, sólo será
usada la información de los depósitos de feromona, lo cual afecta el desempeño del algoritmo
y puede ocasionar convergencias a óptimos locales (Dorigo and Colorni, 1996).
Algunos valores recomendados para los parámetros usados en OCH son: α = 1, β =
[1 . . . 5], ρ = 0.5, m = n y τ0 = m/C nn . En donde ρ es la tasa de evaporación, m es el número
Valores reco-
de hormigas, n es el número de ciudades, τ0 es la cantidad de feromona inicial en todos los arcos mendados de
y C nn es la longitud del circuito obtenido usando los nodos vecinos más cercanos, es decir un parámetros
circuito obtenido de forma determinística.
El ciclo comprendido entre las líneas 8 y 15 del algoritmo 3.2, hace que las m hormigas
avancen una ciudad a la vez usando la probabilidad calculada con la expresión (3.4). La ciudad
es escogida usando la función EscogerCiudadDestino, que se muestra en el algoritmo 3.3.
Estos pasos de construcción son repetidos hasta que las hormigas completen un circuito. Cada
hormiga visita exactamente n ciudades.
Es importante tener en cuenta que un circuito Hamiltoniano conecta la última ciudad
visitada con la primera. No es necesario almacenar explicitamente esta información en la
matriz [C]m×n , que contiene la información de los circuitos construidos por cada hormiga. Sin
embargo, a la hora de calcular la función objetivo (longitud total del circuito) se debe tener en
cuenta esta último tramo del circuito.
La función del algoritmo 3.3 es calcular las probabilidades de todos los arcos conectados
a la ciudad donde la hormiga se encuentra ubicada (CiudadIni). Posteriormente, basándose en
estas probabilidades, escoger una ciudad de destino.
El ciclo comprendido entre las líneas 3 y 7 del algoritmo calcula el denominador de la
expresión (3.4). El ciclo entre las líneas 8 y 12 calcula las probabilidades de selección de cada
ciudad vecina. La línea 13 implementa el método de selección proporcional por ruleta para
escoger una ciudad de destino. El algoritmo 2.9 (pág. 78) muestra el pseudo-código de la
selección de un vecino usando la ruleta.
En problemas de gran tamaño, con grafos no completos es conveniente incorporar una
estrategia basada en lista de candidatos. Usar una lista de candidatos, restringe el número de
Lista de
posibles ciudades vecinas en cada paso de construcción de un circuito. Una lista de candidatos candidatos
contiene un número de las mejores ciudades vecinas de acuerdo a algún criterio heurístico. En

133
Capítulo 3. OCH

// Fun ión Es ogerCiudadDestino


τ
Datos de Entrada: k, M, CiudadIni, n, , α, β, D
Datos de Salida : CiudadDest: Posición de la ciudad de destino de la hormiga
1 i ← CiudadIni
2 Denominador ← 0

3 for j ← 1 to n do
4 if M (k,j)= 0 then /* Si la iudad no ha sido visitada */
5 Denominador ← Denominador + τ (i,j)α (1/D (i,j))β
6 end
7 end
8 Contador ← 1

9 for j ← 1 to n do
10 if M (k,j)= 0 then /* Si la iudad no ha sido visitada */
11 τ
Pi (Contador) ← ( (i, j) (1/D (i,j))β )/Denominador
α

12 CnoVisitada (Contador) ← j

13 Contador ← Contador +1

14 end
15 end
16 CiudadDest ← CnoVisitada (Sele ionRuleta(Pi , Contador-1)) /* alg. 2.9, p.
78 */
Algorithm 3.3: Algoritmo para escoger probabilísticamente la ciudad de destino

134
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

el caso del PAV, la lista de candidatos contiene un número s de las ciudades j más cercanas a
cada ciudad i. Existen varias formas de determinar cuales ciudades entran a la lista.
Una forma consiste en ordenar los vecinos de una ciudad i en orden creciente de acuerdo
a las distancias di,j e incorporar a la lista las s primeras ciudades. Como el grafo es estático
y las distancias no cambian, este proceso sólo se hace una vez. Cuando está en la ciudad i, la
hormiga escoge la siguiente ciudad de destino de la lista de ciudades candidatas asociadas a la
ciudad i que aún no han sido visitadas.
Cuando todas las ciudades candidatas han sido visitadas, sólo en este caso, la siguiente
ciudad se escoge de forma tradicional. En el caso del PAV, los resultados experimentales
han mostrado que el uso de listas de candidatos mejoran el desempeño del algoritmo OCH
(Dorigo and Colorni, 1996).
La segunda función básica corresponde a la función BusquedaLocal. Este paso es
realmente una etapa de intensificación que utiliza la estructura de vecindad del problema para
realizar una exploración que permita, eventualmente, mejorar la calidad de las soluciones
actuales. En la sección 2.3.1 (pág. 36) se discutió la estructura de vecindad para el PAV. Allí se
presentó una heurística que permite explorar el vecindario de un circuito Hamiltoniano con gran
eficiencia, conocida como k-opt. En este caso se utiliza el caso especial 2-opt que ha mostrado
gran desempeño en este tipo de problemas.
Realizar una exploración exhaustiva de los vecinos de un circuito en problemas de gran
tamaño usando 2-opt, resulta una tarea de gran esfuerzo computacional. Por esta razón, la
exploración se realiza aplicando 2-opt un número t de veces sobre nodos del circuito escogidos
aleatoriamente. En el algoritmo 3.4, el ciclo entre las líneas 2 y 10 es el encargado de realizar
dicha exploración.
Un esquema de aceptación de vecinos puede ser basado en la regla del primer
mejoramiento, que consiste en aceptar la solución vecina que primero mejore la solución actual
(ver sección 1.3, pág. 6).
Finalmente, la tercera función básica Actualizarτ (algoritmo 3.5) es la encargada de
actualizar la matriz de feromonas. La actualización consta de dos pasos: la evaporación en
todos los arcos del grafo utilizando una tasa de evaporación ρ, según la expresión (3.2) y la
actualización de los arcos pertenecientes al circuito construido por la hormiga, adicionando una
cantidad de feromona proporcional a la calidad del circuito, según la expresión (3.3).
El método OCH discutido en este capitulo corresponde al planteamiento más simple de
todos. Sobre este esquema básico se pueden realizar muchas modificaciones con el fin de
mejorar el desempeño del algoritmo. Algunas de estas modificaciones y adaptaciones son:

• Se puede controlar la cantidad de feromona depositada a través de factores de peso, a fin


de mejorar el compromiso entre evaporación y actualización de la feromona.

• Se pueden incorporar límites máximos y mínimos en los depósitos de feromona con el fin
de mejorar la selectividad. En ausencia de estos límites, la feromona de todo el sistema
puede llegar a valores cercanos de cero a causa de una mala selección de la tasa de
evaporación, en cuyo caso las hormigas pierden la capacidad de selección. Por otro lado,
arcos con depósitos de feromona muy elevados pueden llevar a convergencias prematuras.

135
Capítulo 3. OCH

// Fun ión BusquedaLo al


Datos de Entrada: t, D, m, n, C, L
Datos de Salida : C: Posibles circuitos mejorados
L: Vector de longitudes totales de cada circuito

1 for k ← 1 to m do
2 for i ← 1 to t do
3 Ve ino ← 2opt(C (k, ∗),n) /* (k, ∗) ≡ Toda la k-ésima fila */
4 FobjVe ino ← ComputarLongitudTour(Ve ino, D, n) /* alg. 2.4, p.35
*/
5 if FobjVe ino < L (k) then /* Criterio de a epta ión de ve ino: primer
mejoramiento */
6 (k, ∗) ← Ve ino
C

7 (k) ← FobjVe ino


L

8 break /* Interrumpe la búsqueda lo al de la hormiga k. */


9 end
10 end
11 end
Algorithm 3.4: Función de búsqueda local usando 2-opt

// Fun ión A tualizar τ


τ
Datos de Entrada: , ρ, C, L, m, n
τ
Datos de Salida : : Matriz de feromona actualizada
1 τ τ← (1 − ρ) /* Evaporar feromona */
2 for k ← 1 to m do /* Para ada hormiga */
3 ∆τ ← 1/L (k) /* ∆τ propor ional a la alidad del ir uito */
4 for i ← 1 to n do
5 j ← C (k, i)
6 l ← C (k, i + 1)
/* τes simétri a */
7 τ τ
(j, l) ← (j, l)+∆τ
8 end
9 j ← C (k, n)
10 l ← C (k, 1)
11 τ τ
(j, l) ← (j, l)+∆τ
12 end
Algorithm 3.5: Función de actualización de feromona

136
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

• Para evitar los problemas de selección mencionados en el ítem anterior, se pueden utilizar
otros esquemas de selección como, por ejemplo, selección por torneo.

• Para mejorar la capacidad de exploración de las hormigas se puede reinicializar


periódicamente la matriz de feromonas.

• La implementación de una actualización global de los rastros de feromona es similar al


procedimiento de actualización local, excepto que los caminos actualizados corresponden
solamente al mejor circuito encontrado por las m hormigas. Esto incorpora una
componente de elitismo que en algunos casos mejoran el desempeño del algoritmo (ver
sección 2.8.4, pág. 90).

3.4 Algoritmo OCH para el VRPB multi-depósito


En este capítulo se presenta un algoritmo metaheurístico, propuesto por los autores en
(Santa Chávez et al., 2015)) basado en colonia de hormigas para la solución del problema
de ruteo de vehículos con múltiples depósitos con flota homogénea considerando entrega y
recogida de paquetes. Cada ruta construida por el algoritmo se compone de dos sub-rutas: una
sub-ruta compuesta de clientes definidos para entrega de productos y una sub-ruta con clientes
definidos para recolección de mercancía (ver sección 5.3, pág. 171).
En cada iteración del algoritmo, el proceso busca el orden apropiado para visitar los
clientes programados en cada sub-ruta. De igual manera, el algoritmo trata de determinar
la mejor unión entre las sub-rutas de entrega y recogida, con el fin de obtener una solución
global con la mínima distancia recorrida. La eficiencia es evaluada a través de un conjunto
de instancias de prueba adaptadas de la literatura especializada y se comparan los resultados
obtenidos con los obtenido de un algoritmo goloso basado en la heurística del vecino más
cercano. Finalmente se muestran tanto conclusiones como sugerencias para trabajos futuros.
El Problema de Ruteo de Vehículos con Recogida al Final (VRPB, acrónimo en inglés de
Vehicle Routing Problem with Backhauls) consiste en, dado un conjunto de clientes y depósitos
dispersos geográficamente, determinar las rutas desarrolladas por una flota de vehículos para
atender la demanda de un conjunto de clientes. Las características de los clientes, depósitos
y vehículos así como diferentes restricciones operativas sobre las rutas, dan lugar a diferentes
variantes del problema, a esta tradicional definición de VRP, se le adiciona la necesidad de
separar un recorrido inicial de entrega y uno final de recolección.
El VRPB en el contexto del transporte de productos es de gran interés tanto para la
comunidad académica como para el sector empresarial. La importancia académica radica en
que este tipo de problema está inmerso dentro de la Optimización Combinatoria de la clase
NP-difícil, por lo que se torna un problema de alta complejidad matemática y computacional en
su solución.
Una metodología eficiente de solución del VRPB es una necesidad identificada en el
sector de transporte de mercancía dada la aplicabilidad y relevancia de este problema en el
área logística del transporte. En particular para resolver el problema de distribuir productos

137
Capítulo 3. OCH

desde ciertos depósitos a sus consumidores finales y la necesidad de planear una ruta de regreso
del vehículo no vacío a la ciudad de origen.
En las últimas décadas han aparecido diferentes propuestas para resolver problemas de
ruteo de vehículos con solo restricciones básicas de capacidad. En (Toth and Vigo, 2014) se
menciona la primera aproximación para la formulación de un problema para el problema de
distribución de combustible.
En (Clarke and Wright, 1964) se propone el primer algoritmo heurístico efectivo para
la solución del CVRP (Capacitated Vehicle Routing Problem), denominado algoritmo de los
ahorros, este método comienza con rutas que sólo están formadas por el depósito y un solo
nodo. A cada paso del algoritmo se unen dos rutas si se genera un ahorro en distancia o en la
variable objetivo que se esté buscando optimizar.
El problema de Ruteo de Vehículos con Múltiples Depósitos con consideraciones de
Backhaul (MDVRPB) es considerado NP-hard y ha sido poco explorado en la literatura. La
literatura relacionada con el MDVRPB puede ser clasificada en tres categorías principales:
(i) recogidas y despachos simultáneos; (ii) recogidas y despachos mixtos; y (iii) recogidas
exclusivamente después de haber realizado despachos. En (Salhi and Nagy, 1999) se propone
un algoritmo heurístico para resolver el MDVRPB con recogidas y despachos mixtos. El
algoritmo está basado en la idea de “clientes frontera”, los cuales son clientes ubicados
aproximadamente en la mitad de dos depósitos. En (Min et al., 1992) se introduce por primera
vez el problema de MDVRPB considerando recogidas después de haber realizado entregas.
Dos algoritmos basados en colonias de hormigas para resolver el problema de ruteo de
vehículos con múltiples depósitos con estrategia mixta de recogida y despacho son presentados
en (Wade and Salhi, 2003) y (Wade and Salhi, 2001). Finalmente, algoritmos genéticos
para el MDVRPB han sido propuestos por Ho et al. (2008), Chunyu and Xiaobo (2009a),
Chunyu and Xiaobo (2009b) y Chunyu et al. (2009).
El problema de MDVRPB es una extensión del VRPB considerando m depósitos
potenciales desde donde se pueden generar las diferentes rutas de atención. En el MDVRPB
todos los depósitos no son necesariamente usados.
El MDVRPB puede ser formulado a través de un problema de teoría de grafos de la
siguiente manera: sea G = (V, A) donde V = 1, . . . , n + m es el conjunto de vértices y A
es el conjunto de arcos. El conjunto V es dividido en dos subconjuntos: N = 1, . . . , n y
M = n + 1, . . . , n + m. Donde N es el conjunto de clientes, que a su vez se subdivide en
el subconjunto de nodos a los que se entrega mercancía (clientes Linehaul - L) y subconjunto
de nodos a los cuales se les recoge mercancía (clientes Backhaul - B), es decir N = L ∪ B.
Finalmente, M es el conjunto de depósitos potenciales.
Una cantidad no negativa dj de productos debe ser entregada o recogida asociada con cada
cliente n ∈ N. Cada uno de los depósitos posee una demanda ficticia (d0 = 0), y un conjunto
K de vehículos idénticos con una capacidad dada Q. Cij es un costo no negativo asociado con
cada arco (i, j) ∈ A, con cii = +∞ para cada i ∈ V y con cij = cji para cada i, j ∈ V tal que
i 6= j. El objetivo es encontrar el menor costo (distancia recorrida) de una colección de r rutas,
donde se cumplan las siguientes condiciones:

• Cada ruta parte del depósito m, visita los vértices y regresa al mismo depósito m de inicio.

138
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

• Cada cliente es visitado exactamente una vez.

• La suma de las demandas de los vértices de recogidas y entregas de un circuito no debe


exceder, separadamente la capacidad del vehículo C.

• En cada circuito los vértices L preceden a los vértices B.

• No se permite flujo entre depósitos.

• El objetivo es minimizar la distancia total recorrida (o el costo), definido como la suma


de los costos de los arcos que pertenecen a las rutas establecidas.

Un modelo matemático para el MDVRPB ha sido propuesto en (Rahmawati, 2013) de la


siguiente manera:

X X X
Min z = Cij xijk (3.5)
i∈C∪D j∈C∪D k∈K
sujeto a:
X X
xijk = 1 i∈C (3.6)
k∈K j∈C∪D
X X
xijk = xjik j ∈ C ∪ D, k ∈ K (3.7)
i∈C∪D i∈C∪D
X X
xijk = 1 k∈K (3.8)
i∈D
/ j∈C
X X
qi xijk 6 Sk k∈K (3.9)
i∈L j∈C∪D
X X
qi xijk 6 Sk k∈K (3.10)
i∈B j∈C∪D
X X
qi xijk 6 1 k∈K (3.11)
i∈L i∈B
xijk ∈ {0, 1} (3.12)

donde: Ci j es la distancia o el costo de viaje entre los nodos i y j, D es el conjunto de


depósitos, L y B corresponde al conjunto de clientes linehaul y backhaul, respectivamente. C
es el conjunto total de clientes, K es el número total de vehículos, qC es la demanda de cada
cliente c y Sk es la xapacidad del vehículo k.
La ecuación (3.5) es la función objetivo, la cual consiste en la minimización de la distancia
total recorrida. La restricción (3.6) garantiza que cada cliente es visitado solo una vez y por un
solo vehículo. La restricción (3.8) asegura que todo cliente es visitado por el mismo vehículo.
Cada vehículo debe comenzar en un depósito y debe volver al mismo depósito, lo cual se
garantiza con la restricción (3.9). La cantidad de bienes circulando por los arcos (linehaul o
bachaul) no deben exceder la capacidad del vehículo k, lo cual se garantiza con las restricciones
(3.10) y (3.11), para clientes Linehaul y Backhaul respectivamente.

139
Capítulo 3. OCH

Figura 3.4: Matriz de distancias.

Figura 3.5: Matriz neta, deposito-cliente y cliente-cliente

3.4.1 Algoritmo propuesto


El algoritmo tiene dos fases de codificación. En la primera fase, se aplica la metaheurística
al proceso de codificación del recorrido que se inicia en un depósito y recorre los clientes
Linehaul, luego los clientes Backhaul y culmina en el mismo depósito de inicio. En esta fase
se construye, a partir de las coordenadas de los clientes Linehaul y Backhaul, la matriz de
distancias, constituida por las distancias euclidianas entre los depósitos y los clientes. Esta
matriz simétrica es en tres dimensiones, donde cada plano de la matriz corresponde a cada
depósito y su diagonal es cero, tal como se muestra en la Figura 3.4. Luego se obtiene la matriz
denominada Neta o de Visibilidad, a partir de invertir cada uno de los elementos de la matriz de
distancias. Esta matriz no se modifica durante la ejecución del algoritmo, es simétrica y también
es en tres dimensiones. Similarmente, cada plano corresponde a un depósito y su diagonal es
cero. Los clientes Linehaul y Backhaul no requieren representación diferente, ya que cada tipo
de cliente es detectado por el algoritmo al revisar si la carga definida es de entrega o recogida
(ver Figura 3.5).

140
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Figura 3.6: Matriz de feromonas deposito-cliente y cliente-cliente

Figura 3.7: Codificación de clientes Factibles linehaul

Finalmente, se procede a generar la matriz de feromonas, la cual inicialmente se genera


con un nivel de Feromona τi y se actualizan sus elementos si estos hacen parte de la ruta
recorrida por la hormiga. Al igual que las anteriores matrices, es de tres dimensiones, su
diagonal es cero y es simétrica (ver Figura 3.6).
En la segunda fase, no se hace uso de las distancias entre los depósitos, ya que estas
distancias no se deben contabilizar en la distancia de la ruta. Esto es porque cada hormiga
(que representa un vehículo) culmina su recorrido en el mismo depósito de inicio y aunque
debe buscar un nuevo depósito para continuar visitando los clientes, el algoritmo utiliza un
nuevo vehículo. Por esto la matriz neta o de visibilidad tradicional del algoritmo de colonia
de hormigas, se reemplazó por una matriz neta de valores aleatorios, que proporcionaría la
diversidad en la búsqueda del paso a un nuevo depósito. Su dimensión es de número total de
depósitos por número total de depósitos.
Como el algoritmo requiere de una matriz de feromonas para el cálculo de las
probabilidades se implementó una matriz de feromonas inicializada con un nivel de Feromona
τi y los elementos se actualizan si estos hacen parte de la ruta recorrida por la hormiga.
A continuación se presenta la estructura de datos utilizada para representación de las rutas
desarrolladas:

• Vector de clientes factibles linehaul: se inicializa con los clientes Linehaul que pueden ser
elegidos dentro del recorrido y se van eliminando del vector a medida que son visitados,
su primer elemento será 1 y su último elemento será el número total de clientes Linehaul
(nl). (Figura 3.7)

• Vector clientes Backhaul factibles: se inicializa con los clientes Backhaul que pueden ser
elegidos dentro del recorrido y se van eliminando del vector a medida que son visitados,

141
Capítulo 3. OCH

Figura 3.8: Codificación de clientes Factibles backhaul

Figura 3.9: Codificación de clientes Factibles backhaul

Figura 3.10: Matriz de rutas solución

su primer elemento será el número de clientes Linehaul +1 y su último elemento será el


número total de clientes Linehaul + clientes Backhaul (nl+nb). (Figura 3.8)

• Vector ruta solución: se inicia con un número de un depósito, se continua con un conjunto
de clientes Linehaul y luego un conjunto de clientes Backhaul y se pasa nuevamente con
el deposito inicial. Después, se continua a otro deposito que puede ser el mismo anterior
ya que se cuenta con varios vehículos por deposito u a otro nuevo depósito según sea
elegido por el algoritmo. Lo anterior se repite hasta recorrer todos los clientes Linehaul
y Backhaul, se conforma entonces una ruta completa, que es a su vez la ruta completa de
una hormiga (Figura 3.9).

• Matriz de rutas solución: en esta matriz se almacenan los vectores de las soluciones
halladas. Su cantidad de filas es igual al número de iteraciones multiplicado por el número
de hormigas. Su número de filas corresponde al número de iteraciones por el número de
depósitos y la cantidad de columnas será como mínimo el número de clientes más el
número de depósitos para satisfacer las recolecciones y demandas de estos. En la Figura
3.10 se muestra un posible conjunto de vectores solución para el caso en que se tengan
tres depósitos, cuatro clientes Linehaul (entrega) y tres clientes Backhaul (recogida).

• Esquema general del algoritmo propuesto. A continuación se describe el esquema


utilizado para la construcción de las rutas del algoritmo propuesto para el MDVRPB.
En primera instancia, se establece un número de hormigas igual al número de depósitos,
cada una siguiendo la secuencia que a continuación se describe:

a. Se parte colocando una hormiga en cada uno de los depósitos.

142
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

b. El cálculo de probabilidades para definir del paso entre depósito-cliente, cliente-cliente


y depósito-depósito (items b.1, b.2, b.3 y b.4) eligiendo siempre el arco con mayor
probabilidad. La regla probabilística obedece a la siguiente ecuación:
 
[τrs ]α [ηrs ]β
 P
[τru ]α [ηru ]β
, si ∈ Jk (r) 
pk (r, s) = u∈Jk (r)
 
0, en otro caso
i. Paso del depósito inicial a un cliente Linehaul (entrega) eligiendo el arco con
mayor probabilidad.
ii. Paso entre los clientes Linehaul, repitiendo este proceso hasta copar la capacidad
de entrega del vehículo.
iii. Paso del último cliente Linehaul del numeral anterior y el primer cliente
Backhaul.
iv. Paso entre los clientes Backhaul hasta copar la capacidad de recolección del
vehículo.
v. Se culmina esta ruta volviendo al depósito inicial.]
c. La hormiga inicia un nuevo recorrido desde el mismo depósito si existe un vehículo
disponible o inicia desde otro depósito donde exista disponibilidad de vehículos.
En este paso también se aplica la regla probabilística anterior, pero la matriz de
feromonas y neta son las consideradas en el paso entre nodos.
d. volver al item i.) desde el mismo o desde un nuevo nodo, hasta que se hallan visitado
todos los clientes Linehaul y Backhaul.
e. Se actualizan las matrices de feromonas.
f. Se repite el proceso anterior hasta que un número de iteraciones se haya alcanzado.

• Tipos de rutas construidas. Definiendo el conjunto de depósitos como


{D1 , D2 , . . . , Dnd }, el conjunto de clientes Linehaul como {L1 , L2 , . . . , Lnl } y el
conjunto de clientes Backhaul como {B1 , B2 , . . . , Bnb }, entonces para un sistema con
nd=3, nl=7 y nb=7, el algoritmo obtiene los siguientes tipos de rutas:

– Ruta Linehaul - Backhaul: en este recorrido se parte del depósito, se pasa de un


cliente linehaul a otro cliente linehaul. Si no se tiene clientes linehaul para visitar
o si la capacidad del vehículo es violada, entonces se pasa a un cliente Backhaul y
se continua con clientes Backhaul utilizando el mismo criterio antes mencionado.
Finalmente, si no se tienen cliente backhaul para visitar o si la capacidad del
vehículo es violada, entonces se regresa al depósito de inicio. Como se ilustra con
la ruta D2 − L1 − L6 − L7 − B5 − B1 − B6 − D2 en la Figura 3.11.
– Ruta solo Linehaul: en este recorrido se parte del depósito se pasa al cliente
linehaul, se sigue a los siguientes clientes linehaul hasta no tener clientes de este
tipo pendientes de visitar o hasta copar la capacidad del vehículo. Como no se
tienen clientes backhaul por visitar, se finaliza terminando esta ruta en el mismo

143
Capítulo 3. OCH

Figura 3.11: Esquema de ruta linehaul-backhaul.

Figura 3.12: Esquema de ruta linehaul.

Figura 3.13: Esquema de ruta backhaul.

depósito de inicio. La ruta D1 − L4 − L2 − L3 − L5 − D1 se muestra en la Figura


3.12.
– Ruta Solo Backhaul: en este recorrido se parte del depósito se pasa al cliente
Backhaul (se han visitado todos los clientes Linehaul) Linehaul, se sigue a los
siguientes clientes Backhaul hasta no tener clientes de este tipo pendientes de visitar
o copar la capacidad del vehículo y se finaliza terminando esta ruta en el mismo
depósito de inicio. La ruta D3 − B4 − B3 − B2 − B7 − D3 se muestra en la Figura
3.13.
– Ruta para un recorrido multidepósito: consolidando el recorrido total considerando

144
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Figura 3.14: Esquema de ruta backhaul.

los clientes linehaul y backhaul desde los diferentes depósitos se tendrá la ruta
consolidada D2 − L1 − L6 − L7 − B5 − B1 − B6 − D2 − D1 − L4 − L2 −
L3 − L5 − D1 − D3 − B4 − B3 − B2 − B7 − D3 como se muestra en 3.14.

• Paso a paso del algoritmo para el MDVRPB

1. Lectura información instancias: coordenadas depósitos, coordenadas clientes


Linehaul y Backhaul, número y capacidad de vehículos.
2. Cálculo de matriz de distancias.
3. Inicializar dos matrices de feromonas: Una entre depósito y clientes, clientes y
clientes, y otra entre depósito y depósito.
4. Inicializar dos matrices neta: Una entre depósito y clientes dependiente del inverso
de la distancia y otra entre depósitos definida aleatoriamente.
5. Inicializar las matrices de aportes a las matrices de feromonas y neta.
6. Se definen los parámetros de Optimización con Colonia de Hormigas (ACO): τi ,
α, β, ρ y el factor multiplicador del aporte a la matriz de feromonas (número de
clientes/distancia de la ruta).
7. Mientras número de iteraciones sea menor a 100, haga:

145
Capítulo 3. OCH

8. Mientras número de hormigas sea menor que el número de depósitos, haga:


9. Inicio del procedimiento recorrido multidepósito MDVRPB.
10. Elección del depósito de inicio:
a. Si es inicio del recorrido se hace de manera secuencial.
b. Si es paso entre depósitos se calcula la probabilidad al multiplicar una matriz
aleatoria con una matriz de feromonas.
11. Se tienen tres posibles tipos de rutas, los cuales se construyen con arcos elegidos con
el cálculo de la probabilidad obtenida de multiplicar la matriz neta o de visibilidad
y la matriz de feromonas:
– Si se tienen clientes Linehaul y Backhaul, el recorrido en los arcos será el
siguiente:
* Del depósito al cliente Linehaul.
* Paso entre clientes Linehaul.
* Del cliente Linehaul y al Backhaul.
* Paso entre clientes Backhaul.
* Del cliente Backhaul y depósito.
– Si se tienen solo clientes Linehaul, el recorrido en los arcos será el siguiente:
* Del depósito al cliente Linehaul.
* Paso entre clientes Linehaul.
* Del cliente Linehaul y depósito.
– Si se tienen solo clientes Backhaul, el recorrido en los arcos será el siguiente:
* Del depósito al cliente Backhaul.
* Paso entre clientes Backhaul.
* Del cliente Backhaul y depósito.
12. Actualizar Matrices de Feromonas: evaporación ? y fortalecimiento de los arcos
visitados:
– a. Paso entre depósito y clientes, y entre clientes.
– Paso entre depósitos.
13. Finalizar ciclo hormigas.
14. Finalizar ciclo iteraciones.

3.5 Ejercicios
Ejercicio 3.1. En la figura 3.15 se muestran las distancias de cada arco dij , la cantidad de
feromona inicial τi,j = 1 ∀(i, j) y la configuración del grafo de un PRMC.

146
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

a. Usar dos hormigas y el algoritmo OCH-S para construir dos rutas del PRMC
mostrado en la figura 3.15. Adicionar una tercera ruta compuesta por los nodos
{1, 10, 11, 15, 16, 13, 12, 11, 15, 16, 13, 14, 19, 16, 13, 14, 9}.

b. Con el conjunto de las tres rutas, iniciar el trayecto de vuelta al nodo fuente.

c. Una vez actualizada la feromona en el paso anterior, realizar otro trayecto de ida al nodo
destino. Entregar el valor de la mejor ruta encontrada.

Utilizar una tasa de evaporación ρ = 0.01 y α = 1. Usar una estrategia que permita
asociar la calidad de la ruta encontrada con la cantidad de feromona depositada.

i j d ij τ ij
5
1 2 0.7172 1
2 3 0.7172 1 4
3 4 0.7172 1 6
4 5 0.7172 1
5 6 0.7172 1 3
6 7 0.7172 1
7 8 0.7172 1 7
8 9 0.7172 1
9 14 0.7172 1
12
14 18 0.7172 1 2 8
18 19 2.2361 1
1 10 0.7172 1 FUENTE 1 11 13 9
10 11 0.7172 1 DESTINO
11 12 2.2361 1
12 13 2.2361 1
13 14 0.7172 1
10 15 0.7172 1 10 15 16 14
11 16 0.7172 1
13 17 0.7172 1
16 17 2 1
15 19 2.2361 1 17 19
15 18 4 1 18
11 13 4 1

Figura 3.15: Ejemplo del PRMC

Ejercicio 3.2. El algoritmo OCH discutido en este capítulo permite resolver PAV simétricos y
completos. Qué modificaciones se tendrían que realizar para adaptar este algoritmo a:

a. un PAV asimétrico.

b. un PAV no completo.

Ejercicio 3.3. Implementar un algoritmo OCH para resolver el problema de coloreo de grafos
planteado en la sección 2.3.2 (pág. 39).
Ejercicio 3.4. Implementar un algoritmo OCH para resolver el problema de asignación
generalizada planteado en la sección 2.4 (pág. 41).
Ejercicio 3.5. Descargar diferentes casos de prueba, simétricos y completos de las páginas de
Internet:
http://www.iwr.uni-heidelberg.de/groups/ omopt/software/TSPLIB95/tsp/
http://www.resear h.att. om/~dsj/ htsp/
Obtener las soluciones usando el algoritmo OCH presentado en este capitulo.
Ejercicio 3.6. A continuación se presenta un caso de prueba clásico de 26 ciudades. Resolver
usando el algoritmo OCH-S.

147
Capítulo 3. OCH

La información de este caso está disponible en la página de Internet:


http://www.iwr.uni-heidelberg.de/groups/ omopt/software/TSPLIB95/tsp/
En la tabla 3.1 se muestran las longitudes de cada arco A(i,j) . Como se considera el caso del
PAV simétrico A(i,j) = A(j,i) . El tamaño del espacio de búsqueda de este caso es (n−1)!2
=
7.7556 × 1024 .
Usar los siguiente parámetros: m = 8, C nn = 400, α = 1, β = 4, ρ = 0.1

Tabla 3.1: Matriz de distancias entre ciudades


j
i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
1 0 83 93 129 133 139 151 169 135 114 110 98 99 95 81 152 159 181 172 185 147 157 185 220 127 181
2 83 0 40 53 62 64 91 116 93 84 95 98 89 68 67 127 156 175 152 165 160 180 223 268 179 197
3 93 40 0 42 42 49 59 81 54 44 58 64 54 31 36 86 117 135 112 125 124 147 193 241 157 161
4 129 53 42 0 11 11 46 72 65 70 88 100 89 66 76 102 142 156 127 139 155 180 228 278 197 190
5 133 62 42 11 0 9 35 61 55 62 82 95 84 62 74 93 133 146 117 128 148 173 222 272 194 182
6 139 64 49 11 9 0 39 65 63 71 90 103 92 71 82 100 141 153 124 135 156 181 230 280 202 190
7 151 91 59 46 35 39 0 26 34 52 71 88 77 63 78 66 110 119 88 98 130 156 206 257 188 160
8 169 116 81 72 61 65 26 0 37 59 75 92 83 76 91 54 98 103 70 78 122 148 198 250 188 148
9 135 93 54 65 55 63 34 37 0 22 39 56 47 40 55 37 78 91 62 74 96 122 172 223 155 128
10 114 84 44 70 62 71 52 59 22 0 20 36 26 20 34 43 74 91 68 82 86 111 160 210 136 121
11 110 95 58 88 82 90 71 75 39 20 0 18 11 27 32 42 61 80 64 77 68 92 140 190 116 103
12 98 98 64 100 95 103 88 92 56 36 18 0 11 34 31 56 63 85 75 87 62 83 129 178 100 99
13 99 89 54 89 84 92 77 83 47 26 11 11 0 23 24 53 68 89 74 87 71 93 140 189 111 107
14 95 68 31 66 62 71 63 76 40 20 27 34 23 0 15 62 87 106 87 100 93 116 163 212 132 130
15 81 67 36 76 74 82 78 91 55 34 32 31 24 15 0 73 92 112 96 109 93 113 158 205 122 130
16 152 127 86 102 93 100 66 54 37 43 42 56 53 62 73 0 44 54 26 39 68 94 144 196 139 95
17 159 156 117 142 133 141 110 98 78 74 61 63 68 87 92 44 0 22 34 38 30 53 102 154 109 51
18 181 175 135 156 146 153 119 103 91 91 80 85 89 106 112 54 22 0 33 29 46 64 107 157 125 51
19 172 152 112 127 117 124 88 70 62 68 64 75 74 87 96 26 34 33 0 13 63 87 135 186 141 81
20 185 165 125 139 128 135 98 78 74 82 77 87 87 100 109 39 38 29 13 0 68 90 136 186 148 79
21 147 160 124 155 148 156 130 122 96 86 68 62 71 93 93 68 30 46 63 68 0 26 77 128 80 37
22 157 180 147 180 173 181 156 148 122 111 92 83 93 116 113 94 53 64 87 90 26 0 50 102 65 27
23 185 223 193 228 222 230 206 198 172 160 140 129 140 163 158 144 102 107 135 136 77 50 0 51 64 58
24 220 268 241 278 272 280 257 250 223 210 190 178 189 212 205 196 154 157 186 186 128 102 51 0 93 107
25 127 179 157 197 194 202 188 188 155 136 116 100 111 132 122 139 109 125 141 148 80 65 64 93 0 90
26 181 197 161 190 182 190 160 148 128 121 103 99 107 130 130 95 51 51 81 79 37 27 58 107 90 0

Ejercicio 3.7. Cambiar la cantidad de feromona depositada ∆τ por un valor constante.


Registrar observaciones sobre lo que sucede con la solución obtenida para el problema de 26
ciudades.
Ejercicio 3.8. Reemplazar el mecanismo de selección por ruleta, usado por la hormiga para
escoger la ciudad de destino, por el mecanismo de selección por torneo versión-2 (alg. 2.8.2.1,
p. 75). Registrar observaciones sobre el desempeño del algoritmo para el problema de 26
ciudades.
Ejercicio 3.9. Excluir, del algoritmo OCH aplicado al PAV (alg. 3.1), la función básica
BusquedaLocal. Registrar observaciones sobre el desempeño del algoritmo para el problema
de 26 ciudades.

148
Recocido simulado
4
Tres investigadores de IBM society (S. Kirkpatrick, C.D. Gelatt y M.P. Vecchi) propusieron
en 1982, y publicaron en 1983, un nuevo método iterativo, denominado recocido simulado
(SA, simulated annealing) (Kirkpatrick et al., 1983), cuya principal característica es que puede
escapar de óptimos locales. Un trabajo similar, desarrollado independientemente y al mismo
tiempo, fue publicado por Cerny (1985).
El algoritmo de SA puede interpretarse como iteraciones sucesivas del algoritmo de
Metrópolis (Metropolis et al., 1953) en las que se evalúa y decrementa de forma controlada la
temperatura o parámetro de control. El algoritmo de Metrópolis simula el proceso físico basado
en temperatura en el que los sólidos obtienen estados de baja energía o equilibrio térmico, este
proceso es conocido como recocido de sólidos. Durante este proceso, la energía libre del sólido
es minimizada.
Un ejemplo que ilustra el fenómeno natural de optimización de estructuras de solidos es
el nacimiento de un monocristal. La técnica de recocido consiste en calentar un material para
inyectar un estado energético superior. Luego, el material es enfriado lentamente, es decir,
manteniendo la temperatura, en cada estado del proceso de enfriamiento, durante un tiempo
suficiente. Si el decremento en la temperatura es muy rápido, se pueden presentar defectos
los cuales pueden ser eliminados posteriormente, a través de un recocido local. Esta estrategia
de decremento controlado de la temperatura permite encontrar un estado sólido cristalizado, el
cual corresponde a un estado estable del sistema. Es decir, corresponde a un mínimo absoluto
de energía. En esta técnica el enfriamiento del material causa una transformación de un estado
de desorden a un estado de orden.
En optimización combinatorial se desarrolla un proceso similar analizando el proceso
de recocido de sólidos. Este proceso puede ser formulado como un problema que encuentra,
entre muchas soluciones, aquella que tenga mínimo costo. Así, se establecen las siguientes
correspondencias:

149
Capítulo 4. Recocido simulado

• Una alternativa de solución en un Problema de Optimización Combinatorial (POC) es


equivalente al estado energético de un sistema real.
• Una alternativa vecina de un un POC corresponde a una pequeña distorsión al estado
energético actual del sistema real.
• El valor de la función objetivo en un POC es equivalente a la energía del estado actual del
sistema.
• Encontrar una buena solución en un POC es equivalente a encontrar estados de baja
energía en el sistema real.

La idea original que dio lugar a esta metaheurística se denomina algoritmo de Metrópolis,
el que a su vez está basado en el método de Monte Carlo, con el cual se estudian las propiedades
Algoritmo de
Metrópolis
de equilibrio en el análisis del comportamiento microscópico de los cuerpos. Este algoritmo
permite simular la evolución de un sistema físico hacia su balance termodinámico a una
temperatura dada (Metropolis et al., 1953).
El algoritmo de metrópolis se basa en la técnica de Monte Carlo para generar una
secuencia de estados del sólido en su proceso de enfriamiento. Si se tiene un estado actual del
sólido i con energía Ei , entonces el subsiguiente estado j con energía Ej es generado aplicando
un mecanismo de perturbación consistente en provocar una pequeña distorsión en el estado
actual. Si la diferencia de energía entre estados, Ej − Ei , es menor o igual a cero, el estado j
es aceptado como el estado actual. Si la diferencia de energía es mayor a cero, el estado j es
aceptado con cierta probabilidad, la cual esta determinada por el factor de Boltzmann:
 E −E 
− kj T i
e B (4.1)
Donde T denota la temperatura y KB es una constante física conocida como constante de
Boltzmann.
Es importante resaltar que todo el planteamiento del algoritmo es inicialmente concebido
para problemas de minimización y, por lo tanto, siempre será considerado que existe un
El algoritmo
de SA es
mejoramiento del estado actual cuando Ej − Ei ≤ 0. Sin embargo, en términos generales,
concebido un mejoramiento existe cuando se presenta un decremento en la energía del sistema.
para En optimización un movimiento (un vecino) será aceptado si éste mejora la función
problemas de objetivo; o en caso contrario, si su probabilidad de aceptación es mayor que un número aleatorio
minimización
uniformemente distribuido. Este tipo de estrategias permiten que el algoritmo escape de óptimos
locales. En la medida en que evoluciona el proceso, disminuye la temperatura, se incrementa
la longitud de la cadena y por lo tanto, disminuye la probabilidad de aceptar soluciones de peor
calidad.
La codificación del problema define el espacio de búsqueda y por consiguiente la
estructura de vecindad. Este aspecto juega un papel fundamental en la eficiencia del algoritmo
debido al concepto de proximidad entre estados energéticos. En un sistema real un estado
energético es una transformación continua del estado energético anterior y por lo tanto, una
pequeña perturbación produce un pequeño cambio energético.

150
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

En un problema de optimización combinatorial, una inadecuada definición de un


vecino podría, eventualmente, producir grandes diferencias con respecto a la función objetivo,
La codifica-
lo cual es indeseable para el algoritmo de SA. Por esta razón, se ha demostrado que el ción del
algoritmo SA tiene gran eficiencia en algunos problemas específicos, mientras que en otros problema
es fácilmente superado por una heurística simple. Algunos autores (Kirkpatrick and Toulouse, determina la
1985; Rammal et al., 1986; Solla et al., 1986) muestran que SA podría ser más efectivo en eficiencia del
problemas que forman conjuntos ultramétricos, tales como: diseño de capas de micro circuitos algoritmo SA
electrónicos y problemas con propiedades fractales, entre otros.
Los aspectos fundamentales que se deben definir en el algoritmo de SA, tienen que ver
con lo que se denomina el programa de enfriamiento y abarca los siguientes puntos:
Programa de
• Temperatura Inicial T0 : es calculada al inicio del proceso, en la primera cadena y una enfriamiento
única vez. Su valor depende principalmente del problema tratado y de la probabilidad
de aceptación τ0 . Además, la temperatura, en un problema combinatorial, debe tener las
mismas dimensiones de la función objetivo del problema. Por ejemplo, para el problema
del agente viajero, la temperatura T corresponde a una distancia.
Valores muy elevados, hacen que el proceso tenga un mayor esfuerzo computacional
y valores bajos pueden hacer que el algoritmo quede atrapado en soluciones de baja
calidad al inicio del proceso. Aunque existen muchas propuestas, el valor de T0 puede ser
calculado usando el siguiente algoritmo:

– A partir de una alternativa inicial con una función objetivo E1 , generar k


perturbaciones aleatorias (vecinos) y evaluar la función objetivo Ej de cada una.
Esto puede verse como una exploración parcial del vecindario, en donde el tamaño
k del mismo no es un aspecto crítico (p.ej. k = 100).
Pk
Ej −E1
¯ =
– Obtener el valor promedio ∆E j=1
k
– Escoger una tasa de aceptación de vecinos τ0 que degradan (desmejoran) la calidad
de la alternativa inicial. Valores bajos de τ0 (por ejemplo τ0 = 20%) indican que se
está asumiendo una alternativa inicial de buena calidad ya que sólo seran aceptados
unos pocos vecinos que degraden la alternativa inicial. Es recomendable, con niveles
altos de temperatura, usar valores altos de τ0 , por ejemplo τ0 = 50%.
– Deducir T0 de la relación:
¯
− ∆E
e T 0 = τ0 (4.2)
Otra propuesta, similar a la anterior, para encontrar el valor de la temperatura inicial T0
consiste en generar las mismas k perturbaciones y contar el número m1 de veces que se
encuentra un vecino de mejor calidad y el número m2 de veces que se encuentra uno de
peor calidad. De esta manera se deduce el valor T0 de la siguiente expresión:

¯ +
∆E
T0 =   (4.3)
m2
ln m2 τ0 −m1 (1−τ0 )

151
Capítulo 4. Recocido simulado

¯ +
Donde ∆E es el valor promedio, únicamente, de las transiciones que degradaron la
función objetivo.

• Longitud de la cadena de Markov en cada estado: debe permitir al proceso alcanzar


el cuasi equilibrio en cada nivel de temperatura. Más que un parámetro, la longitud de
la cadena define cuando se debe realizar un cambio de estado de energía. Una manera
simple de seleccionar la longitud de la cadena es hacerlo de acuerdo con el tamaño del
problema. Así, por ejemplo, un cambio de estado puede tomar lugar cuando una de las
siguientes dos condiciones se cumple:

- 12N perturbaciones aceptadas.


- ρ = 100N perturbaciones realizadas.

Los valores 12 y 100 pueden ser ajustados de forma diferente, dependiendo del problema
Equilibrio que se esté abordando. Cuando se cumple una de las dos condiciones anteriores se dice
termodinámico que el sistema alcanzó el equilibrio termodinámico.

N indica el número de variables del problema. Por ejemplo, para el problema del
Una mayor agente viajero con 230 ciudades, N = 230 y para el problema de asignación generalizada
longitud en con 100 tareas y 5 agentes, N = 500. A medida que la temperatura disminuye, menos
la cadena alternativas vecinas (perturbaciones) son aceptadas, y por lo tanto la exploración del
de Markov vecindario en busca de una mejor alternativa se intensifica hasta revisar, en el peor caso,
significa
mayor explo-
100N alternativas vecinas. Esto significa que a medida que la temperatura disminuye la
ración del longitud de la cadena de Markov aumenta implícitamente.
vecindario
El aumento de la cadena de Markov también puede hacerse de forma explícita,
haciendo que la segunda condición de equilibrio termodinámico aumente un porcentaje
determinado, en cada iteración o cambio de estado k. Se puede usar la ley geométrica
para activar un cambio de estado:

- 12N perturbaciones aceptadas.


- ρk+1 = β · ρk perturbaciones realizadas. Donde β > 1 y ρ0 = 100N.

• Ley de enfriamiento: El enfriamiento del sistema puede hacerse de muchas formas.


La más aceptada, por su simplicidad, es la ley de decremento geométrico, donde la
temperatura de un nuevo estado está dada por:

Tk+1 = αTk (4.4)

Donde α, generalmente, es una constante entre [0.5 − 0.9].

152
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

• Temperatura final: este parámetro define el criterio de parada del algoritmo. Puede ser
usado el criterio de activar la finalización del algoritmo cuando se alcanzan más de n
estados de temperatura sin ninguna aceptación de vecinos. Generalmente n es un valor
entero entre 3 y 5. También se puede utilizar un número determinado de cambios de
estado o iteraciones.

Los valores de muchos de estos parámetros, en ausencia de resultados teóricos, son


escogidos a través de ajustes empíricos. Para cierto tipo de problemas, escoger un adecuado
ajuste de estos parámetros es una tarea complicada por la gran sensibilidad que éstos producen
en el desempeño del algoritmo. Este aspecto es una de las principales desventajas que presenta
este método (Dréo et al., 2003).
El mecanismo de aceptación de alternativas se introduce a través de la regla de aceptación
de Metropolis:

Si se tienen dos soluciones, πi (alternativa actual) y πj (alternativa


modificada), con valores de la función objetivo f (πi ) y f (πj ),
respectivamente, entonces el criterio de aceptación determina si πj es
aceptado como alternativa actual. Para ello, se aplica la siguiente
probabilidad de aceptación Pj :
(4.5)
(
1 si f (πj) − f (πi ) ≤ 0
Pj =

f (πj )−f (πi )

e Tk
En ualquier otro aso

Tk corresponde a la temperatura del estado k.


En la definición 4.5, es utilizada una versión levemente modificada del factor de
Boltzmann. Para altas temperaturas, este factor es cercano a 1 y por lo tanto, la mayoría de
vecinos son aceptados, transformando el algoritmo en una especie de exploración aleatoria
en el espacio de solución. Para bajas temperaturas, este factor es cercano a 0, y por lo
tanto, la mayoría de movimientos que degradan la función objetivo son rechazados. En este
caso el algoritmo se comporta como un clásico mejoramiento iterativo (un goloso). En una
temperatura intermedia, el algoritmo tine la capacidad de salir de óptimos locales ya que permite
degradamientos controlados de la función objetivo.
La figura 4.1 muestra el diagrama de flujo del algoritmo básico de SA.
Este método ha mostrado ser eficiente en varios campos, tales como el diseño de circuitos
electrónicos, procesamiento de imágenes, procesamiento de datos y problemas de ruteo, entre
otros. El algoritmo de SA tiene como características principales la ventaja de adaptarse
fácilmente a una gran diversidad de problemas y ser una metaheurística cuya convergencia es
garantizada bajo ciertas condiciones. Sin embargo, el establecimiento de estas condiciones de
convergencia no ha sido aceptado por unanimidad en la comunidad científica. Algunos estudios
basados en cadenas de Markov, como el propuesto por Aarts and Van Laarhoven (1985),
demuestran el comportamiento asintótico en la convergencia del método. Esta demostración
se basa en cumplimiento de dos propiedades: la reversibilidad y la conectividad. La propiedad

153
Capítulo 4. Recocido simulado

Alternativa inicial π i
Función objetivo F (π i )
Longitud Cadena ρ ∝ N

Temperatura inicial T

   si
  
 
?

no
Salida:
k =1 Incumbente
ρ = β ⋅ρ
T = α ⋅T

   
 
si      

k≥ρ?

no

Generación de un vecino π j aplicando


una perturbación a la alternativa π i
(estructura de vecindad)
πi πj

Calcular F (π j )

Regla de aceptación de Metropolis:


• Si F (π j ) − F (π i ) ≤ 0 aceptar la alternativa πj
• Si F (π j ) − F (π i ) > 0 aceptar la alternativa πj con una
(
− F (π j ) − F (π i ) )
T
probabilidad Pj = e
En caso de aceptar la alternativa πj en cualquiera de los dos

casos anteriores, entonces πi = π j

k = k +1

Figura 4.1: Algoritmo Simulated Annealing

154
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

de reversibilidad establece que para cualquier cambio permitido en el sistema debe permitirse
también una oposición al cambio. La propiedad de conectividad establece que cualquier
estado del sistema puede ser alcanzado comenzando desde cualquier otro estado, en un número
finito de cambios elementales. Estas dos propiedades permiten justificar el decremento de
la temperatura en estados, de lo cual depende la velocidad de convergencia del algoritmo, y
garantiza que una solución de buena calidad puede ser encontrada en un tiempo polinomial para
ciertos problemas NP-difíciles (Aarts and Van Laarhoven, 1985).
Sin embargo, otros autores enfocaron sus estudios en el comportamiento asintótico del
método (Hajek, 1988; Hajek and Sasaki, 1989). El principal resultado de este trabajo es que
mostró que el algoritmo de SA converge a un óptimo global con una probabilidad igual a la
unidad si, cuando en un tiempo t → ∞, la temperatura T (t) no decrementa más rápidamente
que la expresión C/log(t), donde C es una constante que depende del problema. Este resultado
significa, que hasta ahora no existe un método lo suficientemente generalizado y unánime para
ser aplicado a cualquier tipo de problema.
Desde el punto de vista práctico, la técnica de SA generalmente consigue soluciones
de buena calidad, se considera un método general que puede ser aplicado a muchos tipos
de problemas y es de fácil implementación. Los problemas abordados con esta técnica, que
mejores resultados presentan, son aquellos cuya codificación permite una evaluación rápida
y directa de la función objetivo después de cada perturbación. Esto evita alcanzar tiempos
computacionales prohibitivos.
Algunas verificaciones importantes, que muestran un adecuado ajuste de los parámetros
involucrados en la técnica de SA, son las siguientes:

• La generación de números reales aleatorios ∈ (0, 1) deben ser uniformemente


distribuidos.

• La calidad de los resultados no debe variar significativamente cuando el algoritmo es


ejecutado varias veces, con diferentes semillas y con diferentes configuraciones iniciales.

Ejemplo 4.1.
Con base en el diagrama de flujo de la figura 4.1, plantear el algoritmo, en pseudo-código, de
la técnica de SA aplicada al problema de secuenciamento regular (flow-shop), estudiado en la
sección 2.5.1 (pág. 50). Utilizar los siguientes parámetros: τ0 = 0.8, ρ = n × m, α = 0.97,
β = 1 y k = 100. Utilizar como criterio de parada un número η = 300 de cambios de estado
sin mejorar la incumbente. Para generar un vecino, utilizar la permutación simple de dos tareas.
R/: El algoritmo 2.6 corresponde a la función que permite obtener el valor de la función
objetivo (Cmax ) del problema flow-shop. Usando esta función, el pseudo-código es el que se
muestra en el algoritmo 4.1

Ejemplo 4.2.
Utilizar el algoritmo 4.1 para resolver un problema con 20 tareas (n = 20) y 5 máquinas
(m = 5). Los tiempos de procesamiento de cada tarea son dados en la taba 4.1. Estos datos

155
Capítulo 4. Recocido simulado

// Pro edimiento SA_FlowShop;


Datos de Entrada: m ← número de máquinas en línea.
n ← número de tareas a ser procesadas.
P ← Matriz de tiempos de procesamiento. [P ]m×n .
τ0 ← 0.8
ρ←n×m
α ← 0.97
β←1
k ← 100
η ← 300
Datos de Salida : In umbente.Alternativa: Mejor solución encontrada
In umbente.Fobj: Valor Cmax de la incumbente
1 πi ← vector de permutaciones aleatorias de tamaño n.
2 Cmaxi ← FobjFlowShop(m, n, P , πi ) /* ver alg.2.6, pág.53 */
3 In umbente.Fobj ← Cmaxi
4 In umbente.Alternativa ← πi
5 m1 ← 0; m2 ← 0; ∆E ¯ + ←0
6 for i ← 1 to k do /* Cál ulo de la temperatura ini ial T */
7 πj ← GenerarVe ino(πi ,n)
8 Cmaxj ← FobjFlowShop(m, n, P , πj )
9 if Cmaxj - Cmaxi ≤ 0 then
10 m1 ← m1 +1 else
11 m2 ← m2 +1
12 ¯ + ← ∆E
∆E ¯ + + Cmax
j
13 end
14 end
15 end
¯+ ¯ +
∆E¯ + ← ∆E ; T ←  ∆E 
m2 m
16 log m τ −m2 (1−τ )
2 0 1 0
17 ont ← 0
18 while ont < η do
19 k←0
20 ont ← ont +1
21 while k < ρ do
22 k ← k +1
23 πj ← GenerarVe ino(πi ,n) /* Permuta ión de dos tareas */
24 Cmaxj ← FobjFlowShop(m, n, P , πj )
/* Regla de a epta ión de Metropolis (ver alg.4.2, pág.157 ) */
25 (πi , Cmaxi , Incumbente, ont) ←Metropolis(πi , πj , Cmaxi , Cmaxj , T )
26 end
27 ρ ← β ρ; T ← α T
28 end
Algorithm 4.1: Algoritmo de SA aplicado al problema de flow-shop

156
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

// Fun ión Metropolis;


Datos de Entrada: πi ← Alternativa actual.
πj ← Alternativa vecina.
Cmaxi ← Valor de la función objetivo de πi .
Cmaxj ← Valor de la función objetivo de πj .
T ← Temperatura del estado actual.
Datos de Salida : πi : Alternativa actual.
Cmaxi : Función objetivo de la alternativa actual.
In umbente.Fobj: Función objetivo de la incumbente.

In umbente.Alternativa: Configuración de la

incumbente.
ont: Número de Cambios de estado sin mejorar

incumbente
1 if Cmaxj -Cmaxi ≤ 0 then /* A epta un ve ino */
2 πi ← πj
3 Cmaxi ← Cmaxj
4 end
5 else /* A epta un ve ino on una probabilidad */
−(Cmax −Cmax )
j i
6 if random ≤ e T then
7 πi ← πj
8 Cmaxi ← Cmaxj
9 end
10
11 if Cmaxi < In umbente.Fobj then
12 ont ← 0

13 In umbente.Fobj ← Cmaxi

14 In umbente.Alternativa ← πi

15 end
Algorithm 4.2: Regla de aceptación de Metropolis

157
Capítulo 4. Recocido simulado

corresponde a un caso de prueba reconocido, que puede ser encontrado en la siguiente dirección
en Internet:
http://mistic.heig-vd.ch/taillard/

Tabla 4.1: Tiempos de Procesamiento del ejemplo 4.2


n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12 n13 n14 n15 n16 n17 n18 n19 n20
m1 54 83 15 71 77 36 53 38 27 87 76 91 14 29 12 77 32 87 68 94
m2 79 3 11 99 56 70 99 60 5 56 3 61 73 75 47 14 21 86 5 77
m3 16 89 49 15 89 45 60 23 57 64 7 1 63 41 63 47 26 75 77 40
m4 66 58 31 68 78 91 13 59 49 85 85 9 39 41 56 40 54 77 51 31
m5 58 56 20 85 53 35 53 41 69 13 86 72 8 49 47 87 58 18 68 28

R/: El algoritmo propuesto se ejecutó 30 veces y la mejor respuesta obtenida igualó a la


reportada en la literatura en 3 oportunidades. En todas las veces, las respuestas fueron cercanas
al óptimo reportado lo que muestra un adecuado ajuste de los parámetros de control, para este
caso particular. Las mejores soluciones encontradas se muestran en la figura 4.2. Como se
puede apreciar, existen diferentes alternativas con el mismo valor óptimo.

Secuencia Cmax
Alternativa1 9 15 6 3 14 8 17 4 19 5 18 7 11 1 16 2 13 10 20 12 1278
Alternativa2 9 15 6 11 17 3 14 5 7 19 8 18 16 13 4 2 1 10 20 12 1278
Alternativa3 9 15 1 3 6 4 11 2 19 13 17 14 5 18 7 8 16 10 20 12 1278

Alternativa1 Alternativa2
41 41
m1 m1
40 40

39 39
m2 m2
38 38

37 37
m3 m3
36 36

35 35
m4 m434
34

33 33
m5 m5
32 32
0 200 400 600 800 1000 1200 1400 0 200 400 600 800 1000 1200 1400

Alternativa3
41
m1
40

39
m2
38

37
m3
36

35
m434
33
m5
32
0 200 400 600 800 1000 1200 1400

Figura 4.2: Mejores alternativas encontradas en 30 ejecuciones del SA

158
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

4.1 Ejercicios
Ejercicio 4.1. Sobre el problema de flow-shop del ejemplo 4.2:

a. Usar la heurística 2-opt como estrategia para obtener un vecino.

b. Usar el algoritmo 4.1 para obtener una alternativa de solución.

c. Ejecutar 20 veces el algoritmo y presentar un informe de los resultados obtenidos.

Ejercicio 4.2. El algoritmo SA fue proyectado para un problema de minimización.


Qué cambios deben realizarse en el algoritmo básico de SA para abordar problemas de
maximización?
Ejercicio 4.3. Se necesita escoger un conjunto de artículos que produzcan el mayor lucro
posible y que no excedan el peso máximo permitido de 35 kg. Los datos de los artículos son
los siguientes:
costo($) = 4 1 3 2 5 8 4 6 10 7

peso(kg) = 6 5 7 3 8 4 10 4 8 5

a. Presentar un algoritmo de SA que permita resolver el problema.

b. Usar los datos presentados para ejecutar una iteración del algoritmo de SA. Escoger de form
adecuada todos los parámetros necesarios.

Ejercicio 4.4. El problema de partición de números consiste en que se tiene una secuencia de
n números racionales positivos, definida por:
A (a1 , a2 , a3 , . . . , an )
El problema consiste en encontrar una secuencia:
S (s1 , s2 , s3 , . . . , sn ), donde si ∈ {−1, +1}
que minimice la función objetivo: P
u = | ni=1 si ai |
Así, para la secuencia A = {7, 15, 3, 6, 10, 12, 4, 118, 13, 2, 11}:

a. Presentar un algoritmo de SA para resolver este problema.

b. Ejecutar una iteración usando el algoritmo anterior. Escoger de forma adecuada todos los
parámetros necesarios.

159
Capítulo 4. Recocido simulado

160
Búsqueda tabú
5
La palabra tabú (ó taboo) es originaria del Tonga (idioma polinesio) y se usa para indicar cosas
que no pueden ser tocadas dado que son sagradas. En la actualidad esta palabra significa una
prohibición social.
La Búsqueda Tabú (Tabu Search - TS) es un procedimiento metaheurístico cuya
característica distintiva es el uso de memoria adaptativa y de estrategias especiales de resolución
de problemas, el cual fue originalmente propuesto por Glover (1986). Puede verse como una
metaheurística que se superpone a una técnica de búsqueda y que se encarga de evitar que dicha
técnica caiga en óptimos locales prohibiendo (o,en un sentido más general, penalizando) ciertos
movimientos. El propósito de clasificar ciertos movimientos como prohibidos (o tabú) es para
evitar que se caiga en ciclos durante la búsqueda. Debido a esto, Glover sugiere como nombre
alternativo para su método el de búsqueda con inhibición débil, ya que los movimientos que se
consideran prohibidos constituyen generalmente una pequeña fracción del total de movimientos
disponibles, y un movimiento pierde su status de prohibido después de un período de tiempo
relativamente corto, volviéndose después nuevamente accesible. A este respecto, este método
puede contrastarse con la técnica de ramificación y límites (branch and bound) que también
prohibe ciertos movimientos para evitar ciclos, pero lo hace de una manera más rígida, por lo
que se le considera como una forma de búsqueda con inhibición fuerte.
Desde la perspectiva de la Inteligencia Artificial, la búsqueda tabú trata de emular (de
manera somera) el comportamiento de una persona. Es bien sabido que los humanos poseemos
un avanzado mecanismo de intuición que nos permite operar aún con información mínima o
nula, pero por lo general solemos introducir un elemento aleatorio (probabilístico) en dichas
decisiones, lo cual promueve un cierto nivel de inconsistencia en nuestro comportamiento. La
tendencia resultante en estos casos suele desviarnos de una cierta trayectoria preestablecida, lo
cual algunas veces puede ser una fuente de errores, pero en otras ocasiones puede llevarnos a una
solución mejor. La búsqueda tabú deriva de la suposición de que una mala elección estratégica

161
Capítulo 5. Búsqueda tabú

puede proporcionar más información que una buena elección realizada al azar, dado que una
elección estratégica mala puede proporcionar pistas útiles sobre cómo guiar la búsqueda hacia
zonas prometedoras.
La búsqueda tabú intenta emular este mecanismo fundamental de la ingenuidad humana,
pero sin utilizar elementos aleatorios, sino más bien asumiendo que no hay razón para escoger
un movimiento que nos lleve a una peor solución, a menos que estemos tratando de evitar
recorrer una ruta que ya se examinó previamente. Con esta sola excepción, la técnica buscará,
a cada paso, el mejor movimiento posible de acuerdo a la métrica utilizada por el problema
en cuestión. Esto hace que la técnica se dirija inicialmente de forma directa hacia un óptimo
local, pero eso no importa porque la búsqueda no se detendrá ahí, sino que se reinicializará
manteniendo la capacidad inicial de identificación del mejor movimiento posible. Además, se
mantiene información referente a los movimientos más recientes en una o más listas tabú, a fin
de evitar que una cierta trayectoria previamente recorrida se repita, aunque esta prohibición es
generalmente condicional y no absoluta.

5.1 Estructura básica de la metodología de búsqueda tabú


El pseudo-código del algoritmo 5.1 describe la estructura más básica del método de búsqueda
tabú. La esencia del método depende de cómo se defina y utilice la historia almacenada H
del proceso de búsqueda, y de cómo se determinen el entorno candidato N(s) y el proceso de
selección y evaluación de un vecino (s′ ) considerando la historia H. Al respecto, se puede notar
que en el algoritmo básico 5.1, s′ se asocia a la historia H, que en este caso es una lista tabú para
memoria reciente, a través del condicional propuesto en la línea 8 del algoritmo. Sin embargo,
es posible plantear condicionales mucho más elaborados que consideren evaluar otros tipos de
propiedades de la memoria adaptativa, tales como frecuencia, calidad e influencia.
En los casos más simples, que suponen gran parte de las implementaciones que aparecen
en la literatura, generalmente se considera que la lista o conjunto de vecinos candidatos N(s)
está constituida por todos los posible vecinos, y que la evaluación de f (s′ ) no depende de la
historia H, ignorando enfoques de investigación del entorno y la memoria a largo plazo que
introduce soluciones élite en la determinación de los movimientos. Sin embargo, las estrategias
de listas de candidatos que reducen el espacio de movimientos considerados son enormemente
importantes para una implementación efectiva. Así, el objetibo fundamental de la metodología
BT es utilizar la memoria adaptativa del proceso de búsqueda e implementar estrategias para
garantizar la intensificación y la diversificación.
La historia H del proceso de búsqueda requiere el uso de memoria tanto explícita como
implícita. En el primer caso, se almacenan en memoria soluciones completas, generalmente
soluciones élite visitadas durante la búsqueda, mientras que en el segundo caso, se almacena
información sobre determinados atributos de las soluciones que cambian al pasar de una
solución a otra. Aunque, en algunos casos, la memoria explícita es usada para evitar visitar
soluciones más de una vez, esta aplicación es limitada dado que es necesario la implementación
de estructuras de memoria muy eficientes para evitar requerimientos de memoria excesivos. De
cualquier manera, estos dos tipos de memoria son complementarios, puesto que la memoria

162
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

// Pro edimiento Tabu_Generi o;


Datos de Entrada: s ← solución inicial (p.ej. una permutación).
Datos de Salida : In umbente: Mejor solución encontrada
f (In umbente) : Valor función objetivo de mejor solución
1 H ← {φ} /* ini ializar historia tabú */
2 In umbente ← s
3 N (s) ← Conjunto de vecinos candidatos
4 while Criterio de parada no alcanzado do /* ve indario (entorno) */
5 Generar lista de candidatos N (s)
6 Inicializar el valor de la función objetivo f (siter ) ← −∞
7 for ∀ s′ ∈ N (s) do /* para todo ve ino de N (s) */
8 if (f (s′ ) > f (siter )) ∧ (Solución s′ es NO tabú) then
9 f (siter ) ← f (s′ )
10 end
11 end
12 if f (siter ) > f (In umbente) then
13 In umbente ← siter
14 end
15 Actualizar historia H
16 s ← siter
17 end
Algorithm 5.1: Algoritmo genérico de BT para un problema de maximización

explícita permite expandir los entornos de búsqueda usados durante un proceso de búsqueda
local mediante la inclusión de soluciones élite, mientras que la memoria basada en atributos los
reduce prohibiendo determinados movimientos.
La prohibición de movimientos en la generación y selección de vecino es lo que se conoce
como estado tabú y requiere de la evaluación inteligente de la historia del proceso de búsqueda.
Surge así una importante pregunta: ¿Cómo almacenar y evaluar esta historia?. La respuesta
puede obtenerse más facilmente a través del siguiente ejemplo.
Ejemplo 5.1.
Considerese el problema de secuenciamiento de tareas presentado en el ejemplo 2.1 (pág. 51).
Este problema es codificado a través de una permutación y, por facilidad, a continuación se
presentan nuevamente los datos de entrada.
T1 T2 T3 T4
π= 4 3 1 2
M1 4 3 5 7
P= M2 7 7 5 9 r = 25 40 20 21
M3 3 3 4 1

Figura 5.1: Datos de entrada del ejemplo 2.1

Para una solución inicial π = {4, 3, 1, 2} se tiene: el valor de la función objetivo, las
violaciones de los tiempos máximos de procesamiento de cada tarea (límites violados) y la
función de adaptación mostrados en la tabla 5.1.
La función de adaptación corresponde al valor de la función objetivo penalizado en
un valor resultante de sumar todos los limites violados. Así, es posible generar un criterio de
Entorno
vecindad para una permutación, tal como se mostró en el capítulo 2.

163
Capítulo 5. Búsqueda tabú

Tabla 5.1: Evaluación de la solución inicial


Limites violados
 

Orden de ejecución de tareas T1 T2 T3 T4   
Alternativa 4 3 1 2 38 6 0 5 0 49

La búsqueda tabú puede ser caracterizada mediante referencia a la búsqueda por entornos,
aunque es importante destacar que la búsqueda en el entorno tiene un significado más amplio
en búsqueda tabú que en algunas otras estrategias de la literatura de las metaheurísticas.
Una representación de búsqueda por entorno identifica, para cada solución x ∈ X, un
conjunto asociado de vecinos, N(x) ⊂ X, llamado entorno de x. Así, cada solución x tiene
Movimiento
asociado un entorno o vecindario, donde cada solución x′ ∈ N(x) es obtenida de x por una
operación denominada movimiento. En búsqueda tabú, los entornos normalmente se asumen
simétricos, es decir, x′ es un vecino de x si y sólo si x es un vecino de x′ .
Los intercambios por pares son frecuentemente usados para definir entornos en problemas
de permutaciones, identificando movimientos que conducen de una solución a la siguiente.
Para este caso en particular una estrategia estaría conformada por los siguientes pasos:

• Seleccionar, de forma aleatoria, dos posiciones (i y j) de la alternativa inicial.

• Intercambiar el contenido de dichas posiciones (intercambiar ri con rj )

De esta manera la secuencia resultante sería un vecino de la secuencia original y por lo


tanto los pasos anteriores serían la estructura de vecindad del problema. El número total de
vecinos (entorno completo) es NV = (n − 1)! alternativas, 6 en este caso, resultantes de todos
los posibles intercambios de dos posiciones, como se muestran en la tabla 5.2. Nótese que todo
el espacio de soluciones es conformado por n! alternativas (24 alternativas en este caso).

Tabla 5.2: Generación de todos lo vecinos posibles


+, ,
   
-     ,   
T1 T2 T3 T4
 " # $ $ &
3 4 1 2 ! 1 % 4
 ' & $ $ $ & $ (
1 3 4 2 ! %
 $ $ $ #
! 2 3 1 4 32 11 43
 " $ $ & )'
% 4 1 3 2 ! 1 12
 & ( " $ ( $ ## ) *
4 2 1 3 !
 # " $ & $ &# )*
4 3 2 1 ! 13

Para un número mayor de tareas la exploración exhaustiva del vecindario puede ser
inviable, lo cual justifica la utilización de una lista o conjunto de vecinos candidatos N(x) ⊂ X
Lista de
vecinos de tamaño k << NV . Lo más importante a tener en cuenta es que el criterio para la generación
candidatos de la lista de movimientos candidatos debe consistir en la utilización de una sensibilidad que
se calcule de forma simple y eficiente, sin tener que calcular el valor de la función objetivo
de los posibles vecinos. Tradicionalmente este conjunto es generado utilizando heurísticas
constructivas, golosas o selección aleatoria.
Para este ejemplo, supóngase que la lista de candidatos está conformada por las primeras
3 alternativas vecinas, escogidas aleatoriamente, presentadas en la tabla 5.2.

164
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

En la última columna de la tabla 5.2 se registra el mejoramiento respecto al valor de la


función de adaptación de la solución inicial. Por lo tanto, asociado a cada intercambio hay un
valor de movimiento el cual, generalmente, proporciona una base fundamental para evaluar la
calidad de los mismos, aunque también pueden ser importantes otros criterios.
El criterio de vecindad utilizado define de forma directa los atributos que caracterizan un
movimiento. Generalmente se utilizan dos criterios:
Atributo
1. Un atributo de un movimiento, en este caso, es la identidad del par de elementos que
cambian posiciones, es decir, las dos tareas intercambiadas. Nótese que para el vecino 3,
de la tabla 5.2, el movimiento está definido por el intercambio del par de elementos (4, 2),
con valor de movimiento igual a 6.

2. Un atributo de un movimiento es la identidad del par de posiciones que intercambian


elementos. Nótese que para el vecino 3, de la tabla 5.2, el movimiento está definido por
el intercambio del par de posiciones (1, 4), con valor de movimiento igual a 6. En este
ejemplo se aplica este criterio basado en posiciones.

El número de elementos que caracterizan el atributo define la estructura de memoria que


permite almacenar y evaluar la historia del proceso de búsqueda. Para un atributo definido por
dos elementos, como en este ejemplo, la estructura de memoria más razonable corresponde a un
arreglo matricial de dos dimensiones como el mostrado en la figura 5.2. Dado que intercambiar
las tareas i y j es lo mismo que intercambiar las tareas j e i, ambos intercambios pueden ser
representados por el par (i, j). Por lo tanto, se puede usar una estructura de datos que considere
unicamente la triangular superior de la matriz como se resalta en la figura.

Estructura de memoria
Solución Atributos Valor Solución corto plazo
inicial primeros 3 movimiento actual 1 2 3 4
candidatos
4 1 1 3
(1, 2 ) 4
3 3 2
(1,3) 9 NT = 3
1 4 3
(1, 4 ) 6
2 2 4
Fadapt = 49 Fadapt = 40
   
Incumbente=49 Incumbente=40

Figura 5.2: Estructura de memoria reciente basada en posiciones

En la Figura 5.2 se muestra que la solución inicial posee un valor de función de adaptación
Fadapt (π) = 49 y pasa a ser el valor inicial de la incumbente del proceso de búsqueda.
La lista de candidatos está conformada por un entorno de 3 soluciones las cuales, a su vez,
están caracterizadas por los atributos relacionados al intercambio de posiciones. El valor del
movimiento corresponde a la diferencia entre los valores de las funciones de adaptación de la
solución inicial y cada uno de los vecinos considerados (Fadapt (π) − Fadapt (vecino)). Mientras
mayor sea el valor del movimiento mayor calidad tendrá la solución. Así, el intercambio

165
Capítulo 5. Búsqueda tabú

escogido corresponde al par de posiciones (1, 3) cuya aplicación genera la solución actual
(1, 3, 4, 2) con Fadapt = 40. La incumbente es actualizada cada vez que se encuentra una
solución de mejor calidad que la incumbente actual.
Un mecanismo principal para explotar la memoria en la búsqueda tabú es clasificar
un subconjunto de movimientos en un entorno como prohibidos (o tabú). La clasificación
depende de la historia de la búsqueda, determinada mediante lo reciente o frecuente que ciertos
movimientos o atributos, han participado en la generación de soluciones pasadas.
El pasado reciente permite establecer una sensibilidad entre la exploración del entorno
y su impacto en la calidad de la función objetivo. La idea es mejorar la diversidad evitando la
Período tabú
búsqueda a partir de atributos utilizados en el pasado reciente, lo cual se logra definiendo un
estado prohíbido o tabú del atributo, durante un numero NT de iteraciones. Este número NT
se conoce como período tabú y simboliza qué tán reciente es la memoria de corto plazo.
Cada celda de la estructura de memoria de corto plazo de la figura 5.2 contendrá el número
de iteraciones restantes (período tabú) que un atributo prmanecerá en estado tabú. Por tanto,
si la celda (1,3) tiene un valor de 0, entonces las tareas correspondientes a las posiciones 1 y
3 pueden ser intercambiadas. Por otro lado, si la celda tiene valor de 3, entonces las tareas de
estas posiciones no podrán ser intercambiadas durante las tres iteraciones siguientes (es decir,
un intercambio asociado a estas posiciones es clasificado como tabú).
El ciclado sucede cuando cuando se visitan soluciones vecinas que ya han sido visitadas
recientemente. Aunque las restricciones tabú más comunes tienen generalmente el objetivo de
Ciclado
prevenir el ciclado, es necesario precisar que el objetivo final de la búsqueda tabú no es evitar
ciclos. Es importante tener en cuenta que en algunos problemas, un buen camino de búsqueda
resultará en volver a visitar una solución encontrada anteriormente. El objetivo más general
es continuar estimulando el descubrimiento de nuevas soluciones de alta calidad y con alta
diversidad.
Es posible reconocer que un período tabú es muy pequeño para una clase de problemas
cuando se detectan repetitivos valores de la función objetivo, lo cual sugiere la aparición de
ciclado en el proceso de búsqueda. De la misma forma, se detecta que un período tabú es muy
grande cuando se produce un deterioro en la calidad de las soluciones encontradas. Es posible,
por tanto, establecer un rango de períodos intermedios para obtener un buen comportamiento de
la búsqueda. Una vez obtenido este rango de períodos tabú, un modo de proceder es seleccionar
diferentes valores del rango en iteraciones diferentes.
Para implementar restricciones tabú, debe tenerse en cuenta una excepción importante:
las restricciones tabú no son inviolables bajo cualquier circunstancia. Cuando un movimiento
Criterio de
aspiración
tabú genera una solución mejor que cualquiera visitada hasta ese momento, su estado tabú
cambia y el movimiento puede ser realizado. Esta excepción se denomina criterio de aspiración.
La figura 5.3 ilustra el diagrama de decisiones para actualizar la estructura de memoria reciente,
incluyendo el caso en el que el criterio de aspiración es utilizado.
Estos contadores dentro de la estructura de memoria de corto plazo son utilizados para
diversificar la búsqueda, conduciéndola a nuevas regiones y rompiendo el ciclado.

166
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

2 3 4
1 1 3
2 2

k movimientos candidatos k ≪ NV

Entorno = ( 2,3) ( 2, 4 ) ( 3, 4 ) (1, 3)

Evaluar funciones adaptación del Entorno y


ordenar movimientos de mayor a menor.
EntornoOrd = ( 2, 4 ) (1, 3) ( 3, 4 ) ( 2,3)

si
Fadapt ( EntornoOrd(1) ) < Incumbente Criterio de
? aspiración

no
i =1 2 3 4
1 0 2
no 2 3
EntornoOrd (i ) es tabú
? 3
si p.ej.
si i=4 2 3 4
i=k ?
1 0 2
no
i = i +1 2 3 1
Terminar 3

Figura 5.3: Actualización de memoria reciente

167
Capítulo 5. Búsqueda tabú

El ejemplo anterior sólo considera una memoria basada en lo reciente. Las utilización
de memoria requiere la creación y adecuación de estructuras, lo cual es un desafio de diseño
al abordar cada problema específico y una oportunidad para los investigadores para proponer
ideas novedosas.

5.2 Memoria adaptativa


La memoria adaptativa de TS explota la historia del proceso de resolución del problema
haciendo referencia a cuatro dimensiones principales, consistentes en la propiedad de ser
reciente, en frecuencia, en calidad, y en influencia [].
La idea de explotar ciertas formas de memoria adaptativa para controlar el proceso de
la búsqueda es el tema central en la búsqueda tabú. Una diferencia importante es la distinción
Lo frecuente y
lo reciente
entre memoria a corto plazo (lo reciente) y memoria a largo plazo (lo frecuente). Cada uno de
estos tipos de memoria va acompañado de sus propias estrategias especiales. Sin embargo, el
efecto de ambos tipos de memoria puede verse como la modificación de la estructura de entorno
de la solución actual. El efecto de tal memoria es consignado en una historia selectiva H de los
estados encontrados durante la búsqueda, y reemplaza N(xa tual ) por un entorno modificado
que puede ser denotado como N(H, xa tual ). La historia determina, por tanto, qué soluciones
pueden ser alcanzadas por un movimiento desde la solución actual, seleccionando xsiguiente de
N(H, xa tual ).
El marco de memoria adaptativa de TS no sólo explota la historia del proceso de
resolución del problema, sino que también exige la creación de estructuras para hacer posible
Estructuras de
memoria
tal explotación. La estructura de memoria está asociada, generalmente, a arreglos vectoriales o
matriciales, dependiendo de las características particulares de cada problema. Por ejemplo,
para problemas codificados a través de permutaciones, como en el caso del probelma del
agente viajero, generalmente la estructura de memoria consiste en un arreglo matricial de dos
dimensiones. En este tipo de matriz es posible almacenar información asociada con la historia
reciente y frecuente del proceso de búsqueda. La estructura de vecindad en BT se caracteriza
por utilizar, de manera combinada, procesos constructivos y destructivos, lo cual permite definir
un vecindario variable o dinámico que puede incluir multiples tipos de movimientos.
Las memorias basadas en lo reciente y en lo frecuente se complementan la una a la otra
para lograr el balance entre las características de intensificación (explotación) y diversificación
(exploración) que todo proceso de búsqueda heurística debe poseer. Estas características
son administradas como restricciones dinámicas que pueden ser agregadas o eliminadas
sistemáticamente para permitir la exploración y/o explotación de regiones no consideradas en
otros casos. Su finalidad es generar algoritmos estructurados para aprovechar la información
histórica de la búsqueda, de forma opuesta a los procesos que confían casi exclusivamente en la
aleatorización.
La memoria basada en lo reciente es la estructura de memoria más comunmente usada en
las implementaciones de BT. Consiste en llevar un registro de los atributos que han cambiado en
el pasado reciente para administrar los elementos clasificados como tabú activos. En el ejemplo

168
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

1 se axplica este tipo de memoria.


La memoria basada en lo frecuente típicamente opera sobre un horizonte de tiempo más
largo y requiere una estructura de memoria complementaria, pero diferente, a la presentada
como ejemplo en la figura 5.2. En el contexto del problema del ejemplo 5.1, para la estructura
de memoria de lo frecuente se puede utilizar la triangular inferior de la estructura mostrada en
la figura 5.2, generándose así una estructura de datos tabú expandida, como la mostrada en la
figura 5.4. Los elementos de la triangular inferior de esta estructura contendrán los contadores
de frecuencia.

Estructura tabú ampliada Valor Penal.


Solución Atributos mov. Atrib. Recte. Frecte.
actual 1 2 3 4 Ord.
1 1 2 3  ( 1, 3 ) −9 ( 2,3) T

Reciente
 ( 3, 4 ) −5 Ord. ( 3, 4 ) −10
4 2 1 1 

3 3 1  ( 2,3) −4 (1, 3) −9

2 4 1 2 5
Fadapt = 44

Frecuente

Figura 5.4: Aplicación de la memoria basada en lo frecuente (Iteración 11)

En la iteración actual (iteración 11), la memoria basada en lo reciente indica que los
últimos tres pares de tareas intercambiados fueron {1, 3} , {1, 4}, y {2, 4}. Los contadores
de frecuencia muestran la distribución de movimientos a través de las 11 primeras iteraciones.
Estos contadores son utilizados para diversificar la búsqueda, conduciéndola a nuevas regiones
y rompiendo el ciclado. El uso de información de frecuencia penalizará movimientos de no
mejora mediante la asignación de una penalización mayor a intercambios de pares de tareas
con mayores contadores de frecuencia. Típicamente, estos contadores deben ser normalizados,
por ejemplo: mediante la división por el número total de iteraciones o su máximo valor. Por
facilidad, en la figura 5.4, se penaliza restando directamente el valor de frecuencia al valor del
movimiento asociado.
Los atributos ordenados por valor del movimiento muestran que el movimiento de máxima
mejora es el intercambio {2, 3}, pero dado que este par tiene un período tabú residual, es
clasificado tabú. El movimiento {3, 4} tiene un valor de -5, y pudiera ser en otro caso el
siguiente preferido, excepto si sus tareas asociadas han sido intercambiadas frecuentemente
durante la historia de la búsqueda. Por lo tanto, el movimiento es penalizado fuertemente y
pierde su atractivo. El intercambio de las tareas {1, 3} es, por tanto, seleccionado como el
mejor movimiento en la iteración actual.
Las medidas de frecuencia se conciben como proporciones, cuyos numeradores
representan contadores del número de ocurrencias de un evento particular (por ejemplo, el
número de veces que un atributo particular pertenece a una solución o movimiento) y cuyos
denominadores generalmente representan uno de cuatro tipos de valores:

• El número total de ocurrencias de todos los eventos representados por los numeradores
(tal como el número de iteraciones asociadas).

169
Capítulo 5. Búsqueda tabú

• La suma de los numeradores.

• El máximo valor del numerador.

• La media del valor del numerador.

En problemas de gran tamaño, gana relevancia la implementación de técnicas de matrices


dispersas para el manejo eficiente de las estructuras de memoria. Además es necesario aplicar
el concepto de lista de vecinos candidatos.
La dimensión de calidad hace referencia a la habilidad para cuantificar el mejoramiento
de las soluciones visitadas a lo largo del proceso de búsqueda (sensibilidades). De esta forma,
Propiedad de
calidad la memoria puede ser utilizada para la identificación de elementos comunes a soluciones buenas
(sensibilidad) o a ciertos caminos que conducen a ellas. La calidad constituye un fundamento para el
aprendizaje basado en incentivos (elitismo), donde se refuerzan las acciones que conducen a
buenas soluciones y se penalizan aquellas que, por el contrario, conducen a soluciones pobres.
La flexibilidad de las estructuras de memoria mencionadas hasta el momento permiten
guiar la búsqueda en un entorno multi-objetivo, dado que se determina la calidad de una
dirección de búsqueda particular mediante más de una función. La propiedad de calidad es
utilizada en la definición de la lista de vecinos candidatos cuando se identifican variaciones
muy grandes en la calidad de cada intercambio en el entorno definido para una solución. Por
lo tanto, es posible eliminar mediante un filtro algunas soluciones de calidad baja antes de
evaluar su valor de movimiento. la orientación de elección agresiva de BT hace altamente
importante aislar un subconjunto candidato del entorno, y examinar este subconjunto en vez del
entorno completo. Esto puede realizarse en etapas, permitiendo que el subconjunto candidato
se extienda si no se encuentran alternativas que satisfagan los niveles de aspiración.
Por último, la cuarta dimensión de memoria, referida a la influencia, considera el
impacto de las decisiones tomadas durante la búsqueda, no sólo en lo reference a la calidad
Propiedad de
influencia
de las soluciones, sino también en lo referente a la estructura de las mismas. Este último
uso de memoria es una característica importante de la búsqueda tabú que con frecuencia se
olvida, pero que debería ser considerada incluso en los diseños más simples. La estrategia
de imponer penalizaciones bajo condiciones particulares se usa para preservar la agresividad
de la búsqueda. Las funciones de penalización en general se diseñan para justificar no sólo
frecuencias sino también valores de movimientos y ciertas medidas de influencia. El concepto
de influencia puede ser ilustrado para el problema de distribuir objetos con pesos diferentes
entre cajas, donde el objetivo es dar a cada caja aproximadamente el mismo peso. Un
movimiento de alta influencia, que cambia significativamente la estructura de la solución actual,
se ejemplifica mediante un movimiento que transfiera un objeto muy pesado de una caja a otra.
Tal movimiento puede no mejorar la solución actual, siendo menos probable conducir a una
mejora cuando la solución actual sea relativamente buena. Se realizarán movimientos de baja
influencia mientras existan posibilidades de mejora significativa.
En el momento en el que se carezca de movimientos de mejora, los criterios cambian
para dar un mayor peso a los movimientos influyentes. Realizar un movimiento influyente
se puede asociar con realizar un movimiento a una región diferente del espacio de búsqueda

170
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

(similar al operador de cruzamiento en AG). Estas consideraciones de influencia de movimiento


interactúan con consideraciones de región y dirección de búsqueda.

5.3 Un algoritmo de búsqueda tabú para el problema de


ruteo de vehículos considerando backhauling
Los servicios separados de recolección y distribución de productos en diferentes rutas a través
de vehículos de carga es un asunto de gran interés actual, en el cual algunas compañías
consideran que es inviable el reordenamiento de la carga dentro de un vehículo. Esto se debe
a que los vehículos son cargados una única vez en el depósito para comenzar un proceso
de distribución de productos. En el problema de entrega y colecta de mercancías (VRPB,
acrónimo en inglés de Vehicle Routing Problem with Backhauling) los clientes son particionados
en dos conjuntos, los clientes de entrega (linehaul) y los clientes de recogida (backhaul).
Adicionalmente, con el propósito de no reorganizar la carga del vehículo, una restricción de
precedencia es establecida donde los clientes backhaul son visitados después de haber atendido
a todos los clientes linehaul. El VRPB es presentado en la literatura especializada como como
una extensión del problema de ruteo de vehículos con capacidad (CVRP, capacitated vehicle
routing problem) y es definido como un problema NP-difícil en el sentido estricto. El CVRP
consiste en programar las rutas realizadas por un conjunto de vehículos (o flota) para dar
cobertura a un conjunto de clientes distribuidos geográficamente alrededor de un depósito de tal
forma que se minimice el costo global de llevar mercancías desde el depósito hasta los clientes.
En esta sección se presenta el algoritmo de búsqueda tabú como método de solución
para resolver el problema de ruteo de vehículos considerando entrega y recogida de paquetes,
presentado por los autores en Santa Chávez et al. (2014). Cada ruta construida por el algoritmo
se compone de una sub-ruta en la cual sólo se ejecuta la tarea de entrega en conjunción con una
sub-ruta en la cual sólo se realiza el proceso de recolección.
La complejidad del problema aumenta cuando el servicio prestado por los vehículos no
sólo se refiere a la entrega de mercancía, sino que también incluye la colecta. En el problema del
VRPB se trata de aprovechar el mismo vehículo para la entrega y colecta de mercancía, ya que
realizar las dos tareas por separado puede generar mayores costos. Entre las diferentes variantes
posibles, en el VRPB se pretende realizar primero las tareas de entrega, ya que se considera que
estas tienen mayor prioridad por el tipo de cliente, y posteriormente se realizan las labores
de recolección; esta estrategia adicionalmente facilita la manipulación de la mercancía en el
interior de los vehículos, ya que la colecta de mercancía previa a las de entrega puede obstruir
el acceso al resto de las mercancías por repartir.
El VRPB ha sido definido ampliaemente en la literatura (Mingozzi et al., 1999;
Toth and Vigo, 1997) y puede establecerse como el problema de determinar un conjunto de
rutas de vehículo que visite todos los vertices de los clientes, los cuales son separados en
dos subconjuntos. El primero contiene los vértices de los clientes linehaul (LCs), donde una
cantidad de producto debe ser entregada. El segundo subconjunto contiene los clientes backhaul
(BCs), donde una cantidad de produsto debe ser recogida y transportada al depósito.
El objetivo es considerar la optimización de las rutas del depósito a los clientes realizadas

171
Capítulo 5. Búsqueda tabú

Ruta Linehault Enlace Ruta Backhault Cliente Backhault Cliente Linehault Depósito

70 4
(9)

20
(15) 7
11 (16)
(19) 12
60 (23)

5
50 (7)

[57] 10
(15) 6
(30)
18
(21) 15
40 2 (19)
[47] (30)
[59]
[60]

13
0 16 (11)
[59]
30 (29) 9 3
[53] (21) (16)

8
17 (9) 1
(23) (7)

14
20 (5)

19
(10)

0 10 20 30 40 50 60

Figura 5.5: Ejemplo de solución óptima del VRPB para 20 clientes

por una flota de vehículos homogéneos a fin de satisfacer la demanda (entrega o recolección) de
todos los clientes. En este caso, los vehículos deben atender primero los LCs antes de los BCs.
El VRPB representa adecuadamente la necesidad de algunas transportadoras de no
reorganizar la carga del vehiculo en cada punto de entrega debido al flujo de productos entrando
y saliendo del vehiculo. Un servicio mixto de entrega y recogida simultánea causa dificultades
en la reorganización de los productos en el vehículo.
Así, en el VRPB se deben cumplir las siguientes condiciones:

• Cada vértice debe ser visitado una única vez por una ruta en particular. esto es, cada
vértice es de grado 2.

• Cada ruta empieza y termina en el depósito. Esto es, Cada circuito visita el vértice 0.

• La demanda de cada cliente visitado debe ser atendida completamente.

• Todos los clientes son servidos desde un depósito único.

• La capacidad del vehiculo nunca debe ser superada tanto en la trayectoria linehaul como
en la backhaul y todos los vehículos tienen la misma capacidad (flota homogénea).

• En cada circuito, los clientes linehaul preceden los clientes backhaul, es decir:

– Un circuito unicamente de BCs no es permitido.

172
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Tabla 5.3: Datos del VRPB de 20 clientes


j ∈ V Coord. X Coord. Y Demanda
0 25 32 0

Producto a ser entregado


1 25 25 7
2 30 40 30
3 50 30 16
4 60 70 9
5 37 52 7
6 35 45 30
7 52 64 16
8 20 26 9
9 40 30 21
10 28 47 15
11 17 63 19

Producto a ser recogido


12 31 62 23
13 52 33 11
14 51 21 5
15 42 41 19
16 31 32 29
17 5 25 23
18 12 42 21
19 36 16 10
20 45 65 15

– El ultimo cliente de una ruta linehaul se conecta siempre con el deposito o con un
cliente que es inicio de una ruta backhaul.
– El ultimo cliente de una ruta backhaul siempre se conecta con el deposito.

La Figura 5.5 muestra la solución óptima de un VRPB con 20 clientes, de los cuales los
primeros 10 son LCs y los otros 10 son BCs. Para este caso, la capacidad de todos los vehículos
es la misma e igual a Q = 60 unidades de carga. El mínimo número de vehículos es KL = 3.
Las demandas de cada cliente son mostradas en la figura con la notación (•), y el flujo de bienes
entrando y saliendo del depósito es mostrado con la notación [•]. El depósito es representado
con un rectángulo y los clientes con un circulo. La Tabla 5.3 muestra las coordenadas de todos
los vertices y su respectiva demanda.

5.3.1 Modelo matemático del VRPB


El VRPB puede ser modelado a través de la formulación de un problema de programación
binaria, tal como se describe en Mingozzi et al. (1999). En dicha formulación se requiere
la construcción de varios conjuntos, descritos a seguir. Sea L el conjunto de clientes que
requieren el transporte de productos desde el depósito (entregas) y B el conjunto de clientes

173
Capítulo 5. Búsqueda tabú

con necesidades de recolección de productos. Los elementos de cada uno de estos conjuntos
son organizados de tal forma que se puedan construir rutas factibles, los cuales se agrupan en
los subconjuntos GL y GB . Esto es, la ruta i ∈ GL es tal que inicia en el depósito y termina
en un punto determinado, siendo que todos los nodos por los que pasa pertenecen a L. Por otro
lado, la ruta j ∈ GB es tal que inicia en un punto determinado y termina en el depósito, siendo
que todos los nodos pertenecen al conjunto B. Para mantener la factibilidad de las rutas, se debe
garantizar que la capacidad del vehículo destinado a cumplir una ruta sea mayor o igual a la
carga que debe transportar. De esta forma Lc denota el conjunto de índices de rutas que pasan
a través de la ciudad c ∈ L, mientras que LTc denota el conjunto de índices de rutas en GL que
terminan en la ciudad c ∈ L. Similarmente, Bc denota el conjunto de índices de rutas en GB
que pasan a través de la ciudad c ∈ B, mientras que BcI denota el conjunto de índices de rutas
que inician su recorrido en la ciudad c ∈ B. Finalmente, se debe construir el conjunto ξi j, el
cual contiene el conjunto de arcos que unen la ruta i ∈ GL con la ruta j ∈ GB .
De esta forma se deben considerar tres tipos de variables binarias. La variable xi asume
el valor uno si la ruta i ∈ GL es seleccionada como parte de la solución, de lo contrario
asume el valor cero. Así mismo, la variable binaria yj asume el valor uno si la ruta j ∈ GB
es seleccionada para formar parte del recorrido, de lo contrario se le asigna el valor cero.
Finalmente, la variable zij también asume el valor uno si el arco que conecta la ruta i ∈ GL con
la ruta j ∈ GB hace parte de la solución, y cero en cualquier otro caso. De esta forma, el modelo
matemático de programación entera para el VRPB está formulado mediante las ecuaciones (5.1)
(5.6), donde M es el número de vehículos disponibles, de los cuales se asume que tienen todos
la misma capacidad. costoi es el costo global del transporte por la ruta i ∈ GL , mientras que
costoj es el costo global del transporte por la ruta j ∈ GB ; finalmente, costoij es el costo del
transporte por el arco (i, j) ∈ ξij que conecta el nodo i ∈ L con el nodo j ∈ B.

!
X X XX
z= min costoi · xi + costoj · yj + costoij · zij (5.1)
i∈GL j∈GB i∈L j∈B

sujeto a:
X
xl = 1, ∀c ∈ L (5.2)
l∈Lc
X
yj = 1, ∀c ∈ B (5.3)
j∈Bc
X X
xl − zcj = 0, ∀c ∈ L (5.4)
l∈LT
c
j∈B
X X
yl − zic = 0, ∀c ∈ B (5.5)
l∈BcI j∈L
XX
zij = M (5.6)
i∈L j∈B

xl ∈ {0, 1} , yl ∈ {0, 1} , zij ∈ {0, 1}

174
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.


 
              

 

 

Figura 5.6: Codificación de una alternativa de solución

            


mj mj

Figura 5.7: Movimiento de acuerdo al primer criterio de vecindad

5.3.2 Codificación de la alternativa de solución.


La propuesta de codificación de una alternativa de solución se presenta en la Figura 5.6, donde la
posición xij , con i = 1, 2, . . . , M, almacena el índice del cliente que es visitado por el vehículo
encargado de entregar mercancías en la ruta i. En este caso j indica el orden en que el cliente
en la posición xij será visitado en la ruta i, siendo Li el número de clientes recorridos por la
ruta i. Análogamente, la posición yij , con i = 1, 2, . . . , K, almacena el índice del cliente que
es visitado por el vehículo encargado de recoger mercancías en la ruta i. En tal caso j indica el
orden en que el cliente yij es visitado por la ruta i. Por otro lado, Bi es el número de clientes
recorridos por la ruta i. Finalmente, la posición zi almacena el índice de la ruta de recogida con
la cual se enlaza la ruta i de entrega de mercancías.

5.3.3 Criterios de vecindad


La estrategia de solución implementada considera tres tipos de criterios de vecindad para
efectuar los cambios de la alternativa de solución inicial. El primero de ellos genera todos
los cambios posibles entre dos elementos de una misma ruta, sea en Linehaul, o en Backhaul,
tal como se muestra en la Figura 5.7 para una ruta genérica m.
El segundo criterio de vecindad considera intercambiar elementos entre dos rutas
diferentes de Linehaul (o entre dos rutas diferentes de Backhaul) escogidas aleatoriamente ,
tal como se muestra en la Figura 5.8, para dos rutas genéricas m y k.
Finalmente, el tercer criterio de vecindad considera la posibilidad de intercambiar las
conexiones entre las rutas de entrega, y las rutas de recogida, tal como se representa en la
Figura 5.9.

175
Capítulo 5. Búsqueda tabú

   

 

  
 
 

Figura 5.8: Movimiento de acuerdo al segundo criterio de vecindad.

     !   # $ $ ! $

   "

        


j
   

Figura 5.9: Movimiento de acuerdo al tercer criterio de vecindad.

5.3.4 Lista Tabú

Con el fin de prevenir el retorno a alternativas de solución ya exploradas, el algoritmo de


búsqueda define una lista de atributos que no se deben presentar en la construcción de las nuevas
alternativas de solución. Al pasar un número determinado de iteraciones (NT abu ), éstos atributos
son liberados y pueden ser nuevamente utilizados. Así, se define como atributo al vector de tres
posiciones que contiene la ciudad sobre la cual se genera un movimiento, así como las ciudades
a las cuales queda conectada luego de dicho movimiento. En la Figura 5.7, por ejemplo, el
movimiento que se genera al permutar las ciudades Xmi y Xmj depende de dos atributos para
su formación, A1 = (Xmi−1 , Xmj , Xmi+1 ), y A2 = (Xmj−1 , Xmi , Xmj+1 ). Para identificar si un
atributo se encuentra prohibido se genera una matriz de dimensiones NT abu × NT abu × NT abu .
Esta matriz representa de forma genérica la Lista Tabú (LT) del algoritmo. Así, los valores
almacenados en cada atributo determinan la posición de la matriz LT en la cual se debe verificar
el momento en que un atributo fue prohibido. De esta forma, el criterio de aceptación o rechazo
del movimiento queda definido por la regla descrita en 5.7, donde LTA es la posición de la
matriz LT definida por las componentes almacenadas en el atributo A.

(
Aceptado (LTA = 0) ∨ (Ite − LTA ) < NT abu
(5.7)
Rechazado De lo contrario

Luego de cada movimiento aceptado, los únicos componentes de la lista tabú que deben
ser actualizados son aquellos en las posiciones definidas por los atributos que salen de la
alternativa de solución. Para el caso de la Figura 5.7, los atributos que se caracterizan como
prohibidos son A3 = (Xmi−1 , Xmi , Xmi+1 ), y A4 = (Xmj−1 , Xmj , Xmj+1).

176
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Figura 5.10: Diagrama de flujo del algoritmo propuesto.

5.3.5 Algoritmo propuesto


En la Figura 5.10 se esquematizan los pasos principales que son ejecutados por el algoritmo
propuesto. Se debe notar que la alternativa de solución X sólo se actualiza en caso de que
exista una solución Xj ∈ Nǫ (X) que mejore el valor de la función objetivo f (X) y que no
contenga atributos prohibidos en la LT, o en caso de que se supere un conjunto de iteraciones
sin realizar cambios. Este mecanismo permite una mayor exploración alrededor de alternativas
de solución de buena calidad. La mejor alternativa de solución encontrada por el algoritmo es
almacenada en Xmejor . El criterio de convergencia del algoritmo se determina por el sobrepaso
de un número de iteraciones Nmej sin que se genere una actualización en Xmejor .

5.3.6 Resultados
La estrategia de solución que se propone es implementada en la plataforma de programación
Delphi 7.0 y su desempeño es evaluado por medio de simulaciones en las instancias descritas

177
Capítulo 5. Búsqueda tabú

Tabla 5.4: Resumen de resultados con 1000 iteraciones del algoritmo implementado.
Propuesto Exacto (Wassan, 2007)
Instancia L B NL NB Costo Tiempo Costo Tiempo
EIL2250A 11 10 3 2 375 0.125 371* 2
EIL2280A 17 4 3 1 376 0.124 375* 1
EIL2350A 11 11 2 1 698 0.17 682* 21
EIL2380A 18 4 2 2 627 0.172 623* 2
EIL3050A 15 14 2 2 557 0.14 501* 47
EIL5150A 25 25 3 3 601 0.467 559 13
EIL5180A 40 10 4 1 596 1.868 565 369
EIL7650A 38 37 6 5 820 1.348 739 127
EIL7680A 60 15 8 2 817 2.751 781 628
* óptimo global

en Toth and Vigo (1997) y Mingozzi et al. (1999), y resueltas en Wassan (2007) a través de una
técnica de búsqueda tabú reactivo. En la Tabla 5.4 se muestran los tiempos de ejecución y el
valor de la función objetivo alcanzados por la metodología propuesta y se comparan con los
expuestos en (Wassan, 2007). En cada simulación, se considera como criterio de convergencia
el valor de 100 iteraciones del algoritmo sin mejorar la solución global. Para la ejecución
del algoritmo se utilizó un computador personal con procesador AMD10 de 2300 MHz. De
los resultados expuestos se logra evidenciar que el algoritmo propuesto resulta más eficiente
computacionalmente comparado con los resultados disponibles en la literatura especializada
(Wassan, 2007), aunque igualmente se observa una marcada tendencia a la convergencia
acelerada a óptimos locales. Sin embargo, el tiempo de procesamiento refleja una disminución
apreciable del esfuerzo computacional que admite la posibilidad de agregar mecanismos que
permitan escapar de óptimos locales, alcanzar soluciones mejores, y conservar aún la eficiencia
computacional.

178
Apéndice: scripts en matlab
6
6.1 Algoritmo genético de Chu-Beasley aplicado al PAV

Script 6.1. Procedimiento principal: AG para el PAV.



1 %S c r i p t P r i n c i p a l : AG p a r a e l a g e n t e v i a j e r o (PAV)
2 clear all
3 clc
4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5 Caso20 ; %C ar g a c a s o de p r u e b a de 20 c i u d a d e s
6 n= N u m C lien tes ;
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8
9 NumI =3 0 ; %Tamaño de l a p o b l a c i o n
10 k =3; %Tamaño m u e s t r a p a r a s e l e c c i ó n
11 Tc = 0 . 9 ; %T as a de c r u z a m i e n t o
12 Tm= 0 . 9 ; %T as a de m u t a c i o n
13 NumMaxGen =1 0 0 0 0 ; %Numero max de g e n e r a c i o n e s
14 I t e r R e i n i c i a r =1 0 0 0 ;%Num I t e r a c i o n e s s i n m e j o r a de i n c u m b e n t e
15 %p a r a r e i n i c i a r
16 %P as o 1 : P o b l a c i ó n i n i c i a l
17 Pob= z e r o s ( NumI , n ) ; % i n i c i a l i z a c i o n del Recipiente poblacion
18 f o r i = 1 : NumI
19 c= r an d p er m ( n ) ; %G e n e r a r P e r m u t a c i ó n a l e a t o r i a ( I n d i v i d u o )
20 Pob ( i , : ) =c ;
21 DT( i ) = C o m p u t a r L o n g i t u d T o u r ( c , D i s t a n c i a s , n ) ;
22 end
23
24 %A lm acen ar I n c u m b e n t e
25 [ F o b j I n c u m b e n t e ( 1 ) , P o s I n c u m b e n t e ] = min (DT) ;
26 I t e r a c i o n ( 1 ) =0;
27 A l t e r n a t i v a I n c u m b e n t e =Pob ( P o s I n cu m b en te , : ) ;
28 contador =1;
29 contador1 =0;
30 f o r g e n e r a c i o n e s = 1 :NumMaxGen

179
Capítulo 6. Apéndice: scripts en matlab

31 %P as o 2 : S l e c c i o n 2 p a d r e s
32 P o s P a d r e 1 = S e l e c c i o n T o r n e o ( DT, k , NumI ) ;
33 P a d r e 1 =Pob ( P o s P ad r e1 , : ) ;
34 P o s P a d r e 2 = S e l e c c i o n T o r n e o ( DT, k , NumI ) ;
35 P a d r e 2 =Pob ( P o s P ad r e2 , : ) ;
36
37 %P as o 3 : C r u z a m i e n t o PMX
38 i f r an d <Tc
39 [ H ijo 1 , H i j o 2 ] = CruzamientoPMX ( P ad r e1 , P ad r e2 , n ) ;
40 else
41 Hijo1 =Padre1 ;
42 Hijo2 =Padre2 ;
43 end
44
45 %P as o 4 : E l i m i n a c i o n de un h i j o
46 F o b j1 = C o m p u t a r L o n g i t u d T o u r ( H ijo 1 , D i s t a n c i a s , n ) ;
47 F o b j2 = C o m p u t a r L o n g i t u d T o u r ( H ijo 2 , D i s t a n c i a s , n ) ;
48 i f F o b j1 ≤ F o b j2
49 Hijo =Hijo1 ;
50 FobjH= F o b j1 ;
51 else
52 Hijo =Hijo2 ;
53 FobjH= F o b j2 ;
54 end
55 %P as o 5 : M u tació n . . . v e c i n d a d
56 i f r an d <Tm
57 H i j o = o p t 2 ( H ijo , n ) ;
58 FobjH= C o m p u t a r L o n g i t u d T o u r ( H ijo , D i s t a n c i a s , n ) ;
59 end
60
61 %P as o 6 : I n g r e s o a l a p o b l a c i ó n
62 bandera =0;
63 f o r i = 1 : NumI
64 i f H i j o ==Pob ( i , : )
65 bandera =1;
66 break
67 end
68 end
69 i f b a n d e r a ==0
70 [ V alP eo r , P o s P e o r ] = max (DT) ;
71 i f FobjH ≤ V a l P e o r
72 Pob ( P o s P eo r , : ) = H i j o ;
73 DT( P o s P e o r ) =FobjH ;
74 i f FobjH < F o b j I n c u m b e n t e ( c o n t a d o r )
75 contador = contador +1;
76 F o b j I n c u m b e n t e ( c o n t a d o r ) =FobjH ;
77 It e ra c io n ( contador )=generaciones ;
78 A lter nativaI n cu m be nt e =Hijo ;
79 contador1 =0;
80 end
81 end
82 else
83 bandera =0;
84 end
85 contador1 = contador1 +1;
86 i f contador1≥I t e r R e i n i c i a r
87 %P as o 1 : P o b l a c i ó n i n i c i a l
88 Pob= z e r o s ( NumI , n ) ; % i n i c i a l i z a c i o n d e l R e c i p i e n t e
89 f o r i = 1 : NumI
90 c= r an d p er m ( n ) ; %G e n e r a r p o b l a c i o n a l e a t o r i a
91 Pob ( i , : ) =c ;
92 DT( i ) = C o m p u t a r L o n g i t u d T o u r ( c , D i s t a n c i a s , n ) ;
93 end
94 DT( NumI ) = F o b j I n c u m b e n t e ( c o n t a d o r ) ;
95 Pob ( NumI , : ) = A l t e r n a t i v a I n c u m b e n t e ;

180
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

96 contador1 =0;
97 end
98 end
99 p l o t ( I t e r a c i o n , FobjIncumbente ) ;
100 FobjT = F o b j I n c u m b e n t e ( c o n t a d o r )
101 %D i b u j a r Tour
102 Tamano= s i z e ( D a t o s C l i e n t e s , 1 ) −1;
103 C o o r d e n a d a s = D a t o s C l i e n t e s ( [ 1 : Tamano + 1 ] , : ) ;
104 T S P s o l =[ A l t e r n a t i v a I n c u m b e n t e A l t e r n a t i v a I n c u m b e n t e ( 1 ) ] ;
105 x =[];
106 y =[];
107 x= C o o r d e n a d a s ( TSPsol ' , 2 ) ;
108 y= C o o r d e n a d a s ( TSPsol ' , 3 ) ;
109 MaxX=max ( x ) ;
110 MaxY=max ( y ) ;
111 figure
112 f o r i = 1 : Tamano +1
113 l i n e ( [ x ( i ) x ( i +1 ) ] , [ y ( i ) y ( i +1 ) ] , ' L i n e S t y l e ' , '−− ' , . . .
114 ' L in eW id th ' , 5 , ' C o l o r ' , [ . 8 . 8 . 8 ] ) ;
115 end
 

Script 6.2. Caso de prueba de 20 ciudades para el PAV.



1 D a t o s C l i e n t e s =[
2 1 37 52
3 2 49 49
4 3 52 64
5 4 20 26
6 5 40 30
7 6 21 47
8 7 17 63
9 8 31 62
10 9 52 33
11 10 51 21
12 11 42 41
13 12 31 32
14 13 5 25
15 14 12 42
16 15 36 16
17 16 52 41
18 17 27 23
19 18 17 33
20 19 13 13
21 20 57 58 ] ;
22 N u m C lien tes = s i z e ( D a t o s C l i e n t e s , 1 ) ;
23 D i s t C l i e n t e = z e r o s ( N u m C lien tes , N u m C lien tes ) ;
24 f o r i = 1 : N u m C lien tes
25 f o r j = i + 1 : N u m C lien tes
26 DistCliente ( i , j )= s qr t (( DatosClientes ( i , 2) −...
27 D a t o s C l i e n t e s ( j , 2 ) ) ^ 2 +( D a t o s C l i e n t e s ( i , 3 ) − . . .
28 Datos Client e s ( j , 3 ) ) ^2) ;
29 DistCliente ( j , i )=DistCliente ( i , j ) ;
30 end
31 end
32 Distancias=DistCliente ;
 

Script 6.3. Computar longitud del circuito Hamiltoniano (Tour).



1 f u n c t i o n l = C o m p u t a r L o n g i t u d T o u r ( c , D, n )
2 %F u n c i ó n Computar l a l o n g i t u d d e l t u r

181
Capítulo 6. Apéndice: scripts en matlab

3 %c= c i r c u i t o H a m i l t o n i a n o
4 %D= M a t r i z de D i s t a n c i a s
5 %n=Número de c i u d a d e s
6 l =0;
7 f o r i = 1 : n−1
8 l = l +D( c ( i ) , c ( i +1 ) ) ;
9 end
10 l = l +D( c ( n ) , c ( 1 ) ) ;
 

Script 6.4. Selección por torneo (ver torneo determinístico, pág. 76).

1 f u n c t i o n P o s P a d r e = S e l e c c i o n T o r n e o ( Vfobj , k , n )
2 %P r o c e s o de s e l e c c i ó n u t i l i z a n d o t o r n e o
3 %V f o b j : V e c t o r con v a l o r e s de f u n c i ó n o b j e t i v o p a r a
4 % someter a t o r n e l
5 %k : Número de i n d i v i d u o s que p a r t i c i p a n en t o r n e o
6 %n : Tamaño d e l v e c t o r V f o b j
7 Temp= r an d p er m ( n ) ; %G e n e r a r p e r m u t a c i ó n a l e a t o r i a de tamaño n
8 A l e a t o r i o s =Temp ( 1 : k ) ; %E s c o g e r k i n d i v i d u o s
9 [ Val , Pos ] = min ( V f o b j ( A l e a t o r i o s ) ) ;
10 P o s P a d r e = A l e a t o r i o s ( Pos ) ;
 

Script 6.5. Cruzamiento PMX para n puntos (ver cruzamiento en permutaciones, pág. 88).

1 f u n c t i o n [ H ijo 1 , H i j o 2 ] = CruzamientoPMX ( P1 , P2 , n )
2 PC1= f l o o r ( r a n d * ( n −1) ) + 1 ;
3 PC2= f l o o r ( r a n d * ( n −1) ) + 1 ;
4
5 i f PC1>PC2
6 Temp=PC1 ;
7 PC1=PC2 ;
8 PC2=Temp ;
9 end
10
11 H i j o 1 =[ P1 ( 1 : PC1 ) , z e r o s ( 1 , PC2−PC1 ) , P1 ( PC2 + 1 : n ) ] ;
12 Pos =PC1 ;
13 f o r i =1: n
14 B an d er a = 0 ;
15 f o r j =1:n
16 i f P2 ( i ) == H i j o 1 ( j ) ;
17 B an d er a = 1 ;
18 break
19 end
20 end
21 i f B an d er a ==0
22 Pos= Pos + 1 ;
23 H i j o 1 ( Pos ) =P2 ( i ) ;
24 end
25 end
26
27 H i j o 2 =[ P2 ( 1 : PC1 ) , z e r o s ( 1 , PC2−PC1 ) , P2 ( PC2 + 1 : n ) ] ;
28 Pos =PC1 ;
29 f o r i =1: n
30 B an d er a = 0 ;
31 f o r j =1:n
32 i f P1 ( i ) == H i j o 2 ( j ) ;
33 B an d er a = 1 ;
34 break
35 end
36 end

182
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

37 i f B an d er a ==0
38 Pos= Pos + 1 ;
39 H i j o 2 ( Pos ) =P1 ( i ) ;
40 end
41 end
 

Script 6.6. Criterio de vecindad 2-opt.



1 f u n c t i o n [ V ecin o ] = o p t 2 ( C i r c u i t o , n )
2 %Opt2 = 2 _ o p t
3 V ecin o = C i r c u i t o ;
4 Contador =0;
5 A l e a t o r i o 1 = f l o o r ( rand *n ) +1;
6 A l e a t o r i o 2 = f l o o r ( rand *n ) +1;
7 i f Aleatorio1 >Aleatorio2
8 Temp= A l e a t o r i o 1 ;
9 Aletaorio1 =Aleatorio2 ;
10 A l e a t o r i o 2 =Temp ;
11 end
12 for i=Aleatorio1 : Aleatorio2
13 V ecin o ( i ) = C i r c u i t o ( A l e a t o r i o 2 −C o n t a d o r ) ;
14 Contador =Contador +1;
15 end
 

6.2 Algoritmo de colonia de hormigas aplicado al PAV


Script 6.7. Optimización por colonia de hormigas aplicada al PAV.

1 %S c r i p t P r i n c i p a l : ACO p a r a e l a g e n t e v i a j e r o (PAV)
2 clear all
3 clc
4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5 Caso20 ; %C ar g a c a s o de p r u e b a de 20 c i u d a d e s
6 n= N u m C lien tes ;
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8
9 m= 5 ; %Numero de h o r m i g a s
10 o =1 0 ; %Numero de b ú s q u e d a s l o c a l e s
11 Cnn =1 0 0 0 ; %L o n g i t u d i n i c i a l d e l c i r c u i t o
12 a l p h a = 1 ; %I m p o r t a n c i a r e l a t i v a de d e p o s i t o s de f er o m o n a
13 beta =5; %I m p o r t a n c i a r e l a t i v a de l o s n o d o s más c e r c a n o s
14 r h o = 0 . 1 ; %T as a de e v a p o r a c i o n
15 Tao= o n e s ( n , n ) *m/ Cnn ; %D e p o s i t o i n i a l de f er o m o n a
16 I t e r M a x =1 0 0 0 ; %Número máximo de i t e r a c i o n e s
17
18 f o r i =1: IterMax
19 [ C , L] = C o n s t r u i r S o l u c i o n e s ( Tao , D i s t a n c i a s , m, n , a l p h a , b e t a ) ;
20 [ C , L] = B u s q u ed aL o c a l ( o , D i s t a n c i a s , m, n , C , L ) ;
21 Tao= A c t u a l i z a r T a o ( Tao , rho , C , L , m, n ) ;
22 end
23 min ( L )
 

Script 6.8. Construir soluciones usando ACO.

183
Capítulo 6. Apéndice: scripts en matlab


1 f u n c t i o n [ C , L] = C o n s t r u i r S o l u c i o n e s ( Tao , D , m, n , a l p h a , b e t a )
2 %F u n c i ó n que c o n s t r u y e m t o u r s y l o s a l m a c e n a en l a
3 %m a t r i z C ( c i r c u i t o s H a m i l t o n i a n o s ) , c á l c u l a además s u s
4 %l o n g i t u d e s y l a s a l m a c e n a en e l v e c t o r L
5 %Tao : M a t r i z de f er o m o n a
6 %D : M a t r i z de d i s t a n c i a s
7 %m : Número de h o r m i g a s
8 %n : Número de c i u d a d e s
9 %a l p h a : I m p o r t a n c i a r e l a t i v a de d e p o s i t o s de f er o m o n a
10 %b e t a : I m p o r t a n c i a r e l a t i v a de l o s n o d o s más c e r c a n o s
11
12 M= z e r o s (m, n ) ; %M a t r i z de c i u d a d e s v i s i t a d a s
13 P as o = 1 ;
14 f o r k = 1 :m %p a r a c a d a h o r m ig a k
15 r = f l o o r ( r a n d * ( n −1) ) + 1 ; %u b i c a r en una c i u d a d a l e a t o r i a
16 C ( k , P as o ) = r ;
17 M( k , r ) = 1 ;
18 end
19
20 w h i l e Paso <n
21 P as o = P as o + 1 ;
22 f o r k = 1 :m %P a r a c a d a h o r m ig a
23 C i u d a d I n i =C ( k , Paso −1) ;
24 C i u d a d D e s t = E s c o g e r C i u d a d D e s t i n o ( k ,M, C i u d a d I n i , n , . . .
25 Tao , a l p h a , b e t a , D) ;
26 C ( k , P as o ) = C i u d a d D e s t ;
27 M( k , C i u d a d D e s t ) = 1 ;
28 end
29 end
30 f o r k = 1 :m
31 L ( k ) = C o m p u t a r L o n g i t u d T o u r ( C( k , : ) ,D, n ) ;
32 end
 

Script 6.9. Escoger la ciudad a la que se movera la hormiga.



1 f u n c t i o n [ C i u d a d D e s t ] = E s c o g e r C i u d a d D e s t i n o ( k , M, C i u d a d I n i , n , . . .
2 Tao , a l p h a , b e t a , D)
3 %F u n c i ó n que u t i l i z a l a e x p r e s i ó n ( 4 . 4 ) p a r a e s c o g e r
4 %p r o b a b i l i s t i c a m e n t e l a c i u d a d d e s t i n o ( C i u d a d D e s t ) e s t a n d o
5 %l a h o r m ig a k u b i c a d a en una c i u d a d i n i c i a l ( C i u d a d I n i ) .
6 %M : M a t r i z de c i u d a d e s v i s i t a d a s
7 %Tao : M a t r i z de f er o m o n a
8 %a l p h a : I m p o r t a n c i a r e l a t i v a de d e p o s i t o s de f er o m o n a
9 %b e t a : I m p o r t a n c i a r e l a t i v a de l o s n o d o s más c e r c a n o s
10 %D : M a t r i z de d i s t a n c i a s
11 i =CiudadIni ;
12 Denominador = 0 ;
13 f o r j =1: n % c a l c u l a r v a l o r d e l d en o m in ad o r de ( 4 . 4 )
14 i f M( k , j ) ==0 %s i l a c i u d a d no ha s i d o v i s i t a d a
15 Denominador = Denominador +Tao ( i , j ) ^ a l p h a * ( 1 / D( i , j ) ) ^ b e t a ;
16 end
17 end
18 Contador =1;
19 f o r j = 1 : n %P a r a c a d a c i u d a d
20 i f M( k , j ) ==0
21 %E x p r e s i ó n ( 4 . 4 )
22 P ( C o n t a d o r ) =Tao ( i , j ) ^ a l p h a * ( 1 / D( i , j ) ) ^ b e t a / Denominador ;
23 CnoVisitada ( Contador ) = j ;
24 Contador =Contador +1;
25 end
26 end
27

184
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

28 C i u d a d D e s t = C n o V i s i t a d a ( S e l e c c i o n R u l e t a ( P , C o n tad o r −1) ) ;
 

Script 6.10. Selección de un individuo usando ruleta (ver pseudocódigo 2.9, pág. 78)

1 f u n c t i o n [ P o s C i u d a d D e s t ] = S e l e c c i o n R u l e t a ( P , NumP)
2 %F u n c i ó n que e s c o g e p o r s e l e c c i ó n p r o p o r c i o n a l una
3 %c i u d a d de d e s t i n o . E s t a f u n c i ó n s i m u l a un l a n z a m i e n t o
4 %de l a r u l e t a s o b r e s e c c i o n e s p r o p o r c i o n a l e s a l a f u n c i ó n
5 %de a d a p t a c i ó n y d e v u e l v e l a p o s i c i ó n de l a a l t e r n a t i v a
6 %g a n a d o r a .
7 %P : V e c t o r con v a l o r e s de l a s p r o p o r c i o n e s que
8 % p a r t i c i p a n en l a r u l e t a ( tamaño de l a s p o r c i o n e s ) .
9 %NumP : Número de p o r c i o n e s en l a s que s e d i v i d e l a r u l e t a
10 PosCiudadDest =1;
11 Acumulado = 0 ;
12 A l e a t o r i o =rand ;
13 f o r i = 1 :NumP
14 Acumulado =Acumulado +P ( i ) ;
15 i f A l e a t o r i o ≤Acumulado
16 PosCiudadDest= i ;
17 break
18 end
19 end
 

Script 6.11. Realizar búsqueda local usando 2-opt.)



1 f u n c t i o n [ C , L] = B u s q u ed aL o c a l ( t , D , m, n , C , L )
2 %F u n c i ó n de b ú s q u e d a l o c a l que u t i l i z a 2−OPT
3 f o r k = 1 :m %p a r a c a d a h o r m ig a
4 f o r i = 1 : t %P a r a c a d a v e c i n o
5 V ecin o = o p t 2 ( C ( k , : ) , n ) ;
6 F o b j V e c i n o = C o m p u t a r L o n g i t u d T o u r ( Vecino , D , n ) ;
7 i f F o b jV ecin o <L ( k )
8 C ( k , : ) = V ecin o ;
9 L( k ) =FobjVecino ;
10 break
11 end
12 end
13 end
 

Script 6.12. Actualización de la matriz de feromona τ .)



1 f u n c t i o n [ Tao ] = A c t u a l i z a r T a o ( Tao , rho , C , L , m, n )
2 %F u n c i ó n que a c t u a l i z a l a m a t r i z de Feromona
3 Tao=Tao * (1− r h o ) ;
4 f o r k = 1 :m
5 DeltaTao =1/L( k ) ;
6 f o r i = 1 : n−1
7 j =C( k , i ) ;
8 l =C( k , i +1 ) ;
9 Tao ( j , l ) =Tao ( j , l ) + D e l t a T a o ;
10 %Tao ( l , j ) =Tao ( j , l ) ;
11 end
12 j =C ( k , n ) ;
13 l =C ( k , 1 ) ;
14 Tao ( j , l ) =Tao ( j , l ) + D e l t a T a o ;
15 end
 

185
Capítulo 6. Apéndice: scripts en matlab

6.3 Espacios de soluciones en optimización mono y


multi-objetivo: problema de la viga
Script 6.13. Obtención de los espacios de solución (ver sección 1.7, pág. 12)

1 clear all ;
2 clc ;
3
4 N u m I n d iv id u o s =2 0 0 0 ;
5 Sy =3 0 0 ; % maximo e s t r e s p e r m i t i d o [ MPa]
6 d e f l e x i o n M a x = 5 ; % [mm]
7 d e n s i d a d =7 8 0 0 ; % [ kg /m^ 3 ]
8 P = 1 ; % F u e r z a p r o d u c i d a p o r l a C ar g a a l f i n a l de l a v i g a [ kN ]
9 E=2 0 7 ;%E= f u e r z a p o r m etr o ^2 que s o p o r t a l a v i g a = E x t r e s s [ Gpa ]
10 dmax =5 0 ; %D i a m e t r o máximo [mm]
11 dmin =1 0 ; %D i a m e t r o mínimo [mm]
12 lmax =1 0 0 0 ; %L o n g i t u d máxima [mm]
13 l m i n =2 0 0 ; %L o n g i t u d mínima [mm]
14
15 I ndice =1;
16 f o r i =1 : N u m I n d iv id u o s
17 d= r a n d * ( dmax−dmin ) +dmin ;
18 l = r a n d * ( lmax−l m i n ) + l m i n ;
19 p e s o = F o b j1 ( d , l , d e n s i d a d ) ;
20 d e f l e x i o n = F o b j2 ( d , l , E , P ) ;
21 EMax= E s tr es M ax ( d , l , P ) ;
22 i f ( EMax≤Sy ) & ( d e f l e x i o n ≤ d e f l e x i o n M a x )
23 Soluciones ( Indice , 1 ) = Indice ;
24 S o l u c i o n e s ( I n d i c e , 2 ) =d ;
25 Soluciones ( Indice , 3 ) = l ;
26 S o lu cio n es ( Indice , 4 ) =peso ;
27 Soluciones ( Indice , 5 ) = deflexion ;
28 S o l u c i o n e s ( I n d i c e , 6 ) =EMax ;
29 I ndice = I ndice +1;
30 end
31 end
32 p lo t ( Soluciones ( : , 2 ) , Soluciones ( : , 3 ) , ' . black ' ) ;
33 h o l d on ;
34 plot ( Soluciones (20 ,2) , Soluciones (20 ,3) , ' r* ' ) ;
35 p l o t ( S o l u c i o n e s ( 200 , 2) , S o l u c i o n e s ( 200 , 3) , ' b* ' ) ;
36 x l a b e l ( ' D i a m e t r o (mm) ' ) ;
37 y l a b e l ( ' l o n g i t u d (mm) ' ) ;
38
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
40 %%%%%% M u l t i o b j e t i v o %%%%%%%%%%%%%%%%%%%%%%%%%%
41 figure ;
42 p lo t ( Soluciones ( : , 4 ) , Soluciones ( : , 5 ) , ' . black ' ) ;
43 h o l d on ;
44 plot ( Soluciones (20 ,4) , Soluciones (20 ,5) , ' r* ' ) ;
45 p l o t ( S o l u c i o n e s ( 200 , 4) , S o l u c i o n e s ( 200 , 5) , ' b* ' ) ;
46 x l a b e l ( ' p e s o ( kg ) ' ) ;
47 y l a b e l ( ' d e f l e x i o n (mm) ' ) ;
48
49 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50 %%%%%% M o n o o b j e t i v o %%%%%%%%%%%%%%%%%%%%%%%%%%
51 figure ;
52 p lo t ( Soluciones ( : , 6 ) , Soluciones ( : , 5 ) , ' . black ' ) ;
53 h o l d on ;
54 plot ( Soluciones (20 ,6) , Soluciones (20 ,5) , ' r* ' ) ;
55 p l o t ( S o l u c i o n e s ( 200 , 6) , S o l u c i o n e s ( 200 , 5) , ' b* ' ) ;
56 x l a b e l ( ' E s t r e s ( MPa) ' ) ;

186
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

57 y l a b e l ( ' d e f l e x i o n (mm) ' ) ;


 

Script 6.14. Función objetivo 1: Peso (ver sección 1.3, pág. 13)

1 f u n c t i o n p e s o = F o b j1 ( d , l , d e n s i d a d )
2 %d e n s i d a d =kg /m^3
3 %p e s o en kg
4 %d= d i a m e t r o en mm
5 %l = l o n g i t u d en mm
6 p e s o = d e n s i d a d * p i * d ^2 * l / 4 ;
 

Script 6.15. Función Objetivo 2: Deflexión (ver sección 1.4, pág. 13)

1 f u n c t i o n d e f l e x i o n = F o b j2 ( d , l , E , P )
2 %d= d i a m e t r o en mm
3 %l = l o n g i t u d en mm
4 %E= f u e r z a p o r m etr o ^2 que s o p o r t a l a v i g a = E x t r e s s [ Gpa ]
5 %P= f u e r z a p r o d u c i d a p o r l a C ar g a u b i c a d a a l f i n a l de l a v i g a [ kN ]
6 %d e f l e x i o n en mm
7
8 d e f l e x i o n =64 * P * l ^ 3 / ( 3 * E * p i * d ^ 4 ) ;
 

Script 6.16. Máximo estrés (ver sección 1.7, pág. 13)



1 f u n c t i o n EMax= E s tr es M ax ( d , l , P )
2 %d= d i a m e t r o en mm
3 %l = l o n g i t u d en mm
4 %EMax= f u e r z a p o r m etr o ^2 que s o p o r t a l a v i g a = E x t r e s s [ Gpa ]
5 %P= f u e r z a p r o d u c i d a p o r l a C ar g a u b i c a d a a l f i n a l de l a v i g a [ kN ]
6 %d e f l e x i o n en mm
7
8 EMax=32 * P * l / ( p i * d ^ 3 ) ;
 

6.4 Problema de caneca óptima (PCO) usando AG con


codificación binaria
Script 6.17. Script principal del PCO usando AG binario.

1 %S c r i p t P r i n c i p a l : PAV u s an d o AG de Chu & B e a s l e y con
2 %c o d i f i c a c i ó n b i n a r i a
3 clear all ;
4 clc ;
5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6 NumPoblacion =2 0 ;
7 h_Nbits =7;
8 d_Nbits =7;
9 C o s to = 0 . 0 6 5 ;
10 hmin = 6 ;
11 hmax =3 1 ;
12 dmin = 6 ;

187
Capítulo 6. Apéndice: scripts en matlab

13 dmax =3 1 ;
14 VolumenMin =3 0 0 ;
15 Pc = 2 ; %P u n t o s de c r u z a m i e n t o
16 G e n e r a c i o n e s =1 5 0 0 ;
17
18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
19 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
20
21 h _ e s p a c i o =( hmax−hmin ) + 1 ;
22 d _ e s p a c i o =( dmax−dmin ) + 1 ;
23
24 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
25 %%%%%%%%%%%%%%%%%%POBLACION INICIAL%%%%%%%%%%%%%%%%%%%%%%%
26
27 f o r i = 1 : NumPoblacion
28 a l e a t o r i o = r o u n d ( r a n d * ( h _ e s p a c i o −1) +1 ) ;
29 P_dec ( i , 1 ) = a l e a t o r i o ; %a l t u r a y d i a m e t r o d e c i m a l
30 %P o b l a c i o n d e c i m a l
31 h_bin =CodBinaria ( a l e a t o r i o , h_Nbits , h_espacio ) ;
32 a l e a t o r i o = r o u n d ( r a n d * ( d _ e s p a c i o −1) +1 ) ;
33 P_dec ( i , 2 ) = a l e a t o r i o ;
34 d_bin =CodBinaria ( a l e a t o r i o , d_Nbits , d_espacio ) ;
35 P _ b in ( i , : ) =[ h _ b i n d _ b i n ] ; %P o b l a c i o n
36 end
37 f o r i = 1 : s i z e ( P_dec , 1 )
38 F o b j ( i ) = F o b j e t i v o ( P_dec ( i , 1 ) , P_dec ( i , 2 ) , C o s to ) ;
39 end
40
41 %La i n c u m b e n t e d eb e s e r l a minima e n t r e l a s f a c t i b l e s
42 k =1;
43
44 j =1;
45 [ I n f a c t i b i l i d a d , Volumen ] = V a l o r I n f a c t i b i l i d a d ( P_dec , . . .
46 VolumenMin ) ;
47 f o r i = 1 : NumPoblacion
48 i f I n f a c t i b i l i d a d ( i ) ==0
49 Posicion ( j )= i ;
50 j = j +1;
51 end
52 end
53
54 [ I n cu m b en te , I n d i c e ] = min ( F o b j ( [ P o s i c i o n ] ) ) ;
55 [ I n f a c t i b i l i d a d , Volumen ] = V a l o r I n f a c t i b i l i d a d ( P_dec ( . . .
56 I n d i c e ( 1 ) , : ) , VolumenMin ) ;
57 V a r i a b l e s = P_dec ( I n d i c e ( 1 ) , : ) ;
58 C o n v e r g e n c i a ( k , : ) =[ I n c u m b e n t e Volumen I n f a c t i b i l i d a d . . .
59 Variables ] ;
60 f o r g = 1 : G e n e r a c i o n e s %e l numero s e r e p i t e un numero de
61 %g e n e r a c i o n e s
62 [ P a d r e s ] = s e l e c c i o n ( P_bin , P_dec , 2 , C o s to ) ;
63 [ H i j o s ] = c r u z a m i e n t o ( P a d r e s , Pc ) ;
64 [ Hijos ] = mutacion ( Hijos ) ;
65
66 %C o d i f i c a r l o s h i j o s a d e c i m a l
67 h_bin = Hijos ( : , 1 : h_Nbits ) ;
68 d_bin = Hijos ( : , h_Nbits +1: h_Nbits+ d_Nbits ) ;
69 f o r i =1 :2
70 H i j o s _ d e c ( i , : ) =[ CodDecimal ( h _ b i n ( i , : ) , h _ N b i t s , . . .
71 h _ e s p a c i o , hmin ) CodDecimal ( d _ b i n ( i , : ) , . . .
72 d _ N b i t s , d _ e s p a c i o , dmin ) ] ;
73 end
74 %s e l e c c i o n a r un h i j o p a r a e n t r a r a l a p o b l a c i o n
75 [ H ijo , I n d i c e ] = s e l e c c i o n ( H i j o s , H i j o s _ d e c , 1 , C o s to ) ;
76 H i j o _ d e c = H i j o s _ d e c ( I n d i c e , : ) ; %a l t u r a h y d i a m e t r o
77 %d en d e c i m a l

188
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

78 [ InfacHijo , VolHijo ] = V a l o r I n f a c t i b i l i d a d ( Hijo_dec , . . .


79 VolumenMin ) ;
80 [ I n f a c P , VolP ] = V a l o r I n f a c t i b i l i d a d ( P_dec , VolumenMin ) ;
81 F o b j H i j o = F o b j e t i v o ( H i j o _ d e c ( 1 , 1 ) , H i j o _ d e c ( 1 , 2 ) , C o s to ) ;
82 %E l h i j o no d eb e e x i s t i r en l a p o b l a c i o n −> d i v e r s i d a d
83 bandera =0;
84 f o r i = 1 : NumPoblacion
85 i f H i j o == P _ b in ( i , : )
86 bandera =1;
87 break ;
88 end
89 end
90 i f b a n d e r a ==0 % s i no e x i s t e e l h i j o en l a p o b l a c i o n
91 %s a c a r e l p e o r i n f a c t i b l e de l a p o b l a c i o n
92 i f sum ( I n f a c P ) 6=0 %S i en l a p o b l a c i o n e x i s t e a l g u n
93 %i n f a c t i b l e
94 [ M a s I n f a c t i b l e , I n d i c e ]= d s o r t ( InfacP ) ;
95 MasInfactible=MasInfactible (1) ;
96 %S i e l mas i n f a c t i b l e de l a p o b l a c i o n e s p e o r
97 %que e l h i j o s e r e e m p l a z a p o r e l h i j o
98 i f MasInfactible >InfacHijo
99 P _ b in ( I n d i c e ( 1 ) , : ) = H i j o ;
100 P_dec ( I n d i c e ( 1 ) , : ) = H i j o _ d e c ;
101 Fobj ( Indice ( 1 ) ) =FobjHijo ;
102 end ;
103 e l s e %s i en l a p o b l a c i o n t o d o s s o n f a c t i b l e s
104 i f I n f a c H i j o ==0 %y ademas H i j o e s f a c t i b l e
105 %s a c a r e l de p e o r v a l o r de f u n c i o n o b j e t i v o
106 [ PeorFobj , I n d i c e ]= d s o r t ( Fobj ) ;
107 PeorFobj =PeorFobj ( 1 ) ;
108 i f PeorFobj > FobjHijo
109 P _ b in ( I n d i c e ( 1 ) , : ) = H i j o ;
110 P_dec ( I n d i c e ( 1 ) , : ) = H i j o _ d e c ;
111 Fobj ( Indice ( 1 ) )= FobjHijo ;
112 end
113 end
114 end
115 end
116 %s e m u e s t r a l a m ejo r f u n c i o n o b j e t i v o ( i n c u m b e n t e ) en
117 %c a d a g e n e r a c i o n
118 j =1;
119 [ I n f a c t i b i l i d a d , Volumen ] = V a l o r I n f a c t i b i l i d a d ( P_dec , . . .
120 VolumenMin ) ;
121 f o r i = 1 : NumPoblacion
122 i f I n f a c t i b i l i d a d ( i ) ==0
123 Posicion ( j )=i ;
124 j = j +1;
125 end
126 end
127 [ I n cu m b en te , I n d i c e ] = min ( F o b j ) ;
128 [ I n f a c t i b i l i d a d , Volumen ] = V a l o r I n f a c t i b i l i d a d ( P_dec ( . . .
129 I n d i c e ( 1 ) , : ) , VolumenMin ) ;
130 V a r i a b l e s = P_dec ( I n d i c e ( 1 ) , : ) ;
131 i f I n cu m b en te < C o n v e r g e n c i a ( k , 1 )
132 k=k + 1 ;
133 C o n v e r g e n c i a ( k , : ) =[ I n c u m b e n t e Volumen I n f a c t i b i l i d a d . . .
134 Variables ] ;
135 end
136 end
137 Incumbente
 

Script 6.18. Función que permite pasar de decimal a binario.

189
Capítulo 6. Apéndice: scripts en matlab


1 f u n c t i o n [ B i n a r i o ] = C o d B i n a r i a (Num , N b i t s , e s p a c i o )
2 %F u n c i ó n que t r a n s f o r m a de d e c i m a l a b i n a r i o
3 P o s i c i o n e s =2^ N b i t s ;
4 D e l t a =( e s p a c i o ) / ( P o s i c i o n e s ) ;
5 B i n a r i o = d e 2 b i ( r o u n d (Num / D e l t a ) −1, N b i t s , ' l e f t −msb ' ) ;
 

Script 6.19. Función que permite pasar de binario a decimal.



1 f u n c t i o n [Num] = CodDecimal ( B i n a r i o , N b i t s , e s p a c i o , minimo )
2 %F u n c i ó n que t r a n s f o r m a de b i n a r i o a d e c i m a l
3 P o s i c i o n = b i 2 d e ( B i n a r i o , ' l e f t −msb ' ) + 1 ;
4 P o s i c i o n e s =2^ N b i t s ;
5 D e l t a =( e s p a c i o ) / ( P o s i c i o n e s ) ;
6 Num=minimo+ P o s i c i o n * D e l t a ;
 

Script 6.20. Función objetivo del problema de la caneca.



1 f u n c t i o n [ F ] = F o b j e t i v o ( d , h , C o s to )
2 %E v a l u a r l a f u n c i ó n o b j e t i v o ( C o s to ) d e l p r o b l e m a
3 %de l a c a n e c a
4 F= C o s to * ( p i * d ^ 2 / 2 + p i * d * h ) ;
 

Script 6.21. Cuantificar el valor de la infactibilidad.



1 f u n c t i o n [ I n f a c t i b i l i d a d , Volumen ] = V a l o r I n f a c t i b i l i d a d ( . . .
2 P o b l a c i o n _ d e c , VolumenMin )
3 %F u n c i ó n que c u a n t i f i c a e l v a l o r de l a i n f a c t i b i l i d a d en
4 %e l p r o b l e m a de l a c a n e c a : cu an d o e l volumen e s menor que
5 %e l volumen mínimo
6 f o r i =1: s i z e ( Poblacion_dec , 1 )
7 Volumen ( i , 1 ) = p i * P o b l a c i o n _ d e c ( i , 1 ) ^ 2 * . . .
8 Poblacion_dec ( i , 2 ) / 4 ;
9 i f Volumen ( i , 1 ) <VolumenMin
10 I n f a c t i b i l i d a d ( i , 1 ) =VolumenMin−Volumen ( i , 1 ) ;
11 else
12 I n f a c t i b i l i d a d ( i , 1 ) =0;
13 end
14 end
 

Script 6.22. Selección por ruleta para codificación binaria.



1 f u n c t i o n [ P a d r e s , I n d i c e s ] = s e l e c c i o n ( P_bin , P_dec , . . .
2 NumSeleccion , C o s to )
3 %S e l e c c i o n p o r r u l e t a p a r a c o d i f i c a c i ó n b i n a r i a
4 f o r i = 1 : s i z e ( P_dec , 1 )
5 %p o r s e r de m i n i m i z a c i o n
6 F o b j ( i ) = 1 / F o b j e t i v o ( P_dec ( i , 1 ) , P_dec ( i , 2 ) , C o s to ) ;
7 end
8 suma=sum ( F o b j ) ;
9 f o r j = 1 : N u m S eleccio n
10 v a l o r _ r u l e t a =rand ;
11 acu m u lad o = 0 ;
12 f o r i = 1 : s i z e ( P_dec , 1 )
13 acu m u lad o = acu m u lad o + F o b j ( i ) / suma ;

190
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

14 i f acu m u lad o ≥ v a l o r _ r u l e t a
15 posicion = i ;
16 break ;
17 end
18 end
19 P a d r e s ( j , : ) = P _ b in ( p o s i c i o n , : ) ;
20 Indices ( j )=posicion ;
21 end
 

Script 6.23. Cruzamiento multi-punto (ver pseudocódigo 2.10, pág. 87).



1 f u n c t i o n [ H i j o s ] = c r u z a m i e n t o ( P a d r e s , Pc )
2 %F u n c i ó n que r e a l i z a r e c o m b i n a c i ó n m u l t i p u n t o
3 %Pc= número de p u n t o s de c r u z a m i e n t o
4 Tamano= s i z e ( P a d r e s , 2 ) ;
5 P u n to ( 1 ) = 1 ;
6 f o r i = 1 : Pc
7 P u n to ( i +1 ) = r o u n d ( r a n d * ( Tamano−1) ) + 1 ;
8 end
9 P u n to ( i +2 ) =Tamano ;
10 P u n to = s o r t ( P u n to ) ; %O r d e n a r l o s t r a m o s de menor a mayor
11
12 bandera1 =2;
13 bandera2 =1;
14
15 H i j o 1 = P a d r e s ( 1 , [ P u n to ( 1 ) : P u n to ( 2 ) ] ) ;
16 H i j o 2 = P a d r e s ( 2 , [ P u n to ( 1 ) : P u n to ( 2 ) ] ) ;
17
18 f o r i = 2 : Pc +1
19 H i j o 1 =[ H i j o 1 P a d r e s ( b a n d e r a 1 , [ P u n to ( i ) + 1 : P u n to ( i +1 ) ] ) ] ;
20 H i j o 2 =[ H i j o 2 P a d r e s ( b a n d e r a 2 , [ P u n to ( i ) + 1 : P u n to ( i +1 ) ] ) ] ;
21 i f b a n d e r a 1 ==2
22 bandera1 =1;
23 bandera2 =2;
24 else
25 bandera1 =2;
26 bandera2 =1;
27 end
28 end
29 H i j o s =[ H i j o 1 ; H i j o 2 ] ;
 

Script 6.24. Mutación aplicando Swap (cadenas binarias).



1 f u n c t i o n [ Hijos ] = mutacion ( Hijos )
2 %F u n c i ó n que a p l i c a m u t a c i ó n s i m u l t a n e a m e n t e a
3 %d o s i n d i v i d u o s u t i l i z a n d o i n t e r c a m b i o de l a
4 %i n f o r m a c i ó n de d o s p o s i c i o n e s a l e a t o r i a s ( swap )
5
6 a l e a t o r i o 1 = r o u n d ( r a n d * ( s i z e ( H i j o s , 2 ) −1) ) + 1 ;
7 a l e a t o r i o 2 = r o u n d ( r a n d * ( s i z e ( H i j o s , 2 ) −1) ) + 1 ;
8
9 Gen1= H i j o s ( 1 , a l e a t o r i o 1 ) ;
10 Gen2= H i j o s ( 1 , a l e a t o r i o 2 ) ;
11
12 H i j o s ( 1 , a l e a t o r i o 1 ) =Gen2 ;
13 H i j o s ( 1 , a l e a t o r i o 2 ) =Gen1 ;
14
15 a l e a t o r i o 1 = r o u n d ( r a n d * ( s i z e ( H i j o s , 2 ) −1) ) + 1 ;
16 a l e a t o r i o 2 = r o u n d ( r a n d * ( s i z e ( H i j o s , 2 ) −1) ) + 1 ;
17

191
Capítulo 6. Apéndice: scripts en matlab

18 Gen1= H i j o s ( 2 , a l e a t o r i o 1 ) ;
19 Gen2= H i j o s ( 2 , a l e a t o r i o 2 ) ;
20
21 H i j o s ( 2 , a l e a t o r i o 1 ) =Gen2 ;
22 H i j o s ( 2 , a l e a t o r i o 2 ) =Gen1 ;
 

6.5 Problema de caneca óptima (PCO) usando AG con


codificación real
Ver la sección 2.9.6.1 (pág. 117).
Script 6.25. Script principal del PCO usando AG real.

1
2 clear all ;
3 clc ;
4 Dmin = 0 ;
5 Dmax =3 1 ;
6 Lmin = 0 ;
7 Lmax =3 1 ;
8 T am P o b lacio n =1 0 ;
9 Vmin =3 0 0 ;
10 c =0.065;
11 G e n e r a c i o n e s =1 5 0 0 0 ;
12 T i p o C r u z a m i e n t o = 1 ; %T ip o =1 c r u z a m i e n t o l i n e a l
13 %T ip o =2 c r u z a m i e n t o p o r m ezcla
14 %T ip o =3 c r u z a m i e n t o p o r s i m u l a c i o n b i n a r i a
15
16 TipoMutacion =1; %T ip o =1 M u tacio n a l e a t o r i a
17 %T ip o =2 M u tacio n p o r p e r m u t a c i o n l i n e a l
18
19 %%P o b l a c i o n I n i c i a l
20 f o r i = 1 : T am P o b lacio n
21 P ( i , 1 ) = r a n d * Dmax ;
22 P ( i , 2 ) = r a n d * Lmax ;
23 end
24 [ Costo , Volumen ] = F o b j ( P ( : , 1 ) , P ( : , 2 ) , c , Vmin ) ;
25
26 f o r i =1: Generaciones
27 P a d r e = S e l e c c i o n R e a l ( Costo , P , T am P o b lacio n ) ;
28 Madre = S e l e c c i o n R e a l ( Costo , P , T am P o b lacio n ) ;
29 [ H ijo 1 , H i j o 2 ] = C r u z a m i e n t o R e a l ( P ad r e , Madre , . . .
30 T i p o C r u z a m i e n t o , c , Vmin ) ;
31 [ Hijo1M , Hijo2M ] = M u t a c i o n R e a l ( H ijo 1 , H ijo 2 , . . .
32 T ip o M u tacio n , Dmin , Dmax , Lmin , Lmax ) ;
33
34 [ C o s t o H i j o s , V o lu m en H ijo s ] = F o b j ( [ Hijo1M ( 1 ) ; Hijo2M ( 1 ) ] , . . .
35 [ Hijo1M ( 2 ) ; Hijo2M ( 2 ) ] , c , Vmin ) ;
36 [ H ijo , P o s i c i o n ] = S e l e c c i o n R e a l ( C o s t o H i j o s , . . .
37 [ Hijo1M ; Hijo2M ] , 2 ) ;
38 [ CostoMax , I n d i c e ] = max ( C o s to ) ;
39 i f C o s t o H i j o s ( P o s i c i o n ) <CostoMax
40 P ( Indice , : ) =Hijo ;
41 C o s to ( I n d i c e ) = C o s t o H i j o s ( P o s i c i o n ) ;
42 Volumen ( I n d i c e ) = V o lu m en H ijo s ( P o s i c i o n ) ;
43 end
44 end
45

192
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

46 [ Costo , i ] = min ( C o s to )
47 P( i , : )
48 Volumen ( i )
 

Script 6.26. Selección por ruleta.



1 f u n c t i o n [ P ad r e , P o s i c i o n ] = S e l e c c i o n R e a l ( Costo , P , T am P o b lacio n )
2 %S e l e c c i ó n p o r r u l e t a
3 F objT otal =0;
4 f o r i =1 : T am P o b lacio n
5 F o b j T o t a l = F o b j T o t a l + 1 / ( C o s to ( i , 1 ) ) ;
6 end
7
8 Acumulado = 0 ;
9 A l e a t o r i o =rand ;
10 f o r i = 1 : T am P o b lacio n
11 Acumulado =Acumulado + ( 1 / C o s to ( i , 1 ) ) / F o b j T o t a l ;
12 i f A l e a t o r i o ≤Acumulado
13 Posicion = i ;
14 break ;
15 end
16 end
17 P a d r e =P ( P o s i c i o n , : ) ;
 

Script 6.27. Cruzamiento lineal para codificación real.



1 f u n c t i o n [ H ijo 1 , H i j o 2 ] = C r u z a m i e n t o R e a l ( P ad r e , Madre , Tipo , c , Vmin )
2 %F u n c i ó n p a r a c r u z a m i e n t o con c o d i f i c a c i ó n r e a l
3 %C r u z a m i e n t o l i n e a
4
5 %T ip o =1 c r u z a m i e n t o l i n e a l
6 %T ip o =2 c r u z a m i e n t o p o r m ezcla
7 %T ip o =3 c r u z a m i e n t o p o r s i m u l a c i o n b i n a r i a
8
9 i f T ip o ==1
10 %H i j o s p a r a D
11 H i j o s ( 1 , 1 ) = 1 / 2 * ( Madre ( 1 ) + P a d r e ( 1 ) ) ;
12 H i j o s ( 2 , 1 ) = 1 / 2 * ( 3 * Madre ( 1 )−P a d r e ( 1 ) ) ;
13 H i j o s ( 3 , 1 ) =1/2 * ( − Madre ( 1 ) +3 * P a d r e ( 1 ) ) ;
14 %H i j o s p a r a L
15 H i j o s ( 1 , 2 ) = 1 / 2 * ( Madre ( 2 ) + P a d r e ( 2 ) ) ;
16 H i j o s ( 2 , 2 ) = 1 / 2 * ( 3 * Madre ( 2 )−P a d r e ( 2 ) ) ;
17 H i j o s ( 3 , 2 ) =1/2 * ( − Madre ( 2 ) +3 * P a d r e ( 2 ) ) ;
18 Hijos =abs ( Hijos ) ;
19 %E s c o g e r l o s d o s m e j o r e s h i j o s
20 [ Costo , Volumen ] = F o b j ( H i j o s ( : , 1 ) , H i j o s ( : , 2 ) , c , Vmin ) ;
21 [ C o s to _ o r d , i n d i c e ] = s o r t ( C o s to ) ;
22 Hijo1 = Hijos ( i n d i c e ( 1 ) , : ) ;
23 Hijo2 = Hijos ( i n d i c e ( 2 ) , : ) ;
24 end
 

Script 6.28. Mutación aleatoria para codificación real.



1 f u n c t i o n [ H ijo 1 , H i j o 2 ] = M u t a c i o n R e a l ( H ijo 1 , H ijo 2 , Tipo , . . .
2 Dmin , Dmax , Lmin , Lmax )
3 %F u n c i ó n p a r a m u t a c i ó n en c o d i f i c a c i ó n r e a l
4 %M u tació n a l e a t o r i a

193
Capítulo 6. Apéndice: scripts en matlab

5 i f T ip o ==1
6 H i j o 1 ( 1 ) = r a n d * ( Dmax−Dmin ) ;
7 H i j o 1 ( 2 ) = r a n d * ( Lmax−Lmin ) ;
8
9 H i j o 2 ( 1 ) = r a n d * ( Dmax−Dmin ) ;
10 H i j o 2 ( 2 ) = r a n d * ( Lmax−Lmin ) ;
11 end
 

6.6 Problema de empaquetamiento o corte rectangular 2-D


(PER2D)
Script 6.29. Script principal del PER2D utilizando AGs

1 %S c r i p t P r i n c i p a l p a r a r e s o l v e r e l p r o b l e m a de
2 %e m p a q u e t a m i e n t o en 2D u t i l i z a n d o AGs .
3
4 clear all
5 clc
6 close a l l
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 %%%%%%%%%%%%% D ato s de e n t r a d a %%%%%%%%%%%%%%%%%%
9 NumPlacas =1 1 ;
10 DatosPlacas =[1 ,1
11 2 ,2
12 3 ,4
13 5 ,2
14 3 ,1
15 4 ,1
16 3 ,2
17 4 ,2
18 1 ,4
19 3 ,1
20 1 ,1];
21 A l t o P a l e t a =7;
22 AnchoPaleta =5;
23 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
24 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
25 T am P o b lacio n =1 0 ;
26 %Numero maximo de g e n e r a c i o n e s C r i t e r i o p a r a d a
27 MaxGen =1 0 0 0 ;
28 TasaMutacion =0 . 3 ;
29 P o b l a c i o n = z e r o s ( TamPoblacio n , NumPlacas ) ;
30 %c o n s t r u i r P o b l a c i o n I n i c i a l
31 f o r i = 1 : T am P o b lacio n
32 A l t e r n a t i v a = r an d p er m ( NumPlacas ) ;
33 Poblacion ( i , : ) = Al t e rn a t i va ;
34 ValFunObj ( i , 1 ) = B o t t o m L e f t ( NumPlacas , A l t e r n a t i v a , . . .
35 DatosPlacas , A lto P aleta , AnchoPaleta ) ;
36 end
37 PosIncumbente =1;
38 [ I n c u m b e n t e ( P o s I n c u m b e n t e ) , P o s i c i o n ] = min ( ValFunObj ) ;
39 I ter I n cu m b en te ( PosIncumbente ) =1;
40 AlternativaIncumbente =Poblacion ( Posicion , : ) ;
41 f o r i = 1 : MaxGen
42 S e l e c R e p r o d = S e l e c c i o n T o r n e o 2 D ( ValFunObj , T am P o b lacio n ) ;
43 V e c P a r e j a s = r an d p er m ( T am P o b lacio n ) ;
44 f o r j = 1 : T am P o b lacio n
45 PosMadre = S e l e c R e p r o d ( V e c P a r e j a s ( j ) ) ;

194
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

46 i f j +1> T am P o b lacio n
47 PosPadre=SelecReprod ( VecParejas ( 1 ) ) ;
48 else
49 P o s P a d r e = S e l e c R e p r o d ( V e c P a r e j a s ( j +1 ) ) ;
50 end
51 P a d r e = P o b l a c i o n ( P o s P ad r e , : ) ;
52 Madre = P o b l a c i o n ( PosMadre , : ) ;
53 [ H i j o 1 ] = CruzamientoPMX ( P ad r e , Madre , NumPlacas ) ;
54 [ H i j o 2 ] = CruzamientoPMX ( P ad r e , Madre , NumPlacas ) ;
55 i f r an d < T a s a M u t a c i o n
56 Hijos =mutacion ( [ Hijo1 ; Hijo2 ] ) ;
57 Hijo1 =Hijos ( 1 , : ) ;
58 Hijo2 =Hijos ( 1 , : ) ;
59 end
60 F u n O b jH ijo 1 = B o t t o m L e f t ( NumPlacas , H ijo 1 , D a t o s P l a c a s , . . .
61 A lto P aleta , AnchoPaleta ) ;
62 F u n O b jH ijo 2 = B o t t o m L e f t ( NumPlacas , H ijo 2 , D a t o s P l a c a s , . . .
63 A lto P aleta , AnchoPaleta ) ;
64 i f FunObjHijo 1 < I n c u m b e n t e
65 PosIncumbente=PosIncumbente +1;
66 I n c u m b e n t e ( P o s I n c u m b e n t e ) = F u n O b jH ijo 1 ;
67 I ter I n cu m b en te ( PosIncumbente ) = i ;
68 A lter nativa I nc um b en te =Hijo1 ;
69 end
70 i f FunObjHijo 2 < I n c u m b e n t e
71 PosIncumbente=PosIncumbente +1;
72 I n c u m b e n t e ( P o s I n c u m b e n t e ) = F u n O b jH ijo 2 ;
73 I ter I n cu m b en te ( PosIncumbente ) = i ;
74 A lter nativa I nc um b en te =Hijo2 ;
75 end
76 P o b l a c i o n ( PosMadre , : ) = H i j o 1 ;
77 P o b l a c i o n ( P o s P ad r e , : ) = H i j o 2 ;
78 ValFunObj ( PosMadre , : ) = F u n O b jH ijo 1 ;
79 ValFunObj ( P o s P ad r e , : ) = F u n O b jH ijo 2 ;
80 end
81
82 end
83 Alte rnativa =AlternativaIncumbente ;
84 BottomLeftPlot ;
 

Script 6.30. Evaluación de la función objetivo utilizando BottomLeft.



1 f u n c t i o n [ ValFunObj ] = B o t t o m L e f t ( NumPlacas , . . .
2 A l t e r n a t i v a , DatosPlacas , A lto P aleta , AnchoPaleta )
3 %F u n c i ó n p a r a e v a l u a r l a f u n c i ó o b j e t i v o d e l p r o b l e m a
4 %de e m p a q u e t a m i e n t o r e c t a n g u l a r a p a r t i r de una p e r m u t a c i ó n
5 %que r e p r e s e n t a l a s e c u e n c i a de e n c a r r a m i e n t o de l a s
6 %p i e z a s r e c t a n g u l a r e s a p a r t i r de un c r i t e r i o de p r i o r i z a c i ó n
7 %Abajo−I z q u i e r d a ( B o t t o m L e f t )
8
9 H= A l t o P a l e t a ;
10 L= A n c h o P a l e t a ;
11 M a t r i z P a l e t a = z e r o s (H , L ) ;
12
13 f o r i = 1 : NumPlacas
14 AltoPlaca=DatosPlacas ( Al t e rn a t i va ( i ) ,1) ;
15 A n ch o P laca = D a t o s P l a c a s ( A l t e r n a t i v a ( i ) , 2 ) ;
16 PosX=L−A n ch o P laca + 1 ;
17 PosY = 0 ;
18 [ MovAb , PosY ] = VerAb ( PosX , PosY , M a t r i z P a l e t a , A l t o P a l e t a , . . .
19 A n ch o P laca ) ;
20 i f PosY−A l t o P l a c a ≥0 %D i s p o n i b i l i d a d de e s p a c i o
21 f o r k = 1 : A n c h o P a l e t a−A n ch o P laca %maximo numero de

195
Capítulo 6. Apéndice: scripts en matlab

22 %co lu m n as a l a IZ
23 [ MovIz , PosX ] = V e r I z ( PosX , PosY , M a t r i z P a l e t a , . . .
24 AltoPlaca ) ;
25 [ MovAb , PosY ] = VerAb ( PosX , PosY , M a t r i z P a l e t a , . . .
26 A l t o P a l e t a , A n ch o P laca ) ;
27 i f ( MovIz ==1) & ( MovAb==1)
28 break
29 end
30 end
31 f o r k=PosY−A l t o P l a c a + 1 : PosY
32 f o r l =PosX : PosX+ AnchoPlaca −1
33 M a t r i z P a l e t a ( k , l ) =1;
34 end
35 end
36 end
37 end
38 A r e a P a l e t a =H* L ;
39 ValFunObj = A r e a P a l e t a −sum ( sum ( M a t r i z P a l e t a ) ) ;
 

Script 6.31. Verificar si la pieza rectangular puede desplazarse hacia abajo.



1 %F u n c i o n VerAb
2 f u n c t i o n [ MovAb , PosY ] = VerAb ( PosX , PosY , M a t r i z P a l e t a , . . .
3 A l t o P a l e t a , A n ch o P laca )
4
5 PosY=PosY + 1 ;
6 MovAb= 0 ;
7 i f PosY> A l t o P a l e t a
8 MovAb = 1 ;
9 PosY=PosY−1;
10 return
11 end
12
13 f o r j = PosX : PosX+AnchoPlaca −1
14 i f M a t r i z P a l e t a ( PosY , j ) ==1
15 PosY=PosY −1;
16 MovAb= 1 ;
17 break
18 end
19 end
20
21 i f MovAb==1
22 return
23 else
24 [ MovAb , PosY ] = VerAb ( PosX , PosY , M a t r i z P a l e t a , . . .
25 A l t o P a l e t a , A n ch o P laca ) ;
26 end
 

Script 6.32. Verificar si la pieza rectangular puede desplazarse hacia la izquierda.



1 %F u n c i o n V e r I z
2 f u n c t i o n [ MovIz , PosX ] = V e r I z ( PosX , PosY , M a t r i z P a l e t a , A l t o P l a c a )
3
4 MovIz = 0 ; %a s u m i r que l a p l a c a s e p u ed e mover
5 i f PosX==0 %s i l l e g o a l e x t r e m o i z de l a p a l e t a
6 MovIz = 1 ;
7 PosX = 1 ;
8 return
9 else
10 f o r i =PosY−A l t o P l a c a +1 : PosY

196
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

11 i f M a t r i z P a l e t a ( i , PosX−1)==1 %s i l a p o s i c i o e s t a o cu p ad a
12 MovIz = 1 ;
13 break
14 end
15 end
16 i f MovIz==0
17 PosX=PosX −1;
18 end
19 end
 

Script 6.33. Selección por torneo para PER2D.



1 f u n c t i o n SelecReprod =SeleccionTorneo2D ( ValAdaptacion , . . .
2 T am P o b lacio n )
3 %F u n c i o n s e l e c c i o n p o r t o r n e o v e r i o n 1
4 Pos = r an d p er m ( T am P o b lacio n ) ;
5 Pos =Pos ' ;
6 f o r t = 1 : TamPoblacio n −1
7 I n d i v i d u o 1 = V a l A d a p t a c i o n ( Pos ( t ) ) ;
8 I n d i v i d u o 2 = V a l A d a p t a c i o n ( Pos ( t +1 ) ) ;
9 i f Individuo1 <Individuo2
10 S e l e c R e p r o d ( t , 1 ) =Pos ( t ) ;
11 else
12 S e l e c R e p r o d ( t , 1 ) =Pos ( t +1 ) ;
13 end
14 end
15 t = t +1;
16 I n d i v i d u o 1 = V a l A d a p t a c i o n ( Pos ( t ) ) ;
17 I n d i v i d u o 2 = V a l A d a p t a c i o n ( Pos ( 1 ) ) ;
18 i f Individuo1 < Individuo2
19 S e l e c R e p r o d ( t , 1 ) = Pos ( t ) ;
20 else
21 S e l e c R e p r o d ( t , 1 ) = Pos ( 1 ) ;
22 end
 

Script 6.34. Graficar resultado del proceso de optimización para el PER2D.



1 %S c r i p t p a r a g r a f i c a r r e s u l t a d o d e l e m p a q u e t a m i e n t o
2 %ó p tim o
3 h o l d on
4 H= A l t o P a l e t a ;
5 L= A n c h o P a l e t a ;
6 M a t r i z P a l e t a = z e r o s (H , L ) ;
7
8 f o r i = 1 : NumPlacas
9 AltoPlaca=DatosPlacas ( Al t e rn a t i va ( i ) ,1) ;
10 A n ch o P laca = D a t o s P l a c a s ( A l t e r n a t i v a ( i ) , 2 ) ;
11 PosX=L−A n ch o P laca + 1 ;
12 PosY = 0 ;
13 [ MovAb , PosY ] = VerAb ( PosX , PosY , M a t r i z P a l e t a , A l t o P a l e t a , . . .
14 A n ch o P laca ) ;
15 i f PosY−A l t o P l a c a ≥0 %D i s p o n i b i l i d a d de e s p a c i o
16 f o r k = 1 : A n c h o P a l e t a−A n ch o P laca %maximo numero de
17 %co lu m n as a l a IZ
18 [ MovIz , PosX ] = V e r I z ( PosX , PosY , M a t r i z P a l e t a , . . .
19 AltoPlaca ) ;
20 [ MovAb , PosY ] = VerAb ( PosX , PosY , M a t r i z P a l e t a , . . .
21 A l t o P a l e t a , A n ch o P laca ) ;
22 i f ( MovIz ==1) & ( MovAb==1)
23 break

197
Capítulo 6. Apéndice: scripts en matlab

24 end
25 end
26 f o r k=PosY−A l t o P l a c a + 1 : PosY
27 f o r l =PosX : PosX+ AnchoPlaca −1
28 M a t r i z P a l e t a ( k , l ) =1;
29 end
30 end
31 P o s C o l= r o u n d ( r a n d * ( 7 ) ) + 1 ;
32 i f P o s C o l ==1
33 C o l o r =[ 0 0 0 ] ;
34 e l s e i f P o s C o l ==2
35 C o l o r =[ 0 0 1 ] ;
36 e l s e i f P o s C o l ==3
37 C o l o r =[ 0 1 1 ] ;
38 e l s e i f P o s C o l ==4
39 C o l o r =[ 1 0 1 ] ;
40 e l s e i f P o s C o l ==5
41 C o l o r =[ 1 0 1 ] ;
42 e l s e i f P o s C o l ==6
43 C o l o r =[ 1 1 0 ] ;
44 e l s e i f P o s C o l ==7
45 C o l o r =[ 1 0 0 ] ;
46 e l s e i f P o s C o l ==8
47 C o l o r =[ 0 1 0 ] ;
48 end
49 r e c t a n g l e ( ' P o s i t i o n ' , [ PosX , A l t o P a l e t a −PosY + 1 , . . .
50 AnchoPlaca , A l t o P l a c a ] , ' F a c e C o l o r ' , C o l o r )
51 end
52 end
53 A r e a P a l e t a =H* L ;
54 ValFunObj = A r e a P a l e t a −sum ( sum ( M a t r i z P a l e t a ) )
55 figure
56 p l o t ( I ter I n cu m b en te , Incumbente )
 

6.7 Solución del problema de flujo de trabajos en línea


(Flow-Shop) utilizando recocido simulado (SA)
Script 6.35. Script principal del problema flow-sop utilizando SA

1 %S c r i p t p r i n c i p a l p a r a r e s o l v e r e l p r o b l e m a de
2 %F l u j o en l í n e a de t r a b a j o s ( Flow s h o p ) u t i l i z a n d o
3 %l a t é c n i c a de r e c o c i d o s i m u l a d o ( s i m u l a t e d a n n e a l i n g )
4 clear all ;
5 clc ;
6
7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8 m=1 0 ; %Numero de m áq u in as
9 n =2 0 ; %Numero de t a r e a s
10 k =1 0 0 ; %p e r t u r b a c i o n e s p a r a T0
11 Tao = 0 . 8 ; %T as a de a c e p t a c i ó n de v e c i n o s
12 r h o =n *m; %L o n g i t u d de l a c a d e n a de Markov ;
13 %m a x i t e r =1 0 0 ; %número máximo de i t e r a c i o n e s .
14 alpha =0.97; %a l p h a <1 Temperatura
15 beta= 1; %b e t a >1 Cadena Markov
16 P=...
17 [ 7 4 21 58 4 21 28 58 83 31 61 94 44 97 94 66 6 37 22 99 83
18 28 3 27 61 34 76 64 87 54 98 76 41 70 43 42 79 88 15 49 72
19 89 52 56 13 7 32 32 98 46 60 23 87 7 36 26 85 7 34 36 48

198
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

20 60 88 26 58 76 98 29 47 79 26 19 48 95 78 77 90 24 10 85 55
21 54 66 12 57 70 82 99 84 16 41 23 11 68 58 30 5 5 39 58 31
22 92 11 54 97 57 53 65 77 51 36 53 19 54 86 40 56 79 74 24 3
23 9 8 88 72 27 22 50 2 49 82 93 96 43 13 60 11 37 91 84 67
24 4 18 25 28 95 51 84 18 6 90 69 61 57 5 75 4 38 28 4 80
25 25 15 91 49 56 10 62 70 76 99 58 83 84 64 74 14 18 48 96 86
26 15 84 8 30 95 79 9 91 76 26 42 66 70 91 67 3 98 4 71 62];
27 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
28 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
29 P i _ i = r an d p er m ( n ) ; %G e n e r a r una a l t e r n a t i v a i n i c i a l
30 Cmax_i = FobjFS ( P i _ i , P , m, n , 0 ) ;
31 I n c u m b e n t e . F o b j =Cmax_i ;
32 Incumbente . I n d iv id u o = P i_ i ;
33 Cmax_j = FobjFS ( P i _ i , P , m, n , 1 ) ;
34 figure
35 %C a l c u l o de l a t e m p e r a t u r a i n i c i a l T0
36 m1 = 0 ;
37 m2 = 0 ;
38 DeltaE =0;
39 f o r i =1: k
40 P i_ j = GenerarVecino ( Pi_i , n ) ;
41 Cmax_j = FobjFS ( P i _ j , P , m, n , 0 ) ;
42 i f ( Cmax_j−Cmax_i ) ≤0
43 m1=m1 + 1 ;
44 else
45 m2=m2 + 1 ;
46 D e l t a E = D e l t a E +Cmax_j ;
47 end
48 end
49 D e l t a E = D e l t a E / m2 ;
50 To=10 e5 ;%D e l t a E / l o g ( m2 / ( m2* Tao−m1* (1− Tao ) ) ) ;
51 C o n t E s t a d o s = 0 ; %C u en ta e l numero de cam b io s de e s t a d o
52 %s i n m e j o r a r i n c u m b e n t e
53 w h i l e C o n t E s t a d o s < 300 %C r i t e r i o de p a r a d a : cam b io s
54 %de e s t a d o s i n m e j o r a r i n c u m b e n t e
55 k =1;
56 ContE stados= ContE stados +1;
57 w h i l e k< r h o
58 P i_ j = GenerarVecino ( Pi_i , n ) ;
59 Cmax_j = FobjFS ( P i _ j , P , m, n , 0 ) ;
60 %%REGLA DE ACEPTACIÓN DE METROPOLIS
61 i f ( Cmax_j−Cmax_i ) ≤0 %A cep ta un v e c i n o
62 Pi_i =Pi_j ;
63 Cmax_i=Cmax_j ;
64 else
65 P r o b _ j = exp ( −( Cmax_j−Cmax_i ) / ( To ) ) ;
66 a l e a t o r i o =rand ;
67 i f a l e a t o r i o ≤ P r o b _ j %A cep ta un v e c i n o
68 %s eg u n P r o b a b i l i d a d
69 Pi_i =Pi_j ;
70 Cmax_i=Cmax_j ;
71 end
72 end
73 i f Cmax_i < I n c u m b e n t e . F o b j
74 ContEstados =0;
75 I n c u m b e n t e . F o b j=Cmax_i ;
76 Incumbente . I n d iv id u o = P i_ i ;
77 Incumbente . Fobj
78 end
79 k=k + 1 ;
80 end
81 rho= beta * rho ;
82 To= a l p h a * To ;
83 end
84 % figure ;

199
Capítulo 6. Apéndice: scripts en matlab

85 Cmax_j = FobjFS ( I n c u m b e n t e . I n d i v i d u o , P , m, n , 1 ) ;
 

Script 6.36. Evaluar función objetivo y dibujar diagrama Gantt.



1 f u n c t i o n Cmax = FobjFS ( S , P , m, t , D i b u j a r )
2 %D i b u j a r = 1 ; %D i b u j a r =0 No d i b u j a
3 %m= m áq u in as ;
4 %t = t a r e a s ;
5
6 DeltaColor = f l o o r (128/ t ) ;
7 mapa= g r a y ;
8 f o r color =1: t
9 map ( c o l o r , : ) = mapa ( f l o o r ( r a n d * 6 3 ) + 1 , : ) ;%[ r a n d r a n d r a n d ] ;
10 end
11
12 %P r i m e r a P o s i c i o n
13 C ( 1 , 1 ) =P ( 1 , S ( 1 ) ) ;
14 i f D i b u j a r ==1
15 C o l o r =map ( S ( 1 ) , : ) ;
16 Y1=2 * t ;
17 X1 = 0 ;
18 an ch o =C ( 1 , 1 ) ;
19 a l t o =1;
20 r e c t a n g l e ( ' P o s i t i o n ' , [ X1 , Y1 , ancho , a l t o ] , ' F a c e C o l o r ' , C o l o r ) ;
21 end
22
23 f o r j = 2 : t %R e c o r r i d o p o r co lu m n as ( p r i m e r a f i l a )
24 C ( 1 , j ) =C ( 1 , j −1)+P ( 1 , S ( j ) ) ;
25 i f D i b u j a r ==1
26 C o l o r =map ( S ( j ) , : ) ;
27 Y1=2 * t ;
28 X1=C ( 1 , j −1) ;
29 an ch o =P ( 1 , S ( j ) ) ;
30 a l t o =1;
31 r e c t a n g l e ( ' P o s i t i o n ' , [ X1 , Y1 , ancho , a l t o ] , ' F a c e C o l o r ' , . . .
32 Color ) ;
33 end
34 end
35
36 f o r i = 2 :m %R e c o r r i d o p o r f i l a s ( p r i m e r a columna )
37 C ( i , 1 ) =C ( i −1 ,1)+P ( i , S ( 1 ) ) ;
38 i f D i b u j a r ==1
39 C o l o r =map ( S ( 1 ) , : ) ;
40 Y1=2 * ( t−i +1 ) ;
41 X1=C ( i −1 ,1) ;
42 an ch o =P ( i , S ( 1 ) ) ;
43 a l t o =1;
44 r e c t a n g l e ( ' P o s i t i o n ' , [ X1 , Y1 , ancho , a l t o ] , ' F a c e C o l o r ' , . . .
45 Color ) ;
46 end
47 end
48
49 f o r i = 2 :m
50 f o r j =2: t
51 maximo=max ( C ( i , j −1) ,C ( i −1, j ) ) ;
52 C ( i , j ) =maximo+P ( i , S ( j ) ) ;
53 i f D i b u j a r ==1
54 C o l o r =map ( S ( j ) , : ) ;
55 Y1=2 * ( t−i +1 ) ;
56 X1=maximo ;
57 an ch o =P ( i , S ( j ) ) ;
58 a l t o =1;
59 r e c t a n g l e ( ' P o s i t i o n ' , [ X1 , Y1 , ancho , a l t o ] , . . .

200
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

60 ' FaceColor ' , Color ) ;


61 end
62 end
63 end
64 Cmax=C ( i , j ) ;
 

Script 6.37. Generar un vecino (mutación) utilizando swap.



1 f u n c t i o n P i_ j = GenerarVecino ( Pi_i , n )
2 %M u tació n : F u n c i ó n p a r a g e n e r a r un v e c i n o
3 Pi_j =Pi_i ;
4 Pos1 = f l o o r ( ( n −1) * r a n d ) + 1 ;
5 Pos2 = f l o o r ( ( n −1) * r a n d ) + 1 ;
6 w h i l e Pos1 ==Pos2
7 Pos1 = f l o o r ( ( n −1) * r a n d ) + 1 ;
8 Pos2 = f l o o r ( ( n −1) * r a n d ) + 1 ;
9 end
10 Aux= P i _ i ( Pos1 ) ;
11 P i _ j ( Pos1 ) = P i _ i ( Pos2 ) ;
12 P i _ j ( Pos2 ) =Aux ;
 

6.8 Optimización multiobjetivo


Script 6.38. Script principal del procedimiento para obtener conjunto de frentes no dominados.

1 %P r o c e d i m i e n t o que p e r m i t e o b t e n e r l o s f r e n t e s no
2 %d o m in ad o s de un c o n j u n t o de d a t o s m u l t i o b j e t i v o
3 clear all ;
4 clc ;
5 h o l d on ;
6 %M_Fobj= M a t r i z con i = f u n c i o n e s o b j e t i v o y j v a l o r e s
7 M_Fobj =[ 3 5 41 35 55 55 15 25 20 ...
8 10 55 30 20 50 30 15 30 ...
9 10 5 20 15 45 45 45 55 ...
10 65 65 45 35 41 64 40 31 ...
11 35 53 65 63 2 20 5 60 ...
12 40 42 24 23 11 6 2 8 ...
13 13 6 47 49 27 37 57 63 ...
14 53 32 36 21 17 12 24 27 ...
15 15 62 49 67 56 37 37 57 ...
16 47 44 46 49 49 53 61 57 ...
17 56 55 15 14 11 16 4 28 ...
18 26 26 31 15 22 18 26 25 ...
19 22 25 19 20 18 ; . . .
20 35 49 17 45 20 30 30 50 ...
21 43 60 60 65 35 25 10 5 ...
22 20 30 40 60 65 20 10 5 ...
23 35 20 30 40 37 42 60 52 ...
24 69 52 55 65 60 20 5 12 ...
25 25 7 12 3 14 38 48 56 ...
26 52 68 47 58 43 31 29 23 ...
27 12 12 26 24 34 24 58 69 ...
28 77 77 73 5 39 47 56 68 ...
29 16 17 13 11 42 43 52 48 ...
30 37 54 47 37 31 22 18 18 ...
31 52 35 67 19 22 24 27 24 ...

201
Capítulo 6. Apéndice: scripts en matlab

32 27 21 21 26 18] ';
33 T ip o O p t =[ 0 0 ] ; %X1 X2 0= m i n i m i z a r 1= m a x i m i a z a r
34
35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36 NumFobj= s i z e ( M_Fobj , 2 ) ;
37 i f NumFobj
38 p l o t ( M_Fobj ( : , 1 ) , M_Fobj ( : , 2 ) , ' bd ' ) ;
39 end
40 M_FobjAux=M_Fobj ;
41
42 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
43 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
44 %%%%%%%%%%%% OBTENER FRENTES DE PARETO %%%%%%%%%%%
45
46 i f T ip o O p t ( 1 ) ==1 %s i f o b j 1 e s de m a x i m i z a c i o n
47 [ f1 , P ] = d s o r t ( M_Fobj ( : , 1 ) ) ; %O r d e n a r l a p o b l a c i o n de
48 %a c u e r d o a l o r d e n d e s c e n d e n t e de i m p o r t a n c i a
49 %de l a f o b j 1
50 e l s e %s i f o b j 1 e s de m i n i m i z a c i o n
51 [ f1 , P ] = s o r t ( M_Fobj ( : , 1 ) ) ;
52 end
53
54 %% R u t i n a que O b t i e n e t o d o s l o s f r e n t e s
55 l =1;
56 w h i l e i s e m p t y ( P ) == 0 %S i P t i e n e e l e m e n t o s h ag a
57 [ F rentes O rd ( l ) . F r e n t e ]= FrentesNDordenados ( P , . . .
58 M_FobjAux , TipoOpt , NumFobj ) ;
59 k =1;
60 f o r i =1: s i z e ( P , 1 )
61 f o r j =1: s i z e ( FrentesOrd ( l ) . Frente , 1 )
62 i f P ( i , 1 ) == F r e n t e s O r d ( l ) . F r e n t e ( j , 1 )
63 BorrarPos ( k )= i ;
64 k=k + 1 ;
65 end
66 end
67 end
68 P ( BorrarPos ) = [ ] ;
69 BorrarPos = zeros (1) ;
70 l = l +1;
71 end
72 i f NumFobj
73 f o r i =1: s i z e ( FrentesOrd , 2 )
74 i f i == 1
75 p l o t ( M_Fobj ( F r e n t e s O r d ( i ) . F r e n t e , 1 ) , . . .
76 M_Fobj ( F r e n t e s O r d ( i ) . F r e n t e , 2 ) , ' b l a c k + : ' ) ;
77 else
78 p l o t ( M_Fobj ( F r e n t e s O r d ( i ) . F r e n t e , 1 ) , . . .
79 M_Fobj ( F r e n t e s O r d ( i ) . F r e n t e , 2 ) , ' b l u e + : ' ) ;
80 end
81 end
82 end
 

Script 6.39. Obtener frentes no dominados ordenados.



1 f u n c t i o n [ F r e n t e s O r d ] = F r e n t e s N D o r d e n a d o s ( P , M_Fobj , TipoOpt ,M)
2 %O b t i e n e l o s f r e n t e s no d o m in ad o s y l o s o r d e n a
3 %M=número de f u n c i o n e s o b j e t i v o s a c o m p a r a r
4 cambio = t r u e ;
5 f o r i =2: M
6 [ P ] = FrenteNoDominado ( P , M_Fobj , i , T ip o O p t ) ;
7 k =1;
8 l =1;
9 %Es n e c e s a r i o una u l t i m a r e v i s i o n p a r a s a c a r l a s d o m in ad as

202
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

10 i f T ip o O p t ( i ) ==0
11 f o r j = 1 : s i z e ( P , 1 ) −1
12 %s i l a s o l u c i o n j domina a l a j +1 , l a j +1 d eb e s a l i r
13 i f M_Fobj ( P ( l , 1 ) ,M) ≤M_Fobj ( P ( j + 1 , 1 ) ,M)
14 b o r r a r ( k , 1 ) = j +1;
15 k=k + 1 ;
16 else
17 l = j +1;
18 end
19 end
20 else
21 f o r j = 1 : s i z e ( P , 1 ) −1
22 %s i l a s o l u c i o n j domina a l a j +1 , l a j +1 d eb e s a l i r
23 i f M_Fobj ( P ( l , 1 ) ,M) ≥M_Fobj ( P ( j + 1 , 1 ) ,M)
24 b o r r a r ( k , 1 ) = j +1;
25 k=k + 1 ;
26 else
27 l = j +1;
28 end
29 end
30 end
31 i f k > 1 %S i " B o r r a r " t i e n e e l e m e n t o s h ag a
32 P( borrar ) =[];
33 end
34 end
35 F r e n t e s O r d =P ;
 

Script 6.40. Obtener soluciones del conjunto P que pertenecen al frente no dominado (método de Kung
Kung et al. (1975)).

1 f u n c t i o n [ Fnd ] = FrenteNoDominad o ( P , M_V_fobj , . . .
2 S eg u n d aF u n cio n , T ip o O p t )
3 %O b t i e n e l a s s o l u c i o n e s d e l c o n j u n t o P que
4 %p e r t e n e c e n a l f r e n t e no dominado
5
6 %M_V_fobj = m a t r i z de v a l o r e s de l a s d i f e r e n t e s f u n c i o n e s
7 %o b j e t i v o de c a d a uno de l o s i n d i v i d u o s de l a p o b l a c i o n
8 N= s i z e ( P , 1 ) ;
9 P o s D i v i d i r = r o u n d ( ( N) / 2 ) ;
10 i f N>1
11 [ I ] = FrenteNoDominado ( P ( [ 1 : P o s D i v i d i r ] , : ) , . . .
12 M_V_fobj , S eg u n d aF u n cio n , T ip o O p t ) ;
13 [ S ] = FrenteNoDominado ( P ( [ P o s D i v i d i r + 1 :N ] , : ) , . . .
14 M_V_fobj , S eg u n d aF u n cio n , T ip o O p t ) ;
15 %Se v e r i f i c a l a d o m i n a n c i a r e s p e c t o a l a s e g u n d a
16 %F o b j con l a que s e compara
17 i f T ip o O p t ( S eg u n d aF u n c io n ) ==0
18 i f M_V_fobj ( S ( s i z e ( S , 1 ) ) , S eg u n d aF u n c i o n ) ≤ . . .
19 M_V_fobj ( I ( s i z e ( I , 1 ) ) , S eg u n d aF u n c i o n )
20 %D o m in an cia f u e r t e
21 M=[ I ; S ] ;
22 else
23 M=[ I ] ;
24 end
25 end
26
27 i f T ip o O p t ( S eg u n d aF u n c io n ) ==1
28 i f M_V_fobj ( S ( s i z e ( S , 1 ) ) , S eg u n d aF u n c i o n ) ≥ . . .
29 M_V_fobj ( I ( s i z e ( I , 1 ) ) , S eg u n d aF u n c i o n )
30 %D o m in an cia f u e r t e
31 M=[ I ; S ] ;
32 else

203
Capítulo 6. Apéndice: scripts en matlab

33 M=[ I ] ;
34 end
35 end
36 Fnd=M;
37 e l s e Fnd=P ;
38 end
 

204
Bibliografía

Aarts, E. H. L. and Van Laarhoven, P. J. M.: 1985, Statistical cooling : a general approach to
combinatorial optimisation problems., Philips J. of Research, 40 pp. 193–226.
Aubin, J. and Ferland, J.: 1989, A large scale timetabling problem., Computers and Operations
Research, 16:1 pp. 67–77.
Baker, J. E.: 1985, Adaptive selection methods for genetic algorithms., In proceedings of an
international Conference on Genetic Algorithms and their Applications. pp. 101–111.
Carter, M.: 1989, A lagrangian relaxation approach to the classroom assignment problem.,
Computers and Operations Research, 27:2 pp. 230–246.
Cerny, V.: 1985, Thermodynamical approach to the traveling salesman problem : an efficient
simulation algorithm., J. of Optimization Theory and Applications, 45(1) pp. 41–51.
Choi, S. and Yang, F.: 2003, A machine-order search space for job-shop scheduling problems,
Intl. Trans. in Op. Res. 10 pp. 597–610.
Chu, P. and Beasley, J.: 1997, A genetic algorithm for the generalized assignment problem.,
Computers Operations Research, 24(1) pp. 17–23.
Chunyu, R. and Xiaobo, W.: 2009a, Study on hybrid genetic algorithm for multi-type vehicles
and multi-depot vehicle routing problem with backhauls, Intelligent Computation Technology
and Automation, 2009. ICICTA’09. Second International Conference on, Vol. 1, IEEE,
pp. 197–200.
Chunyu, R. and Xiaobo, W.: 2009b, Study on improved hybrid genetic algorithm
for multi-depot vehicle routing problem with backhauls, Artificial Intelligence and
Computational Intelligence, 2009. AICI’09. International Conference on, Vol. 2, IEEE,
pp. 347–350.
Chunyu, R., Zhendong, S. and Xiaobo, W.: 2009, Study on single and mixed fleet strategy for
multi-depot vehicle routing problem with backhauls, Computational Intelligence and Natural
Computing, 2009. CINC’09. International Conference on, Vol. 1, IEEE, pp. 425–428.
Clarke, G. and Wright, J. W.: 1964, Scheduling of vehicles from a central depot to a number of
delivery points, Operations research 12(4), 568–581.
Dantzig, G.: 1957, Discrete-variable extremum problems, Operations Research 5, 266–277.
Dantzig, G., Fulkerson, R. and Johnson, S. M.: 1954, Solution of a large-scale traveling
salesman problem, Operations Research 2, 393–410.
Deb, K.: 2004, Multi-Objective Optimization Using Evolutionary Algorithms., John Wiley &
Sons.
Deb, K., Agrawal, S., Pratap, S. and Meyarivan, T.: 2000, A fast elitist non-dominated sorting
genetic algorithm for multi-objective optimization: Nsga-ii., In proceedings of the parallel

205
Bibliografía

problem solving from nature VI (PPSN-VI) pp. 849–858.


Deneubourg, J.-L., Aron, S., Goss, S. and Pasteels, J.-M.: 1990, The self-organizing exploratory
pattern of the argentine ant., Journal of Insect Behavior, 3 pp. 159–168.
Dinkel, J., Mote, J. and Venkataramanan, M.: 1989, An efficient decision support system for
academic course scheduling., Operations Research, 37:6 pp. 853–864.
Dorigo, M. and Colorni, A.: 1996, The ant system: Optimization by a colony of cooperating
agents, IEEE Transactions on Systems 26, 1–13.
Dorigo, M. and Stützle, T.: 2004, Ant Colony Optimization., The MIT Press, Cambridge,
Massachusetts, London, England.
Dréo, J., Pétrowski, A., Siarry, P. and Taillard, E.: 2003, Metaheuristics for Hard Optimization.,
Springer.
Escobar-Falcón, L. M., Álvarez Martínez, D., Granada, M., Willmer-Escobar, J. and
Romero-Lázaro, R. A.: 2016b, Matheuristic algorithm for the threedimensional
loading capacitated vehicle routing problem (3L-CVRP), Revista Facultad de Ingeniería,
Universidad de Antioquia (9), 20.
Ferland, J. and Roy, S.: 1985, Timetabling problem for university as assignment of avtivities to
resources., Computers and Operations Research, 12:2 pp. 207–218.
Garey, M. and Johnson, D.: 1979, A guide to the theory of np-completeness, Computers and
Intractability, New York .
Gen, M. and Cheng, R.: 1997, Genetic Algorithms and Engineering Design., New York: Wiley.
Geoffrey, C.: 1983, Australian Dictionary of Biography, Volume 9, Melbourne University
Press, pp 174-175.
Goldberg, D.: 1989, Genetic Algorithms for Search, Optimization, and Machine Learning.,
Reading, MA: Addison-Wesley.
Goldberg, D. and Deb, K.: 2004, A comparison of selection schemes used in genetic
algorithms., In Foundations of Genetic Algorithms 1 (FOGA-1) pp. 69–93.
Granada, M., Andrés, A.-L. and Alberto, H.-I. R.: 2014, Programación óptima del
mantenimiento de la vegetación bajo redes aéreas de distribución usando una técnica de
optimización multiobjetivo, Ingeniería, investigación y tecnología 15(1), 139–150.
Granada, M., Bolaños, R. and Escobar, J.: 2015, A multiobjective non-dominated sorting
genetic algorithm (nsga-ii) for the multiple traveling salesman problem, Decision Science
Letters 4(4), 559–568.
Granada, M., Bolaños, R. I. and Toro, E. M.: 2016a, A population-based algorithm for the multi
travelling salesman problem, International Journal of Industrial Engineering Computations
7(2), 245.
Granada, M., López, J. M. and Romero, R.: 2009, An efficient constraint handling methodology
for multi-objective evolutionary algorithms., Revista Facultad de Ingenieria-Universidad de
Antioquia, Vol. 49 pp. 141–150.
Granada, M. and Toro, E.: 2005, Método híbrido entre el algoritmo genético de chu-beasley y
s.a. para la solución del p.a.g., Revista Scientia et Technica (27) pp. 61–67.
Granada, M., Toro, E. and Romero, R.: 2005, Algoritmo memético aplicado al problema
de asignación generalizada., Revista Tecnura. No 16, v. 8. Universidad Distrital F.J.C.
pp. 55–63.

206
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Gutin, G. and Punnen, A. P.: 2002, The Traveling Salesman Problem and Its Variations,
Springer.
Hajek, B.: 1988, Cooling schedules for optimal annealing., Math. Oper. Res., 13 pp. 311–329.
Hajek, B. and Sasaki, G.: 1989, Simulated annealing to cool or not., Systems and Control
Letters, 12 pp. 443–447.
Hayes, R. and Wheelwright, S.: 1984, Restoring Our Competitive Edge: Competing Through
Manufacturing., Nueva York: John Wiley and Sons.
Ho, W., Ho, G. T., Ji, P. and Lau, H. C.: 2008, A hybrid genetic algorithm for the multi-depot
vehicle routing problem, Engineering Applications of Artificial Intelligence 21(4), 548–557.
Holland, J.: 1975, Adaptation in natural and artificial systems., Ann Arbor, MI:MIT Press. .
Holland, J.: 1992, Adaptation in Natural and Artificial Systems., 2nd edition. MIT Press.
Jakobs, S.: 1996, Theory and methodology - on genetic algorithms for the packing of polygons,
European Journal of Operational Research 88, 165–181.
Karp, R.: 1972, Reducibility among combinatorial problems, Complexity of Computer
Computations, R.E. Miller and J.W. Thatcher, eds. pp. 85–103.
Kirkpatrick, S., Gelatt, C. and Vecchi, M.: 1983, Optimization by simulated annealing., Science,
220(4598) pp. 671–680.
Kirkpatrick, S. and Toulouse, G.: 1985, Configuration space analysis of travelling salesman
problems., J. Physique, 46 pp. 1277–1292.
Kung, H., Luccio, F. and Preparata, F.: 1975, On finding the maxima of a set of vectors., Journal
of the association for computing machinery, 22(4) pp. 469–476.
Lin, S. and Kernighan, W.: 1973, An effective heuristic algorithm for the traveling salesman
problem., Operations Research 21, 498–516.
Metropolis, N., Rosenbluth, A., Rosenbluth, M., Teller, A. and Teller, E.: 1953, Equation of
state calculations by fast computing machines., J. Chem. Phys., 21 pp. 1087–1090.
Michalewicz, Z.: 1992, Genetic Algorithms + Data Structures = Evolution Programs., Berlin:
Springer-Verlag.
Min, H., Current, J. and Schilling, D.: 1992, The multiple depot vehicle routing problem with
backhauling, Journal of Business Logistics 13(1), 259.
Mingozzi, A., Giorgi, S. and Baldacci, R.: 1999, An exact method for the vehicle routing
problem with backhauls, Transportation Science 33(3), 315–329.
Mitchell, M.: 1996, Introduction to Genetic Algorithms., Ann Arbor, MIT Press.
Moraglio, A., H.M.M., T. E. and R., T.: 1999, Genetic local search for job shop scheduling
problem, Simulation and Optimisation in Operations Management pp. 197–203.
Mulvey, J.: 1983, A classroomtime assignment model., European Journal of Operational
Research, 9 pp. 64–70.
Murata, T. and Ishibuchi, H.: 1995, Moga: Multi-objective genetic algorithms., In proceedings
of the second IEEE international Conference on Evolutionary Computation. pp. 289–294.
Rahmawati, R.: 2013, Multiple depot vehicle routing problem with backhauls menggunakan
algoritma clark and wright dengan 2-opt dan penerapannya, SKRIPSI Jurusan
Matematika-Fakultas MIPA UM .
Rammal, R., Toulouse, G. and Virasoro, M.: 1986, Ultrametricity for physicists., Reviews of
Modern Physics, 58(3) pp. 765–788.

207
Bibliografía

Rudolph, G.: 1994, Convergence analysis of canonical genetic algorithm., IEEE transaction on
neural network 5(1) pp. 96–101.
Salhi, S. and Nagy, G.: 1999, A cluster insertion heuristic for single and multiple depot
vehicle routing problems with backhauling, Journal of the operational Research Society
pp. 1034–1042.
Santa Chávez, J. J., Granada, M., Escobar, J. W. and Meneses, C. A. P.: 2015, A metaheuristic
aco to solve the multi-depot vehicle routing problem with backhauls, International Journal
of Industrial Engineering and Management (IJIEM) 6(2), 49–58.
Santa Chávez, J. J., Meneses, C. A. P. and Granada, M.: 2014, Un algoritmo de búsqueda
tabú para el problema de ruteo de vehículos considerando entregas y recogidas, XVII
Latin-Iberian-American Conference on Operations Research (CLAIO) .
Solla, S., Sorkin, G. and White, S.: 1986, Configuration space analysis for optimization
problems., In Bienenstock, E., Fogelman Soulie, F., and Weisbuch, G., editors, Disordered
Systems and Biological Organization, New York, Springer-Verlag. pp. 283–292.
Steinberg, L.: 1961, The backboard wiring problem: A placement algorithm, SIAM Review
pp. 37–50.
Thomas, W.: 2007, Global Optimization Algorithms: Theory and Application., ebook.
Toth, P. and Vigo, D.: 1997, An exact algorithm for the vehicle routing problem with backhauls,
Transportation science 31(4), 372–385.
Toth, P. and Vigo, D.: 2014, Vehicle routing: problems, methods, and applications, Vol. 18,
Siam.
Venkatraman, S. and Gary, G.: 2005, A generic framework for constrained optimization using
genetic algorithms., IEEE Trans. Evolutionary Computation, vol. 9. pp. 424-432.
Vose, M.: 1999, Simple Genetic Algorithm: Foundation and Theory., Ann Arbor, MIT Press.
Wade, A. and Salhi, S.: 2001, An ant system algorithm for the vehicle routing problem with
backhauls, MICÕ2001—-4th Metaheuristic International Conference.
Wade, A. and Salhi, S.: 2003, An ant system algorithm for the mixed vehicle routing problem
with backhauls, Metaheuristics: computer decision-making, Springer, pp. 699–719.
Wassan, N.: 2007, Reactive tabu adaptive memory programming search for the vehicle routing
problem with backhauls, Journal of the Operational Research Society 58(12), 1630–1641.
Yong, Z. and Sannomiya, N.: 2000, A method for solving large-scale flowshop problems by
reducing search space of genetic algorithms, IEEE International Conference on Systems, vol.
3 pp. 1776–1781.
Zixing, C. and Yong, W.: 2006, A multiobjective optimizationbased evolutionary algorithm for
constrained optimization., IEEE Trans. Evolutionary Computation, vol. 10. pp. 659-675.

208
Índice general

Alelos, 70 Cadena de Markov, 152


Algoritmo de Metrópolis, 150 Cadena de secuencia, 88
Algoritmo simple OCH, 126 Chu-Beasley, 118
Algoritmos Circuito Hamiltoniano, 10, 33
Abajo-Izquierda, 24, 26 Codificación, 8
Aproximados, 6 Agente viajero, 33
Bottom-left, 24 Binaria, 58
Constructivos, 6 Coloreado de grafos, 40
De búsqueda local, 6 Empaquetamiento 2D, 24
De tiempo polinomial, 5 Esquema de, 17
Distancia circuito Hamiltoniano, 33 Mochila, 31
Exactos, 6 Permutaciones, 24
OCH simple, 126 Real, 116
Algoritmos Evolutivos, 67 Codificación binaria, 58
Multi-objetivo, 93 Directa, 58
Algoritmos Genéticos, 70 Gray, 61
Chu-Beasley, 118 Codificación Real, 116
Diagrama de flujo, 74 Colonia de hormigas, 123
Función de adaptación, 72 Agente viajero, 130
Mutación, 74 Algoritmo simple, 126
Selección, 71 Experimentos, 124
Proporcional, 77 Coloreado de grafos, 39
Torneo determinístico, 75 Complejidad computacional, 2
Alternativas de solución, 3, 67 Definición de, 4
Árbol como grafo, 11 En el peor caso, 4
Asignación de horarios de clase, 43 Tiempo polinomial, 5
Asignación generalizada, 41 Conjunto estable de vértices, 11
Búsqueda tabú, 161 Conjunto no dominado, 95
Pseudo-código Búsqueda tabú, 162 Método de Kung, 100
Backboard wiring problem, 6 Método Exhaustivo, 96
Bloques constructivos, 91 Cruzamiento
Hipótesis, 91 Aritmético, 117
Boltzmann, 150 BLX-α, 117
Lineal, 117
Código Gray, 62 Plano, 117

209
Índice general

Simple, 117 Genotipo, 70


Ver Recombinación, 84 Grado de un vértice, 9
Grafo, 9
Darwin Árbol, 11
Leyes, 68 Arco, 9
Descendientes, 67 Adyacente, 38
Digrafo, 11 Completo, 10
Distancia de apilamiento, 105 Conectado, 9, 10
Distancia de Hamming, 61 Definición de, 9
Distancia Euclidiana, 33 Digrafo, 11
Diversidad, 83 Dirigido, 9
Dominancia, 94 Orientado, 9
Planar, 40
Empaquetamiento 2D, 23 Simétrico, 10
Escalamiento, 77 Vértice, 9
Espacio de búsqueda Conjunto estable, 11
Agente viajero, 33 Grado de un, 9
Coloreado de grafos, 40 Grafo disyuntivo, 54
Definición de, 8
Empaquetamiento 2D, 24 Heurística
Mochila, 30 Definición de, 6
Esquema de aceptación de vecinos, 7 2-opt, 36
Esquemas Goloso (voraz), 31
Bloques constructivos, 91 k-opt, 36
Orden y longitud, 91 Hijos, 67
Representación, 91
Estructura de vecindad, 7 Incumbente, 1
Agente viajero, 36 Intrones, 70
2-opt, 36 Knapsack problem, 30
k-opt, 38
Variable-opt, 38 Listas de vecinos candidatos, 7
Coloreado de grafos, 41
Definición de, 9 Método de Kung, 100
Empaquetamiento 2D, 26 Método Exhaustivo, 96
Mochila, 32 Método NSGA-II, 106
Experimentos OCH, 124 Markov, 152
Exploración, 83 Metaheurísticas, 1
Definición de, 8
Explotación, 83
Qué son las, 7
Fenotipo, 70 Metrópolis
Frente óptimo de Pareto, 95 Algoritmo, 150
Función de adaptación, 72 Mochila (Knapsack problem), 30
Mono-objetivo, 12
Genoma, 71 Muestreo estocástico, 78

210
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Multi-objetivo, 12 Peñasco de Hamming, 61


Mutación, 74, 89 Permutaciones, 24, 88
aleatoria, 118 PMX, 89
Cadena binaria, 90 Población inicial, 9
Permutación, 90 Agente viajero, 35
Coloreado de grafos, 41
Número cromático, 40 Empaquetamiento 2D, 26
NSGA-II, 106 Mochila, 31
Problema
OCH, 123
De asignación generalizada, 41
Algoritmo simple, 126
De coloreado de grafos, 39
Operadores
Teorema de los 4 colores, 39
De preservación de elitismo, 90
De selección De Secuenciamiento regular: flow-shop,
50
Para desaparición, 71
Para reproducción, 71 De Asignación de horarios de clase, 43
De variación, 83 De empaquetamiento 2D, 23
Mutación, 74, 89 De encaje de peso mínimo, 30
Recombinación, 74, 84 De la barra menos flexible y más liviana,
Optimización, 1 12
Aproximada, 6 De la mochila, 30
Combinatorial, 2 De la ruta de mínimo costo, 126
Definición de, 3 De Secuenciamiento no regular: job-shop,
Exacta, 6 52
Mono-objetivo, 12 De transporte, 38
Multi-objetivo, 12, 92 Tipo NP, 5
Algoritmos Evolutivos, 93 Tipo P, 5
Conjunto no dominado, 95 Problemas
Distancia de apilamiento, 105 De asignación, 41
Dominancia, 94 Asignación generalizada, 41
Espacio de decisión, 94 Generalizada, 2
Espacio Objetivo, 94 Horarios de clase, 43
Forma canónica, 94 De empaquetamiento, 22
Frente óptimo de Pareto, 95 2D, 23
MOEA, 93 Mochila, 30
NSGA-II, 106 3D, 22
Objetivos, 92 De secuenciamiento
Optimización por Colonia de hormigas Secuenciamiento no regular: job-shop,
(OCH), 123 52
Óptimo Secuenciamiento regular: flow-shop, 50
Global, 11 del mundo real, 2
Local, 11 Multi-objetivo
Barra menos flexible y más liviana, 12
Padres, 67 Representados como grafos, 32

211
Índice general

Ruta mínimo costo, 126 Recombinación, 74


Agente Viajero (PAV), 32 Cadenas binarias, 84
Coloreado de grafos, 39 En un punto, 86
Ruta mínimo costo, 39 Letal, 86
Ruteo óptimo, 38 Multi-punto, 86
Transporte, 38 Permutaciones, 88
Programa de enfriamiento, 151 PMX, 89
Pseudo-códigos Tasa de cruzamiento, 86
Agente viajero Uniforme, 86
2-opt, 37 Reducción de tiempo polinomial, 5
Calcular longitud del tour, 33 Restricciones
Búsqueda tabú, 162 Métodos para el manejo de, 74
Bottom-left Ruleta, 77
Principal, 26 Ruta de mínimo costo, 126
Verificar abajo, 26
Secuenciamiento no regular: job-shop, 52
Verificar izquierda, 26
Secuenciamiento regular: flow-shop, 50
Cruzamiento multi-punto, 86
Selección, 71
Flow-Shop
Muestro estocástico, 78
Calcular Cmax , 52
Por rango, 78
Método recursivo de Kung, 101
Proporcional, 77
Pasar de binario a Gray, 62
Torneo estocástico, 77
PAV usando OCH, 130
Torneo usando distancia de apilamiento,
Actualización feromona, 135
106
Búsqueda local usando 2-opt, 135
Torneo v1, 75
Construir soluciones, 131 Torneo v2, 76
Escoger la ciudad de destino, 133 Simulated annealing, 149
Recocido simulado, 155 Solución
Regla de aceptación de Metrópolis, 155 Alternativas de, 3
Ruleta, 77 Factible, 1
Torneo v1, 76 Incumbente, 1
Pseudo-cromosoma, 70 Infactible, 1
Punto de corte, 70 Óptima global, 11
Óptima local, 11
Recocido simulado, 149
Super-solución, 77, 78
Algoritmo, 153
Cadena de Markov, 152 Tasa
Equilibrio termodinámico, 152 De cruzamiento, 86
Factor de Boltzmann, 150 De mutación, 89
Ley de enfriamiento, 152 Teorema de los cuatro colores, 39
Metrópolis, 150 Torneo
Programa enfriamiento, 151 Determinístico v1, 75
Pseudo-código para flow-shop, 155 Determinístico v2, 76
Temperatura final, 152 Estocástico, 77

212
Mauricio Granada Echeverri - Jhon Jairo Santa Chávez.

Triqui, 18

Variable-opt, 38
Varianza, 77
Vecino
Ver Mutación, 89

213

View publication stats

También podría gustarte