Professional Documents
Culture Documents
Metaheurísticas
NO TE DETENGAS
“No dejes que termine el día sin haber crecido un poco, sin haber sido feliz, sin
haber aumentado tus sueños. No te dejes vencer por el desaliento. No permitas que
nadie te quite el derecho a expresarte, que es casi un deber. No abandones las ansias
de hacer de tu vida algo extraordinario. No dejes de creer que las palabras y las
poesías sí pueden cambiar el mundo. Pase lo que pase nuestra esencia está intacta.
Somos seres llenos de pasión. La vida es desierto y oasis. Nos derriba, nos lastima,
nos enseña, nos convierte en protagonistas de nuestra propia historia. Aunque el
viento sople en contra, la poderosa obra continúa: tú puedes aportar una estrofa. No
dejes nunca de soñar, porque en sueños es libre el hombre.”
Índice de algoritmos XV
Prólogo XVII
1. Introducción a la Optimización 1
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1. Heurísticas . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2. Metaheurísticas . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1. Vecindad y óptimos locales . . . . . . . . . . . . . . . . . . 6
1.2.2. Intensificación y diversificación . . . . . . . . . . . . . . . 8
1.3. Complejidad algorítmica: problemas P y NP . . . . . . . . . . . . 9
1.4. Limitaciones de los algoritmos exactos . . . . . . . . . . . . . . . . 13
3. Algoritmos Heurísticos 25
3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2. Definiciones de algoritmos heurísticos . . . . . . . . . . . . . . . . 25
3.3. Clasificación de algoritmos heurísticos . . . . . . . . . . . . . . . . 27
3.4. Limitaciones de los algoritmos heurísticos . . . . . . . . . . . . . . 28
IX
X ÍNDICE GENERAL
4. Algoritmos Metaheurísticos 31
4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2. Clasificación de algoritmos metaheurísticos . . . . . . . . . . . . . 35
4.2.1. Taxonomías clásicas . . . . . . . . . . . . . . . . . . . . . 35
4.2.2. Taxonomía tabular . . . . . . . . . . . . . . . . . . . . . . 36
4.2.3. Taxonomía jerárquica . . . . . . . . . . . . . . . . . . . . . 39
4.2.4. Taxonomía basada en la relación intensificación-diversificación 42
4.3. Limitaciones de los algoritmos metaheurísticos . . . . . . . . . . . 44
5. Metaheurísticas Trayectoriales 45
5.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2. Búsqueda tabú . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3. Recocido simulado . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.4. Búsqueda de vecindad variable . . . . . . . . . . . . . . . . . . . . 57
5.5. Búsqueda local guiada . . . . . . . . . . . . . . . . . . . . . . . . 61
5.6. Aceptación de umbral . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.7. Métodos ruidosos . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.8. FANS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.9. Búsqueda local iterativa . . . . . . . . . . . . . . . . . . . . . . . . 72
6. Metaheurísticas Poblacionales 79
6.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2. Algoritmos evolutivos . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.2.1. Algoritmos genéticos . . . . . . . . . . . . . . . . . . . . . 82
6.2.2. Algoritmos meméticos . . . . . . . . . . . . . . . . . . . . 84
6.3. Búsqueda dispersa . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.4. Reencadenamiento de trayectorias . . . . . . . . . . . . . . . . . . 91
6.5. Algoritmos de estimación de la distribución . . . . . . . . . . . . . 95
6.6. Algoritmos culturales . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.7. Inteligencia de enjambre y opt. por enjambre de partículas . . . . . 101
Bibliografía 195
Índice de figuras
XIII
XIV ÍNDICE DE FIGURAS
5.1. Convergencia a mínimos absolutos. (a) Enfoque multi-arranque. (b)
Enfoque aleatorizado. (c) Enfoque determinista y sistemático. . . . 45
5.2. Procedimiento de búsqueda a través de TS. . . . . . . . . . . . . . 47
5.3. (a) Ejemplo de diferentes distribuciones de partículas en niveles de
energía en función de la temperatura. (b) Probabilidad de aceptación
en función de la temperatura. . . . . . . . . . . . . . . . . . . . . . 53
5.4. Perfil del espacio de búsqueda para dos estructuras de vecindad dis-
tintas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.5. Escape de un óptimo local a través de la penalización de la función
objetivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.6. Ejemplos de etiquetas borrosas. . . . . . . . . . . . . . . . . . . . . 69
5.7. (a) Topología del espacio de búsqueda SS para una función objeti-
vo y una vecindad dada. (b) Topología del espacio de búsqueda re-
muestreado SS∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.8. Perturbaciones en la solución para encontrar el cuenco de atracción
vecino. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
XV
Prólogo
Una gran cantidad de problemas que tienen interés en multitud de campos cien-
tíficos y tecnológicos pueden enunciarse como problemas de optimización. La op-
timización constituye una disciplina fundamental en áreas como la Informática, la
Inteligencia Artificial o la Investigación Operativa. Existe una colección importan-
te de problemas de optimización para la que no se dispone de algoritmos exactos
que permitan encontrar la solución óptima en tiempos razonables. Para resolver estos
problemas, una alternativa consiste en diseñar algoritmos aproximados que encuen-
tren soluciones de alta calidad en un tiempo que pueda asumirse. De entre todos los
métodos aproximados destacan las metaheurísticas por su eficiencia, efectividad y
flexibilidad. Éstas se han aplicado con éxito a una gran variedad de problemas de
optimización.
La presente obra tiene como objetivo recoger una visión resumida, aunque com-
pleta, del estado de la cuestión en el ámbito de las metaheurísticas. En ella, se ha
prestado especial atención a la presentación didáctica de los contenidos, de forma
que sean entendibles para todos los lectores que posean una formación científico-
técnica y conocimientos básicos de algoritmia y programación. A ellos está dirigida
esta obra, tanto a aquellos que cursan estudios de postgrado como a los que necesitan
resolver problemas complejos de optimización en el ejercicio de su profesión. La obra
se ha estructurado en diferentes capítulos que tratan temáticas diferentes alrededor de
la optimización metaheurística, combinando contenidos teóricos y prácticos:
Capítulo 1: Introducción a la Optimización. En este capítulo se presentan con-
ceptos fundamentales que serán necesarios para la lectura del resto del libro.
Capítulo 2: Problemas Clásicos de Optimización. En este capítulo se presenta
una colección no exhaustiva de problemas clásicos de optimización. Los problemas
que se presentan aquí han sido elegidos bien por su popularidad, bien porque los
autores los hayan estudiado. La descripción es breve, de modo que no se incluye una
revisión exhaustiva de los trabajos dedicados a su resolución.
Capítulo 3: Algoritmos heurísticos. Este capítulo introduce una visión general
de los algoritmos heurísticos, describiéndolos y presentando su clasificación así como
XVII
XVIII P RÓLOGO
sus limitaciones.
Capítulo 4: Algoritmos metaheurísticos. En este capítulo se presenta una visión
general de los algoritmos metaheurísticos, y al igual que en el capítulo anterior, se
presta especial interés a su descripción, clasificación y limitaciones.
Capítulo 5: Metaheurísticas trayectoriales. Este es el primero de tres capí-
tulos que se dedica a la descripción de metaheurísticas concretas. En cada uno de
ellos, se revisa y describe de forma detallada las metaheurísticas aplicadas con éxito
a una colección de problemas relativamente extensa. De cada una de ellas se señalan
una serie de detalles, tales como el investigador que las propuso, principio básico de
operación, descripción algorítmica de alto nivel, extensiones de la metaheurística y
aplicaciones. Este capítulo se dedica a las metaheurísticas trayectoriales.
Capítulo 6: Metaheurísticas poblacionales. Este capítulo está dedicado al estu-
dio de las metaheurísticas poblacionales y tiene la misma estructura que los anterio-
res.
Capítulo 7: Metaheurísticas constructivas. Este capítulo está dedicado al es-
tudio de las metaheurísticas constructivas. Los contenidos se organizan de la misma
forma que en el capítulo anterior.
Capítulo 8: Tendencias actuales. Se presenta aquí una revisión de las tendencias
más actuales en optimización. Desde el punto de vista de los métodos, actualmente
se tiende a abordar los problemas utilizando combinaciones de metaheurísticas e im-
plementaciones avanzadas de las mismas. Desde el punto de vista de los nuevos pro-
blemas abordados, en esta obra se destaca el estudio de problemas de optimización
dinámica.
Capítulo 9: Búsqueda dispersa aplicada al MDP. Se describe cómo aplicar
una metaheurística a un problema determinado de optimización combinatoria. En
concreto se detalla cómo utilizar una estrategia de Búsqueda Dispersa para resolver
el problema de la Máxima Diversidad, describiendo cada uno de los bloques en los
que se basa dicha metaheurística.
Capítulo 10: Cuestiones de implementación. En este capítulo se especifica los
detalles de implementación en lenguaje Java del algoritmo descrito en el capítulo
anterior. Dada su generalidad, varios de los aspectos de implementación descritos
se podrían utilizar en el diseño de otros procedimientos metaheurísticos aplicados a
otros problemas de optimización.
Este libro tiene sus orígenes en el desarrollo de un intenso y exhaustivo trabajo de
revisión del estado del arte que los autores han desarrollado durante la preparación de
sus tesis doctorales y se concreta después de una labor de síntesis de la información
recopilada en el transcurso de este período. Estas tesis doctorales están dedicadas a
la resolución de diferentes problemas de optimización y son las siguientes:
XIX
Esperamos que esta obra sea de utilidad a todos los lectores que la consulten y
deseamos que despierte la curiosidad por el ámbito de la optimización metaheurística
de todos aquellos que se acerquen a ella.
Los autores
Capítulo 1
Introducción a la Optimización
1.1. Introducción
1
2 I NTRODUCCIÓN A LA O PTIMIZACIÓN
combinatoria consiste en encontrar un objeto entre un conjunto finito (o al menos
contable) de posibilidades. Este objeto suele ser un número natural (o conjunto de
naturales), una permutación o una estructura de grafo (o subgrafo).
Algunos ejemplos muy conocidos de problemas de optimización combinatoria
son el problema del viajante de comercio o del agente viajero (TSP) (Travelling Sa-
lesman Problem), el problema de la asignación cuadrática (QAP) (Quadratic Assign-
ment Problems), los problemas de planificación (Scheduling Problems) o los proble-
mas de cortes sobre grafos (Cut Set Problems). En el capítulo 2 se puede encontrar
una descripción de estos problemas (para descripciones más detalladas, pueden con-
sultarse [238][70]).
Los problemas combinatorios presentan como particularidad que siempre existe
un algoritmo exacto que permite obtener la solución óptima. Este método consis-
te en la exploración de forma exhaustiva del conjunto de soluciones (enumeración)
[238][70]. Este algoritmo suele ser extremadamente ineficiente, ya que para la ma-
yoría de los problemas de interés que se pueden encontrar en el ámbito de la opti-
mización combinatoria el tiempo que emplearía en encontrar una solución crece de
forma exponencial con el tamaño del problema. En general, este tipo de problemas
se caracterizan por tener espacios de soluciones con una cardinalidad muy elevada.
Desde finales de los años 70 [114][190] se han intentado caracterizar matemáti-
camente los problemas combinatorios. De estos estudios se concluye que existe un
subconjunto de problemas cuyos algoritmos de resolución presentan una complejidad
computacional polinómica, es decir, el tiempo de ejecución de estos algoritmos crece
de forma polinómica con el tamaño del problema. Este tipo de problemas se dice que
pertenecen a la clase P y se considera que son resolubles de manera eficiente. Sin
embargo, para la mayoría de problemas que tienen interés práctico o científico, no se
conoce un algoritmo con complejidad polinómica que lo resuelva de forma exacta.
Este tipo de problemas pertenecen a una clase conocida como NP (En la sección 1.3
se profundiza en estas definiciones). Dado el interés práctico que tiene la resolución
de muchos problemas pertenecientes a la clase NP y la dificultad que existe en resol-
ver dichos problemas de forma exacta, se plantea la opción de encontrar soluciones
de alta calidad en tiempos razonables, aunque estas soluciones no sean óptimas. Pa-
ra esta tarea se necesita utilizar algoritmos aproximados que permitan resolver los
problemas combinatorios.
1.1.1. Heurísticas
1.1.2. Metaheurísticas
1.2. Definiciones
Espacio de soluciones
Posibles SS
Espacio de soluciones
factibles F
Cuando se diseña una función de evaluación2 se debe tener en cuenta que para
muchos problemas no es suficiente con encontrar una solución, sino que ésta debe
ser una solución factible; es decir, que satisfaga una serie de restricciones impuestas
por el problema. Por lo tanto, se debe establecer una diferencia entre el espacio de
búsqueda SS y el espacio de soluciones factibles F ⊆ SS. En la figura 1.1 se muestra
un ejemplo.
En estas condiciones, se puede definir un problema de optimización en los si-
guientes términos:
X*
Figura 1.2: Vecindad de una solución x marcado por el área interior a la circunferen-
cia.
Dada una solución x ∈ SS, la vecindad N(x) de esa solución es un subconjunto del
espacio de soluciones que contiene soluciones que están “próximas” de la solución
considerada. En la figura 1.2 se muestra una representación gráfica de la vecindad de
una determinada solución x. La cercanía entre dos soluciones del espacio de búsqueda
se podría definir de varias formas. A continuación, se describen las más comunes
[211]:
dist : SS × SS → R
N(x) = {y ∈ SS : dist(x, y) ≤ ε}
3 La adaptación a problemas de minimización es directa sin más que sustituir ′′ ≥′′ por ′′ ≤′′ .
D EFINICIONES 7
para algún ε ≥ 0. Lógicamente, la función distancia descrita en la aplicación
anterior depende del problema que se quiera resolver. Por ejemplo, si el espacio
de búsqueda fuese euclídeo, la distancia entre dos soluciones x = (x1 , . . . , xn ) e
y = (y1 , . . . , yn ) se podría calcular como sigue:
∑ni=1 (xi − yi )2
p
dist(x, y) =
En este caso, la vecindad N(x) de la solución x está formada por todas las so-
luciones interiores a una hiper-esfera con radio máximo dado por dist(x, ymax ),
donde ymax representa el punto más lejano que se puede alcanzar.
N : SS → 2SS
donde esta función define una vecindad N(x) para cada punto x ∈ SS.
Definición 1.2 Dado un problema de optimización ( f , SS, F), se dice que una solu-
ción factible x ∈ F ⊆ SS es un óptimo (máximo) global si:
∀y ∈ F f (x) ≥ f (y)
f([X])
Máximo Global
Máximo Local
Vecindad
[X]
Figura 1.3: Función objetivo con máximo global, máximo local y vecindad.
NP
P
NP NP -completo
P
linómico que lo resuelve y comparar el resultado con el valor obtenido. Por tanto, el
conjunto de problemas P es un subconjunto de los problemas NP. En la figura 1.4 se
muestra la relación entre los problemas P y NP.
Por otro lado, existen ciertos problemas de los que siempre se ha pensado que
no son P, aunque sí NP, porque nadie ha encontrado nunca un algoritmo polinómico
que los resuelva. Sin embargo, en un momento dado, alguien puede encontrar un
algoritmo polinómico para un problema considerado NP, de modo que éste pase a
ser P. Por ejemplo, hasta 2002 no se encontró un algoritmo polinómico que permite
saber si un número es o no primo [3]. Por tanto, se puede decir que para un problema
de tipo NP no se puede obtener una solución en un tiempo razonable hasta que se
encuentre un algoritmo polinómico que lo resuelva.
No obstante, hay otro tipo de problemas, llamados NP − completos que no tie-
nen un algoritmo en tiempo polinómico que los resuelva. No se ha podido demostrar
formalmente que no exista, pero los matemáticos creen que realmente no existe. Este
tipo de problemas es un subconjunto de los problemas NP, es decir, existe un algorit-
mo polinómico que puede determinar si un valor es solución al problema. La relación
de esta clase de problemas con las demás se muestra en la figura 1.5.
Para saber si un problema es NP − completo, al menos un problema NP −
completo tiene que ser reducible a ese problema. Se dice que un problema A, que
es NP − completo, es reducible a otro problema B, cuando se puede crear un algo-
ritmo que resuelva el problema A utilizando como una caja negra un algoritmo para
resolver el problema B. Es decir, existe una algoritmo para resolver A de la siguiente
forma:
Toma los datos de entrada del problema A, los transforma de manera que pue-
dan utilizarse como entrada de una caja negra que resuelve el problema B, y la
solución a B se pueda transformar a su vez en una solución para el problema A.
La caja negra que resuelve el problema B puede utilizarse una única vez o un
número polinómico de veces dentro del algoritmo que resuelve A.
NP NP -completo
NP -duro
P
son reducibles entre sí. Es decir, para resolver cualquier problema NP − completo
se puede construir un algoritmo polinómico que use una caja negra que, a su vez,
resuelve otro problema NP − completo, en caso de que esta caja negra se ejecutase
en un único paso. Esto tiene una consecuencia bastante interesante: si se llegara a
encontrar un algoritmo polinómico que resuelve cualquier problema NP − completo,
todos los demás problemas NP − completos podrían usar ese algoritmo como caja
negra. Como el algoritmo que usa la caja negra debe ser también polinómico, existiría
un algoritmo polinómico para resolver cualquier problema NP − completo. Dicho de
otra forma, como los matemáticos no han encontrado ningún algoritmo polinómico
para resolver ninguno de los problemas NP− completos, consideran que no existe tal
algoritmo. No obstante, no han podido demostrar matemáticamente que realmente no
exista. De hecho, si alguien es capaz de realizar esta demostración o bien encuentra
un algoritmo polinómico para algún problema NP − completo, el Instituto Clay de
Matemáticas (Cambridge - Massachusetts) le pagaría un millón de dólares.
Finalmente, existe otro tipo de problemas al menos tan difíciles de resolver como
los problemas NP − completos, aunque es posible que sean incluso más difíciles. A
este tipo de problemas se les denomina NP − duros. Los problemas NP − duros no
son un subconjunto de los problemas NP. Es decir, para los problemas NP − duros
no existe un algoritmo polinómico que nos permita verificar una solución. Para que
un problema sea considerado NP − duro, debe existir un problema NP − completo
que sea reducible a ese problema. Es decir, debe existir algún algoritmo polinómico
que pueda usar una caja negra que resuelva el problema NP − duro para resolver un
problema NP − completo. Se dice que son, al menos, tan difíciles de resolver como
un problema NP − completo porque un algoritmo los podría utilizar para resolver
un problema NP-completo. Como conclusión, los problemas se pueden categorizar
atendiendo a su dificultad en P, NP, NP − completos y NP − duros. La relación
entre estas clases de problemas se muestra en la figura 1.6.
De forma resumida, Los problemas P son los problemas para los que existe un
algoritmo polinómico que los resuelve. Los problemas NP son aquellos problemas
para los que existe un algoritmo polinómico que verifica una solución. Hay proble-
mas NP que pueden pasar a ser P si se encuentra un algoritmo polinómico que los
resuelva. Los problemas NP − completos son aquellos problemas de tipo NP que
12 I NTRODUCCIÓN A LA O PTIMIZACIÓN
los matemáticos consideran que no existe un algoritmo polinómico que los resuelva,
aunque no se haya podido demostrar matemáticamente. Y los problemas NP − duros
son aquellos al menos tan difíciles como los problemas NP − completos, es decir,
que los matemáticos consideran que tampoco existe un algoritmo polinómico que los
resuelva.
Rigurosamente hablando, las clases P y NP no están compuestas por los proble-
mas de optimización, sino por sus correspondientes problemas de decisión. A conti-
nuación se describe la definición de los problemas P y NP desde el punto de vista de
la Teoría de Lenguajes Formales (En la literatura se pueden encontrar descripciones
equivalentes a través de máquinas de Turing).
Desde un punto de vista formal, un problema de decisión se define como sigue:
Es decir, en esta clase estarían todos aquellos problemas de decisión para los que
se puede encontrar una solución en tiempo polinómico. Análogamente, se puede
definir la clase NP así:
Los problemas NP − duros se caracterizan por ser al menos tan “difíciles” como
cualquier problema que se encuentre en NP. Formalmente se podrían definir como:
Los métodos exactos de resolución de problemas se han aplicado con éxito a una
cantidad elevada de problemas. Algunos ejemplos de estos métodos son los algorit-
mos voraces, algoritmos de divide y vencerás, algoritmos de ramificación y poda,
backtraking, etc. Todos estos procedimientos resuelven problemas que pertenecen a
la clase P de forma óptima y en tiempo razonable. Como se ha comentado anterior-
mente, existe una clase de problemas, denominada NP, con gran interés práctico para
los cuales no se conocen algoritmos exactos con tiempos de convergencia en tiempo
polinómico; es decir, aunque existe un algoritmo que encuentra la solución exacta
al problema, tardaría tanto tiempo en encontrarla que lo hace completamente inapli-
cable. Además, un algoritmo exacto es completamente dependiente del problema (o
familia de problemas) que resuelve, de forma que cuando se cambia el problema se
tiene que diseñar un nuevo algoritmo exacto y demostrar su optimalidad.
Capítulo 2
Problemas Clásicos de
Optimización
2.1. Introducción
15
16 P ROBLEMAS C LÁSICOS DE O PTIMIZACIÓN
v9 c69
c89 v6
v8 c68 G
c29 c58 c56
c28 c18
v2 c51 v5
c12 v1 c46
c23 c41 c45 c57
c13
v3 c34 v4 c47
c37 v7
Figura 2.1: Problema del viajante en un grafo G. Las líneas gruesas representan un
circuito hamiltoniano, es decir, una posible solución al problema dada por la permu-
tación [v1 , v2 , v9 , , v6 , v8 , v5 , v4 , v7 , v3 ].
(
n−1
T SP = min : cπ(1)π(n) + ∑ cπ(i)π(i+1) (2.2)
i=1
Las aplicaciones del TSP van más allá del problema de la planificación de rutas
de un viajante de comercio y abarcan diferentes áreas de conocimiento, incluyendo
las Matemáticas, Ciencias de la Computación, Investigación Operativa, Genética, In-
geniería y Electrónica [253]. Entre ellas destacan la planificación de máquinas, los
procesos de fabricación, los problemas de asignación de frecuencias, etc. Existe una
gran cantidad de versiones diferentes del TSP, como el TSP Simétrico (Symmetric
TSP), TSP Máximo (MAX TSP), TSP con Cuello de Botella (Bottleneck TSP), TSP
con Múltiples Visitas (TSP with Multiple Visits), Problema del Mensajero (Messen-
ger Problem), TSP Agrupado (Clustered TSP), TSP Generalizado (Generalized TSP),
TSP Dinámico (Dynamic TSP), etc [253].
v9 c89 c68 v6
v8 G
c09 c06
v2 c02 v0 c05 v5
c23 c c04
01 c57
v3
c13 v1 v4
c47 v7
Existe una gran cantidad de versiones derivadas del VRP, como el VRP con ca-
pacidades (Capacitated VRP), que es su versión homogénea. VRP con múltiples al-
macenes (Multiple Depot VRP), VRP cpn ventanas temporales (VRP with Time Win-
dows) en el que se asocia una ventana temporal a cada cliente (con instante de inicio
y de fin de servicio), VRP estocástico (Stochastic VRP) si cada componente tiene un
comportamiento aleatorio, VRP periódico (Periodic VRP), VRP con atención dividi-
da (Split Delivery VRP) cuando varios vehículos sirven a un mismo cliente, etc.
EL PROBLEMA DE LA MOCHILA 19
2.4. El problema de la mochila
V1 1 G
2 5
3 4 V2
1
∑ wi j (1 − yi y j )
max :
2 1≤i≤ j≤n
MCP = (2.6)
s.a.,
yi ∈ {−1, 1}, ∀i ∈ V
V1 = {i ∈ V : yi = 1} V2 = {i ∈ V : yi = −1} (2.7)
EL PROBLEMA DE LA MÁXIMA DIVERSIDAD 21
Luego, el grupo de corte viene definido en esta formulación como:
1
cut(V1 ,V2 ) = ∑ wi j (1 − yi y j )
2 1≤i≤
(2.8)
j≤n
n−1 n
max : ∑ ∑ di j xi x j
i=1 j=i+1
MDP = s.a., (2.9)
n
∑ xi = m
i=1
xi = {0, 1} | 1 ≤ i ≤ n
9 6
8
2
5
4
3
1
7
Figura 2.4: El problema de la selección de los tres elementos más diversos entre un
conjunto de nueve localizados en el plano euclídeo. Los elementos seleccionados
aparecen sombreados. En este caso, la solución viene determinada por la expresión:
[1, 0, 0, 0, 0, 0, 1, 0, 1]
Algoritmos Heurísticos
3.1. Introducción
25
26 A LGORITMOS H EURÍSTICOS
mas. Para esta interpretación, las definiciones más interesantes que se extraen de la
literatura son las siguientes:
Barr et al. [15]: “Un método heurístico es un conjunto bien conocido de pasos
para identificar rápidamente una solución de alta calidad para un problema
dado”.
La segunda interpretación de heurística entiende que éstas son una función que
permiten evaluar la bondad de un movimiento, estado, elemento o solución. Algunas
de las definiciones más interesantes que se encuentran en la literatura son:
Rich et al. [272]: “Una función heurística es una correspondencia entre las
descripciones de los estados del problema hacia alguna medida de idonei-
dad, normalmente representada por números. Los aspectos del problema que
se consideran, cómo se evalúan estos aspectos y los pesos que se dan a los
aspectos individuales, se eligen de forma que el valor que la función da a un
nodo del proceso de búsqueda sea una estimación tan buena como sea posible
para ver si ese nodo pertenece a la ruta que conduce a la solución”.
De todas las definiciones, quizá las más intuitivas son la presentada por Zanakis
et al. [331]:
“Procedimientos simples a menudo basados en el sentido común que se supone
que obtendrán una buena solución (no necesariamente óptima) a problemas difíciles
de un modo sencillo y rápido”.
y la presentada por Pearl [242]:
C LASIFICACIÓN DE ALGORITMOS HEURÍSTICOS 27
“considerándola como una regla del pulgar que se utiliza para guiar una ac-
ción”.
En [114][331] se pueden encontrar argumentaciones y justificaciones de cuándo,
cómo y por qué se deben utilizar heurísticas en la resolución de problemas.
Figura 3.1: Función multimodal. Suele conducir a que los algoritmos heurísticos que-
den atrapados en óptimos locales.
Algoritmos Metaheurísticos
4.1. Introducción
J.P. Kelly et al. [174]: “Las metaheurísticas son una clase de métodos aproxi-
mados que están diseñados para resolver problemas difíciles de optimización
combinatoria, en los que los heurísticos clásicos no son efectivos. Las me-
taheurísticas proporcionan un marco general para crear nuevos algoritmos
híbridos combinando diferentes conceptos derivados de la inteligencia artifi-
cial, la evolución biológica y los procedimientos estadísticos”.
31
32 A LGORITMOS M ETAHEURÍSTICOS
S. Voss et al. [318]: “Una metaheurística es un proceso iterativo maestro que
guía y modifica las operaciones de una heurística subordinada para producir
eficientemente soluciones de alta calidad. Las metaheurísticas pueden manipu-
lar una única solución completa (o incompleta) o una colección de soluciones
en cada iteración. La heurística subordinada puede ser un procedimiento de
alto (o bajo) nivel, una búsqueda local, o un método constructivo”.
Una primera conclusión que se puede extraer de las definiciones dadas es que, en
muchos casos, son reglas de sentido común que permiten hacer una búsqueda “in-
teligente”. Debido a esta característica, para bastantes metaheurísticas no existe un
marco teórico que las sustente, sino que es a través de los buenos resultados expe-
rimentales donde encuentran su justificación. Aún así, algunos autores han intenta-
do desarrollar un marco matemático donde se pueda establecer, por ejemplo, bajo
qué condiciones un procedimiento metaheurístico converge hacia el óptimo. En este
sentido, para los algoritmos estocásticos de búsqueda1 , se ha desarrollado un marco
común, conocido como algoritmos de escalada generalizados [166][165][171][172],
que asegura la convergencia de todos ellos. Dentro de este tipo de algoritmos se in-
cluyen como casos particulares los procedimientos de búsqueda local [2], el recocido
simulado [1], los métodos ruidosos [56] y los métodos de aceptación del umbral
[91][226]. Se han obtenido resultados semejantes para algoritmos genéticos [287] y
búsqueda tabú aleatorizada [98]. Estos desarrollos teóricos no reflejan el compor-
tamiento real de la metaheurística, ya que, aunque aseguran la convergencia en de-
terminadas circunstancias, requieren tiempos exponenciales, que lógicamente, no se
corresponden con los requisitos reales.
1 Procedimientos
de búsqueda local con cierta aleatorización en la aceptación de movimientos que
empeoran la solución.
I NTRODUCCIÓN 33
Metaheurística
Inspiración Estadística
* Psicología => Aprendizaje * Aleatorización
* Biología => Evolución * Funciones de distribución
* Termología => Recocido * Estimimadores
* Etc * Etc
alta calidad.
Atendiendo a la vecindad:
Una vecindad: durante la búsqueda utilizan exclusivamente una estructura de
vecindad.
Varias vecindades: durante la búsqueda modifican la estructura de la vecindad.
Optimización por colonias aco tradicional si no no poblac. estática uno estática explícita no si
de hormigas - ACO aco + demonios si dinámica
Figura 4.2: Resumen de las características que presentan las distintas metaheurísticas.
Para tener una clasificación más clara, se ha hecho una separación entre lo que es
el paradigma de la metaheurística y la implementación concreta. Por ejemplo, se con-
sidera que GRASP es el paradigma de la metaheurística que lleva su propio nombre
y “GRASP tradicional” o “GRASP reactivo” son dos implementaciones concretas
de esa metaheurística. En la figura 4.2 se muestra una clasificación tabular para las
metaheurísticas descritas en este capítulo.
Metaheurística
Trayectorial Poblacional
Figura 4.3: Estructura de árbol que permite la clasificación jerárquica de las metaheu-
rísticas.
[ ACO | GRASP]
Construcción
[GA | SS]
[GA | SS]
[ACO | GRASP | SA | TS | VNS]
Recombinación
[SA | TS | VNS]
[GA | SS | VNS]
[GRASP | SS | TS]
Modificación
aleatoria
[ACO]
[GRASP | SS | TS | VNS]
[ACO | GA | SS | TS]
[SA | TS | VNS]
[Condición de Parada]
G3 oria
em
dem
o
us
No
R
Diversificación Intensificación
En la figura 4.4, se presenta un diagrama algorítmico que ilustra una visión uni-
ficada y general de las metaheurísticas basada en la aplicación de las posibles com-
binaciones de los métodos descritos anteriormente. En esta figura se puede observar
que la descripción algorítmica de cada una de las metaheurísticas es un camino entre
el nodo Inicio y el nodo Fin.
G1: un método cuanto menos utiliza la función objetivo más lejos está del
vértice OG.
G2: un método cuanto menos utiliza la aleatorización más lejos está del vértice
R.
Según el teorema NFL, los métodos generales de búsqueda, entre los que se en-
cuentran las metaheurísticas, se comportan exactamente igual cuando se promedian
sobre todas las funciones de objetivo posibles, de tal forma que si un algoritmo A es
más eficiente que un algoritmo B en un conjunto de problemas, debe existir otro con-
junto de problemas de igual tamaño para los que el algoritmo B sea más eficiente que
el A. Esta aseveración establece que, en media, ninguna metaheurística (algoritmos
genéticos, búsqueda dispersa, búsqueda tabú, etc.) es mejor que la búsqueda com-
pletamente aleatoria. Una segunda característica que presentan las metaheurísticas es
que existen pocas pruebas sobre su convergencia hacia un óptimo global; es decir,
que a priori no se puede asegurar ni que la metaheurística converja ni la calidad de
la solución obtenida. Por último, las metaheurísticas más optimizadas son demasiado
dependientes del problema o al menos necesitan tener un elevado conocimiento heu-
rístico del problema. Esto hace que, en general, se pierda la genericidad original con
la que fueron concebidas.
A pesar de estos aparentes problemas, la realidad es que el comportamiento expe-
rimental de la mayoría de las metaheurísticas es extraordinario, convirtiéndose para
muchos problemas difíciles de resolver en la única alternativa factible para encontrar
una solución de calidad en un tiempo razonable. En general, las metaheurísticas se
comportan como métodos muy robustos y eficientes que se pueden aplicar con re-
lativa facilidad a una colección amplia de problemas. Además, la demostración del
teorema NFL se basa en que el algoritmo de búsqueda no visita dos veces la misma
solución y en que no se introduce conocimiento heurístico en el diseño del método
metaheurístico. Estas hipótesis habitualmente no son ciertas.
Capítulo 5
Metaheurísticas Trayectoriales
5.1. Introducción
xo xo xo xo xo xo xo xo
Figura 5.1: Convergencia a mínimos absolutos. (a) Enfoque multi-arranque. (b) En-
foque aleatorizado. (c) Enfoque determinista y sistemático.
45
46 M ETAHEURÍSTICAS T RAYECTORIALES
ría los óptimos locales tomando decisiones aleatorias. Por último, en la figura 5.1(c)
se muestra un método donde se permiten movimientos que incluso empeoran la solu-
ción. A continuación, se describen algunas de las metaheurísticas trayectoriales que
se han aplicado con éxito a una colección extensa de problemas.
Movimiento de
enpeoramiento
(a) (b) (c )
begin
{x} := GenerarSolucionInicial();
while not terminacion do
V := GenerarVecindad(x);
V ∗ := GenerarVecindadReducida(V );
{y} := SeleccionarMe jor(V ∗ , f );
if f (y) ≥ f (x) then
x := y;
end if
{T } := GrabarMovimientoMemoria(x, T ); // Marcar la solución como tabú-
activo
{T } := ActualizarMemoria(T ); // Borrar elementos tabúes antiguos si pro-
cede
end while
end
el proceso de búsqueda, permitiendo que el algoritmo sea mucho más robusto. Estas
ideas se generalizan en el método conocido como búsqueda tabú reactiva (reactive
tabu search) [17][16]. En [123][127] se pueden encontrar descripciones detalladas de
esta opción.
En las figuras 5.2 se muestra de forma esquemática el proceso de búsqueda de
TS. En la figura 5.2(a) se parte de una solución inicial factible. Puesto que no hay
historia, la vecindad coincide con su versión reducida. En 5.2(b) existe ya una región
prohibida, de tal forma que todos los movimientos que tuviesen como destino la zona
rayada estarían prohibidos (evita volver hacia atrás). El caso de la figura 5.2(c) es aún
más descriptivo porque el procedimiento de búsqueda tiene que tomar la decisión de
empeorar la solución (el resto de movimientos están prohibidos o son inalcanzables).
En las versiones estándares de TS, además de la memoria a corto plazo o basada
en lo reciente, descrita anteriormente, se introduce la memoria a largo plazo o basada
en la frecuencia. La memoria a largo plazo, comparada con la memoria a corto plazo,
introduce un enfoque que típicamente opera sobre un horizonte más lejano. En esta
memoria se almacena la frecuencia con la que se han producido una serie de solucio-
B ÚSQUEDA TABÚ 49
nes (implementación explícita) o una serie de atributos (implementación implícita).
Con la información almacenada en la memoria a largo plazo se consigue tanto intensi-
ficar como diversificar la búsqueda. La intensificación se produce porque se premian
aquellas regiones que contienen soluciones de alta calidad visitadas anteriormente,
de tal forma que esa área se explora de forma más exhaustiva. La diversificación se
produce debido a que también se premian aquellas regiones del espacio de búsqueda
que no se han visitado frecuentemente.
La implementación de estas memorias tabú pueden ser explícita o basada en
atributos. El primer tipo de implementación es el que se ha descrito en esta sección,
es decir, se almacenan una elite de soluciones completas ya visitadas (durante el
proceso de búsqueda). El segundo tipo tiene un efecto mucho más eficiente, ya que
se almacenan en la memoria atributos, que pueden ser componentes de la solución,
movimientos o diferencias entre soluciones [127]. En este caso, el atributo o grupo
de atributos identifica un conjunto de soluciones. Obsérvese que esta opción tiene la
contrapartida de que se pueden almacenar soluciones en la memoria que no han sido
visitadas y que pueden ser de muy alta calidad.
El término tabú tiene una connotación cultural que indica una serie de prohibi-
ciones para tratar ciertos temas en los que, generalmente, la historia pasada ha tenido
una influencia elevada. En el contexto cultural este tipo de restricciones puede su-
perarse. La búsqueda tabú modela este hecho por medio del criterio de aspiración,
que permite movimientos hacia estados que estén etiquetados como tabú activos. Ha-
bitualmente, se selecciona como criterio el valor de la función objetivo, de tal forma
que si una solución etiquetada como tabú presenta un valor de la función objetivo
superior (en problemas de maximización) al actual, se supera el estatus tabú permi-
tiendo el movimiento, aunque a priori estuviese etiquetado como tabú. Existen otros
criterios de aspiración, generalmente basados en la influencia, donde la influencia es
una medida que se relaciona con la magnitud del cambio (a mayor cambio, mayor
influencia). En [130] se revisan algunos de estos criterios de aspiración. En el algo-
ritmo 5.1 se muestra pseudo-código de alto nivel para una implementación estándar
de TS.
Existen otro tipo de procedimientos más elaborados que en algunos problemas
pueden mejorar sustancialmente el comportamiento de TS, permitiendo hacer una
búsqueda mucho más efectiva. A continuación, se describe algunos de ellos [122][123]
[127][115][130]:
Umbrales tabú: añade versatilidad a los criterios de aspiración. Para ello, exa-
mina la lista tabú T y si la solución actual no está en la lista se compara con el
valor del umbral, de tal forma que se aceptará el movimiento si lo que empeora
la solución es menor que el umbral.
Existen dos estrategias que tienen una relevancia mayor, que son la búsqueda
dispersa (scatter search) y el re-encadenamiento de trayectorias (path relinking)
[124][128] [125][129][131][132], que aunque originalmente se concibieron en el
marco de TS, se han consolidado como metaheurísticas independientes. Debido a
su importancia, estas técnicas se revisarán posteriormente con detalle.
R ECOCIDO SIMULADO 51
Actualmente, algunas de las líneas de investigación que tienen más interés son
aquéllas que están relacionadas con la efectividad de la búsqueda y con la hibridación
de TS con otras metaheurísticas. También se ha ampliado el ámbito de aplicación de
esta metaheurística para resolver problemas de optimización continua [274] o multi-
objetivo [192].
Estados de energía
-bÎ
Î5 e
Î4
Î3
Î2
Î1
Î0
Con respecto a la segunda tendencia, los resultados más interesantes que se han
encontrado en la literatura son los siguientes:
begin
{x} := SolucionInicial(); //Inicializar solución
k := 0;
{tk } := ColaEn f riamiento; //Inicializar la cola de enfriamiento
t0 := T ;
repeat
m := 0;
repeat
{y} := SeleccionarVecino(V (x));
∆E := f (y) − f (x);
if ∆E ≥ 0 then
x := y;
else
ρ := rand(1);
if ρ ≤ e−δE/tk then
x := y;
end if
end if
m := m + 1;
until m = Mmax
{tk } := ReducirTemperatura(tk , k);
k := k + 1;
until terminacion
end
56 M ETAHEURÍSTICAS T RAYECTORIALES
sificación. Este enfoque está muy influido por la búsqueda tabú. Tovey [312]
propone un enfoque similar.
(a) (b)
Figura 5.4: Perfil del espacio de búsqueda para dos estructuras de vecindad distintas.
1. Un óptimo local con respecto a una vecindad Ni (x) no tiene por qué serlo con
respecto a otra vecindad N j (x).
2. Un óptimo global es un óptimo local con respecto a todas las posibles estruc-
turas de vecindad.
3. Para muchos problemas, los óptimos locales con respecto a una o varias estruc-
turas de vecindad, están relativamente próximos.
begin
{x} := GenerarSolucionInicial();
{V } := GenerarVecindad(N1 );
repeat
k := 1;
repeat
/*Se pueden implementar diferentes métodos VNS*/
if opcion =′ a′ then
y := BusquedaLocal(x,V );
else
if opcion =′ b′ then
y := ElegirAleatorio(V );
else
y := ElegirAleatorio(V );
{V } := GenerarVecindad(Nk );
y := ElegirAleatorio(V );
end if
end if
if f (y) >= f (x) then
x := y;
k := 1;
else
k := k + 1;
end if
until k = kmax
until terminacion
end
60 M ETAHEURÍSTICAS T RAYECTORIALES
se queda atrapada en un óptimo local, se cambia la estructura de vecindad con el ob-
jetivo de poder escapar de dicho óptimo. Destacar que la solución que se obtiene al
final de este método es un óptimo local con respecto a todas las vecindades que haya
considerado la metaheurística. En el pseudo-código general de VNS presentado en
el algoritmo 5.3, la variante VND se corresponde con la opción a. En [44][150] se
pueden encontrar implementaciones exitosas de VND.
La combinación de ideas también puede ser estocástica. En este caso la imple-
mentación de VNS se llama VNS reducido o RVNS (Reduced VNS) [153][152]. En
RVNS se selecciona aleatoriamente un punto que pertenece a una vecindad dada, sin
hacer ningún tipo de optimización local. Esta implementación resulta particularmente
útil cuando, para cada entorno, la búsqueda local es costosa. Esta implementación es-
tá relacionada con el método de Monte-Carlo, aunque como se apunta en [152] RVNS
es más sistemática. En el pseudo-código general de VNS presentado en el algoritmo
5.3, la variante RVNS se corresponde con la opción b. En [151][214][153][152] se
pueden encontrar ejemplos de implementaciones de esta versión.
Por último, la combinación también puede ser mixta, es decir, combinando as-
pectos deterministas y estocásticos. En este caso, VNS recibe el nombre de VNS
Básico o BVNS (Basic VNS) [153][152]. En esta implementación también se selec-
ciona aleatoriamente un punto que pertenece a una vecindad, pero en ésta se mejora
mediante una estrategia de búsqueda local. En el pseudo-código general del VNS
presentado en el algoritmo 5.3, la variante BVNS se corresponde con la opción c. En
[269][270][44][150] se pueden encontrar implementaciones de este tipo.
Existen otro tipo de implementaciones más elaboradas, como pueden ser la bús-
queda descompuesta de vecindades variables o VNDS (Variable Neighborhood De-
composition Search) [151][153][152]. Esta variante se basa en la extensión de la me-
todología de VNS a dos niveles. La diferencia fundamental con respecto a BVNS es
que, en vez de aplicar el procedimiento de búsqueda local a toda la solución, sólo
se aplica a parte de la solución. Otras implementaciones son, por ejemplo: el VNS
sesgado o SVNS (Skewed VNS) [153][152], que proporciona criterios de aceptación
más flexibles y potentes o el VNS Paralelo o PVNS (Parallel VNS) [153][152], ver-
sión paralela de VNS. En [152][32][153] se puede encontrar una descripción de estos
métodos y sus posibles aplicaciones.
Uno de los campos donde más éxito ha tenido VNS (en cualquiera de sus imple-
mentaciones) es en la hibridación con otras metaheurísticas, como por ejemplo con
TS, con GRASP o con programación con restricciones.
B ÚSQUEDA LOCAL GUIADA 61
5.5. Búsqueda local guiada
1. GLS es un algoritmo compacto que se puede utilizar sin ningún tipo de modi-
ficación para una colección de problemas. En cambio, las variantes de TS son
dependientes del problema.
2. Las restricciones en GLS se refieren a las soluciones (características de las
soluciones), tomando la forma de penalizaciones en la función objetivo. En
cambio en TS están referidas a movimientos y suelen estar implementadas a
través de listas.
3. Las restricciones en GLS son "blandas", de tal forma que se sobrescriben con
facilidad. Por contra, en TS las restricciones son "duras", superándose sólo
mediante el criterio de aspiración.
x0 x1
Espacio de búsqueda [x]
m
h(x) = f (x) + λ × ∑ (pi × Ii (x)) (5.3)
i=1
donde x es una posible solución, f (x) es el valor de la función objetivo para esa
solución, λ es un parámetro de ajuste de la metaheurística que da una idea de la
importancia que tienen las penalizaciones frente a la función objetivo, i, con 1 ≤ i ≤ m
es un índice que recorre las características (m) que se consideren y, finalmente, pi es
la penalización para la característica i (inicialmente ∀i : pi = 0, 1 ≤ i ≤ m).
GLS intenta no quedar atrapada en óptimos locales por medio de la función h(x),
penalizando las características desfavorables que presenta dicha solución cuando
queda atrapada en un óptimo local. Para penalizar cada característica se tienen en
cuenta dos criterios. El primero es el coste de la característica, de tal forma que si
el coste es elevado, se le penaliza más. Recordando el ejemplo del grafo se tendría
que, para problemas de minimización, cuanto más coste (peso) tenga un arco más
habría que penalizarlo. La segunda característica a considerar es el coste actual de la
penalización, ya que en este caso la búsqueda tiene en cuenta la historia pasada. Si
no se introdujese esta característica, la búsqueda estaría completamente guiada por
el peso. Estos dos conceptos se introducen en una función denominada utilidad de
penalización utili (x∗ ) que se define para un óptimo local x∗ como:
ci
utili (x∗ ) = Ii (x∗ ) × (5.4)
1 + pi
donde ci y pi son respectivamente el coste y la penalización actual de la característica
i.
La utilidad de penalización variará en los siguientes términos:
begin
{I,C, λ} := Inicializar();
{x} := GenerarSolucionInicial();
y := x;
repeat
/*h = f + λ ∑ Ii Pi */
{h} := CalcularF uncionOb jetivoModi f icada( f , λ, I, P, x);
/*buscamos un óptimo local de h*/
z := BusquedaLocal(y, h);
if f (z) >= f (x) then
x := y;
end if
/*Calculamos la utilidad de las características*/
{U } := CalcularUtilidad(i, I,C, m);
/*Seleccionamos la característica de máxima utilidad de penalización*/
hi := argmax(U, j) , j ∈ [1, . . . , m]i;
{P} := Penalizar(i, P);
until terminacion
end
66 M ETAHEURÍSTICAS T RAYECTORIALES
es determinista en vez de aleatoria. En esta revisión se ha preferido considerarlas
como dos metaheurísticas independientes, debido a que así es más sencillo analizar
las relaciones entre las diversas metaheurísticas.
En el contexto de esta metaheurística, la función de aceptación de movimientos
viene dada por la siguiente ecuación:
si ∆E ≤ T hk
1,
Pk (∆E) = (5.5)
0, e.o.c
donde ∆E es el cambio en la función objetivo y T hk la función que determina el
umbral en la iteración k. Esta función suele ser determinista y no creciente.
TA es un método trayectorial e iterativo en el que se fija un umbral determina-
do en cada iteración. Habitualmente, el umbral empieza en valores elevados para,
posteriormente, decrecer de forma monótona hasta que se hace cero. El umbral de-
termina en cada iteración el nivel máximo de pérdida de calidad que se le permite a
la solución. Para cada iteración, se hace una búsqueda local exhaustiva (aunque hay
versiones que eligen un valor aleatorio de la vecindad) de la vecindad. En [91][226]
se muestra, para algunos problemas, una mejora significativa del enfoque TA con
respecto a SA.
No se proporciona un pseudo-código para esta metaheurística porque tiene mu-
chas similitudes con el pseudo-código de SA (figura 5.2). La diferencia fundamental
aparece en la función de aceptación de movimientos, que en este caso, vendría des-
crito por una función semejante a la presentada en 5.5.
En [163] se propone una modificación sobre el esquema general de TA, denomi-
nada aceptación de paquetes antiguos u OBA (Old Bachelor Acceptance), en el que
se permiten modificaciones no monótonas del umbral. Además, los cambios en el
umbral son automáticos; es decir, que el umbral aumenta o disminuye en función de
la lectura del problema (proximidad o lejanía a un óptimo local). En Hu et al. [163] se
denomina a este efecto expectación de la disminución (dwindling expectation), que
permiten la intensificación y diversificación de la metaheurística. En otras palabras,
si el algoritmo se ve forzado a empeorar la función objetivo, se aumenta el umbral
para escapar del óptimo local. Sin embargo, cuando se producen movimientos de
mejora, se reduce el umbral para explorar de forma más intensa la vecindad. Se pue-
de considerar que desde un punto de vista algorítmico, OBA es una implementación
adaptativa de TA.
M ÉTODOS RUIDOSOS 67
5.7. Métodos ruidosos
1. Añadir ruido a los datos: si por ejemplo el problema está descrito por un grafo
G = {V, A}, esta opción consistiría en construir un grafo ruidoso Gnoised =
{V, Anoised } obtenido por medio de la suma de ruido a los pesos de las aristas
que componen el grafo.
∀a ∈ A : anoised = a + noise
donde −r < noise < r se ha seleccionado con una determinada función de dis-
tribución. En estas circunstancias, el método actuaría como un procedimiento
de búsqueda local sobre el grafo ruidoso. Posteriormente se reduciría el nivel
ruido y se volvería a aplicar la búsqueda local. Este procedimiento se repetiría
hasta que el ruido fuese nulo.
2. Añadir ruido a los movimientos: un movimiento desde una solución x a una
solución x′ está descrito por un cambio en la función objetivo dado por:
∆ f (x′ , x) = f (x′ ) − f (x)
En este caso, la forma de añadir ruido sería:
∆ fnoise (x′ , x) = f (x′ ) − f (x) + noise
68 M ETAHEURÍSTICAS T RAYECTORIALES
donde: −r < noise < r se ha seleccionado con una determinada función de
distribución. Se puede demostrar de forma trivial que esta opción generaliza a
la primera.
3. Añadir ruido olvidando parte de la solución: si por ejemplo el problema está
descrito por un grafo en el que la solución es un subgrafo, la forma de añadir
ruido sería olvidar nodos o arcos que hasta el momento se suponía que estaban
en la solución. En este caso, el nivel de ruido vendría dado por el nivel de
olvido.
La razón por la cual se añade ruido tanto a los datos como a la función objetivo, es
para intentar evitar que la búsqueda se quede atrapada en un óptimo local [59]. Para
que este razonamiento fuese valido, el ruido debería permitir que el procedimiento de
búsqueda hiciese tanto movimientos de mejora como movimientos que empeorasen
la mejor solución encontrada hasta el momento. Esta condición se verifica, ya que el
ruido toma valores positivos y negativos.
Desde un punto de vista algorítmico, se puede considerar que la opción de añadir
ruido, descrita en esta sección, es una generalización del recocido simulado. A con-
tinuación se describe dicha generalización. En el contexto del recocido simulado la
aceptación de estados de peor calidad viene dada por:
5.8. FANS
begin
{NS, OS, O} := Inicializar();
repeat
/*Ejecutar el administrador de vecindad*/
y := NS(x, µ, O);
if In f erirCalidad(y) >= In f erirCalidad(x) then
x := y;
{µ} := AdaptarValores(x);
else
/*Modificar el tipo de movimiento*/
O := CambiarOperador(O);
end if
/*Si la búsqueda se atasca se proporciona un mecanismo de escape*/
if Estancamiento() then
Escape()
end if
until terminacion
end
FANS 71
k posibles. Es decir que para una solución dada x ∈ SS, este operador seleccio-
na un determinado tipo de movimiento Oi ∈ {O1 , .., Ok } que le permite obtener
una nueva solución. En el marco de FANS, los operadores verifican dos pre-
misas. La primera es que el operador tenga cierto grado de aleatoriedad; por
lo tanto, el mismo operador de movimiento aplicado sobre la misma solución,
produce soluciones distintas. La segunda premisa establece que el operador de-
be ser adaptativo, lo que indica que tendrá parámetros de entrada que se ajustan
durante la búsqueda. Como consecuencia, modifican el comportamiento de di-
cho operador.
µ : R → [0, 1] (5.6)
de tal forma que se puede decir que una solución determinada cumple una
propiedad descrita por una etiqueta en cierto grado, o lo que es lo mismo: µ
indica el grado de pertenencia a un determinado conjunto borroso. En la figura
5.6 se muestran algunos ejemplos de etiquetas.
es decir, que el vecindario semántico vendría dado por todas aquellas solucio-
nes cuya etiqueta supere un umbral dado por λ, o lo que es lo mismo, aquellas
soluciones que tengan un grado de pertenencia a un conjunto borroso dado
mayor que el umbral. Para generar esta vecindad, se ejecuta un determinado
número de veces el operador de movimiento, generando un vecindario N(x).
Posteriormente, se retorna aquel subconjunto de soluciones cuyo grado de per-
tenencia o combinaciones es mayor que el umbral (λ). Por ejemplo, para las
etiquetas mostradas en la figura 5.6, el vecindario vendría dado por un corte en
el eje de ordenadas a una altura λ dada. Una vez seleccionada la vecindad, se
infiere una solución concreta. Para esta tarea existen varias alternativas, como
elegir la primera, la mejor, etc.
La búsqueda local iterativa [193] o ILS (Iterated Local Search) se basa en una
idea sencilla de búsqueda, que paradójicamente se ha re-descubierto varias veces por
distintos investigadores, dándole entre otros nombres: descenso iterativo (iterated
descent) [18]; cadenas de Markov de paso grande (large-step Markov chains) [200];
algoritmo de Lin-Kernighan iterativo (Lin-Kernighan iterated) [169]; optimización
local encadenada (chained local optimization) [199]. El principio de operación de
todos estos enfoques se puede resumir en los siguientes términos:
B ÚSQUEDA LOCAL ITERATIVA 73
Dado el espacio de soluciones SS, una vecindad N y un procedimiento de bús-
queda local LS, se establece una correspondencia entre SS y el espacio de soluciones
de óptimos locales SS∗ . ILS se basa en un procedimiento de búsqueda local sobre el
espacio de soluciones de óptimos locales SS∗ .
En la formulación actual de ILS [193] se asume que la metaheurística tiene em-
bebido un procedimiento de búsqueda local determinista LS, de tal forma que dada
una solución factible x ∈ F ⊆ SS siempre se obtiene la misma solución:
x∗ ∈ SS LS : x → x∗
La topología del perfil del espacio de búsqueda (search landscape) viene deter-
minada por una estructura de vecindad, de tal forma que si se aplica el procedimiento
de búsqueda local a todos los puntos del espacio de búsqueda SS, se generará un
subespacio SS∗ ⊆ SS donde estarán todos los óptimos locales. El espacio SS∗ es un
remuestreo del espacio de soluciones SS. Este remuestreo se debe a que cada ópti-
mo local x∗ introduce un cuenco de atracción (basin of attraction), de tal forma que
un conjunto de soluciones se ven atraídas por ese óptimo local. Esa atracción viene
dada por el procedimiento de búsqueda local. En las figuras 5.7.a y 5.7.b se muestra
esta situación. En la imagen de la izquierda se representa la topología del perfil del
espacio de búsqueda SS para una función objetivo y una vecindad dada, donde cada
punto representa una solución. En la figura de la derecha se representa el espacio re-
muestreado SS∗ . En este caso, los únicos valores posibles son los óptimos locales de
SS. Partiendo de un espacio de soluciones SS cuyo perfil viene determinado por una
estructura de vecindad N y un procedimiento de búsqueda local LS, la metaheurística
ILS intenta diseñar un procedimiento de búsqueda local LS∗ con una vecindad N ∗
que defina la topología del subconjunto de soluciones SS∗ , de tal forma que se haga
una nueva búsqueda en este subespacio.
La dificultad de este enfoque estriba en cómo definir las vecindades N ∗ y otro
procedimiento de búsqueda local LS∗ en el subespacio de soluciones SS∗ . Obsérvese
que si estos puntos estuviesen claros, se podría definir una segunda correspondencia
entre SS∗ y otro subespacio SS∗∗ ⊆ SS∗ , que contuviese óptimos locales con respecto
a la nueva estructura de vecindad N ∗ y al nuevo procedimiento de búsqueda local LS∗ .
Este razonamiento se puede extender a tantos niveles como se quiera, obteniendo una
jerarquía de búsquedas locales anidadas.
La definición de las vecindades en SS∗ es relativamente sencilla. Dadas dos so-
luciones localmente óptimas x∗1 , x∗2 ∈ SS∗ ⊆ SS se dice que son vecinas en SS∗ si sus
cuencos de atracción están ”en contacto”, o lo que es lo mismo, existe una solución
x1 en el cuenco de atracción x∗1 y una solución x2 en el cuenco de atracción x∗2 tales que
x1 y x2 son vecinas en SS. Esta definición tiene el problema de que computacional-
mente es muy costoso determinar si dos soluciones son vecinas, ya que prácticamente
requeriría hacer una búsqueda exhaustiva de todo el espacio de soluciones. Una for-
74 M ETAHEURÍSTICAS T RAYECTORIALES
(a) (b)
Figura 5.7: (a) Topología del espacio de búsqueda SS para una función objetivo y una
vecindad dada. (b) Topología del espacio de búsqueda re-muestreado SS∗ .
x∗ → x1 → .. → xi → ..
y ver en qué momento del camino aparece un xi que pertenece a otro cuenco de
atracción x′∗ . Aunque este procedimiento es menos costoso, habitualmente se tiene
que ejecutar muchas veces el procedimiento de búsqueda local para poder escapar
del cuenco de atracción.
La forma que tiene ILS de solucionar este problema consiste en explorar el sub-
espacio SS∗ a través de un muestreo guiado (biased sampling). Para llevar a cabo
esta exploración se parte de un solución x∗ ∈ SS∗ a la que se le aplica una pertur-
bación (ligera modificación), generando una nueva solución x′ ∈ SS, que recibe el
nombre de estado intermedio. Finalmente se le aplica el procedimiento de búsqueda
local a x′ obteniendo un óptimo local x′∗ ∈ SS∗ . Si esta nueva solución es aceptable
bajo algún criterio, se efectúa el movimiento en el sub-espacio SS∗ de x∗ a x′∗ . En
caso contrario, no se produciría el movimiento y se buscaría otro vecino. Este mé-
todo funciona correctamente si las perturbaciones no son ni demasiado pequeñas, ni
demasiado grandes; es decir, que si son demasiado pequeñas, no será capaz de salir
del cuenco de atracción del mínimo local. Por el contrario, si son demasiado grandes,
el nuevo óptimo local encontrado no sería vecino, con lo que no sería ILS sino un
algoritmo de re-arranque aleatorio. En la figura 5.8 se muestran estas ideas de forma
gráfica.
Las perturbaciones suelen tener un carácter aleatorio ya que en el caso contrario
se corre el riesgo de que la búsqueda se cicle [193]. Como consecuencia, los mo-
B ÚSQUEDA LOCAL ITERATIVA 75
Perturbacion
aleatoria
Perturbación
Perturbación
pequeña
x0 x1
Espacio de búsqueda [x]
begin
/*La solución inicial puede ser aleatoria o heurística*/
{y} := InicializarSolucion();
{x} := BusquedaLocal(y, f );
repeat
/*Perturbar el óptimo local modificando algún parámetro*/
{y} := perturbar(x, M);
{x} := BusquedaLocal(y, f );
{z} := AceptarMovimiento(x, M, f );
if f (x) > f (z) then
z := x;
end if
until SolucionFactible(z)
end
76 M ETAHEURÍSTICAS T RAYECTORIALES
vimientos en SS∗ no suelen ser reversibles. La mayoría de publicaciones sobre ILS
interpretan los movimientos en SS∗ como markovianos; es decir, sólo dependen del
estado origen y destino. Nótese que se puede introducir una memoria tanto en el pro-
ceso de la perturbación como en el proceso de la aceptación de soluciones [300], con
el objetivo de hacer una búsqueda mucho más robusta e inteligente.
Desde un punto de vista algorítmico, ILS está compuesto de 4 grandes bloques
(en el algoritmo 5.6 se presenta un pseudo-código de alto nivel), los cuales se descri-
ben a continuación:
4 Para
casi todos los problemas se conoce de antemano un algoritmo aproximado que se puede utili-
zar como algoritmo de búsqueda local.
B ÚSQUEDA LOCAL ITERATIVA 77
ILS es una metaheurística sencilla que necesita muy pocos parámetros para su
ajuste. Además, es capaz de producir soluciones de muy alta calidad de forma eficien-
te. Algunas aplicaciones de esta metaheurística se pueden encontrar en [6][45][46][301].
Capítulo 6
Metaheurísticas Poblacionales
6.1. Introducción
Los primeros trabajos científicos que se pueden encontrar en el campo de los al-
goritmos evolutivos (Evolutionary Algorithms - EA) provienen de finales de los años
cincuenta. En esta década aparecen publicaciones [111][38][112][113] en las que se
proponen EA sencillos para resolver problemas combinatorios. Ya en la década de
los sesenta, L. Fogel [109], establece las bases de la programación genética, y en
79
80 M ETAHEURÍSTICAS P OBLACIONALES
Figura 6.1: Poblaciones (a) inicial y (b) final durante un proceso de optimización
utilizando una metaheurística poblacional. Generalmente, el espacio de búsqueda es
multidimensional.
los setenta, Rechemberg [258] hace lo propio con las estrategias evolutivas. Holland
[160] introduce los algoritmos genéticos a mediados de esta década. Estos trabajos
(ordenados cronológicamente), suponen las bases de muchas metaheurísticas moder-
nas como son los propios algoritmos genéticos [160][136], los algoritmos meméticos
[222][224], los algoritmos culturales [268] o la inteligencia de enjambre [177] entre
otros.
EA se basa en la idea neo-darwiniana de evolución de las especies, que se puede
expresar en los siguientes términos:
Los individuos que tienen una mejor adaptación al medio tienen una probabi-
lidad más elevada de vivir más tiempo, con lo que tendrán más posibilidades de
generar descendencia que herede sus buenas características. En cambio, los indivi-
duos con peor adaptación al medio, tienen menos probabilidad de sobrevivir, por lo
que tendrán menos oportunidades de generar descendencia y probablemente acaben
extinguiéndose
Desde un punto de vista algorítmico, EA consta de los siguientes elementos
[210][211]:
begin
g := 1; // Inicializar el número de generación
{x} := inicializar(N); // Inicializar la población
repeat
{x∗ } := seleccionar(x, f ); // Seleccionar los mejores individuos
{x} := alterar(x∗ ); // Alterar los individuos seleccionados
g := g + 1;
until terminacion
{xbest } := seleccionar(x, f ); //Seleccionar la mejor solución encontrada
end
Población inicial: suele estar formada por una generación aleatoria de solu-
ciones al problema dado [160][80][136].
begin
g := 1; // Inicializar el número de generación
{x} := Inicializar(N); // Inicializar aleatoriamente la población
for i := 1 to N do
{x[i]} := OptimizadorLocal(x[i], Operador[i], f );
end for
repeat
/*Paso generacional:*/
{x} := Seleccionar(x, f ); // Seleccionar los mejores individuos
{x} := Alterar(x); // Reproducir nuevos individuos
for i := 1 to Ns do
{x[i]} := OptimizadorLocal(x[i], Operador[i], f );
end for
if convergencia(x) then
{x} := Inicializar(Ns ); // Inicializar aleatoriamente la población
for i := 1 to Ns do
{x[i]} := OptimizadorLocal(x[i], Operador[i], f );
end for
end if
g := g + 1;
until terminacion
{xbest } := seleccionar(x, f ); // Seleccionar la mejor solución encontrada
end
begin
repeat
{xnuevo } := aplicar(x, Operador);
if f (xnuevo ) > f (x) then
x := xnuevo ;
end if
until Terminacion
end
mejora la calidad de la solución o soluciones que contiene dicho agente hasta que no
se pueda mejorar más.
Para una descripción exhaustiva de MA pueden consultarse los trabajos [224][225]
[71] en los que se consideran descripciones y aplicaciones de esta metaheurística a
distintos problemas de optimización.
1 Es importante notar que el cálculo del subconjunto de las soluciones más diversas de un conjunto
es un problema difícil.
88 M ETAHEURÍSTICAS P OBLACIONALES
Las combinaciones de soluciones son versiones generalizadas de combinaciones
lineales (en el espacio euclídeo). A priori, para muchos problemas combinatorios no
tiene sentido la combinación lineal de soluciones. Por ejemplo, en el caso de proble-
mas cuya solución es una permutación (como el Problema del Viajante de Comercio
o el Problema del Enrutamiento de Vehículos) no se pueden combinar linealmente
dos soluciones. Para aplicar SS a este tipo de problemas, se extiende el concepto de
combinación lineal, introduciendo los cruces o combinaciones basados en votos (vo-
ting method) [186]. En ellos, cada solución (formada por componentes) “vota” para
que sus componentes aparezcan en la nueva solución generada. En [198] se resalta
que esta estrategia es una de las claves del éxito de SS. Además, se fuerza a que el
resultado de dicha combinación satisfaga ciertas condiciones de factibilidad [120].
Una característica notable de SS es la integración de métodos de mejora y de com-
binación de soluciones. Los procedimientos de mejora suelen ser algoritmos sencillos
de Búsqueda Local, pero no existe ninguna limitación para utilizar otros métodos más
complejos como la Búsqueda Tabú [121]. La aplicación de esta etapa asegura que la
calidad de las soluciones consideradas siempre es elevada, al menos en una vecindad
dada.
Desde un punto de vista algorítmico, la metaheurística SS consiste básicamente
en cinco procedimientos, que se representan gráficamente en la figura 6.2:
begin
{DiverseSet} := GenerarDiversas(N); // Incluyendo mejora de las soluciones
/*Inicializa RefSet con los b/2 mejores individuos y los b/2 más diversos en
DiverseSet*/
{Re f Set} := ConstruirRe f Set(DiverseSet, b, f );
NewSolution := T RU E;
while NewSolution do
NewSolution := FALSE;
{P} := GenerarGrupos(SubsetSize);
while P 6= 0/ do
{pnueva } := Combinar(Re f Set, P[1, :]);
P := P[2 :, :]; // Eliminar de P la combinación utilizada
{pnueva } := Me jorar(pnueva , f ); // Mejorar las soluciones nuevas
if f (pnueva ) > f (Re f Set[b]) then
{Re f Set} := Actualizar(Re f Set, pnueva ); // Actualizar Re f Set
NewSolution := T RU E;
end if
end while
end while
end
90 M ETAHEURÍSTICAS P OBLACIONALES
Creación: Típicamente, el RefSet se inicializa con las b/2 mejores solu-
ciones del conjunto diverso. El resto (b/2) se extraen con el criterio de
maximizar la distancia con las ya incluidas en el RefSet. Para esta selec-
ción, se debe definir una función distancia que dependerá del problema.
Actualización: Las nuevas soluciones generadas, fruto de las combina-
ciones, que mejoren a las del RefSet deberán reemplazarlas. El conjunto
de referencia mantiene así un tamaño constante b, pero la calidad de las
soluciones que contiene mejora durante la búsqueda. Fundamentalmen-
te, existen dos estrategias para tratar las soluciones obtenidas por medio
de la combinación. La primera de ellas, denominada “estática”, almacena
todas las soluciones temporalmente hasta que se han combinado todas.
Después, se analizan y se decide si alguna de las soluciones generadas
debe entrar en el conjunto de referencia. En la estrategia “dinámica”, la
actualización del RefSet se realiza en el momento en que se produzca una
solución mejor que alguna de las ya almacenadas.
begin
{DiverseSet} := GenerarDiversas(N); // Incluyendo mejora de las soluciones
{Re f Set} := ConstruirRe f Set(DiverseSet, b, f ); // con los mejores individuos
NewSolution := T RU E;
while NewSolution do
NewSolution := FALSE;
{P} := GenerarGrupos(SubsetSize);
while P 6= 0/ do
{pinicial , pguia } := Seleccionar(Re f Set, P[1, :]); // Selecc. una pareja de P
P := P[2 :, :]; // Eliminar de P la combinación utilizada
{Ruta} := Reencadenamiento(pinicial , pguia ); // Generar nuevas soluciones
for i := 1 to Nelem(Ruta)/NumImp do
{Ruta[i]} := Me jorar(Ruta[i]); // Mejorar soluciones nuevas
end for
for i := 1 to Nelem(Ruta) do
if f (Ruta[i]) > f (Re f Set[b]) then
{Re f Set} := Actualizar(Re f Set, Ruta); // Actualizar Re f Set
NewSolution := T RU E;
end if
end for
end while
end while
end
R EENCADENAMIENTO DE TRAYECTORIAS 93
actuando como origen y la otra como destino, se genera un camino en el espacio de
soluciones entre origen y el destino
Se suele considerar PR como una extensión del mecanismo de combinación de
soluciones de SS [127]. El método de combinación en PR se basa en la generación
de trayectorias entre soluciones en el espacio de búsqueda, en lugar de llevar a cabo
combinaciones lineales entre ellas. En otras palabras, dadas dos buenas soluciones
x1 y x2 , PR construye un camino entre ambas, comenzando por la solución x1 , de-
nominada “solución de partida” y, llevando a cabo una serie de movimientos, inten-
ta llegar a la solución x2 , denominada “solución guía”. PR construye la trayectoria
x1 → x2 eliminando paulatinamente los atributos de la solución de partida para intro-
ducir atributos que pertenecen a la solución guía. El objetivo es encontrar en estos
caminos soluciones que mejoren a aquéllas que originaron la trayectoria.
Desde un punto de vista algorítmico, PR comparte con SS los 5 procedimientos
generales expuestos en la sección 6.3 (ver figura 6.2). De este modo, PR y SS son
métodos que operan sobre un conjunto de soluciones de referencia y difieren en la
forma en la que el conjunto de referencia es construido, mantenido, actualizado y
mejorado [143]:
begin
g := 1; // Inicializar el número de generación
{poblacion} := Inicializar(N); // Inicializar aleatoriamente la población
repeat
/*Seleccionar M individuos de acuerdo a un mecanismo de selección*/
{poblacion} := Seleccionar(poblacion);
/*Estimar la distribución de probabilidad de los individuos seleccionados*/
{pg (x)} := EstimarPDF(p(x|poblacion), f );
/*Muestrear N individuos*/
hpoblacion ∼ pg (x)i;
g := g + 1;
until terminacion
{xbest } := SeleccionarMe jor(poblacion, f );
end
Reynolds [268], establece que un algoritmo cultural viene descrito por un con-
junto de ocho componentes:
donde
S es el operador de selección,
Vc es un operador de variación,
f es la función objetivo,
A LGORITMOS CULTURALES 99
Algoritmo 6.7 Algoritmo Cultural
{xbest : TipoSolucion} = CA(N: integer; f : TipoFuncionObjetivo)
var
P: array [1 . . . N] of TipoSolucion; // Soluciones con peso
B: h Creencias i;
g: integer; // generación
begin
g := 1; // Inicializar el número de generación
{P} := InicializarPoblacion(N); // Inicializar los elementos de la población
{B} := InicializarCreencias; // Inicializar las creencias de la población
repeat
{P} := Evaluar(P, f ); // Evaluar la calidad de los individuos
{B} := A justar(B, Aceptar(P)); // Ajustar las creencias con los indiv. influ-
yentes
{P} := Modi f icar(P, in f luir(B)); // Modificar los individuos con las creen-
cias
g := g + 1;
{P} := Seleccionar(P, f );
until terminacion
{xbest } := SeleccionarMe jor(P, f ); // Seleccionar la mejor solución encontrada
end
B es el espacio de creencias,
−
→
x i (t) = →
−
x i (t − 1) + −
→
v i (t − 1) (6.2)
102 M ETAHEURÍSTICAS P OBLACIONALES
begin
g := 0; // Inicializar el número de generación
{pi } := InicializarParticulas(N); // Inicializar los elementos de la población
repeat
for i := 1 to N do
{p[i]} := ActualizarMe jorParticula(p[i], f ); // Almacenar el mejor valor
de cada partícula
for n := 1 to V do
{v[n]}:=ActualizarMe jorParticula(p[n], p[i], f ); // Almacenar el mejor
valor de cada vecindad
end for
g := g + 1
for d := 1 to D do
−
→v ig = →
−
v ig−1 + ρ1 (−
→
p i−− →v ig−1 ) + ρ2 (−
→
p n−−
→v ig−1 ); // Actualizar la velo-
cidad
−
→x ig = −
→
x ig−1 + ρ1 (−
→
v ig ; // Actualizar la posición
end for
end for
until terminacion
xbest := SeleccionarMe jor(p, f ); // Seleccionar la mejor solución encontrada
end
I NTELIGENCIA DE ENJAMBRE Y OPT. POR ENJAMBRE DE PARTÍCULAS 103
Las partículas del enjambre producen una señal de error en cada iteración con
el objetivo de modificar su velocidad, cambiando de posición y describiendo una
trayectoria en el espacio de soluciones. Si −
→
p i es la mejor posición que ha encontrado
−
→i
en esa trayectoria, la distancia d entre la posición actual − →x i y la mejor posición
encontrada viene dada por:
−
→i −
d =→
p i−−
→
xi (6.3)
que determina la dirección y la distancia que la partícula debería tener para regresar al
mejor valor conocido. El algoritmo de enjambre de partículas utiliza esta diferencia
para establecer el valor del vector de velocidad. Su descripción matemática se puede
expresar mediante la siguiente ecuación:
−
→
v i (t) = −
→
v i (t − 1) + ρ1 (−
→
p i−−
→
x i (t − 1)) (6.4)
donde ρ1 es un número aleatorio cuyo límite superior está prefijado (habitualmente
ρ1max = 2).
La ecuación (6.4) describe una tendencia a volver hacia la mejor solución conoci-
da. Este hecho se interpreta como el deseo de los organismos (partículas) por repetir
comportamientos pasados o volver a situaciones exitosas (algo parecido a la “nostal-
gia”) [177][176].
La interacción social se modela por medio de la definición de vecindad, de modo
que cada partícula sólo interacciona con sus vecinas. Existen diferentes definiciones
de vecindad [177][176] que se pueden utilizar en el contexto de SI. Aunque todos los
individuos del enjambre realizan la búsqueda simultáneamente, a cada uno solamente
le afecta su vecindad, de modo que los individuos de esa vecindad contribuyen en la
−
→
búsqueda de un mejor valor para las coordenadas. Si pg es la mejor posición que se
−
→ −
→
ha encontrado en esa vecindad, la dirección y distancia d g entre la posición actual xi
de cada individuo de esa vecindad y la mejor posición encontrada viene dada por:
−
→g −
d =→
p g−−
→
xi (6.5)
Como en el caso anterior, este valor también se aleatoriza para modificar la ve-
locidad. En [177][176] se interpreta como la tendencia que tienen los individuos a
imitar los éxitos de los demás. Finalmente, el vector velocidad, considerando los dos
efectos descritos anteriormente se puede calcular como:
v i (t) = −
−
→ →
v i (t − 1) + ρ1 (−
→
p i−−
→
v i (t − 1)) + ρ2 (−
→
p g−−
→
v i (t − 1)) (6.6)
Capítulo 7
Metaheurísticas Constructivas
7.1. Introducción
105
106 M ETAHEURÍSTICAS C ONSTRUCTIVAS
Algoritmo 7.1 Multi-Start Methods
{x: TipoSolucion} = MSM(M: integer; f : TipoFuncionObjetivo)
var
i: integer;
xtrial : TipoSolucion;
begin
for i := 1 to M do
/*Construir una solución a través de cualquier heurístico o proc. aleatorio*/
{xtrial } := ConstruirSolucion();
{xtrial } := Me jorarSolucion(xtrial , f );
{x} := ActualizarSolucion( f , x, xtrial )
end for
end
en dos partes bien diferenciadas. Los procedimientos que se pueden utilizar para
implementar la primera parte van desde los métodos que construyen una solución
aleatoria hasta los métodos constructivos más elaborados. Con respecto a la segunda
fase ocurre exactamente lo mismo. Por lo tanto, que la búsqueda local puede ir desde
un procedimiento de búsqueda basada en el gradiente hasta las metaheurísticas más
elaboradas.
Los procedimientos multi-arranque adquieren una relevancia importante en los
métodos que utilizan algún tipo de memoria adaptativa, ya que esta estructura de
memoria puede retener algunas características ”buenas” de las soluciones de alta
calidad, permitiendo utilizar esta información en la fase constructiva y/o de mejora
[197][192]. En [197][198][288] se pueden encontrar revisiones muy exhaustivas de
los procedimientos multi-arranque que aparecen en la literatura. En estos trabajos se
apunta que esta metodología se ha aplicado con éxito principalmente a dos clases de
problemas:
7.3. GRASP
begin
for i := 1 to M do
{xtrial } := ConstruccionAleatorizadaMiope();
{xtrial } := Me jorarSolucion(xtrial , f );
{x} := ActualizarSolucion( f , x, xtrial )
end for
end
1 Si se conoceque ciertas sub-estructuras forman parte de la solución óptima, éstas se pueden corres-
ponder con la semilla [137][79].
GRASP 109
Candidatos
RCL
del coste, la RCL estaría formada por todos aquellos elementos cuyo coste superase
(para problemas de maximización) el umbral dado por la siguiente expresión:
En la figura 7.1 se muestra gráficamente el aspecto que tendría una RCL. El tama-
ño de la RCL está marcado por la línea punteada gruesa, que naturalmente depende
110 M ETAHEURÍSTICAS C ONSTRUCTIVAS
Algoritmo 7.3 Fase constructiva de GRASP
{x: TipoSolucion} = ConstruccionAleatorizadaMiope()
var
px : TipoElemento; //Elemento de la solución
L, RCL: list of TipoSolucion; // Lista y lista restringida de candidatos
C: list of real; // coste para cada candidato
α: real;
begin
{L} := CandidatosSeleccionables();
{C} := CalcularCoste(L);
repeat
{α} := rand(1);
{RLC} := ConstruirRLC(L,C, α);
{px } := Seleccionar(RLC); //Seleccionar un candidato aleatoriamente de
RCL
{L} := ActualizarCandidatosSeleccionables(L, px );
{x} := incluir(x, px );
{C} := CalcularCoste(L);
until EsFactible(x)
end
La segunda fase termina cuando no se pueda hacer ningún movimiento que me-
jore la solución actual. En el algoritmo 7.4 se muestra un pseudo-código de alto nivel
para esta fase.
Existen una serie de métodos que se pueden introducir en la implementación es-
tándar de GRASP que, para algunos problemas, pueden conseguir mejoras sustancia-
les. A continuación, se describen esquemáticamente los que se consideran de mayor
interés:
112 M ETAHEURÍSTICAS C ONSTRUCTIVAS
Algoritmo 7.4 Fase de mejora de GRASP
{x: TipoSolucion} = MejorarSolucion(x: TipoSolucion; f : TipoFuncionObjetivo)
var
vecindad: array [1...NV ] of TipoSolucion;
newSolution: boolean;
begin
repeat
newSolution := FALSE;
{vecindad} := GenerarVecindad(x)
{x, newSolution} := ActualizarSolucion( f , x, vecindad)
until not newSolution
end
Hormiguero
Comida
Figura 7.2: Caminos del hormiguero a la comida.
En esencia, ACO construye una solución a través del camino que genera una hor-
miga en un grafo determinado. Nótese que este método es mucho más elaborado que
un heurístico constructivo. Por ejemplo, en [87] se resaltan como ventajas fundamen-
tales de la metaheurística con respecto a las heurísticas voraces las siguientes:
El uso de información heurística (en cada decisión de una hormiga) guía a las
hormigas hacia soluciones mejores.
begin
repeat
/*Construir una solución para cada hormiga*/
for i := 1 to N do
{M} := ActualizarMemoria(M);
while not Solucionconstruida do
{C} := MovimientosPosibles(pos); // Mtos. posibles de una hormiga
{P} := EvaluarMovimientos(C, M); // Evaluar los movimientos
{pos} := MovimientoHormiga(P); // Nuevo movimiento de la hormiga
{F} := DepositarFeromonas(pos); // Depósito de feromonas
{x} := AnnadirComponente(pos); // Añadir componente a la solución
end while
{x} = ActualizarSoluciones(x);
end for
{F} := EvaporacionFeromonas(x, F );
{F} := AccionesDemonio(x, F );
until terminacion
{xbest } := SeleccionarMe jor(x); //Seleccionar la mejor solución encontrada
end
7.6. POPMUSIC
begin
{x} := InicializarSolucion();
{x∗ } := DividirSolucionEnPartes(x);
O = [];
/*A través de una función distancia se establece una similitud entre partes*/
S = CalcularSimilitudes(x);
repeat
/*Se selecciona alguna parte con algún criterio heurístico*/
parte := seleccionarParte(O);
/*Construir un subproblema con las partes más parecidas*/
Ri := ConstruirSubproblema(r, x, S);
/*Mejora local del subproblema*/
R j := BsquedaLocal(Ri , f );
if f (R j ) >= f (Ri ) then
/*Actualizar la solución y las partes correspondientes*/
x := actualizar(x, R j );
else
O := O ∪ parte;
end if
until O = x∗
end
POPMUSIC 119
POPMUSIC es una metaheurística que sugiere cómo generar las vecindades que
mejor se adaptan a problemas combinatorios grandes. En general, suelen ser grandes
y no tienen por qué ser enumeradas, sino que son generadas implícitamente mediante
un método exacto o aproximado [304]. Considérese que x es la solución a un proble-
ma de optimización grande y que ésta se puede dividir en varias partes x = x1 , .., x p .
Supóngase que se puede dar una medida de la relación entre cada parte. En estas con-
diciones, POPMUSIC selecciona una parte del problema xi , denominada semilla, y
las r < p partes vecinas que más relación tienen con dicha semilla. Con estas r partes
seleccionadas se construye un subproblema. Si las partes y los sub-problemas están
bien definidos, cada mejora en el sub-problema se corresponde con una mejora en
el problema general. Por lo tanto, esta metaheurística lo que hace es transformar el
problema real en un problema más pequeño, que se resuelve con más facilidad. El
proceso terminará cuando no se pueda conseguir ninguna mejora para ningún sub-
problema. En el algoritmo 7.6 se muestra el pseudo-código de esta metaheurística.
Un campo de aplicación típico para esta metaheurística es el de la agrupación
(clustering). Para aplicar POPMUSIC a este problema, en primer lugar, se debe dis-
poner de una solución factible. En este ejemplo, se supone que se parte de la cla-
sificación dada en la figura 7.3, donde los círculos más grandes representarían los
centroides de cada clase y los círculos más pequeños con los elementos que se aso-
cian a una determinada clase. Para este ejemplo, se parte de 31 clases; por lo tanto, el
problema se divide en 31 partes (tantas como clases). Naturalmente, las partes en las
que se ha dividido el problema están relacionadas entre sí. Considérese las tres clases
marcadas en negro (clases s1, s2 y s3) en la figura 7.3. Las clases s1 y s2, resalta-
das en la parte superior de la imagen en negro, prácticamente no tienen relación con
otras clases, ya que están muy alejadas del resto de clases. Por lo tanto, ni s1 ni s2
se podrán utilizar como semilla para construir un sub-problema. Por el contrario, la
clase s3, sí que tiene bastante relación con las clases vecinas, ya que está mucho más
próxima al resto de clases (marcadas en la figura con un tono gris medio). En este
caso, s3 podría ser la semilla y las r clases que rodean a la semilla (5 clases marca-
das en tono gris medio en la figura 7.3) conformarían el sub-problema. POPMUSIC
trataría de optimizar el sub-problema compuesto exclusivamente por la semilla s3 y
sus r clases vecinas.
En [304] se apunta como una de las características más interesantes de POPMU-
SIC, que ésta actúa como marco genérico para otras metaheurísticas, como pueden
ser LNS [305], MIMAUSA [202], VNS [152], o los procedimientos heurísticos que
se presentan en [7][33].
120 M ETAHEURÍSTICAS C ONSTRUCTIVAS
s1
s2
s3
Figura 7.3: Ejemplo de dos clases muy poco relacionadas con el resto (parte de arri-
ba) y un sub-problema creado a partir de la semilla s3 y 5 clases muy relacionadas
(resaltadas en gris oscuro alrededor de la semilla).
Destructores Destructores
Población de Población
Circuitos 1-Árboles
Cada agente trabaja de forma autónoma y asíncrona utilizando sus propios mé-
todos. En estas condiciones, cada uno decide en cada momento cuándo trabajar, qué
soluciones debe seleccionar y cómo modificarlas. Es importante destacar que la coo-
peración entre los agentes no se produce de forma explícita, sino que es mediante
la modificación de una población que ya ha sido modificada por otros agentes. Esta
estrategia de cooperación es semejante a la comunicación por feromonas que aparece
en la las colonias de hormigas [87]. Desde un punto de vista biológico, esta forma de
cooperación se puede observar en insectos reales tales como las hormigas, las abejas
o incluso cierta clase de termitas. En [308] se explora más profundamente el símil
biológico.
Para algunos problemas difíciles se permiten estructuras organizativas más com-
plejas. Por ejemplo, se puede suponer que una agrupación de agentes forman parte
de una estructura más compleja denominada super-agente. A su vez, esta estructura
también puede formar parte de una más compleja (super-super-agente), y así suce-
sivamente. Este tipo de organizaciones se suele justificar debido a que cuando se
produce un agrupamiento de agentes se establece una sinergia entre ellos [308].
Desde un punto de vista algorítmico, el diseño de un AT se divide en cinco capas.
A continuación, se describen brevemente cada una de ellas:
1. Control de flujo: establece una estructura de árbol donde los nodos se corres-
ponden con agentes. Esta estructura permite definir una organización de los
agentes en capas, lo cual es muy útil en el caso de estructuras de super-agentes.
El árbol indica mediante sus arcos las relaciones de supervisión. Es decir, a
quien tiene que informar cada agente. Finalmente, por medio del peso de los
arcos, se expresa la autonomía que tiene cada uno.
2. Descomposición del problema: establece una estructura de grafo donde los
nodos representan cada subproblema y los arcos el acoplamiento entre dichos
subproblemas.
3. Asignación a subproblemas: establece una estructura de grafo con dos tipos
de nodos: un tipo que se corresponde con agentes y el otro con subproblemas.
E QUIPOS ASÍNCRONOS 123
La asignación consiste en resolver un problema de bipartición de grafos, deter-
minando qué agente se asigna a cada subproblema.
4. Flujo de datos: establece una estructura de grafo bipartito que determina qué
agentes se comunican y cómo lo hacen. Los nodos de este grafo son de dos
tipos: un tipo representa a los agentes; y el otro tipo representa a estructuras de
memoria. Los arcos del grafo representan las posibles comunicaciones, por un
lado entre distintos agentes y por otro lado entre agentes y una estructura de
memoria.
5. Planificación del trabajo: establece una estructura de grafo donde los nodos
representan las tareas y los arcos a las relaciones de precedencia entre las ta-
reas. Este grafo determina el orden en el que los agentes ejecutan las tareas
(iteraciones y comunicaciones).
Tendencias Actuales en
Optimización Metaheurística
8.1. Introducción
125
126 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
Combinación
{ Homogénea
{
Heterogénea
Metaheurísticas
Híbridas
Espacio de Búsqueda
{ Global
Parcial
Homogéneas o Heterogéneas
1. Homogénea: Todas los algoritmos combinados utilizan la misma me-
taheurística. Los algoritmos híbridos como el Modelo de Islas para Algo-
ritmos Genéticos [246] pertenece a esta clase de algoritmos.
2. Heterogénea: Los algoritmos combinados utilizan diferentes metaheu-
rísticas. El métodos GRASP puede verse como una combinación de alto
nivel serie (HRH) heterogéneo, en el que la búsqueda local se repite pa-
ra un número de soluciones iniciales generadas mediante una heurística
miope aleatorizada [100].
Globales o parciales
1. Global: En las hibridaciones globales, todos los algoritmos buscan en
todo el espacio de búsqueda. El objetivo es entonces explorar el espacio
más minuciosamente.
2. Parcial: En las hibridaciones parciales el problema se descompone en
sub-problemas, cada uno definido en su propio espacio de búsqueda. Ca-
da uno de los algoritmos se dedica a explorar uno de esos sub-espacios.
Los sub-problemas están relacionados entre sí a través de restricciones
entre las soluciones encontradas en cada uno. Por lo tanto, los algoritmos
se comunican entre ellos para respetar estas restricciones y construir una
solución global factible.
128 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
Especializados o generales
1. General: En la hibridación general, todos los algoritmos resuelven el
mismo problema de optimización.
2. Especializados: En ellas, se combinan algoritmos que resuelven diferen-
tes problemas.
8.3. Hiperheuristicas
Hiper-Heuristica
Conjunto de
Heurísticas|Metaheurísticas
h1 h2 ....... hn
Función de evaluación
La topología del perfil del espacio de búsqueda viene determinada por la estruc-
tura de vecindad que se utilice para explorarlo. A continuación, se muestran algunas
de las características que presenta dicho perfil, que en la mayoría de los problemas
tiene una gran influencia sobre el procedimiento de búsqueda:
Funciones de agregación.
En [65] aparece una descripción detallada de estos tres enfoques, así como los
métodos que se encuadran en cada uno de ellos. Como en el caso de las metaheu-
rísticas con un único objetivo, existen dos alternativas para atacar los problemas de
optimización: a través de un enfoque trayectorial o a través de un enfoque poblacio-
nal. A continuación, se dan detalles de estos dos enfoques:
En [95] se describen con detalle estos enfoques, así como las implementaciones
particulares de las metaheurísticas.
donde g se elige de forma que se favorezca a los individuos de mediana edad. Esta
estrategia consigue mantener la diversidad de la población.
que poseen dos series de cromosomas. Las células poliploides son aquéllas que poseen tres o más
dotaciones cromosómicas.
138 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
Aunque las representaciones redundantes permiten a EA almacenar implícita-
mente información útil durante el proceso de búsqueda, no está claro que el algorit-
mo maneje esta memoria de un modo eficiente [41]. Como alternativa, existen otros
enfoques que utilizan memoria explícita, que almacena información específica y la
reintroducen en la población en generaciones posteriores.
Ramsey [256] introduce el razonamiento basado en casos en el esquema de EA.
Utiliza una base de conocimiento para memorizar individuos de calidad alta en una
memoria permanente. El sistema asume que las condiciones medioambientales se
pueden medir. A intervalos regulares, el mejor individuo se almacena en la base de
conocimiento y se indexa con datos que caracterizan las condiciones en cada instante.
Cuando se encuentra un nuevo medio ambiente, EA es reinicializado, de forma que
la mitad de los individuos se obtienen de la base de conocimiento de los que han sido
exitosos en entornos similares. Desafortunadamente, este enfoque sólo es aplicable
cuando las condiciones de entorno son medibles.
En el algoritmo TDGA [220][219] se considera una estrategia basada en memo-
ria, en cuanto que los mejores individuos se almacenan en la memoria y otros son
eliminados en función de su contribución a la diversidad de la memoria y su edad.
De un modo similar, Branke [40] compara diferentes estrategias de reemplazo para
insertar nuevos individuos en la memoria.
Métodos multi-población
Las hormigas naturales son agentes adaptativos que deben conseguir comida en
un entorno no estacionario y llevarla de vuelta al hormiguero. Las fuentes de comi-
da cambian constantemente, aparecen y desaparecen obstáculos que abren y cierran
rutas. Por lo tanto, las hormigas tienen una naturaleza dinámica [71].
ACO se ha aplicado a diversos problemas de optimización dinámicos, sobre todo
en problemas de telecomunicaciones [84]. Schoonderwoerd et al. [289] utilizan ACO
para minimizar el número de llamadas perdidas en una red de telecomunicaciones.
En su solución, las hormigas operan independientemente de las llamadas y viajan
entre un origen y un destino aleatorio, basándose en: (i) un depósito de feromona, (ii)
la distancia y (iii) la congestión en los nodos. Se escoge siempre el enlace con mayor
depósito de feromona. Este enfoque fue comparado con buenos resultados con los
métodos existentes en la prestigiosa empresa de telecomunicaciones British Telecom.
En el ámbito de la logística, ACO se ha aplicado al control de los movimientos
de aviones en aeropuertos. Por ejemplo, en la minimización de la diferencia entre el
“tiempo preferido de aterrizaje” (el que resulta más económico para el avión) y el
“tiempo real de aterrizaje” para cada avión, sujeto a las restricciones de separación,
debidas a las turbulencias producidas por los aviones al aterrizar. En el trabajo de
Beasley et al. [20] inspirado en la versión estática [21], se aplica la mejor planifica-
ción encontrada en instantes anteriores a la situación actual, con diferentes grupos de
aviones. El sistema de control de tráfico aéreo de Davis et al. [77] es un conjunto de
heurísticas particularizadas al aeropuerto Dallas/Fort Worth. El objetivo es minimi-
zar el tiempo entre aterrizajes de aviones respetando los estándares de seguridad. Ha
alcanzado un éxito moderado cuando trata con cambios en las condiciones atmosfé-
ricas de tiempo y/o periodos de máxima actividad.
También se ha aplicado ACO al Problema del Enrutamiento de Vehículos, en-
tendido como un problema dinámico en el que los pedidos de los clientes pueden
cambiar durante el reparto de mercancías. Por lo tanto, las rutas existentes cambian
continuamente para satisfacer los nuevos requisitos de los clientes. En el trabajo de
Kilby et al [179] se parte de una planificación construida a partir de requisitos cono-
cidos. Posteriormente, se utilizan operaciones de búsqueda local, de intercambio y de
cruce para construir la planificación inicial y los ajustes siguientes. Zhu y Ong [335]
tratan cada vehículo como un agente independiente y desarrollan una heurística para
gobernar la interacción entre los agentes y responder a nuevos requisitos.
140 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
Alguno de los problemas más comunes en manufacturado industrial son los de
planificación de tareas y secuenciación de procesos. En este tipo de problemas, cada
máquina realiza un trabajo y cada uno tiene unos requisitos de tiempo. En este con-
texto, el objetivo es encontrar una planificación de la secuenciación de los procesos,
de modo que se minimice el tiempo total de procesamiento. Existen varios trabajos
que resuelven estos problemas con ACO como los de Colorni et al. [69], Cicirello y
Smith [62] y Aydin y Öztemel [11].
Randall [257] propone una metodología para adaptar ACO a problemas dinámi-
cos, basándose en el siguiente conjunto de reglas generales:
1. Permitir que la metaheurística resuelva el problema mientras no se produzcan
cambios en el entorno que alteren su definición o sus datos. Las soluciones
mejoradas se envían al entorno de producción. Por ejemplo, la torre de control
es el entorno de producción en un aeropuerto.
2. Suspender la etapa anterior cuando se produzcan un determinado número de
perturbaciones lo suficientemente grandes. Estas decisiones son muy específi-
cas del problema que se está resolviendo.
3. Utilizar un proceso de “descomposición” de soluciones para determinar qué
componentes de una solución necesitan ser descartados para que se satisfaga
la factibilidad de la nueva instancia del problema y adaptar la solución a las
nuevas características de problema. El proceso ACO se restablece partiendo
de esta solución parcial. La mejor forma de proceder es calcular la solución
parcial a partir de la mejor solución actual y copiarla al resto de las hormigas
de la colonia. De esta forma se ahorran recursos computacionales y se evita
que las hormigas completen sus soluciones de manera asíncrona.
4. Volver a la etapa 1.
Es crítico que tercera etapa sea muy eficiente, de forma que el algoritmo no tenga
que detenerse mientras se ejecuta el proceso de deconstrucción y se evalúa el nuevo
conjunto de soluciones. La ventaja fundamental que se obtiene de esta estrategia
consiste en que el sistema no tiene que detenerse y restablecer el cómputo desde
el inicio. En [20] se justifica que la mejor solución actual al problema es un buen
punto de partida para la iteración actual. Para un análisis detallado del proceso de
descomposición puede consultarse el trabajo de Randall [257].
Los algoritmos PSO parecen ser apropiados para resolver problemas dinámicos
[241]. Las estrategias para adaptar PSO a los problemas dinámicos se pueden agrupar
en dos enfoques:
Recalcular el valor del fitness actual a partir del mejor vector de cada partícula
del enjambre cuando se detecta un cambio. Si es menor que el valor actual de
la partícula, se reemplaza por ésta. La motivación para este enfoque reside en
que en entornos dinámicos, el óptimo cambia de posición, por lo que es mejor
para las partículas olvidar las experiencias pasadas. Sin embargo, en lugar de
reemplazar todos los vectores − →x me jor por sus actuales posiciones, primero se
evalúa para saber si la experiencia sigue siendo válida. De este modo, las par-
142 T ENDENCIAS ACTUALES EN O PTIMIZACIÓN M ETAHEURÍSTICA
tículas se ven parcialmente beneficiadas por la memoria. El trabajo de Carlisle
y Dozier [50] está inspirado en esta estrategia.
Realeatorizar una porción del enjambre. De esta forma, se consigue evitar que
el enjambre se quede atascado en una región reducida del espacio de estados.
Además, una porción de la población se reserva para seguir la misma historia
de búsqueda si el cambio producido es muy pequeño. Los trabajos de Eberhart
y Shi [93] y de Hu y Eberhart [164] se basan en este enfoque.
Eberhart y Shi [93] investigaron el uso de PSO en el seguimiento del pico de una
función cuya posición espacial cambiaba. No consideraron cambios en el tamaño y la
forma del pico. Los autores consideraron que era suficiente con adaptarse a un cambio
periódico ocurrido cada cien generaciones. Utilizaron un PSO estándar, consiguiendo
unos errores varios órdenes de magnitud menores que con GA.
Para adaptar PSO a sistemas dinámicos, Hu y Eberhart [164] sugirieron monito-
rizar el entorno para detectar cambios y actualizar las posiciones mejor y actual de
las partículas. De nuevo, consideraron el seguimiento de un solo pico. En esta misma
línea, Carlisle [50] introduce una modificación de PSO, denominada Optimización
Adaptativa por Inteligencia de Enjambre (Adaptive Particle Swarm Optimizer - AP-
SO) en la que se utiliza un punto fijo en el espacio de soluciones, llamado “centinela”,
para detectar cambios en el entorno. Después de cada iteración, el centinela evalúa su
nuevo fitness y lo compara con la evaluación previa. Como el punto es estacionario, si
su valor cambia, significa que el entorno ha cambiado, y el centinela alerta al enjam-
bre para que actualice su memoria de localización de las mejores soluciones. Cuando
se detecta un cambio en el entorno, cada partícula reemplaza su mejor localización
por su posición actual.
En [51] se refina APSO en varios aspectos importantes. En primer lugar, se re-
emplaza el centinela fijo con una o varias partículas aleatorias. Un centinela fijo sólo
detecta un cambio si éste afecta a la región donde está. En algunos entornos dinámi-
cos sólo se producen cambios locales, que pueden no ser detectados por un centinela
estacionario [140]. Utilizando una selección aleatoria entre varios centinelas se consi-
gue controlar toda la región del espacio de estados que alcanza el enjambre. Además,
si se necesita incrementar la probabilidad de detectar cambios en el sistema, se puede
elegir más de un centinela cada vez. Por otro lado, en lugar de sustituir el mejor valor
de cada partícula por su posición actual, es más ventajoso calcular, en primer lugar,
el fitness de la mejor solución para adaptarla al cambio del entorno y, posteriormen-
te, sustituirla por la posición actual sólo en el caso en que ésta tenga mejor fitness.
Con estas modificaciones se aprovecha la información de la historia del proceso que
continúa siendo útil.
O PTIMIZACIÓN DINÁMICA 143
8.5.5. Filtro de partículas metaheurístico
9.1. Introducción
145
146 B ÚSQUEDA DISPERSA APLICADA AL MDP
En [184] se usa esta formulación para mostrar que el problema del clique (que
es NP − completo) es reducible al MDP. Como se indica en [184], el problema de la
máxima diversidad se presenta en una amplia variedad de problemas reales. Actual-
mente, muchas universidades de los Estados Unidos, cuando determinan las políticas
de admisión, van más allá de seleccionar mediante la nota académica y también con-
sideran otros factores en la búsqueda de un conjunto diverso de estudiantes. En la
planificación de mercado, frecuentemente es deseable maximizar el número y diver-
sidad de fuerzas en un perfil de marcas. Otros contextos en los que el problema de la
máxima diversidad se puede aplicar incluyen el cultivo de plantas, problemas socia-
les, preservación ecológica, diseño de productos, gestión de la mano de obra, diseño
de curriculum y en la gestión de recursos genéticos. La maximización de la diversidad
también es un aspecto importante en las siguientes áreas: experimentación química,
diseño experimental, investigación médica, exploración geológica, selección de car-
teras de inversión e ingeniería estructural.
K
( ∑ (sik − s jk )2 )
p
di j = (9.2)
k=1
La distancia se usa para medir cómo de diversa es una solución con respecto a
un conjunto de soluciones. Concretamente, para el MDP, se define xyi como el valor
de la i-ésima variable de la solución de referencia r ∈ Re f Set. También se define xti
como el valor de la i-ésima variable de la solución candidata t. La distancia entre
una solución candidata t y las soluciones en el Re f Set en la implementación de la
búsqueda dispersa que se propone, se define como:
b
distancia(t, Re f Set) = cmax − ∑ ∑ y
xi (9.3)
y=1 i:xti =1
Selección aleatoria
Este método consiste en seleccionar m elementos del total de n elementos del pro-
blema. La selección aleatoria no utiliza ninguna información del MDP, por ejemplo,
no usa la función objetivo para guiar el proceso constructivo. La única información
usada es el número m de elementos necesaria para construir una solución factible.
GRASP_D-2
Tabu_D-2
Selección aleatoria
Selección Tabu_D-2
En algunas pruebas iniciales del diseño del algoritmo se ha detectado que los mé-
todos de diversificación y combinación obtienen la misma solución más de una vez.
Para evitar que se aplique el método de mejora a una misma solución más de una vez,
se ha desarrollado una estructura de datos de tipo mapa hash. Esta estructura de datos
almacena todas las soluciones y su correspondiente mejora. Se indexa utilizando la
A PLICACIÓN DE LA BÚSQUEDA DISPERSA 155
función hash del algoritmo 9.1. Se ha seleccionado esta función hash debido a que
es la implementación por defecto para la codificación empleada en el lenguaje de
programación Java.
Cuestiones de implementación
10.1. Introducción
10.2. Diseño
157
158 C UESTIONES DE IMPLEMENTACIÓN
apropiada para este cometido, puesto que permite el acceso directo a sus com-
ponentes. Una implementación adecuada de algoritmos de optimización debe
tener en consideración este tipo de detalles. Además, se dispone de una estruc-
tura de datos tipo lista denominada nodes que alberga los nodos presentes en
la solución. De esta forma, podemos comprobar rápidamente la presencia de
un nodo en la solución y también podemos recorrer la lista de nodos presentes
en un tiempo proporcional al número de nodos de la solución. En la elección
de esta estructura se ha tenido en cuenta que es más eficiente añadir y eliminar
elementos que en un array. Finalmente, se utiliza otra lista enlazada denomina-
da nodesDistance, que almacena, para cada nodo de la solución, la suma de
las distancias de ese nodo al resto de los nodos incluidos en la solución. Esta
D ISEÑO 159
estructura hace más eficiente aquellas tareas en las que es necesario recalcular
el peso de la solución, ya que se puede factorizar la contribución de cada nodo
al peso total de la solución. Por ejemplo, si se elimina un nodo, el peso de la
solución se calcula como el peso antes de la eliminación menos la contribución
del nodo eliminado. Cuando se hace uso de esta estructura de datos, se hace in-
necesario el concurso de estructura nodes, puesto que la información de esta
última estructura está contenida en nodesDistance.
begin
{InitialSolutions} := createSolutions(N);
Re f Set := [];
/*Mejora las soluciones del InitialSolutions e inicializa RefSet con las b/2 me-
jores soluciones*/
{InitialSolutions, Re f Set} := improveAndRe f reshRe f Set(InitialSolutions,
Re f Set, b/2, f );
/*completa el RefSet con las b/2 soluciones más diferentes a las ya insertadas
en el Re f Set*/
{Re f Set} := getDiversity(Re f Set, InitialSolutions, b/2, f );
{P} := GenerarGrupos(SubsetSize, Re f Set);
{Re f SetCombinations} := Combinar(P);
while not(condicionTerminacion) do
repeat
Re f SetOld := Re f Set;
{Re f Set} := improveAndRe f reshRe f Set(Re f SetCombinations, Re f Set,
b, f );
/*generamos los grupos de los elementos de Re f Set excepto aquellos que
se generaron con los elementos de Re f SetOld*/
{P} := GenerarGrupos(SubsetSize, Re f Set, Re f SetOld);
{Re f SetCombinations} := Combinar(P);
until Re f SetOld = Re f Set
Re f Set := Re f Set[1 : b/2];
{NewSolutions} := createSolutions(N);
/*completa el RefSet con las b/2 soluciones más diferentes a las ya insertadas
en el Re f Set*/
{Re f Set} := getDiversity(Re f Set, InitialSolutions, b/2, f );
/*genera los grupos de soluciones del RefSet que no hayan sido combinadas
previamente*/
{P} := GenerarGrupos(SubsetSize, Re f Set);
{Re f SetCombinations} := Combinar(P);
end while
end
D ISEÑO 161
MDPGraph: clase cuyos objetos representan una instancia del problema en
memoria. Mantiene los nodos, los pesos de las aristas que unen los nodos y el
número de elementos que han de seleccionarse por MDP.
Node: clase cuyos objetos representan los nodos de una instancia (representa-
da por objetos MDPGraph) o de una solución (representada por objetos MDPSolution).
begin
for i := 1 to lenght(Solutions) do
if hImprovedSolutions no contiene Solutions[i]i then
original := Solutions[i]
{Solutions[i]} := improveSolution(original);
improvedSolution := Solutions[i]
hSe asocia original a Solutions[i] en ImprovedSolutionsi
else
improvedSolution := hla solución mejorada asociada a Solutions[i] en
ImprovedSolutionsi
end if
if f (improvedSolution) > f (Re f Set[b]) then
{Re f Set} := Actualizar(Re f Set, ImprovedSolution); // Actualizar Re f Set
end if
end for
end
1 package ssmdp;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import ssmdp.combinator.Combinator;
9 import ssmdp.combinator.D2Combinator;
10 import ssmdp.combinator.RandomCombinator;
11 import ssmdp.combinator.TabuD2Combinator;
12 import ssmdp.constructive.Constructive;
13 import ssmdp.constructive.GraspD2Constructive;
14 import ssmdp.constructive.RandomConstructive;
15 import ssmdp.constructive.TabuD2Constructive;
16 import ssmdp.diversificator.Diversificator;
17 import ssmdp.diversificator.NotUsedNodesDiv;
18 import ssmdp.graph.MDPGraph;
19 import ssmdp.improving.ImprovedLocalSearch;
20 import ssmdp.improving.ImprovingMethod;
21 import ssmdp.improving.LocalSearch;
22 import ssmdp.improving.LocalSearchTabuSearch;
23 import ssmdp.tabuD2.TabuD2Calculator;
24 import ssmdp.util.BoundedSortedList;
25 import ssmdp.util.Combinations;
26
27 public class ScatterSearchMDP {
D ETALLES DE IMPLEMENTACIÓN 163
28
29 // Enumerado usado para seleccionar la configuración
30 public enum InformationMode {
31 WITHOUT_INF, WITH_INF, WITH_MEMORY
32 }
33
34 // Constantes del algoritmo
35 private static final int NUM_INITIAL_SOLUTIONS = 100;
36 private static final int NUM_BEST_SOLUTIONS = 5;
37 private static final int NUM_DIVERSE_SOLUTIONS = 5;
38
39 // Método de generación de soluciones diversas
40 private Constructive constructive;
41
42 // Método de mejora
43 private ImprovingMethod improvingMethod;
44
45 // Método de combinación
46 private Combinator combinator;
47
48 // Método de diversificación
49 private Diversificator diversificator = new NotUsedNodesDiv();
50
51 // Generador de combinaciones de elementos
52 private Combinations combinations = new Combinations(2,
53 getRefSetSize());
54
55 // Conjunto de referencia (RefSet)
56 private BoundedSortedList<MDPSolution> refSet;
57
58 // Estructura de tipo tabla hash que guarda las soluciones
59 // previamente mejoradas
60 private Map<MDPSolution, MDPSolution> improvedSolutions;
61
62 public ScatterSearchMDP(MDPGraph graph,
63 InformationMode informationMode) {
64
65 switch (informationMode) {
66 case WITHOUT_INF:
67 constructive = new RandomConstructive(graph);
68 combinator = new RandomCombinator();
69 improvingMethod = new LocalSearch();
164 C UESTIONES DE IMPLEMENTACIÓN
70 break;
71 case WITH_INF:
72 constructive = new GraspD2Constructive(graph);
73 combinator = new D2Combinator();
74 improvingMethod = new ImprovedLocalSearch();
75 break;
76 case WITH_MEMORY:
77 TabuD2Calculator tD2C = new TabuD2Calculator(graph);
78 constructive = new TabuD2Constructive(tD2C);
79 combinator = new TabuD2Combinator(tD2C);
80 improvingMethod = new LocalSearchTabuSearch();
81 break;
82 }
83 }
84
85 public MDPSolution calculateSolution(long millisTimeout) {
86
87 //Se inicializa la tabla hash para guardar las soluciones
88 //que se van mejorando, para no tener que hacerlo de nuevo
89 improvedSolutions = new HashMap<MDPSolution, MDPSolution>();
90
91 //Se inicializa el RefSet
92 refSet =
93 new BoundedSortedList<MDPSolution>(NUM_BEST_SOLUTIONS);
94
95 //Cáculo del momento de finalización del algoritmo
96 long finishTime = System.currentTimeMillis() + millisTimeout;
97
98 //Creación de las soluciones iniciales
99 List<MDPSolution> initialSolutions =
100 constructive.createSolutions(NUM_INITIAL_SOLUTIONS);
101
102 //Mejora de las soluciones e incorporación al RefSet
103 improveAndRefreshRefSet(initialSolutions);
104
105 //Se seleccionan las soluciones diversas
106 List<MDPSolution> diverseSolutions =
107 diversificator.getDiverseSolutions(NUM_DIVERSE_SOLUTIONS,
108 initialSolutions, refSet.getList());
109
110 //Se prepara el RefSet para albergar las soluciones
111 //diversas además de las soluciones por calidad
D ETALLES DE IMPLEMENTACIÓN 165
112 refSet.setMaxSize(getRefSetSize());
113
114 //Se añaden las soluciones diversas al refSet
115 refSet.addAll(diverseSolutions);
116
117 //Se crean los grupos de soluciones
118 List<List<MDPSolution>> groups =
119 combinations.getGroups(refSet.getList());
120
121 //Se combinan los grupos de soluciones
122 List<MDPSolution> refSetCombinations =
123 combinator.combineGroups(groups);
124
125 do {
126
127 //Declaración de la lista que guardará las posiciones
128 //de las nuevas soluciones del RefSet
129 List<Integer> newSolPositions;
130
131 do {
132
133 // Mejora de las soluciones e incorporación al RefSet
134 improveAndRefreshRefSet(refSetCombinations);
135
136 // Se calculan las nuevas soluciones del refSet
137 newSolPositions = getNewSolutionsPositions();
138
139 // Si hay nuevas soluciones...
140 if (newSolPositions.size() > 0) {
141
142 // Se obtienen los grupos que contienen a esas nuevas
143 // soluciones
144 groups = combinations.getGroupsContainingIndexes(
145 newSolPositions, refSet.getList());
146
147 // Y se combinan dichos grupos
148 refSetCombinations = combinator.combineGroups(groups);
149 }
150
151 // Si se ha sobrepasado el tiempo límite, se sale del
152 // algoritmo
153 if (System.currentTimeMillis() > finishTime) {
166 C UESTIONES DE IMPLEMENTACIÓN
238
239 public int getRefSetSize() {
240 return NUM_BEST_SOLUTIONS + NUM_DIVERSE_SOLUTIONS;
241 }
242
243 }
1 package ssmdp.diversificator;
2
3 import java.util.List;
4 import ssmdp.MDPSolution;
5
6 public abstract class Diversificator {
7
8 public abstract List<MDPSolution> getDiverseSolutions(
9 int numDiverseSolutions,
10 List<MDPSolution> solutions,
11 List<MDPSolution> selectedSolutions);
12
13 }
1 package ssmdp.diversificator;
D ETALLES DE IMPLEMENTACIÓN 169
2
3 import java.util.ArrayList;
4 import java.util.HashSet;
5 import java.util.List;
6 import java.util.Set;
7
8 import ssmdp.MDPSolution;
9 import ssmdp.graph.Node;
10
11 public class NotUsedNodesDiv extends Diversificator {
12
13 public List<MDPSolution> getDiverseSolutions(
14 int numDiverseSolutions, List<MDPSolution> solutions,
15 List<MDPSolution> selectedSolutions) {
16
17 // Creamos la lista para albergar las soluciones diversas
18 List<MDPSolution> diverseSolutions =
19 new ArrayList<MDPSolution>();
20
21 // Obtenemos el número de nodos del grafo
22 int numNodes = solutions.get(0).getGraph().getNumNodes();
23
24 // Creamos la estructura de datos que albergará el número de
25 // apariciones del nodo i-ésimo en las soluciones
26 // seleccionadas
27 int[] selectedNodesCount = new int[numNodes];
28
29 // Contamos los nodos ya seleccionados
30 for (MDPSolution mdpGraph : selectedSolutions) {
31 refreshNodeCount(selectedNodesCount, mdpGraph);
32 }
33
34 // Guardamos en otherSolutions aquellas soluciones que no
35 // se encuentran en selectedSolutions
36 Set<MDPSolution> otherSolutions =
37 new HashSet<MDPSolution>(solutions);
38
39 otherSolutions.removeAll(selectedSolutions);
40
41 // Si el número de soluciones es menor o igual que el
42 // número de soluciones diversas que hay que seleccionar,
43 // devolvemos las que tenemos.
170 C UESTIONES DE IMPLEMENTACIÓN
1 package ssmdp.constructive;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import ssmdp.MDPSolution;
6 import ssmdp.graph.MDPGraph;
7
8 public abstract class Constructive {
9
10 protected MDPGraph graph;
11
12 public Constructive(MDPGraph graph) {
13 this.graph = graph;
14 }
172 C UESTIONES DE IMPLEMENTACIÓN
15
16 public MDPGraph getGraph() {
17 return graph;
18 }
19
20 public List<MDPSolution> createSolutions(int numSolutions) {
21 List<MDPSolution> solutions = new ArrayList<MDPSolution>();
22 for(int i=0; i<numSolutions; i++){
23 solutions.add(createSolution());
24 }
25 return solutions;
26 }
27
28 public abstract MDPSolution createSolution();
29
30 }
1 package ssmdp.constructive;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import ssmdp.MDPSolution;
7 import ssmdp.graph.MDPGraph;
8 import ssmdp.graph.Node;
9 import ssmdp.util.RandomList;
10
11 public class RandomConstructive extends Constructive {
12
13 public RandomConstructive(MDPGraph totalGraph) {
14 super(totalGraph);
15 }
16
17 @Override
18 public MDPSolution createSolution() {
D ETALLES DE IMPLEMENTACIÓN 173
19
20 // Se crea la lista que albergará los nodos seleccionados
21 // de forma aleatoria
22 List<Node> nodes = new ArrayList<Node>();
23
24 // Se usa la clse RandomList para recorrer de forma aleatoria
25 // los elementos de una lista. En este caso es la lista de
26 // nodos del grafo
27 for (Node n : RandomList.create(graph.getNodes())) {
28
29 // Se añade el nodo seleccionado aleatoriamente
30 nodes.add(n);
31
32 // Si el número de nodos seleccionados corresponde con el
33 // número de nodos de una solución, se sale del bucle
34 if (nodes.size() == graph.getNumSolutionNodes()) {
35 break;
36 }
37 }
38
39 // Se construye una solución con los nodos seleccionados y se
40 // devuelve
41 return new MDPSolution(nodes, graph);
42 }
43
44 }
1 package ssmdp.combinator;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import ssmdp.MDPSolution;
7
174 C UESTIONES DE IMPLEMENTACIÓN
1 package ssmdp.combinator;
2
3 import java.util.ArrayList;
4 import java.util.HashSet;
5 import java.util.Iterator;
6 import java.util.List;
7 import java.util.Set;
8
9 import ssmdp.MDPSolution;
10 import ssmdp.graph.MDPGraph;
D ETALLES DE IMPLEMENTACIÓN 175
11 import ssmdp.graph.Node;
12 import ssmdp.util.Weighted;
13
14 public class D2Combinator extends Combinator {
15
16 //Atributo que albergará el nodo con la distancia
17 //mínima
18 private Weighted<Node> worstWNode = null;
19
20 @Override
21 public MDPSolution combineGroup(List<MDPSolution> solutions) {
22
23 // Se obtiene el grafo de las soluciones
24 MDPGraph graph = solutions.get(0).getGraph();
25
26 // Se insertan en un conjunto los nodos de las soluciones
27 Set<Node> nodes = createUnion(solutions);
28
29 //Se calculan las distancias entre dichos nodos
30 List<Weighted<Node>> nodesDistance =
31 calculateDist(nodes);
32
33 // Mientras la lista de nodos tenga más nodos de los
34 // necesarios en una solución
35 while (nodesDistance.size() > graph.getNumSolutionNodes()) {
36
37 Node oldNode = worstWNode.getElement();
38 worstWNode = null;
39
40 // Recorremos la lista de nodos con un iterador
41 for (Iterator<Weighted<Node>> it =
42 nodesDistance.iterator(); it.hasNext();) {
43
44 Weighted<Node> wn = it.next();
45
46 // Si el nodo es el peor, le eliminamos
47 if (wn.getElement() == oldNode) {
48 it.remove();
49 } else {
50
51 // Actualizamos el peso de los nodos restando el
52 // valor de la distancia al nodo eliminado
176 C UESTIONES DE IMPLEMENTACIÓN
53 wn.setWeight(wn.getWeight()
54 - wn.getElement().getDistanceTo(oldNode));
55
56 worstWNode = Weighted.min(worstWNode,wn);
57 }
58 }
59 }
60
61 return new MDPSolution(graph, nodesDistance);
62 }
63
64 private List<Weighted<Node>> calculateDist(Set<Node> nodes) {
65
66 // Se crea una lista que albergará cada nodo asociado a la
67 // suma de las distancias con el resto de los nodos
68 List<Weighted<Node>> nodesDistance =
69 new ArrayList<Weighted<Node>>(nodes.size());
70
71 for (Node node : nodes) {
72
73 // Se calcula la suma de las distancias de un nodo al resto
74 // de nodos
75 float distance = 0;
76 for (Node otherNode : nodes) {
77 distance += node.getDistanceTo(otherNode);
78 }
79
80 // Se crea un nodo asociado a su distancia
81 Weighted<Node> wn = new Weighted<Node>(node, distance);
82
83 // Se añade a la lista de distancias
84 nodesDistance.add(wn);
85
86 // Se actualiza el nodo con menos distancia
87 worstWNode = Weighted.min(worstWNode,wn);
88 }
89 return nodesDistance;
90 }
91
92 private Set<Node> createUnion(List<MDPSolution> solutions) {
93 Set<Node> nodes = new HashSet<Node>();
94 for (MDPSolution solution : solutions) {
D ETALLES DE IMPLEMENTACIÓN 177
95 for (Node node : solution) {
96 nodes.add(node);
97 }
98 }
99 return nodes;
100 }
101
102 }
Todos los métodos de mejora se han implementado como una clase hija de Im-
provingMethod. Su implementación se muestra a continuación:
1 package ssmdp.improving;
2
3 import ssmdp.MDPSolution;
4
5 public abstract class ImprovingMethod {
6
7 public abstract void improveSolution(MDPSolution solution);
8
9 }
1 package ssmdp.improving;
2
178 C UESTIONES DE IMPLEMENTACIÓN
3 import java.util.Collections;
4 import java.util.List;
5
6 import ssmdp.MDPSolution;
7 import ssmdp.graph.MDPGraph;
8 import ssmdp.graph.Node;
9 import ssmdp.util.Weighted;
10
11 public class ImprovedLocalSearch extends ImprovingMethod {
12
13 @Override
14 public void improveSolution(MDPSolution solution) {
15
16 MDPGraph graph = solution.getGraph();
17
18 // Variable que controla la condición de parada. Indica
19 // si se ha intercambiando algún nodo
20 boolean nodeChanged;
21
22 do {
23
24 nodeChanged = false;
25
26 //Obtenemos la lista de distancias de cada nodo
27 List<Weighted<Node>> nodeDistances =
28 solution.getNodesDistance();
29
30 //Ordenamos de menor a mayor la lista de distancias
31 Collections.sort(nodeDistances);
32
33 // Recorremos la lista ordenada de menor a mayor
34 for (Weighted<Node> oldWNode: solution.getNodesDistance()){
35
36 // Tomamos un nodo como candidato para ser eliminado
37 Node oldNode = oldWNode.getElement();
38
39 // Calculamos el peso que tendría la solución si
40 // quitásemos ese nodo
41 float weightWithoutOld = solution.getWeight()
42 - oldWNode.getWeight();
43
44 // Recorremos la lista de nodos del grafo
D ETALLES DE IMPLEMENTACIÓN 179
45 for (Node newNode : graph.getNodes()) {
46
47 // Si el nodo no se encuentra en la solución
48 // consideramos que es candidato para ser
49 // intercambiado por oldNode
50 if (!solution.contains(newNode)) {
51
52 // Calculamos la distancia del newNode al resto de
53 // los nodos considerando que oldNode no está en
54 // la solución
55 float contribution = solution
56 .calculateDistanceWithoutNode(oldNode, newNode);
57
58 // Calculamos el peso que tendría la
59 // solución en caso de intercambio
60 float newWeight = weightWithoutOld + contribution;
61
62 // Si el peso posible de la solución es mayor que el
63 // peso actual
64 if (newWeight > solution.getWeight()) {
65 // Cambiamos el nodo
66 solution.changeNode(oldNode, newNode);
67 nodeChanged = true;
68 break;
69 }
70 }
71 }
72 }
73 } while (nodeChanged);
74
75 solution.calculatePreciseWeight();
76 }
77 }
Apéndice A
Los tipos de datos básicos considerados son integer, real, char y boolean. En esta
sección se presenta el rango y las operaciones y funciones asociadas a cada uno de
ellos.
A.1.1. Integer
El rango del tipo de dato integer se representa por Z, y viene dado por todos los
números enteros comprendidos en el intervalo [−∞ . . . ∞].
Los operadores del tipo de datos integer son los siguientes:
Suma + : Z×Z → Z
Diferencia − : Z×Z → Z
Multiplicación ∗ : Z×Z → Z
División entera div : Z × Z → Z
Resto de la división mod : Z × Z → Z
Potencia ˆ: Z × Z → Z
Cambio de signo −:Z→Z
181
182 A PÉNDICE A. E SPECIFICACIÓN DE LA S INTAXIS DEL L ENGUAJE
A LGORÍTMICO
Y las funciones predefinidas:
A.1.2. Real
El rango del tipo de dato real se representa por R, y viene dado por todos los
números reales comprendidos en el intervalo [−∞ . . . ∞].
Los operadores del tipo de datos real son los siguientes:
Suma + : R×R → R
Diferencia − : R×R → R
Multiplicación ∗ : R×R → R
División / : R×R → R
Potencia ˆ: R × R → R
Cambio de signo −:R→R
A.1.3. Char
El rango del tipo de datos char se representa por C, y viene dado por todos los
caracteres del juego de caracteres ascii.
A.2. C OMENTARIOS 183
En este lenguaje algorítmico no se definen operadores internos de tipo char. Las
funciones predefinidas son:
Predecesor pred : C → C
Sucesor succ : C → C
A.1.4. Boolean
El rango del tipo de dato boolean se representa por B, y viene dado por los valores
[T RU E, FALSE].
Los operadores del tipo de datos boolean son los siguientes:
Y lógico and : B × B → B
O lógico or : B × B → B
Negación lógica not : B → B
Predecesor pred : B → B
Sucesor succ : B → B
Se utilizan para comparar elementos del mismo tipo y devuelven un valor boo-
leano como resultado de la comparación. Los tipos de dato integer y real se pueden
comparar, a pesar de que no son del mismo tipo.
Igualdad =
Distinto 6 =
Mayor >
Menor <
Mayor o igual ≥
Menor o igual ≤
A.2. Comentarios
Los comentarios permiten añadir al algoritmo notas y textos que deben ignorarse
cuando se ejecuta el pseudocódigo. Se utilizan dos formatos de comentarios:
184 A PÉNDICE A. E SPECIFICACIÓN DE LA S INTAXIS DEL L ENGUAJE
A LGORÍTMICO
comentarios de una sola línea: empiezan con los caracteres “//” y continúa
hasta el final de la línea.
Cabecera,
begin
/*Cuerpo del algoritmo*/
end
A.3.1. Cabecera
A.4. Instrucciones
Se dispone de las estructuras de repetición, while, repeat, for all y for. A conti-
nuación, se muestra la sintaxis general de cada una de ellas.
While
Repeat
For
A.5.1. Arrays
A.5.2. Registros
A.5.3. Listas
En este apéndice se declaran los tipos de datos utilizados en los diferentes pseu-
docódigos que ilustran los algoritmos presentados a lo largo del documento.
B.1. TipoComponente
Una componente es cada uno de los elementos en los que se puede factorizar una
solución. Se define el tipo de dato que almacena una componente de una solución del
siguiente modo:
Definición de Tipo: TipoComponente
TipoComponente = ...;
B.2. TipoSolucion
B.3. TipoOperador
191
192 A PÉNDICE B. D EFINICIÓN DE T IPOS DE DATOS
B.4. TipoFuncionObjetivo
Tabla de acrónimos
193
194 A PÉNDICE C. TABLA DE ACRÓNIMOS
[1] E.H.L. Aarts and J. Korst. Simulated Annealing and Boltzmann Machines: A
Stochastic Approach to Combinatorial Optimizationa and Neural Computing.
John Wiley and Sons, 1989.
[2] E.H.L. Aarts and J.K. Lenstra. Local Search in Combinatorial Optimization.
Jonh Wiley and Sons, 1997.
[4] M. Andrews and A. Tuson. Diversity does not necessarily imply adaptabi-
lity. In Proceedings of the Workshop on Evolutionary Algorithms for Dynamic
Optimization Problems, 2003.
[6] D. Applegate, R. Bixby, V. Chvatal, and W. Cook. Finding tours in the tsp.
www.keck.caam.rice.edu/concorde.html, 2000.
[8] H.M. Ardof and M.D. Jonhston. A discrete stochastic neural network algo-
rithm for constraint satisfaction problem. In Proceedings of International Joint
Conference on Neural Networks, 1990.
195
196 BIBLIOGRAFÍA
[11] M. Aydin and E. Öztemel. Dynamic jobshop scheduling using reinforcement
learning agents. Robotics and Autonomous Systems, 33:169–178, 2000.
[13] S. Baluja. Genetic algorithms and explicit search statistics. Advances in Neural
Information Processing Systems, 9:319–325, 1997.
[15] R. Barr, B.L. Richard, A. Golden, J.P. Kelly, M.G.C. Resende, and W.R.
Stewart. Designing and reporting on computational experiments with heuristic
methods. Journal of Heuristic, 1:9–32, 1995.
[17] R. Battiti and G. Tecchiolli. The reactive tabu search. ORSA Journal on Com-
puting, 6(2):126–140, 1994.
[18] E.B. Baum. Iterated descent: A better algorithm for local search in combina-
torial optimization problems. Technical report, Caltech, Pasadena, CA, USA,
1986.
[24] S. Binato and G.C. Oliveira. Essays and Surveys in Metaheuristic, chapter
GRASP: An Annotated Bibliography for Transmission Network Expansion
Plannig, pages 325–367. Kluwer Academic Publishers, 2002.
BIBLIOGRAFÍA 197
[25] S. Binato and G.C. Oliveira. A Reactive GRASP for Transmission Network
Expansion Plannig, chapter 3 in Essays and Surveys in Metaheuristic, pages
81–100. Kluwer Academic Publishers, 2002.
[27] A. Blanco, D. Pelta, and J.L. Verdegay. Introducing fans: A fuzzy adaptive
neighborhood search. In Proceedings of 8th IPMU’00 Conference, volume 2,
pages 594–597, 2000.
[28] A. Blanco, D.A. Pelta, and J.L. Verdegay. Applying a fuzzy sets-based heu-
ristic to the protein structure prediction problem. International Journal of
Intelligent Systems, 17:629–643, 2002.
[29] A. Blanco, D.A. Pelta, and J.L. Verdegay. A fuzzy valuation-based local search
framework for combinatorial problems. Journal of Fuzzy Optimization and
Decision Making, 1(2):177–193, 2002.
[30] A. Blanco, D.A. Pelta, and J.L. Verdegay. Fans: A fuzzy adaptive neighbor-
hood search method for optimization problems. Inteligencia Artificial, 2003.
[31] A. Blanco, D.A. Pelta, and J.L. Verdegay. Pattern search in molecules with
fans: Preliminary results. In Proceedings of EvoBio’03 Conference, 2003.
[34] C.G.E. Boender, A.H.G. Rinnooy, L. Stougie, and G.T. Timmer. A stochastic
method for global optimization. Mathematical Programming, 22:125–140,
1982.
[35] K.D. Boese, A.B. Kahng, and S. Muddu. A new adaptive multi-start technique
for combinatorial global optimisation. Operations Research Letters, 16:103–
113, 1994.
[51] A. Carlisle and G. Dozier R. Tracking changing extrema with particle swarm
optimizer. Technical report, Auburn University Technical Report CSSE01-08,
2001.
[53] W. Cedeno and V. R. Vemuri. On the use of niching for dynamic landsca-
pes. In Proceedings of the 4th IEEE International Conference on Evolutionary
Computation, 1997.
[55] K.C. Chang and D.-Z. Du. Efficient algorithms for layer assignment problems.
IEEE Transaction on Computer-Aided Design, 6:67–78, 1987.
[56] I. Charon and O. Hudry. The noising method: A new method for combinatorial
optimization. Operation Research Letters, 14:133–137, 1993.
[57] I. Charon and O. Hudry. Variations on the noising schemes for a clustering
methods. In Proceedings of MIC’99 Conference, pages 147–150, 1999.
[58] I. Charon and O. Hudry. Application do the noising method tod the travelling
salesman problem. European Journal of Operational Research, 125:266–277,
2000.
[59] I. Charon and O. Hudry. The noising method: A generalization of some me-
taheuristic. European Journal of Operational Research, 135:86–101, 2001.
[60] H.M. Cheh, J.B. Goldberg, and R.G. Askin. A note on the effect of
neighborhood-structure in simulated annealing. Computers and Operations
Research, 79:117–128, 1991.
[63] H.G. Cobb. An investigation into the use of hypermutation as an adaptive ope-
rator in genetic algorithms having continuous time-dependent nonstationary
environments. In NRL memorandum report 6760, 1990.
[64] H.G. Cobb and J.J Grefensette. Genetic algorithms for tracking changing en-
vironments. In proceedings of the 5th ICGA, volume 5, 1992.
[68] R.J. Collins. Studies in Artificial Evolution. PhD thesis, Univertity of Califor-
nia, 1992.
[69] A. Colorni, M. Dorigo, V. Maniezzo, and M. Trubian. Ant system for job-shop
scheduling. JORBEL Belgian Journal of Operations Research, Statistic and
Computer Science, 34:39–53, 1994.
[70] W.J. Cook, W.H. Cunningham, W.R. Pulleyblank, and A. Schrijver. Combina-
torial Optimization. Wiley-Interscience, 1998.
[71] Dorigo M. Corne, D. and F. Glover, editors. New Ideas in Optimization. Mc-
Graw Hill, 1999.
[72] R.C. Correa, F.C. Gomes, C.A.S. Oliveira, and P.M. Pardalos. A parallel im-
plementation of an asynchronous team to the point-to-point connection pro-
blem. Parallel Computing, 29(4):447–466, 2003.
[73] T.G. Crainic and M. Toulouse. Parallel Strategies for Meta-Heurstic, chapter
17 in Handbook of Metaheuristic, pages 475–514. Kluwer Academic Publis-
hers, 2003.
[78] R. Dawkins. The Selfish Gene. Clarendon Press, Oxford, UK, 1976.
[82] M. Dorigo. Optimization, Learning and Natural Algorithms. PhD thesis, Di-
partimento di Elettronica, Politecnico di Milano, Itali, 1992.
[84] M. Dorigo and G. Di Caro. The ant colony optimization metaheuristic. In New
Ideas in Optimization, pages 11–32, 1999.
[85] M. Dorigo and L.M. Ganbardella. Ant colony system: A coopertaive learning
approach to the travelling salesman problem. IEEE Transaction on Evolutio-
nary Computation, 1(1):53–66, 1997.
[87] M. Dorigo and T. Stützle. The Ant Colony Optimization Metaheuristic: Algo-
rithms Applications and Advances, chapter 9 in Handbook of Metaheuristic,
pages 251–286. Kluwer Academic Publishers, 2003.
[88] A. Doucet, J.F.G. de Freitas, and N.J. Gordon. Sequential Monte Carlo Met-
hods in Practice. Springer Verlag, 2001.
202 BIBLIOGRAFÍA
[89] M. Dror and W. Powell. Stochastic and dynamic models in transportation.
Operations Research, 41:11 – 14, 1993.
[90] A. Duarte and R. Martí. Tabu search and grasp for the maximum diversity
problem. European Journal of Operational Research, to appear.
[93] R.C. Eberhart and Y. Shi. Tracking and optimizing dynamic systems with par-
ticle swarms. In Proceedings of the 2001 Congress on Evolutionary Compu-
tation, CEC2001, pages 94–100, 2001.
[97] C. Eyckelhof and M. Snoek. Ant systems for a dynamic tsp: Ants caught in
a traffic jam. In Proceedings of Third International Workshop ANTS 2002,
LNCS 2463, pages 88–99, 2002.
[98] U. Faigle. Some convergence results for probabilistic tabu search. ORSA
Journal on Computing, 4:32–37, 1992.
[99] T.A. Feo and M.G.C. Resende. A probabilistic heuristic for a computationally
dificult set covering problem. Operations Research Letters, 8:67–71, 1989.
[100] T.A. Feo and M.G.C. Resende. A greedy randomized adaptive search proce-
dure for maximum independent set. Operations Research, 42:860–878, 1994.
[101] T.A. Feo and M.G.C. Resende. Greedy randomized adaptive search procedu-
res. Journal of Global Optimization, 6:109–133, 1995.
[102] P. Festa, P.M. Pardalos, M.G. Resende, and C.C. Ribeiro. Randomized heu-
ristics for the max-cut problem. Optimization Methods and Software, 7:1033–
1058, 2002.
[107] C. Fleurent and F. Glover. Improved constructive multistart strategies for the
quadratic assignment problem using adaptive memory. INFORMS Journal on
Computing, 11:198–204, 1999.
[110] B.L. Fox. Integrating and acceletating tabu search, simulated annealing and
genetic algorithms. Annals of Operations Research, 41:47–67, 1993.
[112] R. Friedberg. A learning machine, part i. IBM Journal of Research and Deve-
lopment, 10:2–13, 1958.
[113] R. Friedberg, B. Dunham, and J. North. A learning machine, part ii. IBM
Journal of Research and Development, 3:282–287, 1959.
[114] M.R. Garey and S.J. Johnson. Computers and Intractability: A Guide to the
Theory of NP-Completeness. Freeman, San Francisco, USA, 1979.
[120] F. Glover. Heuristic for integer programming using surrogate constraints. De-
cision Sciences, 8:533–549, 1977.
[121] F. Glover. Future paths for integer programming and links to artificial intelli-
gence. Computers and Operations Research, 13:533 549, 1986.
[123] F. Glover. Tabu search-part ii. ORSA Journal on Computing, 2:4–32, 1990.
[124] F. Glover. A template for scatter search and path relinking. In Artificial Evo-
lution, Lecture Notes in Computer Science, pages 14–53, 1998.
[126] F. Glover, C. C. Kuo, and K. S. Dhir. Heuristic algorithms for the maxi-
mum diversity problem. Journal of Information and Optimization Sciences,
19(1):109–132, 1998.
[127] F. Glover and M. Laguna. Tabu Search. Kluwer Academic Publishers, Boston,
Hardbound, 1997.
[128] F. Glover, M. Laguna, and R. Martí. Fundamentals of scatter search and path
relinking. Control and Cybernetics, 29(3):653–684, 2000.
[129] F. Glover, M. Laguna, and R. Martí. Scatter Search and Path Relinking: Ad-
vances and Applications, chapter 1 in Handbook of Metaheuristic, pages 1–35.
Kluwer Academic Publishers, 2003.
[130] F. Glover, M. Laguna, and R. Martí. Scatter search and path relinking: Founda-
tions and advanced designs. In New Optimization techniques in Engineering,
2003.
[134] M.X. Goemans and D.P. Williams. Improved approximation algorithms for
max-cut and satisfiability problems using semidefinite programming. Journal
of the ACM, 42:1115–1142, 1995.
[138] N.J. Gordon, D.J. Salmond, and A.F.M. Smith. Novel approach to
nonlinear/non-gaussian bayesian state estimation. Radar and Signal Proces-
sing, IEE Proceedings F, 140.
[141] J.J Grefensette and C.L. Ramsey. An approach to anytime learning. In Pro-
ceedings of the 9th Int Conf on Machine Learning, pages 189–195, 1992.
[144] G. Gutin and A. Punnen. The traveling salesman problem and its variations.
Kluwer Academic Publishers, 2004.
206 BIBLIOGRAFÍA
[145] B. Hadad and C. Eick. Supporting poliploidy in genetic algorithms using do-
minance vectors. In Proceedings of the Sixth International Conference on
Evolutionary programming, vol. 1213 of LNCS, pages 223–234, 1997.
[146] F.O. Hadlock. Finding a maximum cut of a planar graph in polynomial time.
SIAM Journal on Computing, 4:221–225, 1975.
[147] L.W. Hagen and A.B. Kahng. Combining problem reduction and adaptive
multi-start: A new technique for superior iterative partitioning. IEEE Transac-
tions on CAD, 16:709–717, 1997.
[150] P. Hansen and N. Mladenovìc. J-means: A new local search heuristic for mi-
nimum sum-of-squares clustering. Pattern Recognition, 34:401–415, 2001.
[155] G. Harik. inkage learning in via probabilistic modeling in the ecga. Technical
report, Report 99010, IlliGAL Technical Report, 1999.
[156] J.P. Hart and A.W. Shogan. Semi-greedy heuristic: An empirical study. Ope-
rations Research Letters, 6:107–114, 1987.
[160] J.H. Holland. Adaptation in Natural and Artificial Systems. The University of
Michigan Press, 1975.
[163] T.C. Hu, A.B. Kahing, and C.W.A. Tsao. Old bachelor acceptance: A new
class of non-monotone threshold accepting method. ORSA Journal on Com-
puting, 7:417–425, 1995.
[165] S.H. Jacobson. Analyzing the Performance of Local Seach Algorithms Using
Generalized Hill Climbing Algorithms, chapter 20 in Essays and Surveys on
Metaheuristics. Kluwer Academic Publishers, 2002.
[166] S.H. Jacobson, K.A. Sullivan, and A.W. Johnson. Discrete manofacturing pro-
cess design optimization using computer simulation and generalized hill clim-
bing algorithms. Engineering Optimization, 31:247–260, 1998.
[169] D.S. Johnson. Local optimization and the travelling salesman problem. Pro-
ceedings of the 17th Colloquium on Automata, Languages, and Programming,
volume LNCS, 433:446–461, 1990.
[170] T. Jones. One operator, one landscape. Technical report, Santa Fe Institure,
California, USA, 1995.
[171] A.W. Jonhson. Generalized Hill Climbing Algorithms for Discrete Optimiza-
tion Problems. PhD thesis, Department of Industria and Systems Engineering,
Virginai Polytechcnic and State University, Blacksburg, VA, USA, 1996.
208 BIBLIOGRAFÍA
[172] A.W. Jonhson and S.H. Jacobson. On the convergence of generalized hill
climbing algorithms. Discrete Applied Mathematics, 119:37–57, 2002.
[174] J.P. Kelly and I.H. Osman. Meta-Heuristic: Theory and Applications. Kluwer
Academic Publisher, 1996.
[176] J. Kennedy and R.C. Eberhart. The Particle Swarm: Social Adaptation in
Information Processing Systems, chapter 25 in New Ideas in Optimization,
pages 379–387. McGraw Hill, 1999.
[177] J. Kennedy and R.C. Eberhart. Swarm Intelligence. Morgan Kaufmann Pu-
blishers, 2003.
[178] M.D. Kidwell and D.J. Cook. Genetic algorithm for dynamic task scheduling.
In 13 IEEE Int Phoenix Conf on Computers and Communications, pages 61–
67, 1994.
[179] P. Kilby, P. Proser, and P. Shaw. Dynamic vrps: a study of scenarios. Technical
report, Report APES-06-1998, University of Strathclyde, 1998.
[183] J.R. Koza. Genetic Programming: Automatic Synthesis of Topologies and Nu-
merical Parameters, chapter 4 in Handbook of Metaheuristic, pages 83–104.
Kluwer Academic Publishers, 2003.
[184] C.C. Kuo, F. Glover, and K. S. Dhir. Analyzing and modeling the maximum
diversity problem by zero-one programming. Decision Sciences, 24.
[189] T.L. Lau. Guided Genetic Algorithm. PhD thesis, Department of Computer
Science. University of Essex, Colchester, UK, 1999.
[190] J.K. Lenstra, A.H.G. Rinnooy, and K.P. Van Emde Boas. An appraisal of
computational complexety for operations research. European Journal of Ope-
rational Research, 11, 1982.
[191] J.S. Liu and R. Chen. Sequential monte carlo methods for dynamic systems.
Journal of the American Statistical Association, 93.
[193] H.R. Lourenço, O.C. Martin, and T. Stützle. Iterated Local Search, chapter 11
in Handbook of Metaheuristic, pages 321–354. Kluwer Academic Publishers,
2003.
[195] J. Ma and J.E. Straub. Simulated annealing using the classical density distri-
bution. Journal of Chemical Physics, 101:533–541, 1994.
[198] R. Martí and M. Laguna. Scatter search: Diseño básico y estrategias avanza-
das. Revista Iberoamericana de Inteligencia Artificial, 2003.
[199] O. Martin and S.W. Otto. Combining simulated annealing with local search
heuristics. Annals of Operations Research, 63:57–75, 1996.
210 BIBLIOGRAFÍA
[200] O. Martin, S.W. Otto, and E.W. Felten. Large-step markov chains for the
traveling salesman problem. Journal of Complex Systems, 5(3), 1991.
[201] D.C. Mattfeld and C. Bierwirth. A search space analysis of the job shop sche-
duling problem. Baltzer Journals, 1996.
[202] T. Mautor and P. Michelon. Mimausa: A new hybrid method combining exact
solutions and local search. In Proceedings of 2nd MIC’97 Conference, 1997.
[203] S. McKee and M.B. Reed. An algorithm for the alignment of gas turbine
components in aircraft. IMA Journal of Mathematics in Management, 1:133–
144, 1987.
[205] P. Mertz and B. Freisleben. Fitness landscape and memeitc algorithm des-
ign. Technical report, Dept. of Electrical Engineering and Computer Science,
University of Siegen, 1999.
[207] P. Metz and B. Freislebe. Fitness landscapes and memetic algoirthms design.
Technical report, University of Siegen, 2003.
[209] H. Mühlenbein, M. Schomisch, and J.J. Born. The parallel genetic algorithm
as funciton optimizerd. In In Proceedings of 4td International Conference on
Genetic Algorithm, pages 271–278, 1991.
[211] Z. Michalewicz and D.B. Fogel. How to Solve it: Modern Heuristic. Springer-
Verlag, Berlin, Heidelberg, Germany, 2000.
[212] P. Mills and E.P.K. Tsang. An empirical study of extended guided local sear-
ch on the quadratic assignment problem. In ECAI-2000 Workshop on Local
Search for Planning and Scheduling, 2000.
[213] P. Mills and E.P.K. Tsang. Guided local search for solving sat and weighted
max-sat problems. Journal of Automated Reasoning, 24:205–233, 2000.
BIBLIOGRAFÍA 211
[214] N. Mladenovìc, J. Petrovìc, V. Kovacevìc, and M. Kangalovìc. Solving spread
spectrum radar polyphase code design problem by tabu search and varaible
neighborhood search. Journal of Heuristic, 2004.
[218] N. Mori and H.; Kita. Genetic algorithms for adaptation to dynamic envi-
ronments - a survey. In 26th Annual Conf of the IEEE Industrial Electronics
Society, 2000. IECON 2000, volume 4, pages 2947 – 2952, 2000.
[225] P. Moscato and C. Cotta. Una introducción a los algoritmos meméticos. Re-
vista Iberoamericana de Inteligencia Artificial, 2003.
212 BIBLIOGRAFÍA
[226] P. Moscato and J.F. Fontanari. Convergence and finite-time behaviour of si-
mulated annealing. Advances in Applied Probability, 18:747–771, 1990.
[229] F.A. Ogbu and D.K. Smith. The application of the simulated annealing al-
gorithms to the solution of th c/m/cmax flowshop problem. Computers and
Operations Research, 17:143–253, 1990.
[230] K. Ohkura and K. Ueda. Genetic algorithm for nonstationary function optimi-
zation problems. Trans SICE, 8(6):269–276, 1995.
[231] J.W. Ohlmann and J.C. Bean. Compressed annealing: Simulated annealing
under preassure. Technical report, Department of Industrial and Operations
Engineering, Univerity of Michigan, Ann Arbor, Michigan, 2000.
[232] J.E. Orosz and S.H. Jacobson. Analysis of static simulated annealing algo-
rithms. Journal of Optimizatio Theory and Application, 2004. En prensa.
[234] J.J. Pantrigo, A. Duarte, A. Sánchez, and R. Cabido. Scatter search particle
filter to solve the dynamic travelling salesman problem. In EvoCOP, pages
177–189, 2005.
[235] J.J. Pantrigo, A.S. Montemayor, and A. Sánchez. Local search particle filter
applied to human-computer interaction. In 4th International Symposium on
Image and Signal Processing and Analysis (ISPA 2005), pages 279–284, 2005.
[236] J.J. Pantrigo and A. Sánchez. Hybridizing particle filters and population-based
metaheuristics for dynamic optimization problems. In Fifth International Con-
ference on Hybrid Intelligent Systems (HIS’05). Aceptado, 2005.
[237] J.J. Pantrigo, A. Sánchez, K. Gianikellis, and A. Duarte. Path relinking particle
filter for human body pose estimation. In SSPR/SPR, pages 653–661, 2004.
[239] V. Pareto. Cours D’Economie Politique. Vol i and Vol. II. F. Rouge, 1896.
BIBLIOGRAFÍA 213
[240] K.K. Parhi. VLSI Digital Signal Procesing Signal: Design and Implementa-
tion. Wiley-Interscience, New York, USA, 1999.
[241] D. Parrot and X. Li. A particle swarm model for tracking multiple peaks in
a dynamic environment using speciation. In Proceedings of the Congress on
Evolutionary Computation, CEC2004, pages 98–103, 2004.
[242] J. Pearl. Heuristic: Intelligent Search Strategies for Computer Problem Sol-
ving. Addison-Wesley, Reading, 1984.
[244] D. Pelta, N. Krasnogor, A. Blanco, and J.L. Verdegay. F.a.n.s. for the protein
folding problem: Comparing encodings and search modes. In Proceedings of
MIC’01 Conference, 2001.
[246] C.B. Petty87, M.R. Leuze, and J.J. Grefensette. A parallel genetic algorithm.
In Poceedings 2nd Int. Conf. on Genetic Algorithm, pages 155–161, 1987.
[247] G. Pipe, T.C. Fogarty, and A. Winfield. Hybrid adaptive heuristic critic ar-
chitectures for learning in mazes with continuous search spaces. In Parallel
problem solving from naure, 866 in LNCS, pages 482–491, 1994.
[248] S. Poljak and Z. Tuza. The Max-Cut problem: A survey, chapter in Special Year
on Combinatorial Optimization. DIMACS Series in Discrete Mathematics and
Computer Science. American Mathematical Society, 1995.
[250] M. Prais and C.C. Ribeiro. Reactive grasp: An application to a matrix de-
composition problem in tdma assignment problem. INFORMS Journal on
Computing, (164-176), 12.
[252] M. Prais and C.C. Ribeiro. Parameter variation in grasp procedures. Investi-
gación Operativa, 1:1–20, 2000.
214 BIBLIOGRAFÍA
[253] A. P. Punnen. The Traveling Salesman Problem and its Variations, chapter
The Traveling Salesman Problem: Applications, Formulations and Variations,
pages 1–28. Kluwer, 2004.
[254] C.S. Rabak and J.S. Sichman. Using a-teams to optimize automatic insertion
of electronic components. Advanced Engineering Informatics, 17(2):95–106,
2003.
[256] C.L. Ramsey and J.J Grefensette. Case-based initialization of genetic algo-
rithms. In proceedings of the 5th ICGA, pages 84–91, 1993.
[261] C. Reeves and I.H. Osman. Modern Heuristic Techniques for Combinatorial
Problems. Blackwell Scientific Publicactions, 1993.
[262] G. Reinelt. The linear ordering problem: Algorithms and applications. Re-
search and Exposition in Mathematics, 8, 1985.
[269] C. Ribeiro and C. Souza. Variable neighborhood descent for the degree-
constrained minimum spanning tree problem. Discrete Applied Mathematics,
2001. En prensa.
[270] C. Ribeiro, E. Uchoa, and R. Werneck. A hybrid grasp with perturbations for
the steiner problem in graphs. INFORMS Journal on Computing, 14:228–246,
2002.
[271] C.C. Ribeiro and P. Hansen, editors. Essays and Surveys in Metaheuristic.
Kluwer Academic Publishers, 2002.
[274] E. Rolland. A tabu search method for constrained real-number search: Appli-
cations to portfolio selection. Working Paper, The Gary Anderson Graduate
School of Management, University of California, Riverside 1996.
[277] K.E. Rosing and C.S. ReVelle. Heuristic concentration: Two stage solution
construction. European Journal of Operational Research, 97:75–86, 1997.
[278] K.E. Rosing and C.S. ReVelle. Heuristic concentration and tabu search: A head
to head comparison. European Journal of Operational Research, 104:93–99,
1998.
[296] J.M. Stern. Simulated annealing with a temperature dependent penalty func-
tion. ORSA Journal on Computing, 4:311–319, 1992.
[298] J.E. Straub, J. Ma, and P. Amara. Simulated annealing using coarse grained
clasical dynamics: Smouuchowsky dynamics in the gaussian density approxi-
mation. Journal of Chemical Physics, 103:1574–1581, 1995.
[299] P.N. Strenski and S. Kirkpatrick. Analysis of finite length annealing schedules.
Algorithmica, 6:346–366, 1991.
[301] T. Stützle and H. Hoos. The MAX-MIN Ant System and Local Search for Com-
binatorial Optimization Problems: Towards Adaptive Tools for Combinatorial
Global Optimization, chapter Meta-Heuristics: Advances and Trends in Lo-
cal Search Paradigms for Optimization, pages 313–329. Kluwer Academic
Publishers, 1998.
[302] R.S. Sutton and A.G. Barto. Reinforcement Learning: An Introduction. MIT
Press, Cambridge, CA, USA, 1998.
[304] E.D. Taillard, L.-M. Gambardella, M. Gendreau, and J.-Y. Potvin. Adaptive
memory programming: A unified view of meta-heuristics. European Journal
of Operational Research, 135(1):1–16, 2001.
[309] S.N. Talukdar, S.S. Pyo, and T. Giras. Asynchronous procedures for parallel
processing. IEEE Transaction on PAS, 102(11), 1983.
[313] S. Tstutsui, Y. Fujimoto, and A. Ghosh. Forking genetic algorithm: Gas with
search space division schemes. Evolutionary Computation, 5(1):61–80, 1997.
[315] P.J.M. Van Larhooven and E.H.L. Aarts. Simulated Annealing: Theory and
Applications. Kluwer Academic Publishers, 1987.
[316] J.M. Varanelli and J.P. Cohoon. A fast method for generalized starting tempe-
rature determination in homogeneous twp-stage simulated annealing systems.
Computers and Operations Research, 26:481–503, 1999.
[317] F. Vavak, Fogarty, T.C., and K. Jukes. Learning the local search range for
genetic optimisation in nonstationary environments. In Proceedings of the 4th
IEEE International Conference on Evolutionary Computation, pages 355–360,
1997.
[319] C. Voudouris and E. Tsang. Guided local search. Technical Report CSM-247,
Department of Computer Science. University os Essex. Colchester. UK, 1995.
[320] C. Voudouris and E. Tsang. Solving the radio link assignment problems using
guided local search. In Proceedings of NATO Symposium on Frequency As-
signment, Sharing and Conservation Systems, 1998.
BIBLIOGRAFÍA 219
[321] C. Voudouris and E. Tsang. Guided local search and its application to the
travelling salesman problem. European Journal of Operational Research,
113(2):469–499, 1999.
[324] C. J. Wang and E. P. K. Tsang. VLSI for Neural Networks and Artificial In-
telligence, chapter A Cascadable VLSI Design for GENET, pages 197–196.
Plenum Press, New York, 1995.
[325] D.H. Wolpert and W.G. Macready. No free lunch theorems for optimization.
IEEE Transaction on Evolutionary Computation, 1:67–82, 1997.
[326] D.L. Woodroff. A class lybrary for heuristic search optimization. INFORMS
Computer Science Technical Section, pages 1–4, 1997.
[331] H. Zanakis, J.R. Stelios, and A. Evans. Heuristic optimization: Why, when and
how to use it. Interfaces, 5(11):84–90, 1981.
[335] K. Zhu and K. Ong. A reactive method for real time dynamic vehicle routing
problem. In Proceedings of the 12th IEEE International Conference on Tools
with Artificial Intelligence, 2000.
220 BIBLIOGRAFÍA
[336] H.J. Zimmermann. Fuzzy Stes Theory and its Applications. Kluwer Academic
Publishers, 1996.