ESPOL, 2015/ 22
Metaheurísticas y Redes Neuronales
8 9 10 11 12 2.3.2.2
GYE-BOG 2 4 4 5 GYE-HAV 2 2 2 LIM-BOG 2 4 4 5 LIM-UIO 2 2 4 4 2 Costo 20 30 40 60 70 50 70 80 90 90 80 90 SPP (Problema de la Partición de Conjuntos)
Ahora consideremos el Set Partitioning y, al igual que en los dos anteriores, se tienen los conjuntos S y H. Así como en el Set Covering cada elemento de S tiene que aparecer al menos en uno de H, en este problema cada elemento de S tiene que aparecer exactamente en uno de H, por lo tanto la solución representa una partición del conjunto S. La función objetivo puede ser maximizar o minimizar, según la aplicación. Aplicaciones:
Asignación de tripulaciones en una versión más restringida que la anteriormente mencionada. Creación de distritos Electorales: Asignación de electores a un colegio electoral. EJEMPLO: EL PROBLEMA DEL COLOREO DE GRAFOS Dado un grafo G, el problema de coloreamiento del grafo consiste en colorear todos los nodos con la cantidad mínima de colores de tal manera que no existan dos nodos adyacentes (unidos con una arista) del mismo color. Este problema representa muchas situaciones reales como en la planificación de horarios para una serie de actividades que deben tener lugar, algunas de las cuales no pueden suceder simultáneamente, tales como horarios de exámenes, horarios de competencias deportivas, etc. Se desea conseguir una planificación que asegure la menor duración total de todo el plan. Para formular este problema se define un grafo en el que cada nodo representa una actividad, y cada arista significa que las actividades no pueden ocurrir simultáneamente. El problema consiste en particionar el conjunto de nodos en el menor conjunto posible de subconjuntos disjuntos, de tal forma que no existan dos nodos adyacentes en el mismo subconjunto.
,
,
Para formular el problema se consideran todos los posibles conjuntos de nodos tales que no contengan dos nodos adyacentes, y a cada se le asocia una variable de decisión . La matriz se define como: si el nodo j pertenece al subconjunto , y cero en caso contrario. Entonces la formulación es:
()
1 =
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
EJEMPLO:
ESPOL, 2015/ 23
..: = 1; 1, … , ∈ 0,1; 1,… ,
Resolver con GAMS el problema de coloreo del grafo de Petersen:
2.3.2.3
SSP (Problema del empaquetamiento de Conjuntos):
Ahora consideremos una aplicación del Set Packing. Igual que en el problema anterior se tienen los conjuntos S y H, pero ahora cada Hi tiene un valor asociado. El objetivo es empaquetar tantos elementos de S como sea posible de forma que el beneficio obtenido sea máximo y no haya solapamientos (ningún elemento de S puede aparecer más de una vez). En cierto modo, la relajación lineal del Set Covering y la del Set Packing son problemas duales. Sin embargo esto no sirve para establecer una relación entre los problemas enteros originales. Uno de los ejemplos/aplicaciones es el problema del Acoplamiento Máximo o Matching. Un acoplamiento es un subconjunto de las aristas de un grafo de manera que cualquier vértice no sea incidente con más de una de esas aristas. El problema del acoplamiento máximo consiste en encontrar un acoplamiento de máximo cardinal. EJERCICIO: Plantear una aplicación del SSP y resolverlo con GAMS 2.3.3
Problema del Agente Viajero (Traveling Salesman Problem)
Este problema, también conocido como Traveling Salesman Problem (TSP), ha sido uno de los más estudiados en Investigación Operativa, por lo que merece una atención especial. Cuando se desarrolló la teoría de la Complejidad Algorítmica, el TSP fue uno de los primeros problemas en estudiarse, probando Karp en 1972 que pertenece a la clase de los problemas difíciles (NPhard). Desde los métodos de Ramificación y Acotación hasta los basados en la Combinatoria Poliédrica, pasando por los procedimientos Metaheurísticos, todos han sido inicialmente
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 24
Metaheurísticas y Redes Neuronales
probados en el TSP, convirtiéndose éste en un problema de prueba obligado para “validar” cualquier técnica de resolución de problemas enteros o combinatorios. La librería TSPLIB (http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/) de domino público contiene un conjunto de ejemplos del TSP para ser usados como ejemplos de prueba en los algoritmos, y en los que consta la mejor solución obtenida hasta la fecha y, en algunos casos, la solución óptima. A efectos de medir empíricamente la bondad de los algoritmos que se describe, consideraremos un conjunto de 30 ejemplos de la TSPLIB basados en problemas reales con óptimos conocidos. El Problema del Agente Viajero puede enunciarse del siguiente modo: “Un agente viajero ha de visitar n ciudades, comenzando y finalizando en su
propia ciudad. Conociendo el costo de ir de cada ciudad a otra, determinar el recorrido de costo mínimo.” Para enunciar el problema formalmente introducimos la siguiente terminología: Sea un grafo G=(V , A,C ) donde V es el conjunto de vértices, A es el de aristas y C =(cij ) es la matriz de costos. Esto es, cij es el costo o distancia de la arista (i , j ).
Un camino (o cadena) es una sucesión de aristas (e1, e2, …, ek) en donde el vértice final de cada arista coincide con el inicial de la siguiente. También puede representarse por la sucesión de vértices utilizados. Un camino es simple o elemental si no utiliza el mismo vértice más de una vez. Un ciclo es un camino (e1, e2, …, ek) en el que el vértice final de ek coincide con el inicial de e1. Un ciclo es simple si lo es el camino que lo define. Un subtour es un ciclo simple que no pasa por todos los vértices del grafo. Un tour o ciclo hamiltoniano es un ciclo simple que pasa por todos los vértices del grafo. El Problema del Agente Viajero consiste en determinar un tour de costo mínimo. La figura 2 muestra un grafo de 8 vértices en el que aparece destacado un ciclo hamiltoniano. 5
8
4
1 6 4
6
3 5
3
4
10
2
6
5 8
10
7
6 4 8
4 3
4
8
Figura 2. Ciclo Hamiltoniano
Consideraremos, sin pérdida de generalidad, que el grafo es completo; es decir, que para cada par de vértices existe una arista que los une. Notar que, de no ser así, siempre podemos añadir una arista ficticia entre dos vértices con el costo del camino más corto que los une. Así por ejemplo, en el grafo de la figura 2 podemos añadir una arista entre los vértices 1 y 6 con costo 9 correspondiente al camino 1-3-6.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 25
Metaheurísticas y Redes Neuronales
Entre las aplicaciones más importantes del TSP podemos destacar:
Fabricación de circuitos integrados Rutas de vehículos Recogida (robotizada) de material en almacenes Instalación de componentes en computadores Aparece como subproblema en otras aplicaciones Este problema puede ser formulado mediante un modelo de programación lineal entera con variables binarias. Para ello basta considerar las variables x ij que valen 1 si el viajante va de la ciudad i a la j y 0 en otro caso y llamar cij al costo de ir de la ciudad i a la j :
c x
MIN
ij
ij
i j
s.t . :
x
x ji 2
ij
i j
i 1,2,...,n
j i
x ij 2 S {1,2,.., n}, 3 S n / 2
( i , j ) ( S )
x ij 0,1 i j
Donde (S) representa el conjunto de aristas incidentes con exactamente un vértice de S. Las restricciones que aparecen en segundo lugar (vinculadas a todos los subconjuntos de vértices S) reciben el nombre de restricciones de eliminación de subtours y garantizan que la solución sea un tour. El problema es que al haber una por cada subconjunto del conjunto de vértices, aparecen en una cantidad del orden de 2 n, lo cual hace inmanejable tal formulación. Se han encontrado restricciones alternativas para evitar la formación de subtours que suponen la incorporación de una cantidad polinómica de restricciones (Miller, Tucker y Zemlin, 1960). Aún así, la resolución óptima del problema ha resultado poco eficiente, salvo para ejemplos relativamente pequeños, dado el elevado tiempo de computación requerido por cualquier método exacto. 2.3.4
El Problema de la Asignación Cuadrática
Introduciremos el problema mediante el siguiente ejemplo: “Se tienen n módulos electrónicos
y n posiciones en donde situarlos sobre una placa. Sea t ik el número de cables que conectan los módulos i y k , y sea d jl la distancia entre las posiciones j y l de la placa. El problema consiste en determinar la ubicación de los módulos minimizando la longitud total del cable utilizado”
Al igual que en los otros modelos de asignación vistos, se introducen variables binarias x ij que toman el valor 1 si el módulo i se asigna a la posición j y 0 en otro caso. La formulación MIP es la siguiente:
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 26
Metaheurísticas y Redes Neuronales
n
MIN
n
n
n
t ik d jl xij xkl
i 1 j 1 k 1 l 1
s.t . : n
xij
1
i 1,2,..., n
1
j 1,2,..., n
j 1 n
xij i 1
xij 0,1
El problema se llama cuadrático por la función objetivo ya que el costo viene dado por parejas de variables que aparecen como producto. Así pues la función objetivo es no lineal, aunque se puede transformar en un problema lineal entero introduciendo variables que representen a los productos. Notar que esta transformación obligaría a reformular las restricciones. Este problema tiene numerosas aplicaciones ya que podemos encontrar en ámbitos muy diversos situaciones como la descrita. Así, por ejemplo, el problema de ubicar determinados servicios (como laboratorios, rayos X,... etc.) en un hospital en donde se conoce el flujo previsto de personal entre tales servicios. Análogamente el guardar determinados productos en un almacén. El objeto de introducir este problema es doble: por una parte mostrar un problema no lineal, con un gran número de aplicaciones prácticas, que puede transformarse en un PLE y, por otra, presentar uno de los problemas más difíciles (sino el que más) dentro de los ya de por sí difíciles problemas enteros. EJERCICIO: Introduciendo nuevas variables plantear el problema de asignación cuadrática como un problema MIP. 2.3.5
Problema de Asignación Generalizada
Se tiene un conjunto J={1,2,..,n} de índices de los trabajos a realizar y otro conjunto I={1,2,..,m} de personas para realizarlos. El costo (o valor) de asignar la persona i al trabajo j viene dado por cij . Además se tiene una disponibilidad bi de recursos de la persona i (como por ejemplo horas de trabajo) y una cantidad aij de recursos de la persona i necesarias para realizar el trabajo j . Con todo esto, el problema consiste en asignar las personas a los trabajos con el mínimo costo (o el máximo valor). Al igual que en los otros modelos de asignación vistos, se introducen variables x ij que valen 1 si la persona i se asigna al trabajo j y 0 en otro caso.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 27
Metaheurísticas y Redes Neuronales
n
n
cij xij
MIN
i 1 j 1
s.t . : n
xij
1
j 1,2,...,n
i 1 n
aij xij bi
i 1,2,...,n
j 1
xij 0,1 En este modelo de asignación se puede asignar una persona a más de un trabajo, respetando obviamente las limitaciones en los recursos. Algunas de las aplicaciones más relevantes son:
Asignación de clientes a camiones (de reparto o recogida) de mercancías. Asignación de tareas a programadores. Asignación de trabajos a una red de computadores. 2.3.6
Problema de la Ordenación Lineal
Este problema consiste en determinar una permutación p de las filas y columnas de una matriz cuadrada dada, de manera que la suma de los elementos por encima de la diagonal sea máxima. Notar que la permutación p proporciona el orden tanto de las filas como de las columnas. En términos económicos este problema es equivalente al de triangulación de matrices inputoutput, que puede describirse del siguiente modo: La economía de una región se divide en m sectores, se construye una matriz m*m donde la entrada aij denota la cantidad de mercancías (en valor monetario) que el sector i sirve al j en un año dado. El problema de triangulación consiste en permutar las filas y columnas de la matriz simultáneamente de manera que la suma de elementos por encima de la diagonal sea lo mayor posible. Una solución óptima presenta una ordenación de sectores de modo que los proveedores (sectores que producen para otros) van en primer lugar seguidos de los consumidores. Este problema también puede enunciarse en términos de grafos, lo cual ayuda a formularlo del siguiente modo: n
MAX
n
cij xij
i 1 j 1
s.t . : xij x ji 1 xij x jk xki 2
i, j V , i j
1 i < j < k n
xij 0,1
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 28
Metaheurísticas y Redes Neuronales
Donde x ij =1 representa que el sector (vértice) i precede al j en la ordenación dada por la solución.
2.4
Medidas de Calidad de un Algoritmo
Un buen algoritmo heurístico debe de tener las siguientes propiedades: 1. Eficiente. Un esfuerzo computacional realista para obtener la solución. 2. Bueno. La solución debe de estar, en promedio, cerca del óptimo. 3. Robusto. La probabilidad de obtener una mala solución (lejos del óptimo) debe ser baja. Para medir la calidad de un heurístico existen diversos procedimientos, entre los que se encuentran los siguientes: 2.4.1
Comparación con la solución óptima
Aunque normalmente se recurre al algoritmo aproximado por no existir un método exacto para obtener el óptimo, o por ser éste computacionalmente muy costoso, en ocasiones puede ser que dispongamos de un procedimiento que proporcione el óptimo para un conjunto limitado de ejemplos (usualmente de tamaño reducido). Este conjunto de ejemplos puede servir para medir la calidad del método heurístico. Normalmente se mide, para cada uno de los ejemplos, la desviación porcentual de la solución heurística frente a la óptima, calculando posteriormente el promedio de dichas desviaciones. Si llamamos ch al valor objetivo en la solución del algoritmo heurístico y copt al valor objetivo de la solución óptima de un ejemplo dado, en un problema de optimización el GAP absoluto (desviación absoluta) viene dada por la expresión:
| | | | 100%
Y el GAP relativo (desviación relativa) como:
2.4.2
Comparación con una cota
En ocasiones el óptimo del problema no está disponible ni siquiera para un conjunto limitado de ejemplos. Un método alternativo de evaluación consiste en comparar el valor de la solución que proporciona el heurístico con una cota del problema (inferior si es un problema de minimización y superior si es de maximización). Obviamente la bondad de esta medida dependerá de la bondad de la cota (cercanía de ésta al óptimo), por lo que, de alguna manera, tendremos que tener información de lo buena que es dicha cota. En caso contrario la comparación propuesta no tiene demasiado interés.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 29
Metaheurísticas y Redes Neuronales
2.4.3
Comparación con un método exacto truncado
Un método enumerativo como el de Ramificación y Acotación explora una gran cantidad de soluciones, aunque sea únicamente una fracción del total, por lo que los problemas de gr andes dimensiones pueden resultar computacionalmente inabordables con estos métodos. Sin embargo, podemos establecer un límite de iteraciones (o de tiempo) máximo de ejecución para el algoritmo exacto. También podemos saturar un nodo en un problema de maximización cuando su cota inferior sea menor o igual que la cota superior global más un cierto (análogamente para el caso de minimizar). De esta forma se garantiza que el valor de la mejor solución proporcionada por el procedimiento no dista más de del valor óptimo del problema. En cualquier caso, la mejor solución encontrada con estos procedimientos truncados proporciona una cota con la que contrastar el heurístico. 2.4.4
Comparación con otros heurísticos
Este es uno de los métodos más empleados en problemas difíciles (NP-duros) sobre los que se ha trabajado durante tiempo y para los que se conocen algunos buenos heurísticos. Al igual que ocurre con la comparación con las cotas, la conclusión de dicha comparación está en función de la bondad del heurístico escogido. 2.4.5
Análisis del peor caso (worst case analisys)
Uno de los métodos que durante un tiempo tuvo bastante aceptación es analizar el comportamiento en el peor caso del algoritmo heurístico; esto es, considerar los ejemplos que sean más desfavorables para el algoritmo y acotar analíticamente la máxima desviación respecto del óptimo del problema. Lo mejor de este método es que acota el resultado del algoritmo para cualquier ejemplo; sin embargo, por esto mismo, los resultados no suelen ser representativos del comportamiento medio del algoritmo. Además, el análisis puede ser muy complicado para los heurísticos más sofisticados. Aquellos algoritmos que, para cualquier ejemplo, producen soluciones cuyo costo no se aleja de un porcentaje del costo de la solución óptima, se llaman Algoritmos -Aproximados. Esto es; en un problema de minimización se tiene que cumplir para un > 0 que: ch (1+ ) copt
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 30
Metaheurísticas y Redes Neuronales
3.
Métodos Constructivos
Los métodos constructivos son procedimientos iterativos que, en cada paso, añaden un elemento hasta completar una solución. Usualmente son métodos deterministas y están basados en seleccionar, en cada iteración, el elemento con mejor evaluación. Estos métodos son muy dependientes del problema que resuelven, por lo que utilizaremos el Problema del Agente Viajero (TSP) para describirlos. En este capítulo se describen cuatro de los métodos más conocidos para el TSP.
3.1
Heurísticos del Vecino más Cercano
Uno de los heurísticos má s sencillos para el TSP es el llamado “del vecino más cercano”, que es un algoritmo glotón (Greedy) que trata de construir un ciclo Hamiltoniano de bajo costo basándose en el vértice cercano a uno dado. Este algoritmo en una versión estándar tiene el siguiente código: Algoritmo del Vecino más cercano Inicialización Seleccionar un vértice j al azar. Hacer t = j y W = V \ {j}. Mientras ( W ) Tomar j de W / c tj = min {cti / i en W} Conectar t a j Hacer W = W \ {j} y t =j. Este procedimiento realiza un número de operaciones de orden O(n 2). Si seguimos la evolución del algoritmo al construir la solución de un ejemplo dado, veremos que comienza muy bien, seleccionando aristas de bajo costo. Sin embargo, al final del proceso probablemente quedarán vértices cuya conexión obligará a introducir aristas de costo elevado. Esto es lo que se conoce como miopía del procedimiento, ya que, en una iteración escoge la mejor opción disponible sin “ver” que esto puede obligar a realizar malas elecciones en iteraciones posteriores. El algoritmo tal y como aparece puede ser programado en unas pocas líneas de código. Sin embargo una implementación directa será muy lenta al ejecutarse sobre ejemplos de gran tamaño (10,000 vértices). Así pues, incluso para un heurístico tan sencillo como éste, es importante pensar en la eficiencia y velocidad de su código. Para reducir la miopía del algoritmo y aumentar su velocidad se introduce el concepto de subgrafo candidato, junto con algunas modificaciones en la exploración.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 31
Metaheurísticas y Redes Neuronales
Un subgrafo candidato es un subgrafo del grafo completo con los
vértices y únicamente las aristas consideradas “atractivas” para aparecer en un ciclo Hamiltoniano de bajo costo. Una posibilidad es tomar, por ejemplo, el subgrafo de los k vecinos más cercanos; esto es, el subgrafo con los vértices y para cada uno de ellos las aristas que lo unen con los k vértices más cercanos. Este subgrafo también será usado en otros procedimientos.
El algoritmo puede “mejorarse” en los siguie ntes aspectos:
Para seleccionar el vértice j que se va a unir a t (y por lo tanto al tour parcial en construcción), en lugar de examinar todos los vértices, se examinan únicamente los adyacentes a t en el subgrafo candidato. Si todos ellos están ya en el tour parcial, entonces sí que se examinan todos los posibles. Cuando un vértice queda conectado (con grado 2) al tour en construcción, se eliminan del subgrafo candidato las aristas incidentes con él. Se especifica un número s < k de modo que cuando un vértice que no está en el tour está conectado únicamente a s o menos aristas del subgrafo candidato se considera que se está quedando aislado. Por ello se inserta inmediatamente en el tour. Como punto de inserción se toma el mejor de entre los k vértices más cercanos presentes en el tour. Considerando el estudio empírico sobre las 30 ejemplos utilizados, la versión inicial del algoritmo presenta un porcentaje de desviación en promedio respecto del óptimo de 24.2%, mientras que la mejorada con k =10 y s=4 de 18.6%. La primera tiene un tiempo de ejecución medio de 15.3 segundos mientras que la segunda lo tiene de 0.3 segundos. EJERCICIO: Implemente un código para hallar una solución al TSP por medio del algoritmo del vecino más cercano.
3.2
Heurísticos de Inserción
Otra aproximación intuitiva a la resolución del TSP consiste en comenzar construyendo ciclos que visiten únicamente unos cuantos vértices, para posteriormente extenderlos insertando los vértices restantes. En cada paso se inserta un nuevo vértice en el ciclo hasta obtener un ciclo Hamiltoniano. Este procedimiento es debido a los mismos autores que el anterior y su esquema es el siguiente: Algoritmo de Inserción Inicialización Seleccionar un ciclo inicial (subtour) con k vértices. Hacer W = V \ {vértices seleccionados}. Mientras ( W ) Tomar j de W de acuerdo con algún criterio preestablecido
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 32
Metaheurísticas y Redes Neuronales
Insertar j donde menos incremente la longitud del ciclo Hacer W = W \ {j}. Existen varias posibilidades para implementar el esquema anterior de acuerdo con el criterio de selección del vértice j de W a insertar en el ciclo. Se define la distancia de un vértice v al ciclo como el mínimo de las distancias de v a todos los vértices del ciclo: d min (v) = min { civ / i V \ W } Los criterios más utilizados son: Inserción más cercana: Seleccionar el vértice j más cercano al ciclo. d min (j) = min { d min (v) / v W } Inserción más lejana:
Seleccionar el vértice j más lejano al ciclo. d min (j) = max { d min (v) / v W }
Inserción más barata: Seleccionar el vértice j que será insertado con el menor incremento del costo. Inserción aleatoria:
Seleccionar el vértice j al azar.
La figura 2 muestra la diferencia entre estos criterios en un caso dado. El ciclo actual está formado por 4 vértices y hay que determinar el próximo a insertar. La inserción más cercana escogerá el vértice i, la más lejana el s y la más barata el k. s
i k
Figura 2. Selección del vértice a insertar
Todos los métodos presentan un tiempo de ejecución de O(n 2) excepto la inserción más cercana que es de O(n2log n). Respecto al estudio empírico sobre los 30 grafos de la TSPLIB los porcentajes de desviación del óptimo son de 20%, 9.9% 16.8% y 11.1% para el más cercano, más lejano, más barato y aleatorio, respectivamente, aunque el tiempo de ejecución del más barato es mucho mayor. Respecto al ciclo inicial se ha tomado k =3 vértices y se comprueba experimentalmente que el procedimiento no depende mucho del ciclo inicial (aproximadamente un 6% de variación). Fernando Sandoya, Ph.D.
ESPOL, 2015/ 33
Metaheurísticas y Redes Neuronales
EJERCICIO: Implemente un código para hallar una solución al TSP por medio del algoritmo de inserción.
3.3
Heurísticos Basados en Árboles Generadores
Los heurísticos considerados anteriormente construyen un ciclo Hamiltoniano basándose únicamente en los costos de las aristas. Los heurísticos de este apartado se basan en el árbol generador de costo mínimo, lo que aporta una información adicional sobre la estructura del grafo. Comenzaremos por ver algunos conceptos de teoría de grafos.
Un grafo es conexo si todo par de vértices está unido por un camino. Un árbol es un grafo conexo que no contiene ciclos. El número de aristas de un árbol es igual al número de vértices menos uno. Un árbol generador de un grafo G=(V,A,C) es un árbol sobre todos los vértices y tiene, por tanto, |V| - 1 aristas de G. Un árbol generador de mínimo peso (o de costo mínimo) es aquel que de entre todos los árboles generadores de un grafo dado, presenta la menor suma de los costos de sus aristas. Un acoplamiento de un grafo G=(V,A,C) es un subconjunto M del conjunto A de aristas cumpliendo que cada vértice del grafo es a lo sumo incidente con una arista de M. Un acoplamiento sobre un grafo G=(V,A,C) es perfecto si es de cardinalidad máxima e igual a V/ 2. Las figuras siguientes ilustran los conceptos vistos sobre un grafo completo de 8 vértices. En la figura 3 tenemos un árbol generador. Notar que contiene a todos los vértices y no hay ningún ciclo. La figura 4 muestra un acoplamiento perfecto en el que podemos ver cómo cada vértice es incidente con una, y solo una, de las aristas. Al ser un grafo de 8 vértices el número máximo de aristas en un acoplamiento es de 4, por lo que el de la figura es perfecto.
5
5
1
1 6
6
3
3
2
2
7
4
7
4 8
Figura 3. Árbol generador
8
Figura 4. Acoplamiento Perfecto
El algoritmo debido a Prim (1957) obtiene un árbol generador de mínimo peso de un grafo G completo. El algoritmo comienza por definir el conjunto T de aristas del árbol (inicialmente vacío) y, el conjunto U de vértices del árbol (inicialmente formado por uno elegido al azar). En cada paso se calcula la arista de menor costo que une U con V\U, añadiéndola a T y pasando su vértice adyacente de V\U a U. El procedimiento finaliza cuando U es igual a V; en cuyo caso el conjunto T proporciona la solución. Fernando Sandoya, Ph.D.
ESPOL, 2015/ 34
Metaheurísticas y Redes Neuronales
Dado un ciclo vi0, v i1,…, vik que pasa por todos los vértices de G (no necesariamente simple), el siguiente procedimiento obtiene un ciclo Hamiltoniano comenzando en v i0 y terminando en v ik (vi0= vik). En el caso de grafos con costos cumpliendo la desigualdad triangular (como es el caso de grafos euclídeos), este procedimiento obtiene un ciclo de longitud menor o igual que la del ciclo de partida. Algoritmo de Obtención de Tour Inicialización Hacer T = { vi0 }, v = vi0 y s=1. Mientras ( |T| < |V| ) Si vi s no está en T, hacer: T = T { vi s } Conectar v a v i s y hacer v = v i s Hacer s = s+1 Conectar v a v i0 y formar el ciclo Hamiltoniano
A partir de los elementos descritos se puede diseñar un algoritmo para obtener un ciclo Hamiltoniano. Basta con construir un árbol generador de mínimo peso (figura 5), considerar el ciclo en el que todas las aristas del árbol son recorridas dos veces, cada vez en un sentido (figura 6), y aplicar el algoritmo de obtención de tour a dicho ciclo (figura 7). El ejemplo de las figuras mencionadas ilustra dicho procedimiento sobre un grafo completo con 10 vértices.
16
4
3
4
3 25
2
2 25
1
1
19
10
10 15
5
9
5
14
9
19
7
7 8 17
6
9
Figura 5. Árbol Generador
8
6
Figura 6. Duplicación de aristas
Figura 7. Ciclo Hamiltoniano
La figura 5 muestra un árbol generador de mínimo peso e igual a 156. En la figura 6 se han duplicado las aristas y se señala mediante flechas la dirección del ciclo resultante. Su costo obviamente será de 156x2=312. Aplicando el procedimiento de obtención de tour al ciclo de la figura 6, se obtiene el ciclo Hamiltoniano de la figura 7 con un costo de 258. El proceso de duplicación de las aristas (recorrerlas todas en ambos sentidos) para obtener un tour aumenta en gran medida el costo de la solución. Podemos ver que es posible obtener un
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 35
Metaheurísticas y Redes Neuronales
ciclo que pase por todos los vértices de G a partir de un árbol generador sin necesidad de duplicar todas las aristas. De hecho, basta con añadir aristas al árbol de modo que todos los vértices tengan grado par. El siguiente procedimiento, debido a Christofides (1976), calcula un acoplamiento perfecto de mínimo peso sobre los vértices de grado impar del árbol generador. Añadiendo al árbol las aristas del acoplamiento se obtiene un grafo con todos los vértices pares, y por lo tanto, un ciclo del grafo original, a partir del cual ya hemos visto cómo obtener un tour. Algoritmo de Christofides 1. Calcular un Árbol Generador de Mínimo Peso 2. Obtener el conjunto de vértices de grado impar en el Árbol. 3. Obtener un Acoplamiento Perfecto de mínimo peso sobre dichos vértices. 4. Añadir las aristas del Acoplamiento al Árbol. 5. Aplicar el procedimiento de Obtención de Tour.
El cálculo del acoplamiento perfecto de costo mínimo sobre un grafo de k vértices se realiza en un tiempo O(k 3) con el algoritmo de Edmonds (1965). Dado que un árbol generador de mínimo peso tiene como máximo n-1 hojas (vértices de grado 1 en el árbol), el procedimiento de Christofides tendrá un tiempo de orden O(n 3). Propiedad: El algoritmo de Christofides sobre ejemplos cuya matriz de distancias cumple la desigualdad triangular produce una solución cuyo valor es como mucho 1.5 veces el valor óptimo: 3 c H
2
cOPT
Es decir, es un algoritmo ½ - aproximado sobre esta clase de ejemplos. Prueba: Sea c(AGMP) el costo del árbol generador de mínimo peso y c(A) el costo del acoplamiento perfecto calculado en el algoritmo de Christofides. Al añadir las aristas del acoplamiento al árbol se obtiene un ciclo (con posibles repeticiones) cuyo costo es la suma de ambos costos. Dado que la matriz de distancias cumple la desigualdad triangular, al aplicar el algoritmo de obtención de tour el costo puede reducirse eventualmente. Por ello el costo de la solución obtenida, cH, cumple: cH c(AGMP) + c(A)
(1)
Un árbol generador de mínimo peso, por construcción, tiene un costo menor que cualquier ciclo Hamiltoniano y, por lo tanto, que el ciclo Hamiltoniano de costo mínimo (tour óptimo). Para probarlo basta con considerar un ciclo Hamiltoniano y quitarle una arista, con lo que se obtiene un árbol generador.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 14
Metaheurísticas y Redes Neuronales
- El método heurístico participa en un paso intermedio del procedimiento, como por ejemplo las reglas de selección de la variable a entrar en la base en el método Simplex. Una característica determinante de los algoritmos heurísticos es que estos dependen en gran medida del problema concreto para el que se han diseñado, es decir el algoritmo diseñado para un problema no es directamente aplicable a otro problema de optimización. Esta característica los diferencia de los métodos de resolución de propósito general, como por ejemplo los algoritmos exactos de Branch & Bound, para los cuales existe un procedimiento conciso y preestablecido, independiente del problema abordado. Así, en los métodos heurísticos las técnicas e ideas aplicadas a la resolución de un problema son específicas y aplicables solo a éste y aunque, en general, pueden ser trasladadas a otros problemas, tienen que particularizarse y adaptarse en cada caso. Así pues, es necesario referirse a un problema concreto para estudiar con detalle los procedimientos heurísticos, por lo que, para su estudio, hay que considerar un problema de optimización combinatorio específico, y a partir de ahí describir el desarrollo de los métodos. Existen muchos problemas que se prestan, por ser fáciles de entender pero difíciles de resolver, para esto. En general se puede utilizar el Problema del Agente Viajero, que posee buenas propiedades combinatorias propiedades que lo hacen especialmente indicado. Dicho problema puede enunciarse del siguiente modo: “Un agente viajero ha de visitar n ciudades, comenzando y
finalizando en su propia ciudad. Conociendo el costo de ir de cada ciudad a otra, determinar el recorrido de costo mínimo.” Entre las buenas características que posee el Problema del Agente Viajero que lo hacen ideal para el estudio de las técnicas heurísticas se pueden nombrar las siguientes:
Resulta muy intuitivo y con un enunciado muy fácil de comprender. Es extremadamente difícil de resolver por lo que resulta un desafío constante para los investigadores y científicos. Es uno de los que más interés ha suscitado en Optimización Combinatoria y sobre el que se ha publicado abundante material. Sus soluciones admiten una doble interpretación: mediante grafos y mediante permutaciones, dos herramientas de representación muy habituales en problemas combinatorios, por lo que las ideas y estrategias empleadas son, en gran medida, generalizables a otros problemas. La gran mayoría de las técnicas que han ido apareciendo en el área de la Optimización Combinatoria han sido probadas en él, puesto que su resolución es de gran complejidad EJERCICIO: Analice el problema de agente viajero (TSP por sus siglas en inglés) con nodos a visitar
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 36
Metaheurísticas y Redes Neuronales
El árbol generador de mínimo peso tiene, obviamente, un costo menor que dicho árbol generador y, por lo tanto, que el ciclo Hamiltoniano. Luego: c(AGMP) cOPT
(2)
El acoplamiento del paso 3 del algoritmo de Christofides tiene un costo menor o igual que la mitad de la longitud de un tour óptimo en un grafo Euclídeo. Para probarlo consideremos un tour óptimo y llamemos S al conjunto de vértices de grado impar en el árbol. El algoritmo calcula un acoplamiento perfecto de costo mínimo sobre los vértices de S. La figura 8 muestra un ciclo Hamiltoniano óptimo y los vértices de S en oscuro. Además aparecen dos acoplamientos perfectos sobre S, A 1 (trazo continuo) y A2 (trazo discontinuo), en donde cada vértice está acoplado al más próximo en el tour óptimo.
Figura 8. Dos acoplamientos sobre S
Como se cumple la desigualdad triangular, se tiene que c(A1 )+c(A2 ) cOPT . . Es evidente que por ser el de costo mínimo c(A) c(A1 ) y c(A) c(A2 ), de donde: 2 c(A) cOPT
(3)
De (1), (2) y (3) se concluye el resultado. Las figuras siguientes ilustran el método de Christofides sobre el mismo ejemplo de las figuras 5, 6 y 7. En la figura 9 aparecen oscurecidos los vértices de grado impar en el árbol generador, y en trazo discontinuo las aristas del acoplamiento perfecto de costo mínimo sobre tales vértices. Al añadirlas se obtiene un tour de costo 199. La figura 10 muestra el ciclo Hamiltoniano que se obtiene al aplicarle el procedimiento de obtención del ciclo al tour de la figura anterior. La solución tiene un costo de 203, mientras que la obtenida con el procedimiento de duplicar aristas (figura 7) tenía un costo de 258.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 37
Metaheurísticas y Redes Neuronales
3
16
4
3
25
16
4
25
21
2
21
2
19 1
25
1
19
10 15
5
9
10
14
5
19
19
15
9
14
48 19
7
8 17
6
7 8
9
Figura 9. Acoplamiento Perfecto
17
6
9
Figura 10. Ciclo Hamiltoniano.
El procedimiento del árbol generador y posterior duplicación de aristas obtiene, sobre el conjunto de ejemplos considerados de la TSPLIB, una desviación del óptimo de 38%, mientras que el heurístico de Christofides de 19.5%.
3.4
Heurísticos Basados en Ahorros
Los métodos de esta sección son debidos a Clarke y Wright (1964) y fueron propuestos inicialmente para problemas de rutas de vehículos. Veamos una adaptación de estos procedimientos al Problema del Agente Viajero. El algoritmo siguiente se basa en combinar sucesivamente subtours hasta obtener un ciclo Hamiltoniano. Los subtours considerados tienen un vértice común llamado base. El procedimiento de unión de subtours se basa en eliminar las aristas que conectan dos vértices de diferentes subtours con el vértice base, uniendo posteriormente los vértices entre si. Llamamos ahorro a la diferencia del costo entre las aristas eliminadas y la añadida. Algoritmo de Ahorros Inicialización Tomar un vértice z V como base. Establecer los n-1 subtours [( z,v),(v,z)] v V \{z} . Mientras ( Queden dos o más subtours ) Para cada par de subtours calcular el ahorro de unirlos al eliminar en cada uno una de las aristas que lo une con z y conectar los dos vértices asociados. Unir los dos subtours que produzcan un ahorro mayor. En las figuras 11 y 12 se ilustra una iteración del procedimiento. Podemos ver cómo se combinan dos subtours eliminando las aristas de los vértices i y j al vértice base z, e insertando la arista (i,j).
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 38
Metaheurísticas y Redes Neuronales
i
i
z
z
j
Figura 11. Conjunto inicial de subtours
j
Figura 12. Conjunto final de subtours
En la implementación del algoritmo se tiene que mantener una lista con las combinaciones posibles. El punto clave de la implementación es la actualización de esta lista. Sin embargo, al unir dos subtours únicamente se ven afectados aquellos en los que su “mejor conexión” pertenece a alguno de los dos subtours recién unidos. Luego basta con actualizar
estos en cada iteración sin necesidad de actualizarlos todos cada vez que se realiza una unión. Al igual que en otros heurísticos, podemos utilizar el subgrafo candidato (en el que están todos los vértices y sólo las aristas consideradas “atractivas”) para acelerar los cálculos. Así, al
actualizar la lista de la mejores conexiones únicamente se consideran aristas del subgrafo candidato. El método presenta un tiempo de ejecución de O(n 3). Respecto al estudio empírico sobre los 30 ejemplos de la TSPLIB los porcentajes de desviación respecto del óptimo son de 9.8% para el método original y 9.6% para el mejorado con el uso del subgrafo candidato. Además, el tiempo de ejecución es mucho menor para este último. La siguiente tabla recoge los resultados del estudio comparativo sobre los cuatro algoritmos descritos, con los 30 ejemplos de la TSPLIB considerados: Heurístico Vecino más cercano (básico) Vecino más cercano (mejorado) Inserción más Lejana MST/duplicación de aristas Christofides Ahorros
Desviación del Óptimo 24.2% 18.6% 9.9% 38.0% 19.5% 9.6%
T. Ejecución (pr2392) 29.2 0.30 35.4 1.2 0.70 5.07
Todos los métodos están basados en cálculos relativamente sencillos y han sido implementados eficientemente, por lo que los tiempos de computación son muy parecidos entre sí e inferiores a 1 segundo en promedio. Por ello, para distinguir entre todos, en la tabla
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 39
se muestra el tiempo en segundos sobre el ejemplo de mayor tamaño considerado (pr2392) de casi 2,400 vértices. A la vista de los resultados podemos concluir que tanto el método de los ahorros como el de inserción basado en el elemento más lejano son los que mejores resultados obtienen, aunque presentan un tiempo de computación mayor que los otros dos.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 40
Metaheurísticas y Redes Neuronales
4.
Métodos de Búsqueda Local
En general, las soluciones obtenidas con los métodos constructivos suelen ser de una calidad moderada. En este apartado vamos a estudiar diversos algoritmos basados en la búsqueda local para mejorarlas. Al igual que ocurría con los métodos descritos en la sección anterior, estos algoritmos son muy dependientes del problema que resuelven, por lo que al igual que allí, utilizaremos el TSP para describirlos. Específicamente, consideraremos tres de los métodos más utilizados, tal y como aparecen descritos en Jünger, Reinelt y Rinaldi (1995). Comenzaremos por definir y explicar algunos de los conceptos genéricos de estos métodos. Los procedimientos de búsqueda local, también llamados de mejora, se basan en explorar el entorno o vecindad de una solución. Utilizan una operación básica llamada movimiento que, aplicada sobre los diferentes elementos de una solución, proporciona las soluciones de su entorno. Formalmente: Definición: Sea X el conjunto de soluciones del problema combinatorio. Cada solución x tiene un conjunto de soluciones asociadas N(x) X , que denominaremos entorno de x. Definición: Dada una solución x, cada solución de su entorno, x’ N(x), puede obtenerse directamente a partir de x mediante una operación llamada movimiento. Un procedimiento de búsqueda local parte de una solución inicial x 0, calcula su entorno N(x 0 ) y escoge una nueva solución x 1 en él. Dicho de otro modo, realiza el movimiento m1 que aplicado a x 0 da como resultado x 1. Este proceso puede ser aplicado reiteradamente tal y como muestra el diagrama siguiente: m
m
1
m
2
x x x 0
1
2
3
x3
Un procedimiento de búsqueda local queda determinado al especificar un entorno y el criterio de selección de una solución dentro del entorno. La definición de entorno/movimiento, depende en gran medida de la estructura del problema a resolver, así como de la función objetivo. También se pueden definir diferentes criterios para seleccionar una nueva solución del entorno. Uno de los criterios más simples consiste en tomar la solución con mejor evaluación de la función objetivo, siempre que la nueva solución sea mejor que la actual. Este criterio, conocido como Greedy (glotón o voraz), permite ir mejorando la solución actual mientras se pueda. El algoritmo se detiene cuando la solución no puede ser mejorada. A la solución encontrada se le denomina óptimo local respecto al entorno definido. El óptimo local alcanzado no puede mejorarse mediante el movimiento definido. Sin embargo, el método empleado no permite garantizar, de ningún modo, que sea el óptimo global del problema. Más aún, dada la “miopía” de la búsqueda local, es de esperar que en problemas de
cierta dificultad, en general no lo sea. La figura 13 muestra el espacio de soluciones de un problema de maximización de dos dimensiones donde la altura del gráfico (el eje ) mide el valor de la función objetivo. Se
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 41
Metaheurísticas y Redes Neuronales
considera un procedimiento de búsqueda local greedy iniciado a partir de una solución x 0 con valor 0.00001 y que realiza 8 movimientos de mejora hasta alcanzar la solución x 8 con valor 0.000015. La figura muestra cómo x8 es un óptimo local y cualquier movimiento que se le aplique proporcionará una solución con peor valor. Podemos ver cómo el óptimo global del problema, con un valor de 0.00002, no puede ser alcanzado desde x 8, a menos que permitamos realizar movimientos que empeoren el valor de las soluciones y sepamos dirigir correctamente la búsqueda ÓPTIMO GLOBAL
(ÓPTIMO LOCAL)
(VALOR INICIAL)
Figura 13. Óptimo local y global
Esta limitación de la estrategia greedy es el punto de partida de los procedimientos Metaheurísticos basados en búsqueda local: evitar el quedar atrapados en un óptimo local lejano del global. Para lo cual, como hemos visto, se hace preciso el utilizar movimientos que empeoren la función objetivo. Sin embargo esto plantea dos problemas. El primero es que al permitir movimientos de mejora y de no mejora, el procedimiento se puede ciclar, revisitando soluciones ya vistas, por lo que habría que introducir un mecanismo que lo impida. El segundo es que hay que establecer un criterio de parada ya que un procedimiento de dichas características podría iterar indefinidamente. Los procedimientos Metaheurísticos incorporan mecanismos sofisticados para solucionar eficientemente ambas cuestiones así como para tratar, en la medida de lo posible, de dirigir la búsqueda de forma inteligente. Pese a la miopía de los métodos de búsqueda local simples, suelen ser muy rápidos y proporcionan soluciones que, en promedio, están relativamente cerca del óptimo global del problema. Además, dichos métodos suelen ser el punto de partida en el diseño de algoritmos Metaheurísticos más complejos. En este apartado vamos a estudiar algunos métodos heurísticos de búsqueda local para el Problema del Agente Viajero.
4.1
Procedimientos de 2 intercambio
Este procedimiento está basado en la siguiente observación para grafos euclídeos. Si un ciclo Hamiltoniano se cruza a si mismo, puede ser fácilmente acortado, basta con eliminar las dos aristas que se cruzan y reconectar los dos caminos resultantes mediante aristas que no se corten. El ciclo final es más corto que el inicial.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 42
Metaheurísticas y Redes Neuronales
Un movimiento 2-opt consiste en eliminar dos aristas y reconectar los dos caminos resultantes de una manera diferente para obtener un nuevo ciclo. Las figuras 14 y 15 ilustran este movimiento en el que las aristas (i,j) y (l,k) son reemplazadas por (l,j) y (i,k). Notar que sólo hay una manera de reconectar los dos caminos formando un único tour.
l
l
i
j
i
j
k
Figura 14. Solución original
k
Figura 15. Solución mejorada
El siguiente código recoge el algoritmo heurístico de mejora 2-óptimo. Consiste en examinar todos los vértices, realizando, en cada paso, el mejor movimiento 2-opt asociado a cada vértice. Algoritmo 2-óptimo Inicialización Considerar un ciclo Hamiltoniano inicial move = 1 Mientras (move = 1) move=0. Etiquetar todos los vértices como no explorados. Mientras (Queden vértices por explorar) Seleccionar un vértice i no explorado. Examinar todos los movimientos 2-opt que incluyan la arista de i a su sucesor en el ciclo. Si alguno de los movimientos examinados reduce la longitud del ciclo, realizar el mejor de todos y hacer move = 1. En otro caso etiquetar i como explorado.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 43
Metaheurísticas y Redes Neuronales
La variable move vale 0 si no se ha realizado ningún movimiento al examinar todos los vértices, y 1 en otro caso. El algoritmo finaliza cuando move=0, con lo que queda garantizado que no existe ningún movimiento 2-opt que pueda mejorar la solución. El orden en el que el algoritmo examina los nodos incide de manera notable en su funcionamiento. En una implementación sencilla podemos considerar el orden natural 1,2,.., . Sin embargo, es fácil comprobar que cuando se realiza un movimiento hay muchas posibilidades de encontrar movimientos de mejora asociados a los vértices que han intervenido en el movimiento recién realizado. Por ello, una implementación más eficiente consiste en considerar una lista de vértices candidatos a examinar. El orden inicial es el de los vértices en el ciclo comenzando por uno arbitrario y en cada iteración se examina el primero de la lista. Cada vez que se examina un vértice , éste se coloca al final de la lista y, los vértices involucrados en el movimiento (vértices , y de la figura 15) se insertan en primer lugar.
Dado que el proceso de examinar todos los movimientos 2-opt asociados a cada vértice es muy costoso computacionalmente, se pueden introducir las siguientes mejoras para acelerar el algoritmo:
Exigir que al menos una de las dos aristas añadidas en cada movimiento, para formar la nueva solución, pertenezca al subgrafo candidato. Observando el funcionamiento del algoritmo se puede ver que en las primeras iteraciones la función objetivo decrece substancialmente, mientras que en las últimas apenas se modifica. De hecho la última únicamente verifica que es un óptimo local al no realizar ningún movimiento. Por ello, si interrumpimos el algoritmo antes de su finalización, ahorraremos bastante tiempo y no perderemos mucha calidad. Es evidente que ambas mejoras reducen el tiempo de computación a expensas de perder la garantía de que la solución final es un óptimo local. Así pues, dependiendo del tamaño del ejemplo a resolver, así como de lo crítico que sea el tiempo de ejecución, se deben implementar o no. El comprobar si existe, o no, un movimiento 2-opt de mejora utiliza un tiempo de orden O(n 2), ya que hay que examinar todos los pares de aristas en el ciclo. Podemos encontrar clases de problemas para los que el tiempo de ejecución del algoritmo no está acotado polinómicamente. Respecto al estudio empírico sobre los ejemplos de la TSPLIB considerados, partiendo de la solución del algoritmo del Vecino más cercano, el promedio de desviación del óptimo es del 8.3%.
4.2
Procedimientos de k - intercambio
Para introducir mayor flexibilidad al modificar un ciclo Hamiltoniano, podemos considerar el dividirlo en k partes, en lugar de dos, y combinar los caminos resultantes de la mejor manera posible. Llamamos movimiento k-opt a tal modificación. Es evidente que al aumentar k aumentará el tamaño del entorno y el número de posibilidades a examinar en el movimiento, tanto por las posibles combinaciones para eliminar las aristas del
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 44
Metaheurísticas y Redes Neuronales
ciclo, como por la reconstrucción posterior. El número de combinaciones para eliminar k aristas en un ciclo viene dado por el número n k
Examinar todos los movimientos k-opt de una solución lleva un tiempo del orden de O(n k) por lo que, para valores altos de k, sólo es aplicable a ejemplos de tamaño pequeño. En este apartado vamos a estudiar el caso de k=3 y además impondremos ciertas restricciones para reducir el entorno y poder realizar los cálculos en un tiempo razonable. En un movimiento 3-opt, una vez eliminadas las tres aristas hay ocho maneras de conectar los tres caminos resultantes para formar un ciclo. Las figuras siguientes ilustran algunos de los ocho casos. La figura 16 muestra el ciclo inicial en el que se encuentran las aristas (a, b), (c, d) y (e, f) por las que se dividirá éste. La figura 17 utiliza la propia arista (e,f) para reconstruir el ciclo, por lo que, este caso equivale a realizar un movimiento 2-opt sobre las aristas (a,b) y (c,d). Análogamente podemos considerar los otros dos casos en los que se mantiene una de las tres aristas en el ciclo y se realiza un movimiento 2-opt sobre las restantes. Las figuras 18 y 19 muestran un movimiento 3- opt “puro” en el que desaparecen del ciclo las tres aristas seleccionadas.
e
e
a
a f
f
b
b
c
c d
d
Figura 16. Ciclo inicial
Figura 17. Movimiento 2-opt
e
e
a
a f
b
f b
c
c d
Figura 18. Movimiento 3-opt
d
Figura 19. Movimiento 3-opt
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 45
Metaheurísticas y Redes Neuronales
A diferencia de los movimientos 2-opt, el reconstruir el ciclo una vez eliminadas las tres aristas es muy costoso. Notar que la dirección en el ciclo puede cambiar en todos los caminos menos en el más largo por lo que hay que realizar varias actualizaciones. Además, el mero hecho de examinar todas las posibilidades representa un esfuerzo computacional enorme (más de 1 hora en los problemas considerados). Por ello, se consideran únicamente algunos de los movimientos 3-opt. En concreto se define para cada vértice i un conjunto de vértices N(i) de modo que al examinar los movimientos 3-opt asociados a una arista (i,j), únicamente se consideran aquellos en los que las otras dos aristas tengan al menos uno de los vértices en N(i). Una posibilidad para definir N(i) consiste en considerar los vértices adyacentes a i en el subgrafo candidato. Algoritmo 3-óptimo restringido Inicialización Considerar un ciclo Hamiltoniano inicial Para cada vértice i definir un conjunto de vértices N(i) move = 1 Mientras (move = 1) move=0 Etiquetar todos los vértices como no explorados. Mientras (Queden vértices por explorar) Seleccionar un vértice i no explorado. Examinar todos los movimientos 3-opt que eliminen 3 aristas teniendo cada una, al menos un vértice en N(i). Si alguno de los movimientos examinados reduce la longitud del ciclo, realizar el mejor de todos y hacer move = 1. En otro caso etiquetar i como explorado. El promedio de las desviaciones al óptimo sobre el conjunto test considerado (TSPLIB) es de 3.8% con esta versión restringida, partiendo de la solución del Vecino más cercano, y de 3.9% partiendo de una solución al azar.
4.3
Algoritmo de Lin y Kernighan
Como vimos en la introducción a los métodos de mejora (figura 13), el problema de los algoritmos de búsqueda local es que suelen quedarse atrapados en un óptimo local. Vimos que para alcanzar una solución mejor a partir de un óptimo local habría que comenzar por realizar movimientos que empeoren el valor de la solución, lo que conduciría a un esquema de
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 46
Metaheurísticas y Redes Neuronales
búsqueda mucho más complejo, al utilizar el algoritmo tanto movimientos de mejora como de no mejora. El algoritmo de Lin y Kernighan parte de este hecho y propone un movimiento compuesto, en donde cada una de las partes consta de un movimiento que no mejora necesariamente pero el movimiento compuesto sí es de mejora. De esta forma es como si se realizaran varios movimientos simples consecutivos en donde algunos empeoran y otros mejoran el valor de la solución, pero no se pierde el control sobre el proceso de búsqueda ya que el movimiento completo sí que mejora. Además, combina diferentes movimientos simples, lo cual es una estrategia que ha producido muy buenos resultados en los algoritmos de búsqueda local. En concreto la estrategia denominada “cadenas de eyección” se basa en encadenar movimientos
y ha dado muy buenos resultados en el contexto de la Búsqueda Tabú. Se pueden considerar muchas variantes para este algoritmo. En este apartado consideraremos una versión sencilla basada en realizar dos movimientos 2-opt seguidos de un movimiento de inserción. Ilustraremos el procedimiento mediante el ejemplo desarrollado en las figuras siguientes sobre un grafo de 12 vértices. Consideramos el ciclo Hamiltoniano inicial dado por el orden natural de los vértices y lo representamos tal y como aparece en la figura 20. 1
2
3
4
5
6
7
8
9
10
11
12
Figura 20 Paso 1: Realiza un movimiento 2-opt reemplazando las aristas (12,1) y (5,6) por (12,5) y (1,6). El resultado se muestra en la figura 21.
1
2
3
4
5
6
7
8
9
10
11
12
Figura 21
Paso 2: Realiza un movimiento 2-opt reemplazando las aristas (6,1) y (3,4) por (6,3) y (1,4). Ver figura 22.
1
2
3
4
5
6
7
8
9
10
11
12
Figura 22
Paso 3: Realiza un movimiento de inserción, insertando el vértice 9 entre el 1 y el 4 (figura 23).
1
2
3
4
5
6
7
8
9
10
11
12
Figura 23
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 47
Metaheurísticas y Redes Neuronales
El algoritmo funciona de igual modo que el 2-óptimo o el 3-óptimo: parte de un ciclo Hamiltoniano inicial y realiza movimientos de mejora hasta alcanzar un óptimo local. Algoritmo de Lin y Kernighan Inicialización Considerar un ciclo Hamiltoniano inicial move = 1 Mientras (move = 1) move=0 Etiquetar todos los vértices como no explorados. Mientras( Queden vértices por explorar) Seleccionar un vértice i no explorado. Examinar todos los movimientos (2-opt, 2-opt, inserción) que incluyan la arista de i a su sucesor en el ciclo. Si alguno de los movimientos examinados reduce la longitud del ciclo, realizar el mejor de todos y hacer move = 1. En otro caso etiquetar i como explorado. Dado el gran número de combinaciones posibles para escoger los movimientos, es evidente que una implementación eficiente del algoritmo tendrá que restringir el conjunto de movimientos a examinar en cada paso. De entre las numerosas variantes estudiadas para reducir los tiempos de computación del algoritmo y aumentar la eficiencia del proceso, destacamos las dos siguientes:
Utilizar el subgrafo candidato en el que únicamente figuran las aristas relativas a los 6 vecinos más cercanos para cada vértice. Se admiten movimientos compuestos de hasta 15 movimientos simples todos del tipo 2-opt o inserción. Para el primer movimiento simple únicamente se examinan 3 candidatos. El subgrafo candidato está formado por las aristas relativas a los 8 vecinos más cercanos. Se admiten hasta 15 movimientos simples del tipo 2-opt o inserción por cada movimiento completo. En los 3 primeros movimientos simples únicamente se examinan 2 aristas. Respecto al estudio computacional sobre los ejemplos de la TSPLIB considerados, la desviación del óptimo partiendo de la solución del heurístico del Vecino más cercano es de 1.9% para la primera variante y de 1.5% para la segunda. La siguiente tabla recoge el promedio de las desviaciones del óptimo y tiempos de ejecución de los 4 algoritmos de mejora considerados sobre los 30 ejemplos de la TSPLIB. Todos ellos toman como solución inicial la obtenida con el método del Veci no más cercano.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 48
Metaheurísticas y Redes Neuronales
Heurístico 2-óptimo 3-óptimo Lin y Kernighan 1 Lin y Kernighan 2
Desviación del Óptimo 8.3 % 3.8 % 1.9 % 1.5 %
T. Ejecución (pr2392) 0.25 85.1 27.7 74.3
Respecto a los tiempos de ejecución, podemos ver cómo el pasar de una exploración 2-opt a 3opt aumenta considerablemente el tiempo, incluso en la versión restringida planteada. También es de señalar cómo aumenta el tiempo, en casi un factor de 3, de una versión a otra del algoritmo de Lin y Kernighan, mientras que el porcentaje de desviación respecto del óptimo únicamente gana un 0.4 %. A la vista de los resultados, parece más interesante utilizar movimientos compuestos, que permiten controlar movimientos simples de no mejora, que utilizar movimientos k-óptimos con valores altos de k que, por su complicación, consumen mucho tiempo y, sin embargo, no llegan a tan buenos resultados.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 49
Metaheurísticas y Redes Neuronales
5.
Métodos Combinados
En los apartados anteriores hemos visto los métodos constructivos que obtienen una solución del problema y los métodos de mejora que, a partir de una solución inicial, tratan de obtener nuevas soluciones con mejor valor. Es evidente que ambos métodos pueden combinarse, tomando los segundos como solución inicial la obtenida con los primeros. En este apartado estudiaremos algunas variantes y mejoras sobre tal esquema. Como hemos visto, una de las limitaciones más importantes de los métodos heurísticos es la denominada miopía provocada por seleccionar, en cada paso, la mejor opción. Resulta muy ilustrativo que en los métodos de inserción, se obtengan mejores resultados al elegir al azar el vértice a insertar, que al tomar el elemento más cercano (11.1% frente a 20% de promedio de desviación del óptimo). Sin embargo, es evidente que el tomar una opción al azar como norma puede conducirnos a cualquier resultado, por lo que parece más adecuado recurrir a algún procedimiento sistemático que compendie la evaluación con el azar. Veamos dos de los más utilizados.
5.1
Procedimientos Aleatorizados
Una modificación en el algoritmo de construcción consiste en sustituir una elección greedy por una elección al azar de entre un conjunto de buenos candidatos. Así, en cada paso del procedimiento, se evalúan todos los elementos que pueden ser añadidos y se selecciona un subconjunto con los mejores. La elección se realiza al azar sobre ese subconjunto de buenos candidatos. Existen varias maneras de establecer el subconjunto de mejores candidatos. En un problema de maximización, en donde cuanto mayor es la evaluación de una opción más “atractiva”
resulta, podemos destacar:
Establecer un número fijo k para el subconjunto de mejores candidatos e incluir los k mejores. Establecer un valor umbral e incluir en el conjunto todos los elementos cuya evaluación esté por encima de dicho valor. Incluir siempre el mejor de todos. Establecer un porcentaje respecto del mejor, e incluir en el subconjunto todos aquellos elementos cuya evaluación difiere, de la del mejor en porcentaje, en una cantidad menor o igual que la establecida. En todos los casos la elección final se realiza al azar de entre los preseleccionados. Una estrategia alternativa a la anterior consiste en considerar las evaluaciones como pesos y utilizar un método probabilístico para seleccionar una opción. Así, si v1, v2,…vk son los posibles elementos a añadir en un paso del algoritmo, se calculan sus evaluaciones e 1, e 2,…, ek, y se les asigna un intervalo del siguiente modo: Elemento v1 v2
Evaluación e1 e2
Intervalo [0, e1[ [e1, e1 +e2[ Fernando Sandoya, Ph.D.
ESPOL, 2015/ 50
Metaheurísticas y Redes Neuronales
…
vk
…
…
ek
k 1 k ei , ei i 1 i 1
k
Se genera un número a al azar entre 0 y
e
i
, y se selecciona el elemento correspondiente al
i 1
intervalo que contiene a a. Al algoritmo constructivo modificado, tanto con la opción primera como con la segunda, lo llamaremos algoritmo constructivo aleatorizado. Este algoritmo puede que produzca una solución de peor calidad que la del algoritmo original. Sin embargo, dado que el proceso no es completamente determinista, cada vez que lo realicemos sobre un mismo ejemplo obtendremos resultados diferentes. Esto permite definir un proceso iterativo consistente en ejecutar un número prefijado de veces ( MAX_ITER) el algoritmo y quedarnos con la mejor de las soluciones obtenidas. Obviamente, cada una de dichas soluciones puede mejorarse con un algoritmo de búsqueda local. El siguiente procedimiento incorpora el algoritmo de mejora a dicho esquema. Algoritmo combinado aleatorizado Inicialización Obtener una solución con el algoritmo constructivo aleatorizado. Sea c* el costo de dicha solución. Hacer i =0 Mientras ( i < MAX_ITER) Obtener una solución x(i) con el algoritmo constructivo aleatorizado. Aplicar el algoritmo de búsqueda local a x(i). Sea x *(i) la solución obtenida y S *(i) su valor. Si ( S*(i) mejora a c*) Hacer c* = S *(i) y guardar la solución actual i = i +1 En cada iteración el algoritmo construye una solución (fase 1) y después trata de mejorarla (fase 2). Así, en la iteración i , el algoritmo construye la solución x(i) con valor S(i) y posteriormente la mejora obteniendo x*(i) con valor S*(i). Notar que x*(i) puede ser igual a x(i) si el algoritmo de la segunda fase no encuentra ningún movimiento que mejore la solución. Después de un determinado número de iteraciones es posible estimar el porcentaje de mejora obtenido por el algoritmo de la fase 2 y utilizar esta información para aumentar la eficiencia del procedimiento. En concreto, al construir una solución se examina su valor y se puede considerar que la fase 2 la mejoraría en un porcentaje similar al observado en promedio. Si el valor resultante queda alejado del valor de la mejor solución encontrada hasta el momento, podemos descartar la solución actual y no realizar la fase 2 del algoritmo, con el consiguiente ahorro computacional.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 51
Metaheurísticas Metaheurísticas y Redes Neuronales
Dadas las numerosas variantes posibles sobre el esquema propuesto, no las incluiremos en la comparativa realizada sobre los 30 ejemplos ejemplos de la TSPLIB. Únicamente citar que en general general los resultados son de mejor calidad que los obtenidos por el heurístico de Lin y Kernighan (alrededor de un 0.5 %) aunque a expensas de emplear tiempos de computación bastante mayores (del orden de algunos minutos). Dado el interés por resolver problemas enteros en general, y en particular el TSP, se han propuesto numerosas mejoras y nuevas estrategias sobre el esquema anterior. Una de las más utilizadas es la denominada técnica de Multi-Arranque que abordamos en la próxima sección.
5.2
Métodos Multi - Arranque
Los métodos Multi-Start (también llamados Re-Start) generalizan generalizan el esquema anterior. Tienen dos fases: la primera en la que se genera una solución y la segunda en la que la solución es típicamente, pero no necesariamente, mejorada. Cada iteración global produce una solución, usualmente un óptimo local, y la mejor de todas es la salida del algoritmo. Algoritmo Multi-Arranque Mientras (Condición de parada) Fase de Generación Construir una solución. Fase de Búsqueda Aplicar un método método de búsqueda para mejorar la solución construida Actualización Si la solución obtenida mejora a la mejor almacenada, actualizarla.
Dada su sencillez de aplicación, estos métodos han sido muy utilizados para resolver gran cantidad de problemas. En el contexto de la programación no lineal sin restricciones, podemos podemos encontrar numerosos trabajos tanto teóricos como aplicados. Rinnoy Kan y Timmer (1989) estudian la generación de soluciones aleatorias (métodos Monte Carlo) y condiciones de convergencia. Las primeras primeras aplicaciones en el ámbito de la optimización combinatoria consistían en métodos sencillos de construcción, completa o parcialmente aleatorios, y su posterior mejora con un método de búsqueda búsqueda local. Sin embargo el mismo esquema permite permite sofisticar el procedimiento basándolo en unas construcciones y/o mejoras más complejas. Numerosas referencias y aplicaciones se pueden encontrar en Martí (2000). Uno de los artículos que contiene las ideas en que se basa el método Tabú Search (Glover, 1977) también incluye aplicaciones de estas ideas para los métodos de multi-start. Básicamente se trata de almacenar la información relativa a soluciones ya generadas y utilizarla para la construcción de nuevas soluciones. soluciones. Las estructuras de memoria reciente y frecuente se introducen en en este contexto. Diferentes aplicaciones se pueden encontrar en Rochat y Taillard (1995) y Lokketangen y Glover (1996).
Fernando Sandoya, Ph.D.
Metaheurísticas Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 52
Utilizando como procedimiento de mejora un algoritmo genético, Ulder y otros (1990) proponen un método para para obtener buenas soluciones al problema del del agente viajero. Los autores muestran cómo el uso de las técnicas de re-starting aumenta la eficiencia del algoritmo comparándolo con otras versiones v ersiones de heurísticos genéticos sin re-starting. Un problema abierto actualmente para diseñar un buen procedimiento de búsqueda basada en multi- arranque es si es preferible implementar un procedimiento de mejora sencillo que permita realizar un gran número de iteraciones globales o, alternativamente, aplicar una rutina más compleja compleja que que mejore mejore significativamente unas pocas soluciones soluciones generadas. generadas. Un procedimiento sencillo depende fuertemente de la solución inicial pero un método más elaborado consume mucho más tiempo de computación y, por tanto, puede ser aplicado pocas veces, reduciendo el muestreo del espacio de soluciones. Una de las variantes más populares de estos métodos se denomina GRASP (Feo y Resende, 1995) y está obteniendo resultados excelentes en la resolución de numerosos problemas combinatorios. La próxima sección describe describe en detalle estos métodos.
Fernando Sandoya, Ph.D.
Metaheurísticas Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 53
Método GRASP (Greedy Randomized Adaptive Search Procedures) 6.
Los métodos GRASP fueron desarrollados al final de la década de los 80 con el objetivo inicial de resolver problemas de cubrimientos cubrimientos de conjuntos (Feo y Resende, Resende, 1989). El término GRASP fue introducido por Feo y Resende (1995) como una nueva técnica metaheurística de propósito general. GRASP es un procedimiento de multi-arranque en donde cada paso consiste en una fase de construcción y una de mejora. En la fase de construcción se aplica un procedimiento heurístico constructivo para obtener una buena buena solución inicial. Esta solución se mejora en la segunda fase mediante mediante un algoritmo de búsqueda local. La mejor de todas las soluciones examinadas se guarda como resultado final. La palabra GRASP proviene de las siglas de Greedy Randomized Adaptive Search Procedures que en castellano sería algo así como: Procedimientos de Búsqueda basados en funciones “Greedy” Aleatorizadas Adaptativas (que se adaptan).
Veamos los elementos de este
procedimiento. En la fase de construcción se construcción se construye iterativamente una solución posible, considerando un elemento en cada paso. En cada iteración la elección del próximo elemento para ser ser añadido a la solución parcial viene determinada por una función greedy. greedy. Esta función mide el beneficio de añadir cada uno de los elementos según la función objetivo y elegir elegir la mejor. Notar que esta medida es miope miope en el sentido que no tiene en cuenta qué ocurrirá en iteraciones sucesivas al realizar una elección, sino únicamente en esta iteración. Se dice que el heurístico greedy se adapta adapta porque en cada iteración se actualizan los beneficios obtenidos al añadir el elemento seleccionado a la solución parcial. Es decir, la evaluación que se tenga de añadir un determinado elemento a la solución en la iteración j, no coincidirá necesariamente con la que se tenga en la iteración j+1. El heurístico es aleatorizado porque aleatorizado porque no selecciona el mejor candidato según la función greedy adaptada sino que, con el objeto de diversificar y no repetir soluciones en dos construcciones diferentes, se construye una lista con los mejores candidatos de entre los que se toma uno al azar. Al igual que ocurre en muchos métodos, las soluciones generadas por la fase de construcción de GRASP no suelen ser óptimos locales. Dado que la fase inicial no garantiza la optimalidad local respecto a la estructura de entorno en la que se esté trabajando (notar que hay selecciones aleatorias), se aplica un procedimiento de búsqueda local como Postprocesamiento para mejorar la solución obtenida En la fase de mejora se mejora se suele emplear un procedimiento de intercambio simple con el objeto de no emplear mucho tiempo en esta mejora. Notar que GRASP se basa en realizar múltiples iteraciones y quedarse con la mejor, por lo que no es especialmente beneficioso para el método el detenerse demasiado en mejorar una solución dada.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 54
Metaheurísticas y Redes Neuronales
El siguiente esquema muestra el funcionamiento global del algoritmo: Algoritmo GRASP Mientras (Condición de parada) Fase Constructiva Seleccionar una lista de elementos candidatos. Considerar una Lista Restringida de los mejores Candidatos. Seleccionar un elemento aleatoriamente de la Lista Restringida. Fase de Mejora Realizar un proceso de búsqueda local a partir de la solución construida hasta que no se pueda mejorar más. Actualización Si la solución obtenida mejora a la mejor almacenada, actualizarla.
El realizar muchas iteraciones GRASP es una forma de realizar un muestreo del espacio de soluciones. Basándonos en las observaciones empíricas, se ve que la distribución de la muestra generalmente tiene un valor en promedio que es inferior al obtenido por un procedimiento determinista, sin embargo, la mejor de las soluciones encontradas generalmente supera a la del procedimiento determinista con una alta probabilidad. Las implementaciones GRASP generalmente son robustas en el sentido de que es difícil el encontrar ejemplos patológicos en donde el método funcione arbitrariamente mal. Algunas de las sugerencias de los autores para mejorar el procedimiento son:
Se puede incluir una fase previa a la de construcción: una fase determinista con el objetivo de ahorrar esfuerzo a la fase siguiente. Si se conoce que ciertas subestructuras forman parte de una solución óptima, éstas pueden ser el punto de partida de la fase constructiva. Tal y como señalan Feo y Resende una de las características más relevantes de GRASP es su sencillez y facilidad de implementación. Basta con fijar el tamaño de la lista restringida de candidatos y el número de iteraciones para determinar completamente el procedimiento. De esta forma se pueden concentrar los esfuerzos en diseñar estructuras de datos para optimizar la eficiencia del código y proporcionar una gran rapidez al algoritmo, dado que éste es uno de los objetivos principales del método. El enorme éxito de este método se puede constatar en la gran cantidad de aplicaciones que han aparecido en los últimos años. Festa y Resende (2001) comentan cerca de 200 trabajos en los que se aplica o desarrolla GRASP. Por último, hay que resaltar que los algoritmos basados en GRASP pueden ser mejorados grandemente si se los combina con procedimientos provenientes de otras Metaheurísticas, como Rencadenamiento de trayectorias (Path Relinking) o Búsqueda en vecindades variables (Variable neighborhood search)
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 55
Metaheurísticas y Redes Neuronales
6.1
Rencadenamiento de Trayectorias
El término Rencadenamiento de Trayectorias se refiere a una técnica de intensificación de la búsqueda en regiones atractivas del espacio de soluciones, que fue originalmente propuesta por Glover en el contexto de la metaheurística de búsqueda TABU. La técnica consiste en utilizar una población de buenas soluciones que han sido creadas previamente con algún método, por ejemplo con GRASP, para luego intentar crear mejores soluciones. El objetivo del Rencadenamiento de trayectorias no es construir una solución a partir de otras, sino más bien crear un conjunto de soluciones, vecinas unas de otras, que conecten dos soluciones de buena calidad, creando así un camino o una trayectoria entre estas dos soluciones. Usualmente cada una de las soluciones del camino formado se mejora con un procedimiento de búsqueda local.
Más específicamente, dada una solución denominada solución inicial, , y una solución denominada solución guía, , se denomina un camino de a a la sucesión de soluciones: , donde es obtenida al introducir en un atributo que reduce la distancia de hasta la solución guía . Es decir, en el camino originado, cada nuevo elemento que se genera en la sucesión se parece más a la solución guía.
0, 1, 2, … , 1, 1
Algunas estrategias que se pueden considerar para el desarrollo de la técnica son:
Forward: La peor entre las soluciones es la solución guía;
y
Backward: La mejor entre las soluciones otra es la solución guía;
se pone como el origen y la otra
y
se pone como el origen y la
Backward y Forward: Se exploran las dos trayectorias diferentes, de de
a
, es decir intercambiando sus roles;
a
y
En algunas implementaciones se ha considerado explorar el entorno de las soluciones intermedias para dar más posibilidad al descubrimiento de buenas soluciones. Actualmente se propone el uso de Rencadenamiento de trayectorias en el contexto de GRASP. Así, una vez generada una colección de soluciones mediante las fases de construcción y mejora de GRASP, se seleccionan parejas (o subconjuntos) de soluciones para unirlas mediante este procedimiento. A partir de una solución se realiza una búsqueda local para llegar a la otra (o a una combinación de las otras en el caso de subconjuntos). La hibridación de GRASP y Rencadenamiento de trayectorias se muestra muy prometedora, por lo que ha despertado gran interés entre la comunidad de investigación de operaciones y de ciencias de la computación, una muestra de ello es que algunos autores la han usado para tratar con éxito los problemas combinatorios.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 56
Metaheurísticas y Redes Neuronales
6.2
Búsqueda en Vecindades Variables
La Búsqueda en Vecindades Variables (Variable Neighborhood Search, VNS por sus siglas) es una metaheurística de desarrollo reciente, propuesta por Hansen y Madlenovic para resolver problemas de optimización combinatoria, cuya idea básica es cambiar sistemáticamente la vecindad, por medio de un procedimiento aleatorio o determinístico, dentro de un procedimiento de búsqueda local. Este cambio de vecindad puede favorecer enormemente la eficiencia de los algoritmos pues diversifica la búsqueda y así la búsqueda no queda viciada por algún sesgo en el tipo de vecindad seleccionada, por lo que VNS constituye una herramienta simple y poderosa para mejorar la eficiencia de los algoritmos de búsqueda. La idea original fue considerar distintas estructuras de entornos y cambiarlas sistemáticamente para escapar de los mínimos locales. El VNS básico obtiene una solución del entorno de la solución actual, ejecuta una búsqueda monótona local desde ella hasta alcanzar un óptimo local, que remplaza a la solución actual si ha habido una mejora y modifica la estructura de entorno en caso contrario. Una variante de esta estrategia básica es la búsqueda descendente por entornos variables (VND), que aplica una búsqueda monótona por entornos cambiando de forma sistemática la estructura de entornos cada vez que se alcanza un mínimo local. La ventaja de utilizar varias estructuras de entornos, como se plantea en VNS, radica en el hecho de que un óptimo local para un determinado entorno, no tiene por qué serlo para otro, por lo que la búsqueda podrá continuar hasta obtener una solución que sea un buen óptimo local para el problema. VNS ha sido hibridizado con éxito con otras metaheurísticas como Búsqueda Tabú o Scatter Search, y en particular con GRASP en su fase de búsqueda local. La filosofía del procedimiento VNS es la siguiente: se empieza representando por al conjunto de estructuras de vecindades preseleccionadas, de tal manera que representa el conjunto de soluciones, vecinas de , en la vecindad de . Estas vecindades pueden ser inducidas a partir de una o más métricas introducidas en el espacio de soluciones considerado. Entonces la VNS se basa en tres principios generales:
, 1, 2, …, ∗ 1. Si
é
es un óptimo local con respecto a una estructura de vecindad, no tiene
necesariamente que serlo para otra estructura de vecindad diferente.
2. Un óptimo global es un óptimo local respecto a todas las estructuras de vecindad. 3. En muchos problemas combinatorios, los óptimos locales respecto a una o varias estructuras de vecindad están relativamente cerca unos de otros. Con VNS se deben tener en cuenta estos tres principios a la hora de diseñar un algoritmo, pudiendo efectuar los cambios de vecindad de manera determinista o estocástica.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 57
Metaheurísticas y Redes Neuronales
6.3
Resolución de un caso: implementación GRASP en FS-scheduling:
Se considera el problema de permutación de Flow Shop Scheduling con el objetivo de minimizar el Makespan. Se enfoca la solución a través de un algoritmo basado en GRASP.
1. FORMULACIÓN DEL PROBLEMA DE FLOW SHOP SCHEDULING .- El problema de Flow
Shop scheduling consiste en secuenciar “ ” trabajos con los tiempos de procesamiento dados en “ ” máquinas. La secuencia de procesamiento (la ruta de producción) de un
trabajo en todas las máquinas es idéntica y unidireccional. FUNCIÓN OBJETIVO El objetivo de este problema es minimizar el Makespan (el tiempo total de ejecución de todos los trabajos). Minimizar { Donde
}.
es el tiempo de procesamiento del trabajo i en la máquina j.
n: el número total de trabajos a ser secuenciados . m: el total de máquinas en el Flow Shop.
[,] [,] Σ
: El tiempo de completación del trabajo en posición i en la máquina j.
:
=makespan
:Es el conjunto ordenado de trabajos ya secuenciados, secuencia parcial.
SUPOSICIONES.- En el Flow Shop hacemos las siguientes suposiciones: (1) Un conjunto de “n” trabajos con múltiples operaciones están disponibles para procesar en el tiempo. (2) Cada trabajo requiere “m” operaciones y cada operación requiere diferentes máquinas. (3) Tiempos de Setup para los trabajos son independientes de la secuencia de trabajos y pueden ser concluidos en el tiempo de procesamiento. (4) Descripción de los trabajos son conocidos de antemano. (5) Una vez que el procesamiento inicia en un trabajo, se procede a completarlo sin interrupción (sin derechos preferentes). DESCRIPCIÓN del GRASP El algoritmo Greddy resuelve problemas haciendo la elección que parece la mejor en ese momento. Un algoritmo Greddy exhibe dos propiedades denominadas: PROPIEDAD de elección voraz y estructura suboptimal. Sea: Z: FUNCIÓN OBJETIVO
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 58
Metaheurísticas y Redes Neuronales
[] ⫪
: PARÁMETRO VORAZ
RCL: Lista de candidatos restringida. : Rango de elementos. : Función de sesgo.
: Probabilidad de seleccionar un trabajo.
Primero inicializamos el tiempo de terminación de un trabajo en una máquina igual a cero. Esto indica el tiempo de disponibilidad de un trabajo en el Flow Shop. La función objetivo a considerar es la minimización del Makespan. Determinamos un parámetro voraz ” ” determinado experimentalmente y su valor varía de 0 a 1. En este paper se toma . De todos los candidatos, los mejores candidatos son puestos en la lista de candidatos restringida (RCL) de acuerdo al rango y ancho:
0,5
RANGO= {máximo tiempo de completar de un trabajo – mínimo tiempo de completar de un trabajo) ANCHO= Rango x
RCL= {mínimo, mínimo+ ancho} ESTRUCTURA GENERAL DEL GRASP. En esta fase una solución factible es construida iterativamente un ELEMENTO a la vez. En cada iteración de construcción, la elección del próximo elemento a ser añadido es determinada ordenando todos los elementos candidatos en una lista de candidatos con respecto a la función Greddy. Un parámetro Greddy es determinado experimentalmente y su rango es en [0,1]. La heurística es adaptativa por cuanto los beneficios asociados con cada elemento son actualizados en cada iteración para reflejar los cambios provocados por la selección del elemento previo. El componente probabilístico de GRASP es caracterizado por aleatorizar la elección el MEJOR candidato. La lista de los mejores candidatos se denomina LISTA de CANDIDATOS RESTRINGIDA (RCL).
El pseudocódigo describe la fase básica de construcción del algoritmo GRASP. PROCEDIMIENTO DE CONSTRUCCIÓN (g(.), 1. x=0
,
2. Inicializar la lista de candidatos C.
≠
3. Mientras c 0 hacer. 4. 5. 6.
∈ ∈ ∈ / ≤ [ ∈ =min {g(T)/
=máx { g(T)/
};
};
g(s)
7. Seleccionar aleatoriamente s
]]}
;
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 59
Metaheurísticas y Redes Neuronales
8.
Χ Χ ⋃
9. Actualizar la lista de candidatos C; 10. End Mientras 11. End Construcción
El pseudocódigo muestra que controla la cantidad de voracidad y aleatoriedad en el algoritmo. FUNCIONES DE SESGO Un GRASP estándar usa una función de sesgo aleatoria. Otras funciones de sesgo tales como sesgo lineal, sesgo logarítmico, sesgo exponencial y sesgo polinomial pueden ser usados en el algoritmo de GRASP. Sin embargo, cualquier distribución de probabilidad puede ser usada para sesgar la selección hacia ciertos candidatos en particular. En este paper hemos considerado sesgo aleatorio para la ejecución de GRASP. ESTRUCTURA DEL ALGORITMO GRASP
Σ
Paso 1: Consideramos un conjunto vacío para inicialización .
Σ
Paso 2: Averiguar las operaciones de .
Paso 3: Calcule la función objetivo (Makespan) de las operaciones.. Paso 4: Averiguar el valor mínimo y máximo de la función objetivo. Paso 5: Averiguar el rango, es decir,(MAX-MIN)
Paso 6: Elegir el parámetro (valor glotón) (0.2, 0.4, 0.5,...)
Paso 7: Calcular el ancho (Rango x ) Paso 8: Elegir candidatos para formar RCL, si Z (
Σ ≤ [min(ZΣ)ANCHO] )
Paso 9: Defina rango”r” para cada operación en RCL.
Paso 10: Calcular RANGO para función de sesgo aleatorio. Paso 11: Muestrear y actualizar la solución. FASE DE BÚSQUEDA LOCAL Las soluciones generadas en la fase de construcción GRASP no garantizan ser el óptimo global con respecto a una definición simple de vecindad. Así siempre es beneficioso para aplicar búsqueda local para mejorar cada construcción. Un algoritmo de búsqueda local trabaja en una función iterativa por reemplazar sucesivamente la solución actual por una mejor solución en la vecindad de la solución actual. El pseudocódigo siguiente describe un procedimiento de búsqueda local básico: PROCEDIMIENTO LOCAL (f(.),h(.),x)
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 60
Metaheurísticas y Redes Neuronales
1. H={ y pertenece a n(x)/f(y)0 hacer
∈
3. Seleccionar n H; 4. H={y
∈
/f(y)
5. FIN WHILE 6. FIN LOCAL
RESULTADOS NUMÉRICOS Consideremos un ejemplo con 5 máquinas y 5 trabajos, con tiempos de procesamiento en horas (incluido el tiempo de Setup) dados en la tabla 1. TABLA 1
Trabajos 1 2 3 4 5
1 2 3 4 3 3
Máquinas 2 3 4 4 6 8 2 4 5 3 1 4 4 3 8 6 5 7
5 10 7 5 4 3
TABLA: Tiempo (en horas) de ejecución de los tr abajos en cada máquina
Primero inicializamos con tiempo cero para todas las máquinas 0
0
0
0
0
Ahora tomamos el trabajo 1 y calculamos el tiempo que tomará todas las máquinas completarlo. Similarmente esto es calculado para todos los trabajos. Trabajo 1 2
6
12
20
30
Trabajo 2 3
5
9
14
21
Trabajo 3 4
7
8
12
17
Trabajo 4 3
7
10
18
22
Trabajo 5 3
9
14
21
24
MÁXIMO TIEMPO DE COMPLETACIÓN= 30
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 61
Metaheurísticas y Redes Neuronales
MÍNIMO TIEMPO DE COMPLETACIÓN=17 RANGO= MÁX.TIEMPO –MÍN.TIEMPO =30-17=13 Sea Ancho=Range x =13(0.5)=6.5 RCL= {Tiempo mínimo de completación, tiempo mín. completación+ Ancho} = {17, 23.5} Los trabajos que tienen tiempo de completación en el rango RCL son los trabajos 2, 3 y 4. ELECCIÓN 1: Podemos elegir cualquier trabajo elegible o usando la función de sesgo y probabilidad de seleccionar. ELECCIÓN 2: Sea “r” el sesgo de los trabajos elegibles asignados por el tiempo de completación. R [2]=2 R [3]=1 R [4]=3 El sesgo lineal está dado por Se acumula al fitness del trabajo 2 es 0.5, del trabajo 3 es 1 y el trabajo 4 es 0.3. Prob. Trabajo 2 =
0.5
Prob. Trabajo 3 = Prob. Trabajo 4 =
.. 0.28 . 0.55 .. 0.17
Ahora generamos un número aleatorio “ ” talque:
Si
≤ 0.28 ≤ 0.83
elegir 2
Si 0.28<
elegir el trabajo 4, sino
Elegiremos el trabajo 3. Supongamos que el trabajo 2 es escogido Trabajo 2 3 5 9
14
21
Trabajo (2 1) 5
9
15
23
33
Trabajo (2 3) 7
10
11
18
26
Trabajo (2 4) 6
10
13
22
26
24
27
Trabajo (2 5) 6 12 17 Máximo tiempo de terminación= 33 Mínimo tiempo de terminación= 26 Rango= 7 Cuando 0.5 Ancho =7(0.5)= 3.5 RCL= {26,29.5}
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 62
Metaheurísticas y Redes Neuronales
Trabajos {3,4,5} caen en ese rango Supongamos que el trabajo 3 es escogido Ahora fijamos el trabajo (23). Tratamos con otras combinaciones y seguimos el mismo procedimiento. Trabajo (2 3) 7
10
11
18
26
Trabajo (2 3 1) 9
13
19
27
37
Trabajo (2 3 4) 10
14
17
26
30
Trabajo (2 3 5) 10
16
21
28
31
Rango= 37 -30 = 7 Con = 0.5 Ancho= 7*0.5= 3.5 RCL = {30, 33.5) Los trabajos (2 3 4) y (2 3 5) caen en este rango. Supongamos que se elige el trabajo (2 3 4) Fijamos (2 3 4) y probamos sus combinaciones TRABAJO (2 3 4) 10 14 17
26
30
TRABAJO (2 3 4 1) 12 18
24
34
44
TRABAJO (2 3 4 5) 13 20
25
33
36
Rango= 44-36= 8 Ancho=8*0.5= 4 RCL= {36,40} El trabajo (2 3 4 5) cae en este rango Elegimos el trabajo (2 3 4 5) y hacemos combinaciones. TRABAJO (2 3 4 5) 13 20 25 33
36
TRABAJO (2 3 4 5 1) 15 24
51
31
41
La secuencia construida por el algoritmo de GRASP (2 3 4 5 1) con MAKESPAN 51. Luego de esta construcción viene la fase de búsqueda local, que no está explicada aquí.
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
7.
ESPOL, 2015/ 63
Búsqueda Tabú
El método tabú es considerado, en general, como la metaheurística más eficiente para resolver problemas de optimización combinatorios. Sin embargo la estructuración de un algoritmo basado en este método puede tener asociada una complejidad grande. Es decir hay que pesar la relación eficiencia complejidad. Los orígenes de la Búsqueda Tabú (Tabú Search, TS) pueden situarse en diversos trabajos publicados a finales de los 70 (Glover, 1977). Oficialmente, el nombre y la metodología fueron introducidos posteriormente por Fred Glover (1989). Numerosas aplicaciones han aparecido en la literatura, así como artículos y libros para difundir el conocimiento teórico del procedimiento (Glover and Laguna, 1997). La Búsqueda Tabú es un método metaheurístico que puede utilizarse para resolver problemas de optimización combinatoria, tales como el TSP, utilizando un procedimiento de búsqueda local o por vecindades para moverse iterativamente desde una solución x hacia una solución x en la vecindad de x , hasta satisfacer algún criterio de parada.
7.1
Descripción del método de búsqueda tabú
Para poder explorar regiones del espacio de búsqueda que serían dejadas de lado por el procedimiento de búsqueda local, la búsqueda tabú diversifica la búsqueda, modificando la estructura de vecinos para cada solución a medida que la búsqueda progresa. Las soluciones admitidas para N (x), el nuevo vecindario, son determinadas mediante el uso de estructuras de memoria. La búsqueda entonces progresa moviéndose iterativamente de una solución x hacia una solución x en N (x) TS es una técnica para resolver problemas combinatorios de gran dificultad que está basada en principios generales de Inteligencia Artificial (IA). En esencia es un metaheurístico que puede ser utilizado para guiar cualquier procedimiento de búsqueda local en la búsqueda agresiva del óptimo del problema. Por agresiva nos referimos a la estrategia de evitar que la búsqueda quede “atrapada” en un óptimo local que no sea global. A tal efecto, TS toma de la
IA el concepto de memoria y lo implementa mediante estructuras simples con el objetivo de dirigir la búsqueda teniendo en cuenta la historia de ésta. Es decir, el procedimiento trata de extraer información de lo sucedido y actuar en consecuencia. En este sentido puede decirse que hay un cierto aprendizaje y que la búsqueda es inteligente. El principio de TS podría resumirse como: “Es mejor una mala decisión basada en información que una buena decisión
al azar, ya que, en un sistema que emplea memoria, una mala elección basada en una estrategia proporcionará claves útiles para continuar la búsqueda. Una buena elección fruto del azar no proporcionará ninguna información para posteriores acciones.”
TS comienza de la misma forma que cualquier procedimiento de búsqueda local, procediendo iterativamente de una solución x a otra y en el entorno de la primera: N(x). Sin embargo, en lugar de considerar todo el entorno de una solución, TS define el entorno Fernando Sandoya, Ph.D.
ESPOL, 2015/ 64
Metaheurísticas y Redes Neuronales
reducido N*(x) como aquellas soluciones disponibles del entorno de x. Así, se considera que a partir de x , sólo las soluciones del entorno reducido son alcanzables. N
* ( x)
N (x )
Existen muchas maneras de definir el entorno reducido de una solución. La más sencilla consiste en etiquetar como tabú las soluciones previamente visitadas en un pasado cercano. Esta forma se conoce como memoria a corto plazo (short term memory) y está basada en guardar en una lista tabú T las soluciones visitadas recientemente (Recency). Así en una iteración determinada, el entorno reducido de una solución se obtendría como el entorno usual eliminando las soluciones etiquetadas como tabú. N
*(x)
N (x )
T
El objetivo principal de etiquetar las soluciones visitadas como tabú es el de evitar que la búsqueda se cicle. Por ello se considera que tras un cierto número de iteraciones la búsqueda está en una región distinta y puede liberarse del status tabú (pertenencia a T) a las soluciones antiguas. De esta forma se reduce el esfuerzo computacional de calcular el entorno reducido en cada iteración. En los orígenes de TS se sugerían listas de tamaño pequeño, actualmente se considera que las listas pueden ajustarse dinámicamente según la estrategia que se esté utilizando. Se define un nivel de aspiración como aquellas condiciones que, de satisfacerse, permitirían alcanzar una solución aunque tenga status tabú. Una implementación sencilla consiste en permitir alcanzar una solución siempre que mejore a la mejor almacenada, aunque esté etiquetada tabú. De esta forma se introduce cierta flexibilidad en la búsqueda y se mantiene su carácter agresivo. Es importante considerar que los métodos basados en búsqueda local requieren de la exploración de un gran número de soluciones en poco tiempo, por ello es crítico el reducir al mínimo el esfuerzo computacional de las operaciones que se realizan a menudo. En ese sentido, la memoria a corto plazo de TS está basada en atributos en lugar de ser explícita; esto es, en lugar de almacenar las soluciones completas (como ocurre en los procedimientos enumerativos de búsqueda exhaustiva) se almacenan únicamente algunas características de éstas. La memoria mediante atributos produce un efecto más sutil y efectivo en la búsqueda, ya que un atributo o grupo de atributos identifica a un conjunto de soluciones, del mismo modo que los hiperplanos o esquemas utilizados en los algoritmos Genéticos (ver sección 7.1). Así, un atributo que fue etiquetado como tabú por pertenecer a una solución visitada hace n iteraciones, puede impedir en la iteración actual, el alcanzar una solución por contenerlo, aunque ésta sea diferente de la que provocó el que el atributo fuese etiquetado. Esto permite, a largo plazo, el que se identifiquen y mantengan aquellos atributos que inducen una cierta estructura beneficiosa en las soluciones visitadas. Con los elementos descritos puede diseñarse un algoritmo básico de TS para un problema de optimización dado. Sin embargo, TS ofrece muchos más elementos para construir Fernando Sandoya, Ph.D.
ESPOL, 2015/ 65
Metaheurísticas y Redes Neuronales
algoritmos realmente potentes y eficaces. A menudo, dichos elementos han sido ignorados en muchas aplicaciones y actualmente la introducción de estos en la comunidad científica constituye un reto para los investigadores del área. Un algoritmo TS está basado en la interacción entre la memoria a corto plazo y la memoria a largo plazo. Ambos tipos de memoria llevan asociadas sus propias estrategias y atributos, y actúan en ámbitos diferentes. Como ya hemos mencionado la memoria a corto plazo suele almacenar atributos de soluciones recientemente visitadas, y su objetivo es explorar a fondo una región dada del espacio de soluciones. En ocasiones se utilizan estrategias de listas de candidatos para restringir el número de soluciones examinadas en una iteración dada o para mantener un carácter agresivo en la búsqueda. La memoria a largo plazo almacena las frecuencias u ocurrencias de atributos en las soluciones visitadas tratando de identificar o diferenciar regiones. La memoria a largo plazo tiene dos estrategias asociadas: Intensificar y Diversificar la búsqueda. La intensificación consiste en regresar a regiones ya exploradas para estudiarlas más a fondo. Para ello se favorece la aparición de aquellos atributos asociados a buenas soluciones encontradas. La Diversificación consiste en visitar nuevas áreas no exploradas del espacio de soluciones. Para ello se modifican las reglas de elección para incorporar a las soluciones atributos que no han sido usados frecuentemente.
Intensificación Examinar entornos de buenas soluciones. Volver a regiones atractivas para explorarlas más a fondo. Diversificación Examinar regiones no visitadas. Dirigir la búsqueda a regiones aparentemente “malas”.
La siguiente tabla muestra los elementos mencionados. Memoria Corto Plazo
Atributos Reciente
Largo Plazo
Frecuente
Estrategias Tabú - Aspiración Listas de Candidatos Intensif. - Diversif.
Ámbito Local Global
Existen otros elementos más sofisticados dentro de TS que, aunque poco probados, han dado muy buenos resultados en algunos problemas. Entre ellos se pueden destacar: Movimientos de Influencia: Son aquellos movimientos que producen un cambio importante en la estructura de las soluciones. Usualmente, en un procedimiento de búsqueda local, la búsqueda es dirigida mediante la evaluación de la función objetivo. Sin embargo, puede ser muy útil el encontrar o diseñar otros evaluadores que guíen a ésta en determinadas ocasiones. Los movimientos de influencia proporcionan una evaluación alternativa de la bondad de los movimientos al margen de la función objetivo. Su utilidad principal es la determinación de estructuras subyacentes en las soluciones. Esto permite que sean la base para procesos de Intensificación y Diversificación a largo plazo.
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 66
Oscilación Estratégica: La Oscilación Estratégica opera orientando los movimientos en relación a una cierta frontera en donde el método se detendría normalmente. Sin embargo, en vez de detenerse, las reglas para la elección de los movimientos se modifican para permitir que la región al otro lado de la frontera sea alcanzada. Posteriormente se fuerza al procedimiento a regresar a la zona inicial. El proceso de aproximarse, traspasar y volver sobre una determinada frontera crea un patrón de oscilación que da nombre a esta técnica. Una implementación sencilla consiste en considerar la barrera de la factibilidad / infactibilidad de un problema dado. Implementaciones más complejas pueden crearse identificando determinadas estructuras de soluciones que no son visitadas por el algoritmo y considerando procesos de construcción / destrucción asociados a éstas. La oscilación estratégica proporciona un medio adicional para lograr una interacción muy efectiva entre intensificación y diversificación. Elecciones Probabilísticas: Normalmente TS se basa en reglas sistemáticas en lugar de decisiones al azar. Sin embargo, en ocasiones se recomienda el aleatorizar algunos procesos para facilitar la elección de buenos candidatos o cuando no está clara la estrategia a seguir (quizá por tener criterios de selección enfrentados). La selección aleatoria puede ser uniforme o seguir una distribución de probabilidad construida empíricamente a partir de la evaluación asociada a cada movimiento. Umbrales Tabú: El procedimiento conocido como Tabú Thresholding (TT) se propone para aunar ideas que provienen de la Oscilación Estratégica y de las Estrategias de Listas de Candidatos en un marco sencillo que facilite su implementación. El uso de la memoria es implícito en el sentido que no hay una lista tabú en donde anotar el status de los movimientos, pero la estrategia de elección de los mismos previene el ciclado. TT utiliza elecciones probabilísticas y umbrales en las listas de candidatos para implementar los principios de TS. Re-encadenamiento de Trayectorias (Path Relinking) : Este método se basa en volver a unir dos buenas soluciones mediante un nuevo camino. Así, si en el proceso de búsqueda hemos encontrado dos soluciones x e y con un buen valor de la función objetivo, podemos considerar el tomar x como solución inicial e y como solución final e iniciar un nuevo camino desde x hasta y . Para seleccionar los movimientos no consideraremos la función objetivo o el criterio que hayamos estado utilizando hasta el momento, sino que iremos incorporando a x los atributos de y hasta llegar a ésta. Por eso esperamos que alguna de las soluciones intermedias que se visitan en este proceso de Entorno Constructivo sea muy buena. En algunas implementaciones se ha considerado el explorar el entorno de las soluciones intermedias para dar más posibilidad al descubrimiento de buenas soluciones. Detalles sobre el método pueden encontrarse en Glover, Laguna y Martí (2000) Laguna y Martí (1999) proponen el uso de Path Relinking (PR) en el contexto de GRASP, aunque aquí su significado es diferente ya que las soluciones no han estado unidas por ningún camino previo. Así, una vez generada una colección de soluciones mediante las fases de construcción y mejora de GRASP, se seleccionan parejas (o subconjuntos) de soluciones para unirlas mediante PR. A partir de una solución se realiza una búsqueda local para llegar a la otra (o a una combinación de las otras en el caso de subconjuntos).
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 67
Metaheurísticas y Redes Neuronales
Es importante destacar el hecho de que muchas de las aplicaciones basadas en TS no utilizan los últimos elementos descritos, por lo que son susceptibles de ser mejoradas. Al mismo tiempo, los éxitos de las numerosas implementaciones del procedimiento han promovido la investigación hacia formas de explotar con mayor intensidad sus ideas subyacentes. En este territorio podemos destacar los últimos trabajos de Modelos de entrenamiento y aprendizaje tabú, Maquinas tabú y Diseño tabú.
7.2
Resolución de un caso: implementación de Tabu Search para resolver el TSP:
7.2.1
Introducción:
El algoritmo propuesto basado en TS utiliza la memoria a corto y largo plazo y hace uso de la matriz de frecuencias que permite la exploración de nuevas regiones liberando de esta manera los movimientos señalados como tabú. La matriz de frecuencias lleva la historia de los movimientos admisibles y es la responsable de definir el criterio de búsqueda en otras regiones. Para iniciar el método se requiere que se genere una solución inicial (por ejemplo con la heurística del vecino más cercano) y a partir de esta actúa la búsqueda tabú. Cuando la función objetivo no mejora después de una cantidad determinada de iteraciones en la búsqueda tabú basada en memoria de corto plazo, es conveniente emplear diversificación a partir de la memoria de largo plazo basada en frecuencias. La estrategia de diversificación emplea memoria de largo plazo, usando un vector ordenado de forma ascendente según el número de cambios de un evento. De este vector ordenado se toman los primeros elementos (que corresponden a aquellos sucesos que menos han cambiado) donde el número de eventos y el número de iteraciones con los que se hace diversificación son parámetros adicionales de la búsqueda tabú. La programación de los eventos seleccionados es cambiada de manera forzada, para que se direccione la búsqueda a regiones no visitadas ( o poco frecuentadas ). Parámetros: LongitudTabu: número máximo de prohibiciones sobre la posición de determinado nodo. CiclosDiver: permite al algoritmo revisar el número de iteraciones en las que el óptimo local no se ha actualizado, permitiendo la diversificación para explorar nuevas regiones. 7.2.2
Algoritmo 1. Ingrese: MatrizDistancia, longitudTabu, Maxiter, ciclosdiver, l istatabu
2. Generar solución inicial (vecino más cercano) , y longitudtour
.
3. Mientras Iter < Maxiter 3.1. Actualice matriztabu.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 68
Metaheurísticas y Redes Neuronales
3.2.
= Menor distancia.
3.3. Generar las
1
permutaciones de dos nodos consecutivos.
3.4. Determinar la distancia de cada permutación. 3.5. Clasifique los movimientos en prohibidos y no prohibidos. 3.6. Determinar la menor distancia de los movimientos no prohibidos y seleccione la permutación. 3.7. Si todos los movimientos son prohibidos, aplique el criterio de aspiración. Sino pare.
<
3.8. Actualice 3.9. Si
.
, entonces actualice
3.10. Si en k iteraciones no se actualiza 3.1. 4. El óptimo encontrado es
. Regresar a 3.1.
, entonces diversifique, regrese a
El método funciona de manera iterativa. Una vez cumplido el criterio de parada, se evalúa la solución inicial y la resultante con el fin de observar la mejora, si el valor es inferior al inicial se ha encontrado un nuevo valor mínimo. 7.2.3
Resultados numéricos
Consideremos 10 nodos y la siguiente matriz de distancias:
TABLA 1: Matriz de distancias Supongamos que los parámetros son:
Solución inicial: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1}, longinicial = 89.18 Maxiter = 200 longitudTabu = 4
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 69
Metaheurísticas y Redes Neuronales
CiclosDiver = 20
Se deben construir 3 tablas: La matriz de las secuencias (tablas 2 y 3), la matriz tabú (tabla 4) y la matriz de frecuencias (tabla 5).
TABLA 2: Permutación inicial En la iteración que se muestra en la Tabla 3, se observa que la permutación factible mejor para generar el siguiente vecindario es {2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 2} con longitud 78.76. Quedando prohibido el nodo 1 en la posición 1 y el nodo 2 en la posición 2. Así las matrices de memoria (Tabú y frecuencia) quedan de la forma representada en la tabla 4 y la tabla 5, en las cuales las columnas representan nodos y las filas posiciones.
TABLA 3: Permutaciones de la iteración 1
TABLA 4: Matriz tabú Por otro lado se construye la matriz de frecuencias (Tabla 5), en la que se ha marcado que lo mejor factible es ubicar el nodo 1 en la posición 2 y el nodo 2 en la posición 1.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 70
Metaheurísticas y Redes Neuronales
TABLA 5. Matriz de frecuencias (memoria de largo plazo) Una vez almacenada esta información, se obtiene la iteración 2, como se muestra en la Tabla 6. Se observa que la mejor es la secuencia con longitud 73.41, quedando tabú la permutación con suma 89.18.
TABLA 6. Iteración 2. Continuando así llegamos a la iteración 33, cuyo resultado se muestra en la Tabla 7. Hasta ese momento, en las últimas 20 iteraciones el óptimo local no se actualiza, por lo que el algoritmo llama a un procedimiento para diversificar la búsqueda.
TABLA 7. Iteración 33.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 71
Metaheurísticas y Redes Neuronales
TABLA 8. Matriz de frecuencias. Es importante señalar que la diversificación no se hace de manera aleatoria, sino mediante el análisis de la información recopilada por la matriz de frecuencias. El criterio para ubicar el nodo en cierta posición, será la menor frecuencia registrada. Se observa en la Tabla 8 que el nodo 1 tiene la menor frecuencia (0= en las posiciones 1, 6, 7, 8, 9 y 10, así que es buen candidato para ocupar la posición 1. Análogamente, el nodo 2 es buen candidato para la posición 3, el nodo 3 es buen candidato para la posición 1, pero ésta ya está ocupada por lo que se situará en la posición 5, el nodo 4 es buen candidato para la posición 6, el nodo 5 para la posición 1, que ya está ocupada, por lo que se ubica en la posición 2, y así sucesivamente, así se genera la secuencia: {1, 5, 2, 8, 3, 4, 7, 6, 9, 10} con longitud 77.96, como se observa en la Tabla 9. El óptimo se encuentra en la iteración 144, en el tour {5, 6, 9, 4, 10, 2, 8, 3, 7, 1, 5}, con una longitud de 36.79, como se puede observar en la Tabla 10.
TABLA 9. Iteración 34 después de la diversificación
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 72
Metaheurísticas y Redes Neuronales
TABLA 10. Iteración 144 Con el fin de visualizar el papel que desempeña la diversificación, se muestra en la siguiente figura, el gráfico para los 200 tours factibles generados en cada vecindario. Es claro que en el momento de encontrar un óptimo local y ubicarse en un valle profundo la diversificación permite explorar nuevas regiones para mejorar el óptimo local.
Fernando Sandoya, Ph.D.
Metaheurísticas Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 52
Utilizando como procedimiento de mejora un algoritmo genético, Ulder y otros (1990) proponen un método para para obtener buenas soluciones al problema del del agente viajero. Los autores muestran cómo el uso de las técnicas de re-starting aumenta la eficiencia del algoritmo comparándolo con otras versiones v ersiones de heurísticos genéticos sin re-starting. Un problema abierto actualmente para diseñar un buen procedimiento de búsqueda basada en multi- arranque es si es preferible implementar un procedimiento de mejora sencillo que permita realizar un gran número de iteraciones globales o, alternativamente, aplicar una rutina más compleja compleja que que mejore mejore significativamente unas pocas soluciones soluciones generadas. generadas. Un procedimiento sencillo depende fuertemente de la solución inicial pero un método más elaborado consume mucho más tiempo de computación y, por tanto, puede ser aplicado pocas veces, reduciendo el muestreo del espacio de soluciones. Una de las variantes más populares de estos métodos se denomina GRASP (Feo y Resende, 1995) y está obteniendo resultados excelentes en la resolución de numerosos problemas combinatorios. La próxima sección describe describe en detalle estos métodos.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 73
Metaheurísticas y Redes Neuronales
8.
8.1
Recocido Simulado Origen:
La técnica heurística del recocido simulado (RS), en inglés Simulated Anneling, está basada en un algoritmo propuesto por Metropolis et al. (1953) en el marco de la termodinámica estadística, para simular el proceso de enfriamiento de un material (recocido). Kirkpatrick et al. (1983) e independientemente Cerni (1985) establecieron una analogía entre el proceso de recocido y el reto de resolver problemas de optimización combinatoria de gran escala. Desde entonces el recocido simulado ha sido utilizado para resolver en forma exitosa una amplia variedad de problemas de optimización combinatoria, convirtiéndose en una Metaheurística clásica. Debido a su sencillez de implementación así como a los buenos resultados que iban apareciendo, experimentó un gran auge en la década de los 80. Kirpatrick y otros trabajando en el diseño de circuitos electrónicos consideraron aplicar el algoritmo de Metrópolis en alguno de los problemas de optimización combinatoria que aparecen en este tipo de diseños. El algoritmo de Metrópolis simula el cambio de energía en el proceso de enfriamiento de un sistema físico. Las leyes de la termodinámica establecen que, a una temperatura , la probabilidad de un aumento de energía de magnitud viene dada por la expresión siguiente:
p( E )
e
E
kt
, donde k es la constante de Boltzmann.
La simulación de Metrópolis genera una perturbación y calcula el cambio resultante en la energía. Si ésta decrece, el sistema se mueve al nuevo estado, en caso contrario, se acepta el nuevo estado de acuerdo con la probabilidad dada en la ecuación anterior. Kirpatrick y otros, pensaron que era posible establecer una analogía entre los parámetros que intervienen en la simulación termodinámica de Metrópolis y los que aparecen en los métodos de optimización local, tal y como muestra la tabla adjunta. Termodinámica Configuración Configuración Fundamental Energía de la Configuración
Optimización Solución Posible Solución óptima Costo de la Solución
Para ello, establecen un paralelismo entre el proceso de las moléculas de una sustancia que van colocándose en los diferentes niveles energéticos buscando un equilibrio, y las soluciones visitadas por un procedimiento de búsqueda local. Así pues, SA es un procedimiento basado en búsqueda local en donde:
En cada iteración se genera un número concreto de vecinos, que puede ser fijo para toda la ejecución o depender de la iteración concreta Cada vez que se genera un vecino, se aplica el criterio de aceptación para ver si sustituye a la solución actual:
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 74
Metaheurísticas y Redes Neuronales
- Si la solución vecina es mejor que la actual, se acepta automáticamente, tal como se haría en la búsqueda local clásica. - En cambio, si es peor, aún existe la probabilidad de que el vecino sustituya a la solución actual. Esto permite al algoritmo salir de óptimos locales, en los que la búsqueda local clásica quedaría atrapada. Es decir, en SA todo movimiento de mejora es aceptado y además se permiten movimientos de no mejora de acuerdo con unas probabilidades. Dichas probabilidades están basadas en la analogía con el proceso físico de enfriamiento y se obtienen como función de la temperatura del sistema.
8.2
El algoritmo SA
La estrategia de SA es comenzar con una temperatura inicial “alta”, lo cual proporciona una
probabilidad también alta de aceptar un movimiento de no mejora. En cada iteración se va reduciendo la temperatura por medio de algún mecanismo de enfriamiento, y por lo tanto las probabilidades son cada vez más pequeñas conforme avanza el procedimiento y nos acercamos a la solución óptima. De este modo, inicialmente se realiza una diversificación de la búsqueda sin controlar demasiado el costo de las soluciones visitadas. En iteraciones posteriores resulta cada vez más difícil el aceptar malos movimientos, y por lo tanto se produce un descenso en el costo. x t
1.0
0.8
T 20 T 10
0.6
T 5 T 1
0.4
T 0.5 0.2
d 1
2
3
4
5
6
7
En resumen, cada vecino de una solución tiene una probabilidad de reemplazar a la solución actual, de forma tal que a medida que avanzan las iteraciones, aceptar soluciones con grandes empeoramientos es menos probable (pero sigue existiendo una probabilidad positiva de aceptarlos). Existen varios mecanismos de enfriamiento:
Enfriamiento basado en sucesivas temperaturas descendentes T 0, T 1, T 2 ,…, T maxiter fijadas por el usuario Enfriamiento con descenso constante (c) de temperatura T k+1= T k c
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 75
Metaheurísticas y Redes Neuronales
Descenso geométrico: T k+1 = r · T k (lo más usado), k = iteración actual, r constante cercana a 1 (usualmente, escogida en [0.8, 0.99])
Criterio de Boltzmann:
Esquema de Cauchy:
+ +
De esta forma, SA tiene la habilidad de salir de óptimos locales al aceptar movimientos de no mejora en los estados intermedios. Al final del proceso estos son tan poco probables que no se producen, con lo que, sin no hay movimientos de mejora, el algoritmo finaliza. El diagrama siguiente muestra un esquema general del algoritmo: Algoritmo Recocido Simulado Tomar una solución inicial x Tomar una temperatura inicial T Mientras (no congelado) Realizar L veces Tomar x’ de N(x). d = f(x’) – f(x)
Si (d <0) hacer x=x’ Si (d>0) hacer x=x’ con p=e
- d/T
Hacer acción del mecanismo de enfriamiento (por ejemplo: T = rT) Para diseñar un algoritmo a partir del esquema general anterior hay que determinar los parámetros del sistema:
La Temperatura Inicial - Se determina realizando una serie de pruebas para alcanzar una determinada fracción de movimientos aceptados. La Velocidad de Enfriamiento La longitud - Proporcional al tamaño esperado de . El instante en que la Secuencia de Enfriamiento finaliza (está congelada) - cont = cont+1 cada vez que se completa una temperatura y el porcentaje de movimientos aceptados es menor de MinPercent. cont=0 cuando se mejora la mejor solución almacenada.
La clave de una implementación de SA es el manejo de la cola o secuencia de enfriamiento: Cual es la temperatura inicial y cómo disminuye la temperatura en cada iteración son las dos preguntas a responder para diseñar un algoritmo. Podemos encontrar numerosos estudios en donde se comparan colas lentas (aquellas en las que la temperatura disminuye poco a poco) con colas rápidas que vienen a ser métodos de descenso simple con pequeñas perturbaciones. Johnson y otros (1989) sugieren:
Realizar mejoras y especializaciones aunque no se basen en la analogía física.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 76
Metaheurísticas y Redes Neuronales
Utilizar soluciones posibles y no posibles. Penalizar en la función de evaluación las soluciones imposibles. - El objetivo es diversificar y considerar más soluciones. - Notar que con bajas temperaturas la solución tenderá a ser posible. Las últimas implementaciones de SA apuntan a olvidarse de la analogía física y manejar la cola de enfriamiento como una estructura de memoria. Es decir, la probabilidad de aceptar o rechazar un movimiento de no mejora depende no de la iteración (tiempo transcurrido) sino de lo sucedido en la búsqueda. En este sentido, la probabilidad será función de algunas variables de estado del proceso. En la actualidad se están diseñando numerosos algoritmos híbridos en donde la búsqueda local se realiza con un procedimiento basado en SA, en ocasiones combinado con búsqueda Tabú.
8.3
Ejemplos de aplicación
SA PARA RESOLVER EL TSP: Para la codificación se consideran las ciudades numeradas de 1 a . Se considera la estructura de vecindad 2-opt; es decir, si la solución actual }. Una solución inicial la podemos obtener por el algoritmo Greedy.
: ’ <0’ – ’ >0 ’ −/
Algoritmo Recocido Simulado para el TSP
Tomar una solución inicial generada con el vecino más cercano Tomar una temperatura inicial y un factor de enfriamiento (cooling schedule). Mientras (no congelado) Realizar veces Tomar un tour de (permutando dos aristas de ). Sea Si ( Si ( Hacer
) hacer ) hacer
con probabilidad
EJERCICIO: Desarrollar un algoritmo SA para resolver el TSP e implementarlo, en el cual la estructura de vecindad está determinada por la permutación de 2 nodos consecutivos; es decir, si la solución actual }, la solución inicial obtenida por Greedy.
:
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 77
Metaheurísticas y Redes Neuronales
9.
Métodos Evolutivos
Los métodos evolutivos están basados en poblaciones de soluciones. A diferencia de los métodos vistos hasta ahora, en cada iteración del algoritmo no se tiene una única solución sino un conjunto de éstas. Estos métodos se basan en generar, seleccionar, combinar y reemplazar un conjunto de soluciones. Dado que mantienen y manipulan un conjunto en lugar de una única solución a lo largo de todo el proceso de búsqueda, suelen presentar tiempos de computación sensiblemente más altos que los de otros metaheurísticos. Este hecho se ve agravado por la “convergencia” de la población que requiere de un gran número de iteraciones
en el caso de los algoritmos genéticos, tal y como se describe a continuación.
9.1
Algoritmos Genéticos
Los Algoritmos Genéticos (GA) fueron introducidos por John Holland en 1970 inspirándose en el proceso observado en la evolución natural de los seres vivos. Los Biólogos han estudiado en profundidad los mecanismos de la evolución, y aunque quedan parcelas por entender, muchos aspectos están bastante explicados. De manera muy general podemos decir que en la evolución de los seres vivos el problema al que cada individuo se enfrenta cada día es la supervivencia. Para ello cuenta con las habilidades innatas provistas en su material genético. A nivel de los genes, el problema es el de buscar aquellas adaptaciones beneficiosas en un medio hostil y cambiante. Debido en parte a la selección natural, cada especie gana una cierta cantidad de “conocimiento”, el cual es incorporado a la
información de sus cromosomas. Así pues, la evolución tiene lugar en los cromosomas, en donde está codificada la información del ser vivo. La información almacenada en el cromosoma varía de unas generaciones a otras. En el proceso de formación de un nuevo individuo, se combina la información cromosómica de los progenitores aunque la forma exacta en que se realiza es aún desconocida. Aunque muchos aspectos están todavía por discernir, existen unos principios generales de la evolución biológica ampliamente aceptados por la comunidad científica. Algunos de estos son: 1. La evolución opera en los cromosomas en lugar de en los individuos a los que representan. 2. La selección natural es el proceso por el que los cromosomas con “buenas estructuras” se reproducen más a menudo que los demás. 3. En el proceso de reproducción tiene lugar la evolución mediante la combinación de los cromosomas de los progenitores. Llamamos Recombinación a este proceso en el que se forma el cromosoma del descendiente. También son de tener en cuenta las mutaciones que pueden alterar dichos códigos. 4. La evolución biológica no tiene memoria en el sentido de que en la formación de los cromosomas únicamente se considera la información del perío do anterior
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 78
Metaheurísticas y Redes Neuronales
Los algoritmos genéticos establecen una analogía entre el conjunto de soluciones de un problema y el conjunto de individuos de una población natural, codificando la información de cada solución en un string (vector binario) a modo de cromosoma. En palabras del propio Holland: “Se pueden encontrar soluciones aproximadas a problemas de gran complejidad computacional mediante un proceso de evolución simulada”
A tal efecto se introduce una función de evaluación de los cromosomas, que llamaremos calidad (“ fitness” ) y que está basada en la función objetivo del problema. Igualmente se introduce un mecanismo de selección de manera que los cromosomas con mejor evaluación sean escogidos para “reproducirse” más a menudo que los que la tienen peor. Los algoritmos desarrollados por Holland inicialmente eran sencillos pero dieron buenos resultados en problemas considerados difíciles. Un primer esquema de un algoritmo genético se muestra en la Figura 24. Crear y evaluar la población inicial de cromosomas
Seleccionar y reproducir dos cromosomas
Evaluar el “fitness” del nuevo hijo
Sustituir cromosomas de la población por el hijo.
Figura 24. Algoritmo Genético Básico Los algoritmos Genéticos están basados en integrar e implementar eficientemente dos ideas fundamentales: Las representaciones simples como strings binarios de las soluciones del problema y la realización de transformaciones simples para modificar y mejorar estas representaciones. Para llevar a la práctica el esquema anterior y concretarlo en un algoritmo, hay que especificar los siguientes elementos:
Una representación cromosómica Una población inicial Una medida de evaluación Un criterio de selección / eliminación de cromosomas Una o varias operaciones de recombinación Una o varias operaciones de mutación
A continuación pasamos a comentar y detallar todos estos elementos.
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 79
En los trabajos originales las soluciones se representaban por strings binarios, es decir, listas de 1s y 0s. Este tipo de representaciones ha sido ampliamente utilizada incluso en problemas en donde no es muy natural. En 1985, De Jong introduce la siguiente cuestión: ¿Qué se debe hacer cuando los elementos del espacio de búsqueda se representan de modo natural por estructuras complejas como vectores, árboles o grafos?, ¿Se debe intentar linealizar en un string o trabajar directamente con estas estructuras? En la actualidad podemos distinguir dos escuelas, la primera se limita a strings binarios, mientras que la segunda utiliza todo tipo de configuraciones. Hemos de notar que las operaciones genéticas dependen del tipo de representación, por lo que la elección de una condiciona a la otra. La ventaja de las primeras es que permite definir fácilmente operaciones de recombinación, además los resultados sobre convergencia están probados para el caso de strings binarios. Sin embargo en algunos problemas puede ser poco natural y eficiente el utilizarlas. Por ejemplo en el problema del agente viajero sobre 5 ciudades y 20 aristas, el string 01000100001000100010 representa una solución sobre las aristas ordenadas. Sin embargo dicha representación no es muy natural y además, no todos los strings con cinco 1s representan soluciones lo cual complica substancialmente la definición de una operación de sobrecruzamiento. Es más natural la ruta de ciudades: (2,3,1,5,4), lo cual permite definir naturalmente diferentes operaciones estables. La población inicial suele ser generada aleatoriamente. Sin embargo, últimamente se están utilizando métodos heurísticos para generar soluciones iniciales de buena calidad. En este caso, es importante garantizar la diversidad estructural de estas soluciones para tener una “representación” de la mayor parte de población posible o al menos evitar la convergencia
prematura. Respecto a la evaluación de los cromosomas, se suele utilizar la calidad como medida de la bondad según el valor de la función objetivo en el que se puede añadir un factor de penalización para controlar la infactibilidad. Este factor puede ser estático o ajustarse dinámicamente, lo cual produciría un efecto similar al de la Oscilación Estratégica en Tabú Search: calidad = Valor Objetivo Normalizado - Penalización * Medida Infactibilidad En resumen, en el proceso de selección se escoge qué individuos tendrán la oportunidad de reproducirse, habitualmente mediante probabilidades según su fitness. Habrán individuos que aparezcan más de una vez y habrán individuos que no aparezcan. Principalmente hay dos técnicas para realizar esta función: Ruleta y Torneo. La primera técnica elige individuos con probabilidad proporcional a su función de fitness. La segunda establece k torneos aleatorios entre parejas de individuos y selecciona aquellos que ganen cada torneo. Los Operadores de Cruzamiento más utilizados son:
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 80
Metaheurísticas y Redes Neuronales
De un punto:
Se elige aleatoriamente un punto de ruptura en los padres y se intercambian sus bits.
De dos puntos: Se eligen dos puntos de ruptura al azar para intercambiar. Uniforme:
En cada bit se elige al azar un padre para que contribuya con su bit al del hijo, mientras que el segundo hijo recibe el bit del otro padre.
PMX, SEX:
Son operadores más sofisticados fruto de mezclar y aleatorizar los anteriores.
La operación de Mutación más sencilla, y una de la más utilizadas consiste en reemplazar con cierta probabilidad el valor de un bit. Notar que el papel que juega la mutación es el de introducir un factor de diversificación ya que, en ocasiones, la convergencia del procedimiento a buenas soluciones puede ser prematura y quedarse atrapado en óptimos locales. Otra forma obvia de introducir nuevos elementos en una población es recombinar elementos tomados al azar sin considerar su fitness. A continuación mostramos la implementación de un algoritmo genético propuesta por Michalewicz (1996), en donde se combinan los elementos genéticos con la búsqueda local. Algoritmo Genético 1. Generar soluciones — Construir un conjunto de soluciones P con tamaño PopSize mediante generación aleatoria. 2. Mejorar soluciones — Aplicar un método de búsqueda local a cada solución del conjunto P. Mientras (número de evaluaciones < MaxEval ) 3. Evaluación — Evaluar las soluciones en P y actualizar, si es necesario, la mejor solución almacenada. 4. Supervivencia — Calcular la probabilidad de supervivencia basada en la calidad de las soluciones. Según dichas probabilidades seleccionar aleatoriamente PopSize soluciones (con reemplazamiento) de P. Sea P el nuevo conjunto formado por las soluciones seleccionadas (algunas pueden aparecer repetidas). 5. Combinación — Seleccionar una fracción p c de soluciones de P para ser combinadas. La selección es aleatoria y equi-probable para todos los elementos de P. Los elementos seleccionados se emparejan al azar y, por cada pareja, se generan dos descendientes que reemplazaran a los padres en P. 6. Mutación — Una fracción p m de las soluciones de P se selecciona para aplicar el operador de mutación. La solución resultante reemplaza a la original en P. Parámetros habituales (pero no son los únicos posibles, ya que dependen de la aplicación concreta): Población: entre 50 y 100 cromosomas. Longitud del cromosoma: depende del problema. Generaciones: entre 20 y 1000. Probabilidad (o porcentaje) de cruce: de 20% a 60% por cromosoma. Probabilidad (o porcentaje) de mutación: de 0.1% a 5% por gen.
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 81
Convergencia del Algoritmo Dado que el algoritmo genético opera con una población en cada iteración, se espera que el método converja de modo que al final del proceso la población sea muy similar, y en el infinito se reduzca a un sólo individuo. Se ha desarrollado toda una teoría para estudiar la convergencia de estos algoritmos en el caso de strings binarios. Esta teoría se basa principalmente en considerar que un string es un representante de una clase de equivalencia o esquema, reinterpretando la búsqueda en lugar de entre strings, entre esquemas. De este modo se concluye lo que se conoce como paralelismo intrínseco: “En una población de m strings se están procesando implícitamente O(m3 ) esquemas”. A partir de este resultado el teorema de esquemas prueba que la población converge a unos esquemas que cada vez son más parecidos, y en el límite a un único string. En el caso de strings no binarios se introducen los conceptos de forma y conjunto de similitud que generalizan al de esquema. Se consideran una serie de condiciones sobre los operadores de manera que se garantice la convergencia. Básicamente se exige que al cruzar dos strings de la misma clase se obtenga otro dentro de ésta. Además hay que respetar ciertas condiciones sobre selección de los progenitores. Bajo toda esta serie de hipótesis se prueba la convergencia del algoritmo. En la práctica no se suelen respetar las condiciones vistas ya que son difíciles de seguir y probar, encontrándonos con que, en ocasiones los algoritmos genéticos resuelven satisfactoriamente un problema de optimización dado y otras se quedan muy alejados del óptimo. Los estudiosos del tema han tratado de caracterizar lo que han denominado problemas AG-fáciles (aquellos en los que los AG proporcionan buenos resultados) y AGdifíciles con el objetivo de saber de antemano, al estudiar un nuevo problema, si los AG son una buena elección para su resolución. Se han tratado de caracterizar estas clases mediante el concepto de engaño considerando que si el algoritmo converge al mejor esquema (aquel con mejor promedio del fitness de sus strings) y en éste se encuentra el óptimo, entonces es fácil que se resuelva satisfactoriamente. En caso de que el óptimo esté en un esquema con bajo promedio se denomina engaño y se pensaba que en estos casos es cuando el problema es AG-difícil. Sin embargo se ha visto que esta caracterización mediante el engaño no es siempre cierta y no constituye un criterio fiable. Es importante citar que, a diferencia de otros metaheurísticos, los Algoritmos Genéticos han crecido de forma espectacular, hasta el punto de poder encontrar referencias sobre ellos en revista de informática de carácter general. Además muchos de los investigadores de este campo están trabajando en desarrollar los aspectos teóricos de la materia, e incorporando algunas otras técnicas de búsqueda local en el esquema genético. Los Algoritmos Meméticos son un caso particular de estos nuevos híbridos que aúnan los elementos de combinación con los de búsqueda local bajo el nombre de cooperación y competición. Podemos encontrar esquemas de procedimientos genéticos ya implementados en los que incorporar nuestras funciones de evaluación y con poco más, tener un algoritmo genético para nuestro problema. Existen numerosos accesibles (algunos de libre distribución y otros Fernando Sandoya, Ph.D.
ESPOL, 2015/ 82
Metaheurísticas y Redes Neuronales
comercializados por compañías de software) y son muy populares especialmente en el entornos informáticos. Entre los más populares están:
Solver de Excel (Frontline Systems, Inc.) con un límite de 100 restricciones y 200 variables RiskOptimizer (Palisade Inc.) sin límite aparente,
Estos esquemas reciben el nombre de “context -independent” y habitualmente sólo utilizan
la evaluación de la solución como información del problema. En general proporcionan resultados de menor calidad que la de los algoritmos específicos (dependientes del contexto) diseñado para un problema dado, pero por otro lado, su aplicación es muy sencilla. EJERCICIO: Se trata de resolver el problema de la mochila por medio de algoritmos genéticos. En primer lugar se debe generar el problema a resolver de tamaño n de la siguiente manera: la utilidad unitaria es un entero aleatorio entre 100 y 1000, el peso unitario es un entero aleatorio entre 200 y 1200 y la capacidad de la mochila es igual al promedio del peso unitario de los objetos multiplicado por n y dividido para 2. Fijar la semilla aleatoria en 1234. Diseñar dos algoritmos genéticos para resolver el problema del KP: PRIMER ALGORITMO: 1. Generar soluciones — Construir un conjunto de soluciones P con tamaño PopSize mediante generación aleatoria. 2. Mientras (número de evaluaciones < MaxEval ) 3. Evaluación — Evaluar las soluciones en P y actualizar, si es necesario, la mejor solución almacenada. 4. Supervivencia — Calcular la probabilidad de supervivencia basada en la calidad de las soluciones. Según dichas probabilidades seleccionar aleatoriamente 2 soluciones (p1 padre y p2 madre) de P. 5. Combinación — Aparear p1 con p2 y p2 con p1, generando dos descendientes que, de generar soluciones factibles, serán h1 y h2. 6. Mutación — Para h1 y h2 aplicar el operador de mutación. La solución resultante reemplaza a la peor solución que se encuentra en P. SEGUNDO ALGORITMO: 1. Generar soluciones — Construir un conjunto de soluciones P con tamaño PopSize mediante generación aleatoria. 2. Mejorar soluciones — Aplicar un método de búsqueda local a cada solución del conjunto P. Mientras (número de evaluaciones < MaxEval ) 3. Evaluación — Evaluar las soluciones en P y actualizar, si es necesario, la mejor solución almacenada.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 83
Metaheurísticas y Redes Neuronales
4. Supervivencia — Calcular la probabilidad de supervivencia basada en la calidad de las soluciones. Según dichas probabilidades seleccionar aleatoriamente n_cand soluciones de P. Sea P el nuevo conjunto formado por las soluciones seleccionadas (algunas pueden aparecer repetidas). 5. Combinación — Seleccionar una fracción p c de soluciones de P para ser combinadas. La selección es aleatoria y equi-probable para todos los elementos de P. Los elementos seleccionados se emparejan al azar y, por cada pareja, se generan dos descendientes que reemplazaran a los padres en P. 6. Mutación — Una fracción p m de las soluciones de P se selecciona para aplicar el operador de mutación. La solución resultante reemplaza a la original en P. OBSERVACIÓN: las fracciones se eligen tal que: pc + pm < 1 y n_cand < PopSize.
9.2
Búsqueda Dispersa (Scatter Search)
La Búsqueda Dispersa (BD) es un método evolutivo que ha sido aplicado en la resolución de un gran número de problemas de optimización. Los conceptos y principios fundamentales del método, fueron propuestos a comienzo de la década de los setenta, basados en las estrategias para combinar reglas de decisión, especialmente en problemas de secuenciación, así como en la combinación de restricciones (como el conocido método de las restricciones subrogadas). La BD se basa en el principio de que la información sobre la calidad o el atractivo de un conjunto de reglas, restricciones o soluciones puede ser utilizado mediante la combinación de éstas. En concreto, dadas dos soluciones, se puede obtener una nueva mediante su combinación de modo que mejore a las que la originaron. Al igual que los algoritmos genéticos, el método que nos ocupa se basa en mantener un conjunto de soluciones y realizar combinaciones con éstas; pero a diferencia de éstos no está fundamentado en la aleatorización sobre un conjunto relativamente grande de soluciones sino en las elecciones sistemáticas y estratégicas sobre un conjunto pequeño de éstas. Como ilustración basta decir que los algoritmos genéticos suelen considerar una población de 100 o más soluciones mientras que en la búsqueda dispersa es habitual trabajar con un conjunto de tan sólo 10 soluciones. La primera descripción del método fue publicada en 1977 por Fred Glover donde establece los principios de la BD. En este primer artículo se determina que la BD realiza una exploración sistemática sobre una serie de buenas soluciones llamadas conjunto de referencia. Los siguientes comentarios resumen los principales aspectos de este trabajo: 1. El método se centra en combinar dos o más soluciones del conjunto de referencia. La combinación de más de dos soluciones tiene como objetivo el generar centroides. 2. Generar soluciones en la línea que unen dos dadas se considera una forma reducida del método.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 84
Metaheurísticas y Redes Neuronales
3. Al combinar se deben de seleccionar pesos apropiados y no tomar valores al azar. 4. Se deben de rea lizar combinaciones “convexas” y “no convexas” de las soluciones. 5. La distribución de los puntos se considera importante y deben de tomarse dispersos. En Glover (1994) se introduce la combinación ponderada (weighted combination) como el mecanismo principal para generar nuevas soluciones. En esta versión se enfatizan las búsquedas lineales entre dos soluciones y el uso de pesos para muestrear en dicha línea. Asimismo, se introduce el concepto de combinar soluciones de calidad con sol uciones diversas. Además, el método incluye una componente de intensificación que consiste en tomar una muestra mayor de la línea que ha producido mejores soluciones. En este trabajo el autor especifica que para trabajar con problemas con variables enteras, binarias o que forman una permutación, hay que diseñar métodos específicos de combinación (notar que no tiene sentido hablar de combinación lineal de dos permutaciones). Para ello se introducen los mecanismos de combinación basados en votos. En estos se definen reglas mediante las que cada solución “vota” para que sus características aparezcan en la solución que se está construyendo. Estos métodos de votos han sido muy utilizados en las rutinas de combinación de los algoritmos de BD y parece que constituyen uno de las claves del éxito de estos métodos. A continuación mostramos un ejemplo sobre un problema de rutas de vehículos introducido en Corberán et al. (2000) para ilustrarlos. Dada una serie de localizaciones en donde hay que recoger a unos estudiantes, el problema consiste en encontrar un conjunto de rutas de modo que cada una sea recorrida por un autobús. A los efectos que aquí nos ocupan podemos omitir el resto de detalles y considerar que tenemos dos soluciones del problema para ver cómo se combinan. Consideremos un ejemplo con 10 localizaciones y dos soluciones (A y B) con dos rutas cada una: Solución A: Solución B:
A1 = { 4, 2, 7, 1 }, B1 = { 2, 6, 8, 10, 9 },
A2 = { 5, 10, 6, 9, 3, 8 } B2 = { 3, 4, 7, 1, 5 }
Para poder combinar A y B, tendremos que asociar las rutas de cada una. Si consideramos las dos asociaciones posibles (A1 con B1 y A2 con B2 ó, A1 con B2 y A2 con B1) y contamos el número de elementos comunes, podemos tomar la que mayor número de coincidencias presente. Así, asociamos A2 con B1 y A1 con B2 ya que la primera tiene cuatro elementos en común (6, 8, 9 y 10), y la segunda tiene tres (4, 7 y 1), mientras que la otra asignación presenta 1+2= 3 coincidencias. La nueva solución (N1 y N2) se construye en n pasos, en los que una localización se asigna a una ruta en cada paso. La siguiente tabla muestra el proceso. Paso
Par
1 2 3 4 5
(A1,B2) (A2,B1) (A1,B2) (A2,B1) (A1,B2)
Voto 1 4 5 7 5 7
Voto 2 3 2 3 6 7
Asignación N1 = { 4 } N2 = { 2 } N1 = { 4, 3 } N2 = { 2, 5 } N1 = { 4, 3, 7 }
Regla de selección azar azar 3 antes 7 5 antes 6 igual
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 85
Metaheurísticas y Redes Neuronales
6 7 8 9 10
(A2,B1) (A1,B2) (A2,B1)
10 1 10 9 9
6 1 8 8 9
N2 = { 2, 5, 6 } N1 = { 4, 3, 7, 1 } N2 = { 2, 5, 6, 10 } N2 = { 2, 5, 6, 10, 8 } N2 = { 2, 5, 6, 10, 8, }
azar igual 10 antes 8 8 antes 9 igual
En el paso 1, comenzamos construyendo la ruta N 1 con el par (A1,B2). El primer elemento en la ruta A1 es el 4, así que esta ruta vota para que el 4 sea el primer elemento de la ruta N 1 (Voto 1). Análogamente el voto asociado con B 2 es para la localización 3 (Voto 2). Como ambas localizaciones ocupan en sus rutas la misma posición (la primera) los dos votos valen lo mismo por lo que desempatamos al azar y gana el 4. En el paso 2 realizamos lo mismo para la otra pareja de rutas. En el paso 3, A1 vota por la localización 7 (la 4 y la 2 ya han sido asignadas) y B2 vota por la 3. Como la 7 está en la tercera posición de la ruta A1 y la localización 3 está en la primera posición de la ruta B 2, la regla especifica dar preferencia a la localización en una posición anterior, por lo que 3 es seleccionada. Procediendo de igual forma se completa la nueva solución hasta obtener N1 = {4, 3, 7, 1} y N2 = {2, 5, 6, 10, 8, 9 }. En 1977 Glover publica una versión más específica del método en donde se recogen y simplifican muchas de las ideas expuestas en trabajos anteriores. Esta publicación tuvo un gran impacto en lo que a la difusión del método se refiere y se ha quedado como la referencia standard de la búsqueda dispersa. Numerosos investigadores comenzaron a aplicar la BD a la resolución de problemas de optimización obteniendo resultados de gran calidad. La siguiente sección describe esta versión del método, actualizada según implementaciones y desarrollos posteriores. Glover, Laguna y Martí (2000) estudian las implementaciones más recientes del método en la resolución de problemas de optimización combinatoria. Además, muestran las conexiones entre este método y el denominado Re- encadenamiento de Trayectorias (“Path relinking”). Desde un punto de vista espacial, el proceso de generar combinaciones lineales de un conjunto de referencia de soluciones, puede ser visto como el generar caminos entre, y más allá, de estas soluciones. Esto lleva a una concepción más amplia del significado de combinar que es la introducida en el re-encadenamiento de trayectorias (RT). RT se basa en el hecho de que entre dos soluciones se puede trazar un camino que las una, de modo que las soluciones en dicho camino contengan atributos de ellas. Las soluciones originales pueden haber sido generadas mediante un método basado en una búsqueda local y estar unidas por un camino, o haber sido generadas por otro método y no estar unidas de ningún modo; en cualquier caso, ahora generaremos un nuevo camino que las una. Las características de dicho camino vendrán especificadas respecto de los atributos que son añadidos o eliminados, o por los movimientos realizados para alcanzar una solución desde la otra. Esto constituye una extensión del concepto de combinación en tanto que se obtienen varias soluciones a partir de dos o mas originales. Consideremos en un problema de permutaciones dos soluciones x=(1,3,4,2) e y=(2,3,1,4). Si aplicamos un método de combinación podemos obtener una determinada solución z =
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 86
(1,3,2,4), mientras que si tratamos de obtener y partiendo de x, podemos obtener la secuencia z1=(2,1,3,4), z2=(2,3,1,4). En este sentido decimos que RT es una extensión de los métodos de combinación. Dado que la búsqueda dispersa se basa es realizar combinaciones y aplicar métodos de búsqueda local, se puede considerar incluido en los llamados algoritmos meméticos (una clase de algoritmos evolutivos en donde la búsqueda local se aplica de forma selectiva). Actualmente, existen implementaciones comerciales del método (del tipo “context independent” mencionado), cómo Opt Quest Callable Library (Laguna y Martí, 2000), que están compitiendo en la industria con métodos de optimización establecidos en la resolución de problemas reales. A continuación se describen las partes esenciales de un algoritmo de búsqueda dispersa para pasar después a comentar algunas mejoras y aspectos avanzados del método. El Algoritmo de Búsqueda Dispersa El método se basa en combinar las soluciones que aparecen en el llamado conjunto de referencia. En este conjunto se tienen las soluciones buenas que se han ido encontrando. Es importante destacar que el significado de buena no se restringe a la calidad de la solución, sino que también se considera la diversidad que esta aporta al conjunto. La Búsqueda Dispersa consta básicamente de los siguientes elementos: 1. Un generador de soluciones diversas. El método se basa en generar un conjunto P de soluciones diversas (alrededor de 100), del que extraeremos un subconjunto pequeño (alrededor de b =10) con el que realizar las combinaciones y que denominamos R. 2. Un conjunto de referencia R. Extraído del conjunto de soluciones diversas según el criterio de contener soluciones de calidad y diferentes entre sí (Calidad y Diversidad). Si el método no logra mejorar a la solución, se considera que el output es la propia solución considerada. Las soluciones en este conjunto están ordenadas de mejor a peor respecto de su calidad. 2.1. Creación. Iniciamos el conjunto de referencia con las b/2 mejores soluciones de P. Las b/2 restantes se extraen de P por el criterio de máxima distancia con las ya incluidas en el conjunto de referencia. Para ello debemos de definir previamente una función de distancia en el problema. 2.2. Actualización. Las soluciones fruto de las combinaciones pueden entrar en el conjunto de referencia y reemplazar a alguna de las ya incluidas si las mejoran. Así pues, el conjunto de referencia mantiene un tamaño b constante pero va mejorando a lo largo de la búsqueda. En implementaciones sencillas, la actualización de este conjunto se realiza únicamente por calidad, aunque podemos hacerlo también por diversidad. 3. Un método de combinación. BD se basa en combinar todas las soluciones del conjunto de referencia. Para ello, se consideran subconjuntos de 2 o mas elementos del conjunto de referencia y se combinan mediante una rutina diseñada a tal efecto. La solución o Fernando Sandoya, Ph.D.
ESPOL, 2015/ 87
Metaheurísticas y Redes Neuronales
soluciones que se obtienen de esta combinación pueden ser inmediatamente introducidas en el conjunto de referencia (actualización dinámica) o almacenadas temporalmente en una lista hasta terminar de realizar todas las combinaciones y después ver qué soluciones entran en éste (actualización estática). 4. Un método de mejora. Típicamente se trata de un método de búsqueda local para mejorar las soluciones, tanto del conjunto de referencia como las combinadas antes de estudiar su inclusión en el conjunto de referencia. El siguiente esquema muestra cómo actúan los elementos descritos en un esquema básico del algoritmo. Algoritmo de Búsqueda Dispersa 1. Comenzar con P = Ø. Utilizar el método de generación para construir una solución y el método de mejora para tratar de mejorarla; sea x la solución obtenida. Si x P entonces añadir x a P. (i.e., P P x ), en otro caso, rechazar x. Repetir esta etapa hasta que P tenga un tamaño prefijado. 2. Construir el conjunto de referencia R = { x 1 , …, x b } con las b/2 mejores soluciones de P y las b/2 soluciones de P más diversas a las ya incluidas. 3. Evaluar las soluciones en R y ordenarlas de mejor a peor respecto a la función objetivo. 4. Hacer NuevaSolución = TRUE Mientras (NuevaSolución) 5. NuevaSolucion = FALSE 6. Generar los subconjuntos de R en los que haya al menos una nueva solución. Mientras (Queden subconjuntos sin examinar) 7.
Seleccionar un subconjunto y etiquetarlo como examinado.
8. Aplicar el método de combinación a las soluciones del subconjunto. 9. Aplicar el método de mejora a cada solución obtenida por combinación. Sea x la solución mejorada: Si f(x) mejora a f(x b ) y x no está en R) 10. Hacer x b = x y reordenar R 11. Hacer NuevaSolucion = TRUE El algoritmo hace referencia a los subconjuntos de R ya que podemos combinar parejas, tríos o cualquier número de soluciones. Es usual el limitar las combinaciones a parejas, por lo
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 88
que el punto 6 equivaldría a decir: “Generar todas las parejas de soluciones de R en las que al menos una de las dos sea nueva”; donde por nueva entenderemos que haya entrado al
conjunto después de realizar la última combinación de todo R. Notar que el algoritmo se detiene cuando al tratar de combinar vemos que no hay nuevos elementos en el conjunto de referencia (la variable NuevaSolución está en 0). Este algoritmo puede ser anidado en un esquema global que permita reconstruir el conjunto de referencia cuando éste ya ha sido explotado. Así, si el límite de tiempo (o evaluaciones) no se ha excedido, una estrategia habitual es regenerar el conjunto de referencia dejando la mitad superior (b/2 mejores) y eliminando la mitad inferior. Después, se genera un conjunto P como al comienzo del algoritmo, del que se extraen únicamente las b/2 soluciones más diversas con las ya existentes en R. Así obtenemos un nuevo conjunto de referencia en el que mantenemos las soluciones de calidad y renovamos las debidas a diversidad. Ahora se vuelve a combinar como anteriormente sobre este conjunto de referencia (pasos 5 a 11). De este modo se obtiene un esquema cíclico indefinido al que hay que añadirle una variable de control para detenerlo, típicamente esta variable está en función del tiempo o del número de iteraciones (evaluaciones de la función objetivo). Desarrollo y Mejoras La búsqueda dispersa es un método relativamente reciente que hemos de considerar en desarrollo. Durante los últimos años se han realizado nuevas contribuciones aplicando esta metodología en la resolución de conocidos problemas de optimización. Algunas de estas aplicaciones han abierto nuevos campos de estudio, ofreciendo alternativas a los diseños conocidos. Laguna y Armentano (2001) realizan una revisión de los aspectos clave del método desarrollados durante estos años. A continuación las resumimos de forma esquemática: a. Considerar el uso de memoria basada en la frecuencia para desarrollar métodos de diversificación eficientes. En lugar de generar las soluciones al azar, se propone construir un método que basado en el número de apariciones de los elementos significativos en la solución, evite la repetición de estructuras similares. b. Inicializar el conjunto de referencia a partir de un gran conjunto de soluciones creado con el generador antes mencionado. c. Aplicar la rutina de mejora de forma selectiva . Las pruebas indican que el aplicar el método de mejora a todas las soluciones generadas y combinadas, no garantiza el obtener mejores resultados finales. Establecer umbrales de calidad para no aplicar la mejora a soluciones que difícilmente van a proporcionar la mejor solución, es un gasto innecesario de tiempo de computación (Ugray et al., 2001). Por otro lado, al aplicar el método de mejora a todas las soluciones se acelera la convergencia de éste, lo cual pude ser deseable si disponemos de poco tiempo de computación, pero debemos de evitarlo si queremos ejecutar el método en un horizonte largo para obtener soluciones de gran calidad. d. Es necesario estudiar el porcentaje de tiempo que el método está generando soluciones y el tiempo que está combinando. En esencia esta es la cuestión que se Fernando Sandoya, Ph.D.
ESPOL, 2015/ 89
Metaheurísticas y Redes Neuronales
plantea en todos los métodos heurísticos: el equilibrio entre la intensificación y la diversificación. e. Inicializar el conjunto de referencia con la mitad de soluciones por calidad y la otra mitad por diversidad. Se han realizado experimentos con distintos tamaños y parece ser que esta proporción es la que mejores resultados está dando. f.
La calidad es más importante que la diversidad al actualizar el conjunto de referencia. Notar que aunque el método comienza con un conjunto de referencia con soluciones de calidad y diversidad, al realizar las combinaciones, sólo entran al conjunto las soluciones por el criterio de calidad (hasta llegar a la etapa de regenerarlo). En Laguna y Martí (2000) se han probado actualizaciones de este conjunto por diversidad, obteniendo resultados finales peores.
g. Comparar las actualizaciones del conjunto de referencia estática y dinámica. Notar que al combinar las soluciones podemos aplicar dos estrategias, introducirlas en el conjunto, si procede, nada más generarlas, o anotarlas en una “pila” y cuando
terminemos de realizar todas las combinaciones, proceder a la actualización. La primera estrategia es dinámica y más agresiva, en tanto que las soluciones buenas entran rápidamente en el conjunto de referencia, pero dado que este es de tamaño constante, esto implica que hay soluciones que salen sin llegar a haber sido utilizadas para realizar combinaciones. Es necesario comparar ambas estrategias para ver cual proporciona mejores resultados finales. h. La mayor parte de las soluciones de calidad proceden de combinaciones de dos soluciones. Asimismo, las buenas soluciones suelen proceder de combinar buenas soluciones. Campos et al. (1999) realizan numerosos experimentos realizando un seguimiento a lo largo de la búsqueda de las soluciones de calidad en un problema concreto. i.
El uso de múltiples métodos de combinación ha de ser considerado. Campos, Laguna y Martí (2001) realizan un análisis de diferentes métodos de combinación, algunos con elementos aleatorios y otros deterministas, de modo que el algoritmo selecciona el método de combinación probabilísticamente, de acuerdo con los éxitos obtenidos por éste. De la misma forma que los métodos de búsqueda local basados en distintos entornos (Variable Neighborhood Search) están proporcionando muy buenos resultados, hemos de considerar el definir varios “entornos” de combinación para
realizar una búsqueda más completa del espacio de soluciones. Como conclusión podemos decir que la búsqueda dispersa es un método evolutivo que se encuentra en desarrollo. Sus orígenes se pueden situar en la década de los 70 y, aunque menos conocida que los algoritmos genéticos, se está aplicando en la resolución de numerosos problemas difíciles de optimización. En la actualidad no existe un esquema único para aplicar la búsqueda dispersa. En este trabajo hemos tratado de introducir aquellos aspectos básicos del método que son
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 90
ampliamente aceptados, así como revisar las últimas implementaciones realizadas y las cuestiones que son actualmente objeto de estudio. EJERCICIO: Aplicar la búsqueda dispersa a la resolución del VRP capacitado.
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
10. Métodos
10.1
ESPOL, 2015/ 91
de evolución diferencial
Introducción
La evolución diferencial (DE) fue originalmente diseñada por Price y Storn en 1999 (Storn, R., Price, K.: Differential evolution – a simple and efficient adaptive scheme for global optimization over continuous spaces, Technical Report 1999) para resolver problemas de optimización contínuos, pero luego ha sido extendida para resolver problemas combinatorios basados en permutaciones. La DE fue desarrollada con el fin de satisfacer los tres requerimientos básicos para que una técnica de optimización sea buena: 1. Independientemente de los valores iniciales el método deberá encontrar buenas soluciones. 2. La convergencia deberá ser rápida. 3. El programa deberá tener unos pocos parámetros de control para que sea fácil de usar. Por otro lado la DE ha demostrado ser un método que se desempeña muy bien en una amplia gama de problemas de prueba, y es intrínsecamente paralelo ya que está basado en una población. La estrategia básica emplea la diferencia de dos vectores de parámetros seleccionados aleatoriamente como la fuente de variaciones aleatorias para un tercer vector de parámetros. Desde el punto de vista de la DE los problemas de optimización del mundo real pueden ser clasificados en uno de los dos tipos siguientes: 1. Aquellos que son caracterizados por parámetros contínuos. 2. Aquellos que son caracterizados por parámetros combinatorios basados en permutaciones. La DE original fue desarrollada solo para problemas caracterizados por parámetros contínuos, pero recientemente ha sido ampliada a la resolución de problemas combinatorios (Onwubolu, G., Davendra, D.: Differential Evolution: A Handbook for Global Permutation-Based Combinatorial Optimization). 9.1 Problemas de Optimización DE en el espacio contínuo. Un típico problema de optimización DE en el espacio contínuo es la function generalizada de Rosenbrock dada como:
− , , … , = 100(+ ) 1, 30 ≤ ≤ 30, 0,1, … , 1, > 1, Fernando Sandoya, Ph.D.
ESPOL, 2015/ 92
Metaheurísticas y Redes Neuronales
, , … , ∗ 0,∗ 1
La solución del problema es , pero aunque es aparentemente simple es extremadamente difícil encontrarla por medio de algún método numeric (con DE no es muy complicado).
10.2
Optimización combinatoria DE basada en permutaciones.
Un problema típico de optimización combinatorio DE basado en permutaciones es el Job Shop Problem. El objetivo es hallar la mejor secuencia que garantice el makespan óptimo. Como se puede ver, este problema es muy diferente que el problema en el espacio contínuo ya que estamos interesados en una secuencia de los trabajos, que tiene una naturaleza de permutación. Así, si es el tiempo de operación del trabajo en la máquina , y es el instante de finalización de la ejecución del trabajo en la máquina , entonces el problema es:
, min 1,. ., {,} , {−,, ,−},
,
10.3 Adecuación de la DE como un optimizador combinatorio. En los últimos años se ha adaptado bastante bien la DE para resolver problemas combinatorios, hacienda esta técnica muy competitive frente a otras Metaheurísticas. Algunas de estas adaptaciones incluyen: 1. 2. 3. 4. 5.
Enfoque de transformación Forward/Backward; Enfoque de indexación de la posición relativa; Enfoque de la posición del valor más pequeño; Enfoque Discreto/binario; y, Enfoque de manipulación de conjunto discrete.
En este texto abordaremos el enfoque de indexación de la indexación de la posición relativa, que es más simple de implementar computacionalmente, y que ha dado Buenos reusltoados en algunos problemas de optimización combinatorial.
10.4
DE canónica para problemas de optimización contínuos.
ℐ 0 < ≤ 1.2 , 0 < < 1
Los parámetros usados en DE son = costo o valor de la function objetivo, = dimension del problema, = tamaño de la población, = población de -vectores, =número de generación, = máximo número de generación, = vector compuesto de parámetros, = vector de pruebas compuesto de parámetros, =factor de cruce. Otros son: =factor de escala , = cota superior, = cota inferior, y =vectores de pruebas, = vector con mínimo costo en la generación
,
= i-ésimo vector en la generación
,
= i-ésimo vector regulador (buffer) en la generación , = vector seleccionado aleatoriamente, =entero aleatorio . En la formulación = número de ciudades.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 93
Metaheurísticas y Redes Neuronales
La evolución diferencial DE es un método de bpusqueda paralela directa, que utiliza vectores de parámetros:
, 0,1,2,… , 1
Como una población para cada generación . El tamaño de la población, , no cambia durante el proceso de minimización. La población inicial es generada aleatoriamente asumiendo una distribución de probabilidad uniforme para todas las decisions aleatorias si no hay información inteligente inicial para el sistema. La idea crucial detrás de DE es un Nuevo esquema para la generación de los vectores de parámetros de prueba. DE genera nuevos vectores de parámetros al añadir el vector de diferencias ponderado entre dos miembros de la población a un tercer miembro. Si el vector resultante produce un valor objetivo menor que un miembro predeterminado de la población, el nuevo vector generado reemplaza al vector con el cual fue comparado. El vector de comparación puede, pero no necesita ser parte del
proceso de generación mencionado. Adicionalmente el mejor vector de parámetros , es evaluado para cada generación con el fin de realizar un seguimiento del progreso que se ha logrado durante el proceso de minimización. La extracción de información de distancia y dirección desde la población para generar desviaciones aleatorias resulta en un esquema adaptativo con excelentes propiedades de convergencia.
Las descripciones para las primeras dos variants mas prometedoras de DE, que se conocen como DE2 y DE3, son las siguientes: ESQUEMA DE2 Inicialización: Como con todos los algoritmos evolutivos, DE trabaja con una población de soluciones, no con una solución única para el problema de optimización. La población de la generación contiene vectores solución llamados individuos de la población y cada vector representa una solución potencial para el problema de optimización:
, 1, 2,… ,; 1,… , , , 1,2,… ,; 1, …,
Adicionalmente, cada vector contiene parámetros:
En orden a establecer un punto de inicio para la búsqueda del óptimo, la población deberá ser inicializada. A menudo no hay más conocimiento acerca de la ubicación del óptimo global que las cotas de las variables del problema. En ese caso, una manera natural para inicializar la
, [0,1] ,∀ ∈ [1,]; ∀ ∈ [1,] [0,1]
población (población inicial) es sembrarla con valores aleatorios dentro de las restricciones de acotamiento dadas:
Donde
representa un número aleatorio uniformemente distribuido en
restricciones de acotamiento superior e inferior son
y
, respectivamente:
[0,1]
. Las
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 94
Metaheurísticas y Redes Neuronales
≤ ≤ , ∀ ∈ [1, ] Para este y otros esquemas, tres operadores son cruciales: mutación, cruce y selección. MUTACIÓN: La primera variante de DE trabaja de la siguiente manera: para cada vector
, 0,1,2, … , 1 + , , , , ∈ [1,]; 1∈ [≠1,2],≠3> 0≠ 1 2 3 ∈ [1,] 1,2 3 1, 2 3 [0,1] , un vector de prueba es generado de acuerdo a:
Donde generados, con tal que
y los enteros .
,
y
son aleatoriamente
Los tres indices seleccionados aleatoriamente, y se refieren a tres vectores seleccionados aleatoriamente de la población, los cuales on mutuamente diferentes y también diferentes de el índice que se está corriendo . Nuevos valores aleatorios y se asignan para cada valor del índice (para cada vector). Un Nuevo valor para el número aleatorio es asignado para cada valor de índice (para cada vector parámetro). es un factor constant y real, que controla la aplificación de la variación diferencial. El siguiente gráfico ilustra los diferentes vectores de DE2 para una function de dos variables.
: NP Vectores parámetros de la generación G. : Nuevo vector parámetro generado
Mínimo
CRUCE: Para incrementar la diversidad de los vectores parámetros se construye el vector:
〈 〈 para 〉 , 1〉 , … ,〈 1〉 , , … , ; Si no Fernando Sandoya, Ph.D.
ESPOL, 2015/ 95
Metaheurísticas y Redes Neuronales
〈⋅〉
Donde representa la function modulo con modulo . Esto hace que una secuencia de los elementos de son idénticos a los elementos de , mientras los otros elementos de
[ ] [ ] 0 , 1 0 , 1 ∈ [0.1] 7 2 3 23 4 Vect o r parámet r o con⏟ los parámetros
toman los valores originales de . Escoger un subgrupo de parámetros para mutación es similar al proceso de cruce de los algoritmos genéticos. El índice inicial es escogido aleatoriamente en , mientras que es escogido en con probabilidad , donde es la probabilidad de cruce, que es una variable de control en el esquema DE2. La determinación aleatoria de y se hace para cada vector de prueba . Esta idea es representada en la siguiente figura con , y .
j=0
j=0
j=0
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
6
6
6
,=,,…,−
Para decidir si el nuevo vector pasará a ser un miembro de la población de la generación
1+
, se lo compara con
,
. Si el vector da un menor valor de la function objetivo que en
es igual a , sino se retiene el viejo valor de
.
ESQUEMA DE3: Básicamente, el esquema DE3 trabaja de la misma manera que DE2, pero genera el vector introduciendo una nueva variable de control :
La idea detrás de
es proveer un mecanismo para aumentar el character glotón del
esquema incorporando el major vector encontrado . La construcción de y al igual que el proceso de decision es idéntico a DE2. La siguiente figura ilustra el proceso de genración de vectores de la ecuación anterior.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 96
Metaheurísticas y Redes Neuronales
: NP Vectores parámetros de la generación G. : Nuevo vector parámetro generado v
Mínimo
También existen otras estrategias DE para generar el vector , cuya efectividad dpende del tipo de problema para el cual son aplicadas. Estas estrategias pueden variar basadas en el vector a ser perturbado, número de vectores diferencia consideradospara la perturbación y finalmente del tipo de cruce usado.
10.5
DE para problemas de optimización combinatorios basados en permutaciones.
La DE canónica no puede ser aplicada a problemas permutativos o discretos, a menos que sea modificada. El mecanismo interno de cruce y mutación cambia invariablemente en cada número real, esto en si mismo conducirá a soluciones infactibles. La solución es una transformación o bien en la población o en el mecanismo interno de mutación y cruce. A lgunos invstigadores han decidido no modificar las estrategias de operación de DE, pero si manipular la población de tal manera que permita a la DE operar sin obstáculos. Ya que la solución para una población es permutativa, son necesarias rutinas de conversion adecuadas para cambiar la solución desde los enteros a los reales y luego regresar a los enteros después del cruce. Algunas áreas de aplicación donde puede aplicarse la DE para problemas de optimización combinatoria basadas en permutaciones son las siguientes:
Scheduling: Flow Shop, Job Shop, Open Shop, etc. Knapsack Problem. Problema de asignamiento lineal (LAP) Problema de asignamiento cuadrático (QAP) Problema del Agente Viajero (TSP) Problema de ruteo de vehículos (VRP) Modelo pick-and-place dinámico.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 97
Metaheurísticas y Redes Neuronales
10.6 E nfoque de la indexación de la pos ición relativa o el enfoque Knapsack. El enfoque de la indexación de la posición relativa también es conocido como representación basada en el orden, y aunque puede que no sea el mejor método para resolver los problemas combinatorios, se muestra como una herramienta muy versátil que se puede adaptar para encontrar resultados razonables a un amplio rango de problemas de optimización combinatoria, y lo más útil es que requiere de muy poco código computacional, y en particular DE está implementada en Mathematica. Para explicar el enfoque establecemos lo siguiente: Tenemos un grupo de vectores denominados cromosomas, constituidos por genes de valores contínuos, ellos se aparean de acuerdo a una probabilidad de cruce, mutan por diferencias con otros pares y compiten con un cromosoma padre para ver quien pasa a la siguiente generación. En Mathematica estas opciones se manipulan por medio de los comandos CrossProbability, ScalingFactor y SearchPoints. Cada variable corresponde a un gen en cada cromosoma. CrossProbability es el parámetro CR, SearchPoints es NP, es decir el tamaño de la población o número de vectores cromosoma, y ScalingFactor es F. Los valores por defecto de estos parámetros son los que se recomienda en el artículo original de DE. La función de Mathematica que invoca a DE es NMinimize, en la cual se debe establecer como Method DifferentialEvolution. También se debe establecer la opción MaxIterations, que corresponde al número de generaciones. Es decir, se invoca a DE en Mathematica con las siguientes instrucciones:
→
NMinimize[objetivo, restricciones, variables, Method
→
{“DifferentialEvolution”, opciones método}, otras opc.]
Los valores que están por defecto para las opciones de DE en Mathematica se pueden consultar con la opción: Options[NMinimize`DifferentialEvolution]
Estas opciones que están establecidas por defecto (pero pueden ser cambiadas) son: {"CrossProbability" → 1/2, "InitialPoints" → Automatic, "PenaltyFunction" → Automatic, "PostProcess" → Automatic, "RandomSeed" → 0, "ScalingFactor" → 3/5, "SearchPoints" → Automatic, "Tolerance" → 0.001}
Un parámetro importante es el del número de iteraciones (MaxIterations), que está puesto por defecto en 100, lo cual podría ser muy poco en la resolución de problemas de optimización, si uno desea mejoras más grandes en la función objetivo este parámetro debe ser puesto en 1,000 o más. Una parte importante que se debe definir es el campo de restricciones, en el cual se debe especificar, entre otras, la restricción de integralidad de las variables. Para esto hay al menos dos enfoques viables:
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 98
Metaheurísticas y Redes Neuronales
El primero es permitir que las variables tomen valores en los reales, pero usar funciones de penalidad para empujarlas al campo de los enteros. Por ejemplo se
( )
puede añadir para cada variable , una penalidad del tipo ; donde es una constante grande adecuada. NMinimize no usa este enfoque, pero el usuario puede ponerlo de manera explícita usando la opción PenaltyFunction. El segundo método (que es el que usa por defecto NMinimize, es redondear explícitamente todas las variables de valor real antes de evaluarlas en la función objetivo. La experiencia en el desempeño de esta función indica que es el enfoque más eficiente.
Esto todavía no aborda el tema del cumplimiento del rango. Por ejemplo, supongamos que estamos usando variables en el rango {1,…,n} para construir una permutación de n elementos.
Si un valor resbala fuera del rango el efecto podría ser muy malo, por ejemplo se podría colgar la ejecución o un resultado sin sentido, por lo tanto es importante en el código hacer cumplir cuidadosamente las cotas de las variables. La implementación hace exactamente eso. SI una variable es restringida a tomar valores entre una cota inferior y una cota superior (restricción rectangular), entonces el código de NMinimize la forzará a caer dentro de las cotas, esto está ya implementado y no necesita ser invocado por el usuario. En la literatura de los métodos basados en evolución, frecuentemente se asocian las nociones de genotipo y fenotipo, el primero se refiere a los valores actuales de los cromosomas. Recordemos el trabajo básico de DE. Típicamente se forma un nuevo cromosoma a partir del apareamiento de sus cromosomas padre con una mutación proveniente de un segundo padre aleatorio. Dicha mutación es a su vez dada como una diferencia de otros dos cromosomas aleatorios. Estas operaciones son todas dadas en el nivel genotipo. Es en la traducción del cromosoma a un objeto combinatorio (por ejemplo una permutación) que se encuentra el fenotipo, que se refiere a la expresión del cromosoma como algo que puede ser usado para su evaluación en la función objetivo, dicho de otra manera uno decodifica un genotipo para obtener un fenotipo. Queremos genotipos que sean dóciles para las operaciones de mutación y apareamiento de la DE, y fenotipos que respondan bien al genotipo, en el sentido de que permitan mejoras razonables de la función objetivo. 10.6.1 Ejemplos Consideremos primero dos ejemplos simples para introducir la forma en que DE resuelve los problemas de optimización: 10.6.1.1
TRIPLETAS PITAGÓRICAS:
Son ternas ordenadas de enteros
x,y,z
tales que
x y z
.
El problema es hallar estas tripletas (supongamos que en un rango adecuado, por ejemplo los números enteros entre 1 y 25 que cumplen esto). Una forma de resolverlo es:
. . 1 ≤ ≤ 25; 1 ≤ ≤ 25; 1 ≤ ≤ 25; ≤ ; ,, ∈ Fernando Sandoya, Ph.D.
ESPOL, 2015/ 100
Metaheurísticas y Redes Neuronales
x1x1 →→ 13224 x2 → 34451 x3 → 87930 x4 → 7662 40579 x2 → 57689 x3 → 13178 x4 → 31821 x1x1 →→ 37714 x2 → 30923 x3 → 53450 x4 → 21180 31859 x2 → 16466 x3 → 82094 x4 → 12848 x1x1→→56919 x2 → 31889 x3 → 21434 x4 → 33025 404 x2 → 50237 x3 → 87394 x4 → 5232 x1x1 →→ 12799 x2 → 75752 x3 → 33542 x4 → 21174 10179 x2 → 32063 x3 → 95986 x4 → 5039 x1x1 →→ 45954 x2 → 42608 x3 → 24686 x4 → 30019 16739 x2 → 80348 x3 → 21110 x4 → 25070
10.6.1.3
EL PROBLEMA DEL PARTICIONAMIENTO DE CONJUNTOS (SPP):
Este es un problema que aparece en muchos contextos, en particular en la geometría computacional (ver aplicaciones en http://www.cs.ou.edu/~qcheng/paper/essr.pdf) Empecemos con un caso sencillo, supongamos que tenemos que particionar el conjunto de enteros del 1 al 100 en dos conjuntos de 50 elementos cada uno, de tal manera que la suma de las raíces cuadradas de los números de cada grupo sea lo más cercana posible. Hay varias maneras de expresar este problema con NMinimize, una forma es utilizando una forma sencilla de elegir 50 elementos de un conjunto de 100: usamos 100 números aleatorios entre 0 y 1, tomamos sus posiciones relativas, que definen una permutación de los números 1, 2, …, 100. datos val
Range 100 ;
RandomReal 1,
100
;
Ordering val pIndices, gIndices s1, s2
Map datos
Take &,
, 50 , Drop
, 50
& Ordering val
pIndices, gIndices
En este caso particular como los números son todos del 1 al 100 los conjuntos {pIndices, gIndices} y {s1, s2} coinciden, la misma idea aplica para la partición de cualquier conjunto en un número par de elementos, y con pequeñas modificaciones se puede efectuar la división en un número impar o una división en subconjuntos de cardinalidades distintas. SET PARTITIONNING VIA INDEXACIÓN DE LA POSICIÓN RELATIVA: Implementamos una función que particione un conjunto en dos (siguiendo las reglas anteriores): partirRango
v
:
With nuevov Ordering
v
Take nuevov, mitad , Drop nuevov, mitad
, mitad
Floor Length
v
2
;
partirRango val
Una vez que tenemos esta función para partir un conjunto en dos, construimos la función objetivo, que podría ser el valor absoluto de la diferencia, o la suma de los cuadrados de las diferencias (que es muy usado en las técnicas de optimización que requieren diferenciabilidad), en particular DE es un algoritmo de optimización libre de la derivada y por tanto se puede utilizar el valor absoluto.
Fernando Sandoya, Ph.D.
,
ESPOL, 2015/ 109
Metaheurísticas y Redes Neuronales
mejora de los músicos es comparable con los esquemas de búsqueda local y global de las técnicas de optimización (7). El algoritmo utiliza un procedimiento de búsqueda estocástica aleatorizado basado en la información que se tiene en la memoria junto con otros parámetros que se definirán más adelante, de tal manera que la información del gradiente y el uso de las derivadas de la función objetivo del problema ya no es necesaria.
11.2 Des cripción del Proceso de Optimización Las interpretaciones musicales tratan de encontrar una armonía agradable guiados por un patrón estético, tal y como, los procesos de optimización buscan encontrar la solución global a un problema guiados por la función objetivo. El tono de cada instrumento musical determina una calidad estética, de igual forma que el valor de la función objetivo es determinado por el conjunto de valores asignados a cada variable de decisión. En las prácticas de los grupos musicales, cada miembro del grupo toca una nota seleccionada al azar de un rango posible de opciones, haciendo todos juntos una armonía (Harmony Vector). Si la armonía entonada es buena, la experiencia es recordada en la memoria de cada miembro (Harmony Memory) y la posibilidad de entonar una mejor armonía se incrementa para la próxima vez. De manera similar, en optimización, cada variable de decisión toma un valor seleccionado al azar dentro un intervalo posible, haciendo todas juntas un vector solución. Si todas las variables de decisión forman una buena solución del problema, el resultado es almacenado en la memoria de cada variable y la posibilidad de formar una mejor solución la próxima iteración aumenta. Cuando un músico mejora un tono, usualmente sigue una de las siguientes tres reglas:
Toca cualquier tono que se encuentre almacenado en su memoria. Toca un tono adyacente al tono actual basado en su memoria y en un ajuste de tono. Toca un nuevo tono al azar.
De manera similar, cuando una variable de decisión toma un valor dentro de la metaheurística Harmony Search, sigue uno de estos tres pasos:
Toma un valor seleccionado al azar de entre los que se encuentran almacenados en la memoria de la variable. Toma un valor adyacente a uno de los valores que se encuentre en la memoria de la variable, determinado por el ancho de banda. Toma un valor seleccionado al azar dentro de un intervalo posible.
Las tres reglas en el algoritmo son dirigidas de manera efectiva por medio de la utilización de los siguientes parámetros:
La probabilidad de consideración de memoria La probabilidad de ajuste de tono . El ajuste de ancho de banda .
.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 110
Metaheurísticas y Redes Neuronales
Utilizando la harmony memory y las tres reglas mencionadas se puede crear una nueva armonía, la cual es análoga con encontrar una nueva solución del problema de optimización. Si la nueva armonía es mejor que alguna de las que se encuentran almacenadas en la harmony memory, ésta reemplaza a la peor de todas las armonías almacenadas. Caso contrario, se crea una nueva armonía siguiendo el procedimiento descrito. Se repiten los pasos anteriores hasta que el criterio de parada sea cumplido. En resumen, la metaheurística Harmony Search se sintetiza en los siguientes pasos: 1. 2. 3. 4. 5.
, ,
Inicializar los parámetros del algoritmo . Establecer el tamaño de la memoria e inicializar la harmony memory Crear una nueva armonía a partir de la harmony memory. Actualizar la harmony memory. Repetir los pasos 3 y 4 hasta que el criterio de parada sea cumplido.
.
11.3 Ps eudocódig o de la Metaheurís tica Harmony S earch
, , … , .: ≤ ≤
Sea optimización:
Donde
y
el vector de variables de decisión del problema de
∀ 1,2, … ,
son las cotas inferior y superior asociadas a la variable de decisión
Paso 1 Se inicializan los parámetros del algoritmo:
.
0. 9 , 10 0.5, 100
Paso 2 Inicializar la harmony memory creando armonías aleatorias utilizando el siguiente procedimiento:
1 1ℎ ℎ, ~
Paso 3 Crear una nueva armonía considerando los parámetros del algoritmo y la harmony memory. Para ello se utiliza el siguiente procedimiento:
~0, 1 ℎ 1 ≤ ′ ~0, 1 ≤ ~1, ′ ′ ∙ ~1,1 ′ ~ ,
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 111
Metaheurísticas y Redes Neuronales
′
Paso 4 Comparar la nueva armonía con la peor armonía almacenada en la harmony memory. Si es mejor que la que se tiene almacenada, reemplazar la peor armonía por .
′′
Paso 5 Repetir los pasos 3 y 4 hasta que se alcance el criterio de parada establecido. La mejor solución almacenada en la harmony memory será la solución final encontrada para el problema de optimización que se esté resolviendo.
11.4 Variantes de la Metaheurís tica Harmony Search Desde su reaparición en el año 2005, algunas variantes han sido propuestas para mejorar el rendimiento del algoritmo original desarrollado por Geem. Las variantes más conocidas son:
11.4.1 Improved Harmony Search La cual propone un método adaptativo para ir actualizando algunos de los parámetros del algoritmo. El modelizador sólo necesita inicializar los parámetros y y, a través del método propuesto, se irán calculando iteración tras iteración los valores reales de y . La principal desventaja de este método radica en que se necesita inicializar los valores de y los cuales son muy dependientes del problema y difíciles de ajustar.
Bw PAR Bw Bw Bw 11.4.2 Global Best Harmony Search
PAR,PAR, Bw Bw
La cual propone, en lugar de actualizar iterativamente el valor de , eliminarlo del algoritmo y realizar el ajuste de tono asignándole a la variable de decisión que se está explorando, el valor que toma una de las variables de decisión (seleccionada de manera aleatoria) que forma parte de la mejor armonía almacenada hasta esa iteración en la harmony memory. Su principal desventaja radica en que las variables de decisión del problema pueden representar cosas completamente ajenas a lo que representa la variable que se explora en esa iteración. 12. Redes
22.1
neuronales
Introducción
Las redes neuronales constituyen una floreciente tecnología que puede ayudar muy significativamente en una gran cantidad de aplicaciones. Son sistemas de cálculo que se asemejan las características biológicas del cerebro, y están siendo adaptadas para su uso en una variedad de aplicaciones comerciales, militares y tecnológicas, que van desde el reconocimiento de patrones hasta la optimización y planificación. En este capítulo se mostrará cómo las redes neuronales pueden ser utilizadas para manejar un tipo de complejos problemas de tipo combinatorio. DEL CEREBRO A LAS REDES NEURONALES
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 112
A pesar de que el cerebro humano ya había sido estudiado desde la Edad Media e incluso antes, su estructura profunda n fue desvelada hasta finales del pasado siglo. En ese momento los científicos, en controversia, se dividían en reticularistas y neurologistas. Para los primeros el cerebro es una glándula cuya secreción se distribuye por todo el cuerpo por medio de las fibras nerviosas. En cambio, para los neurologistas, el cerebro es un sistema complejo constituido por unidades individuales bien diferenciasdas, llamadas neuronas, unidas unas a otras por una malla de fibras nerviosas. El trabajo desarrollado entre 1894 y 1911 por el médico español Ramón y Cajal disipó la controversia a favor por Golgi en 1888 basada en la tinción de las fibras nerviosas, e identificó las neuronas como las unidades constitutivas del cerebro. El examen de esta estructura tan compleja por medio del microscopio electrónico reveló que a pesar de la gran variedad existente de neuronas, tienen las mismas partes principales:
Cuerpo (o soma) Dendritas Axón (o cilindro eje)
Esta estructura se corresponde con la de un proceso, con sus respectivas funciones de entrada y salida. Las dendritas reciben las señales de las neuronas adyacentes y las transmiten al cuerpo en forma de un potencial eléctrico. Estas señales eléctricas son integradas por el cuerpo celular (soma). Si este potencial eléctrico es superior a un valor umbral, el soma genera un corto impulso eléctrico. Este impulso se transmite por el axón, que es una fibra nerviosa con una longitud que varía entre milímetros y varios metros. El axón se ramifica y dirige el impulso a varias neuronas vía sinapsis. La sinapsis es la unión del axón con otras neuronas. Hay dos tipos de sinapsis. El primero se llama sinapsis de excitación, cuyo efecto es incrementar el potencial en la neurona destino. El segundo tipo es el de sinapsis inhibitoria cuya misión es hacer decaer el potencial en la neurona de destino. Esta descripción de los componentes fundamentales del sistema nervioso es bastante simplificada. De hecho, en la teoría de redes neuronales, las neuronas se consideran como cajas negras, y por tanto no se necesita una descripción más detallada de a neurona. No obstante, no es posible comprender la capacidad del cerebro para realizar funciones tan complejas como la percepción visual o el control motriz si se permanece al nivel de la neurona.
22.2
Modelos de neuronas
El primer modelo artificial de neurona establecido por McCulloch y Pitts {1943}. Este modelo consistía en un dispositivo no lineal de múltiples entradas con interconexiones “con peso”. En este modelo las interconexiones afectadas por los pesos representaban las
dendritas; el cuerpo celular se representaba por una función no lineal; la neurona artificial sumaba las entradas ya ponderadas, les aplicaba la función no lineal y transmitía la salida. Veamos un caso muy simple en el cual la neurona tiene dos entradas, representadas por un vector x=(x1, x2). A los pesos para las interconexiones los llamaremos w1 y w2, y la función no
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 113
Metaheurísticas y Redes Neuronales
Θ ∑=
lineal es una función umbral g(x), cuyo valor umbral es , siendo la salida un escalar y. Esto se puede representar como y= g con
≤>
g(h)=
A pesar de su simplicidad, este modelo artificial puede resolver funciones booleanas. Por ejemplo, esta simple red es capaz de resolver la función booleana OR;para valores booleanos +1(cierto) y -1(falso),basta tomar los pesos w1=w2=1, y el umbral .
Θ 0.5
Cuando este modelo se extiende a vectores de entrada n-dimensionales reales, la ecuación es y=g
∑=
A la función g se la denomina función de transferencia o ganancia, y representa cómo la neurona calcula la salida y para una entrada x, y unos pesos dados. Cuando g es una función umbral, como en el caso anterior, la neurona se llama unidad umbral.Pero esta clase de funciones umbrales no es la única posible. En la figura 3 se muestran otras funciones de ganancia de uso frecuente.
22.3 Arquitecturas Una red neuronal artificial está formada por un conjunto de neuronas interconectadas entre ellas. El modo en que se interconectan constituye la arquitectura de la red. Hay varias arquitecturas y las más comunes son las redes por capas, las redes recurrentes y las redes de conexión lateral. Estas arquitecturas están muy ligadas a la regla de aprendizaje para adiestrar a la red. En este apartado se representan estas arquitecturas y en el siguiente las correspondientes reglas de aprendizaje. Redes neuronales por capas La estructura de una red neuronal de este tipo está dispuesta en capas. En estas redes cada capa de neuronas recibe señales sólo de las capas previas. Por esto se llaman redes feedforward o perceptrón. La primera red feed-forward fue presentad por Rosenblatt {1957}, y tenía una capa de entrada y una capa de salida constituida por un conjunto de unidad umbral. La figura 4 ilustra la arquitectura del preceptrón. En la primera capa no se realiza cálculo (capa de entrada) y por este motivo se considera a esta red como de una capa. La segunda clase de red por capas es la multicapa con fedd-forward, también denominada perceptrón multicapa. En esta a clase, se tiene al menos una capa (las denominadas “capas ocultas”) entre las de entrada y la salida. Cuando cada unidad de una capa se conecta a cada
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 114
Metaheurísticas y Redes Neuronales
nodo de la capa adyacente siguiente, la red se denomina “totalmente conectada” en contraposición a la que es “parcialmente conectada”. En la figura 5 se tien un ejemplo de cada
red. Redes neuronales recurrentes En estas redes cada neurona se conecta a todas las neuronas de la red, incluso contigo misma, lo que significas que se tienen bucles en la arquitectura de la red. Las entradas de una neurona son las salidas del resto de las neuronas de la etapa previa. En estas redes es muy importante la dinámica de las mismas. La salida de cada neurona se lllama “estado de la neurona”, y el estado de la red quedará definido por el es tado de cada neurona. La red es
estable cuando su estado permanece igual tras varias iteraciones. La estabilidad es un concepto muy importante es esta clase de redes. La red de Hopfield es un caso muy importante de esta clase. La figura 6 ilustra un ejemplo de red de Hopfiels. Redes conectadas lateralmente En esta clase de redes, las neuronas se colocan en los nodos de un retículo dimensión 1 ó 2 (aunque puede haber dimensiones mayores, no se suelen utilizar). La figura 7 ilustra un ejemplo de una red de dimensión uno, conectada lateralmente y otra de dimensión 2. La red de esta clase más común es la de Kohonen.
22.4
Reglas de aprendizaje
La característica más interesante de las redes neuronales artificiales es su capacidad de aprendizaje. Hay dos modos principales de aprendizaje: el aprendizaje supervisado y el no supervisado. En la práctica, las reglas de aprendizaje especifican cómo adaptar los pesos sinápticos. Esta adaptación se realiza mediante una interacción continua entre la red neuronal y el entorno. La primera hipótesis sobre el proceso de aprendizaje en los cerebros naturales fue formulada por Hebb [1949].Introdujo el siguiente principio: “Los pesos de sinapsis aumentan
cuando tanto las simultáneamente”.
neuronas
pre-sinápticas
como
la
post-sinápticas
se
activan
Una componente esencial en el aprendizaje supervisado es la existencia de un maestro o supervisor. La misión de la red neuronal es dar la salida deseada para cada entrada. Cuando se pasa un vector de entrada a la red, el instructor sabe cual ha de ser la salida (salida deseada). La regla de aprendizaje adaptará los pesos de las sinápsis de tal modo que el error entre la salida real y la deseada sea mínimo. El perceptrón y las redes multicapa utilizan este método de aprendizaje. El procedimiento seguido para “enseñar” a una red neuronal es el siguiente: se diseña un
conjunto de ejemplos de entrenamiento. Cada ejemplo consta de un par de vectores, uno de entrada y otro de salida deseada. Durante la fase de entrenamiento, los pesos sinápticos se adaptan para minimizar el error entre las salidas real y deseada. Cuando termina la fase de Fernando Sandoya, Ph.D.
ESPOL, 2015/ 115
Metaheurísticas y Redes Neuronales
entrenamiento (por ejemplo cuando el índice de error sea menor del 1% ) dejan de variar los pesos sinápticos y quedan fijados para las operaciones siguientes. A continuación viene la fase de generalización. Basándose en los pesos determinados en la fase de entrenamiento, la red encontrará la salida adecuada, incluso aunque el supervisor no conozca dicha salida. En el proceso de aprendizaje no supervisado, no se dispone de instructor. En este caso no hay conjunto de entrenamiento, y no se conocen las salidas deseadas. La tarea de una red no supervisada es clasificar los vectores de entrenamiento en clases y grupos. La tarea de aprendizaje se realiza aplicando el concepto de similitud. La similitud de dos vectores se suele medir por su producto escalar (ésta no es la única medida). La regla de aprendizaje competitiva se usa para realizar un proceso no supervisado de aprendizaje. Cuando se presenta un vector de entrada a la red, se selecciona una neurona (lo que significa que todas las neuronas tratan de ser seleccionadas), pero sólo la ganadora es seleccionada. El modelo de Kohonen es un ejemplo de red que utiliza el método no supervisado.
22.5
Redes neuronales artificiales y los problemas de optimización combinatoria
Los modelos conexionistas han atraído la atención por su prometedora potencialidad como métodos heurísticos para hallar soluciones aproximadas a complejos problemas de optimización. En sus pioneros trabajos, Hopfield y Tank[1985] mostraron que las redes neuronales artificiales pueden ofrecer buenas aproximaciones a la solución del problema del viajante,TSP. El principal resultado de este artículo fue mostrar la posibilidad de empleo de redes neuronales artificiales para la resolución de problemas, aunque desde el punto de vista de lso investigadores de operaciones los resultados de este método distaban de ser convincentes. De hecho, el método se aplicaba a problemas “pequeños” (el tamaño del
problema variaba entre 10 y 30 ciudades). Después de este artículo, hubo muchos intentos para desarrollar algoritmos neuronales para solucionar éste y otros problemas dde optimización. Hay dos aproximaciones básicas para el uso de redes neuronales en la solución de problemas de optimización. La primera se basa en la física estadística. Entre los diferentes algoritmos neuronales basados en esta aproximación estudiaremos el Modelo de Hopfiel d y el recocido del campo medio (“ mean field annealig” en inglés). La segunda aproximación se basa en las redes competitivas y tienen dos variantes principales. Como veremos, la primera se basa en la red de Kohonen y la segunda en las redes deformables, especialmente adaptadas al problema del viajante. No obstante, mostraremos como extender estas aproximaciones a problemas más generales como múltiple TSP y el de rutificación.
22.6 Aproximación estadística para el problema de la optimización. En este apartado expondremos la relación entre la termodinámica y los problemas de optimización combinatoria. En la última década se ha visto que los problemas de optimización combinatoria están relacionados, de esta forma sencilla, con la física estadística :
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 116
Una instancia de un problema de optimización combinatoria es equivalente a una muestra en física estadística. Una prueba en optimización combinatoria es una configuración en física estadística. La función de coste equivale a la energía. Una solución óptima corresponde a la energía mínima. El coste mínimo es el estado de mínima energía.
Consecuentemente, el primer paso para solucionar el problema de la optimización en el marco de la física estadística es inscribirlo en términos de estados que sean variables discretas en un espacio Euclídeo. BIBLIOGRAFÍA:
Campos V., Laguna M. y Martí R. (1999), “Scatter Search for the Linear Ordering Problem”, New Ideas in Optimisation, D. Corne, M. Dorigo and F. Glover (Eds.), McGraw-Hill. 331-341. Campos V., Laguna M. y Martí R. (2001) “Context -Independent Scatter and Tabú Search for Permutation Problems”, Technical report TR03 -2001, Departamento de Estadística e I.O., Universidad de Valencia. Campos, V., F. Glover, M. Laguna and R. Martí (1999) “An Experimental Evaluation of a Scatter Search for the Linear Ordering Problem to appear in Journal of Global Optimization. Corberán A., E. Fernández, M. Laguna and R. Martí (2000), “Heuristic Solutions to the Problem of Routing School Buses with Multiple Objectives”, Technical report TR08 -2000, Departamento de Estadística e I.O., Universidad de Valencia. Davis, L. (1996), Handbook of Genetic Algorithms, International Thomson Computer Press, Londres. Díaz, A., Glover, F., Ghaziri, H.M., Gonzalez, J.L., Laguna, M, Moscato, P. y Tseng, F.T. (1996). Optimización Heurística y Redes Neuronales, Paraninfo, Madrid. Feo, T. and Resende, M.G.C. (1989), A probabilistic heuristic for a computational difficult set covering problems, Operations research letters, 8, 67-71. Feo, T. and Resende, M.G.C. (1995), “Greedy Randomized Adaptive Search Procedures”, Journal of Global Optimization, 2, 1-27. Festa, P. and Resende, M.G.C. (2001), “GRASP: An Annotated Bibliography”, AT&T Labs Research Tech. Report . Fisher, M.L. (1980), “Worst-Case Analysis of Heuristic Algorithms", Management Science, 26, pág. 1-17. Glover, F. (1977) “Heuristics for Integer Programming Using Surrogate Constraints,” Decision Sciences, Vol. 8, pp. 156-166. Glover, F. (1986) “Future Paths for Integer Programming and Links to Artifical Intelligence”, Computers and Operations Research , 13, 533. Glover, F. (1989), “Tabú Search: Part I”, ORSA Journal on Computing, 1, 190. Glover, F. (1990), “Tabú Search: Part II”, ORSA Journal on Computing, 1, 4. Glover, F. (1998) “A Template for Scatter Search and Path Relinking,” in Artificial Evolution, Lecture Notes in Computer Science 1363, J.-K. Hao, E. Lutton, E. Ronald, M. Schoenauer and D. Snyers (Eds.), Springer-Verlag, pp. 13-54.
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 117
Glover, F., M. Laguna and R. Martí (1999) “Scatter Search,” to appear in Theory and Applications of Evolutionary Computation: Recent Trends, A. Ghosh and S. Tsutsui (Eds.), Springer-Verlag. Glover, F., M. Laguna and R. Martí (2000), “Fundamentals of Scatter Search and Path Relinking”, Control and Cybernetics, 29 (3), 653 -684. Glover, F., M. Laguna, E. Taillard and D. de Werra (1993), “A user’s guide to Tabú search”, Annals of Operations Research, 4, 3-28. Glover, F.and Laguna, M. (1997), Tabú Search, Ed. Kluwer, London. Holland, J.H. (1992), Genetic Algorithms, Scientific American, 267, 66. Johnson, D.S., Aragon, C.R., McGeoch, L.A. and Schevon, C. (1989), Optimization by Simulated Annealing: An experimental evaluation; Part I, Graph Partitioning, Operations Research 37. Johnson, D.S., Aragon, C.R., McGeoch, L.A. and Schevon, C. (1991), Optimization by Simulated Annealing: An experimental evaluation; Part II, Graph Coloring and Number Partitioning, Operations Research 39. Jünger, M., Reinelt, G. y Rinaldi, G. (1995), “The Traveling Salesman Problem", En: Ball, M.O., Magnanti, T.L., Monma, C.L. y Nemhauser, G.L. (eds.), Handbook in Operations Research and Management Science, Vol. 7, Network Models, pág 225--330. NorthHolland, Amsterdam. Kirkpatrick, S., Gelatt, C.D. and Vecchi, P.M. (1983), Optimization by simulated annealing, Science, 220, 671-680 Laguna M. and Martí R. (2000) “ Experimental Testing of Advanced Scatter Search Designs for Global Optimization of Multimodal Functions”. Technical report TR11-2000, Departamento de Estadística e I.O., Universidad de Valencia. Laguna M. and Martí R. (1999), “GRASP and Path relinking for two layer straight-line crossing minimization”, INFORMS Journal on Computing, 11(1), 44-52. Laguna M. and Martí R. (2002), “The OptQuest Callable Library” Optimization Software Class Libraries, Voss and Woodruff (Eds.), 193-218,Kluwer. Laporte, G. (1992), “The Travelling Salesman Problem: An Overview of Exact and Approximate Algorithms", European Journal of Operational Research, 59, pág. 231--247. Lawler, E.L., Lenstra, J.K., Rinnooy Kan, A.H.G. y Shmoys, D.B. (eds.) (1985), The Traveling Salesman Problem. A Guided Tour to Combinatorial Optimization, John Wiley and Sons, Chichester. Lin, S. y Kernighan, B.W. (1973), “An Effective Heuristic Algorithm for the Traveling Salesman Problem", Operations Research, 21, pág. 498--516. Lokketangen, A. and Glover, F. (1996) “Probabilistic move selection in Tabú search for 0/1 mixed integer programming problems” Meta -Heuristics: Theory and Practice, Kluwer, pp. 467-488. Martí, R. (2000), “MultiStart Methods” to appear in Ha ndbook on MetaHeuristics, Kluwer. Michalewicz, Z. (1996), Genetic Algorithms + Data Structures = Evolution Programs, tercera edición, Springer Verlag. Osman, I.H. and Kelly, J.P. (eds.) (1996), Meta-Heuristics: Theory and Applications, Kluwer Academic, Boston.
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 79
En los trabajos originales las soluciones se representaban por strings binarios, es decir, listas de 1s y 0s. Este tipo de representaciones ha sido ampliamente utilizada incluso en problemas en donde no es muy natural. En 1985, De Jong introduce la siguiente cuestión: ¿Qué se debe hacer cuando los elementos del espacio de búsqueda se representan de modo natural por estructuras complejas como vectores, árboles o grafos?, ¿Se debe intentar linealizar en un string o trabajar directamente con estas estructuras? En la actualidad podemos distinguir dos escuelas, la primera se limita a strings binarios, mientras que la segunda utiliza todo tipo de configuraciones. Hemos de notar que las operaciones genéticas dependen del tipo de representación, por lo que la elección de una condiciona a la otra. La ventaja de las primeras es que permite definir fácilmente operaciones de recombinación, además los resultados sobre convergencia están probados para el caso de strings binarios. Sin embargo en algunos problemas puede ser poco natural y eficiente el utilizarlas. Por ejemplo en el problema del agente viajero sobre 5 ciudades y 20 aristas, el string 01000100001000100010 representa una solución sobre las aristas ordenadas. Sin embargo dicha representación no es muy natural y además, no todos los strings con cinco 1s representan soluciones lo cual complica substancialmente la definición de una operación de sobrecruzamiento. Es más natural la ruta de ciudades: (2,3,1,5,4), lo cual permite definir naturalmente diferentes operaciones estables. La población inicial suele ser generada aleatoriamente. Sin embargo, últimamente se están utilizando métodos heurísticos para generar soluciones iniciales de buena calidad. En este caso, es importante garantizar la diversidad estructural de estas soluciones para tener una “representación” de la mayor parte de población posible o al menos evitar la convergencia
prematura. Respecto a la evaluación de los cromosomas, se suele utilizar la calidad como medida de la bondad según el valor de la función objetivo en el que se puede añadir un factor de penalización para controlar la infactibilidad. Este factor puede ser estático o ajustarse dinámicamente, lo cual produciría un efecto similar al de la Oscilación Estratégica en Tabú Search: calidad = Valor Objetivo Normalizado - Penalización * Medida Infactibilidad En resumen, en el proceso de selección se escoge qué individuos tendrán la oportunidad de reproducirse, habitualmente mediante probabilidades según su fitness. Habrán individuos que aparezcan más de una vez y habrán individuos que no aparezcan. Principalmente hay dos técnicas para realizar esta función: Ruleta y Torneo. La primera técnica elige individuos con probabilidad proporcional a su función de fitness. La segunda establece k torneos aleatorios entre parejas de individuos y selecciona aquellos que ganen cada torneo. Los Operadores de Cruzamiento más utilizados son:
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 80
Metaheurísticas y Redes Neuronales
De un punto:
Se elige aleatoriamente un punto de ruptura en los padres y se intercambian sus bits.
De dos puntos: Se eligen dos puntos de ruptura al azar para intercambiar. Uniforme:
En cada bit se elige al azar un padre para que contribuya con su bit al del hijo, mientras que el segundo hijo recibe el bit del otro padre.
PMX, SEX:
Son operadores más sofisticados fruto de mezclar y aleatorizar los anteriores.
La operación de Mutación más sencilla, y una de la más utilizadas consiste en reemplazar con cierta probabilidad el valor de un bit. Notar que el papel que juega la mutación es el de introducir un factor de diversificación ya que, en ocasiones, la convergencia del procedimiento a buenas soluciones puede ser prematura y quedarse atrapado en óptimos locales. Otra forma obvia de introducir nuevos elementos en una población es recombinar elementos tomados al azar sin considerar su fitness. A continuación mostramos la implementación de un algoritmo genético propuesta por Michalewicz (1996), en donde se combinan los elementos genéticos con la búsqueda local. Algoritmo Genético 1. Generar soluciones — Construir un conjunto de soluciones P con tamaño PopSize mediante generación aleatoria. 2. Mejorar soluciones — Aplicar un método de búsqueda local a cada solución del conjunto P. Mientras (número de evaluaciones < MaxEval ) 3. Evaluación — Evaluar las soluciones en P y actualizar, si es necesario, la mejor solución almacenada. 4. Supervivencia — Calcular la probabilidad de supervivencia basada en la calidad de las soluciones. Según dichas probabilidades seleccionar aleatoriamente PopSize soluciones (con reemplazamiento) de P. Sea P el nuevo conjunto formado por las soluciones seleccionadas (algunas pueden aparecer repetidas). 5. Combinación — Seleccionar una fracción p c de soluciones de P para ser combinadas. La selección es aleatoria y equi-probable para todos los elementos de P. Los elementos seleccionados se emparejan al azar y, por cada pareja, se generan dos descendientes que reemplazaran a los padres en P. 6. Mutación — Una fracción p m de las soluciones de P se selecciona para aplicar el operador de mutación. La solución resultante reemplaza a la original en P. Parámetros habituales (pero no son los únicos posibles, ya que dependen de la aplicación concreta): Población: entre 50 y 100 cromosomas. Longitud del cromosoma: depende del problema. Generaciones: entre 20 y 1000. Probabilidad (o porcentaje) de cruce: de 20% a 60% por cromosoma. Probabilidad (o porcentaje) de mutación: de 0.1% a 5% por gen.
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 81
Convergencia del Algoritmo Dado que el algoritmo genético opera con una población en cada iteración, se espera que el método converja de modo que al final del proceso la población sea muy similar, y en el infinito se reduzca a un sólo individuo. Se ha desarrollado toda una teoría para estudiar la convergencia de estos algoritmos en el caso de strings binarios. Esta teoría se basa principalmente en considerar que un string es un representante de una clase de equivalencia o esquema, reinterpretando la búsqueda en lugar de entre strings, entre esquemas. De este modo se concluye lo que se conoce como paralelismo intrínseco: “En una población de m strings se están procesando implícitamente O(m3 ) esquemas”. A partir de este resultado el teorema de esquemas prueba que la población converge a unos esquemas que cada vez son más parecidos, y en el límite a un único string. En el caso de strings no binarios se introducen los conceptos de forma y conjunto de similitud que generalizan al de esquema. Se consideran una serie de condiciones sobre los operadores de manera que se garantice la convergencia. Básicamente se exige que al cruzar dos strings de la misma clase se obtenga otro dentro de ésta. Además hay que respetar ciertas condiciones sobre selección de los progenitores. Bajo toda esta serie de hipótesis se prueba la convergencia del algoritmo. En la práctica no se suelen respetar las condiciones vistas ya que son difíciles de seguir y probar, encontrándonos con que, en ocasiones los algoritmos genéticos resuelven satisfactoriamente un problema de optimización dado y otras se quedan muy alejados del óptimo. Los estudiosos del tema han tratado de caracterizar lo que han denominado problemas AG-fáciles (aquellos en los que los AG proporcionan buenos resultados) y AGdifíciles con el objetivo de saber de antemano, al estudiar un nuevo problema, si los AG son una buena elección para su resolución. Se han tratado de caracterizar estas clases mediante el concepto de engaño considerando que si el algoritmo converge al mejor esquema (aquel con mejor promedio del fitness de sus strings) y en éste se encuentra el óptimo, entonces es fácil que se resuelva satisfactoriamente. En caso de que el óptimo esté en un esquema con bajo promedio se denomina engaño y se pensaba que en estos casos es cuando el problema es AG-difícil. Sin embargo se ha visto que esta caracterización mediante el engaño no es siempre cierta y no constituye un criterio fiable. Es importante citar que, a diferencia de otros metaheurísticos, los Algoritmos Genéticos han crecido de forma espectacular, hasta el punto de poder encontrar referencias sobre ellos en revista de informática de carácter general. Además muchos de los investigadores de este campo están trabajando en desarrollar los aspectos teóricos de la materia, e incorporando algunas otras técnicas de búsqueda local en el esquema genético. Los Algoritmos Meméticos son un caso particular de estos nuevos híbridos que aúnan los elementos de combinación con los de búsqueda local bajo el nombre de cooperación y competición. Podemos encontrar esquemas de procedimientos genéticos ya implementados en los que incorporar nuestras funciones de evaluación y con poco más, tener un algoritmo genético para nuestro problema. Existen numerosos accesibles (algunos de libre distribución y otros Fernando Sandoya, Ph.D.
ESPOL, 2015/ 82
Metaheurísticas y Redes Neuronales
comercializados por compañías de software) y son muy populares especialmente en el entornos informáticos. Entre los más populares están:
Solver de Excel (Frontline Systems, Inc.) con un límite de 100 restricciones y 200 variables RiskOptimizer (Palisade Inc.) sin límite aparente,
Estos esquemas reciben el nombre de “context -independent” y habitualmente sólo utilizan
la evaluación de la solución como información del problema. En general proporcionan resultados de menor calidad que la de los algoritmos específicos (dependientes del contexto) diseñado para un problema dado, pero por otro lado, su aplicación es muy sencilla. EJERCICIO: Se trata de resolver el problema de la mochila por medio de algoritmos genéticos. En primer lugar se debe generar el problema a resolver de tamaño n de la siguiente manera: la utilidad unitaria es un entero aleatorio entre 100 y 1000, el peso unitario es un entero aleatorio entre 200 y 1200 y la capacidad de la mochila es igual al promedio del peso unitario de los objetos multiplicado por n y dividido para 2. Fijar la semilla aleatoria en 1234. Diseñar dos algoritmos genéticos para resolver el problema del KP: PRIMER ALGORITMO: 1. Generar soluciones — Construir un conjunto de soluciones P con tamaño PopSize mediante generación aleatoria. 2. Mientras (número de evaluaciones < MaxEval ) 3. Evaluación — Evaluar las soluciones en P y actualizar, si es necesario, la mejor solución almacenada. 4. Supervivencia — Calcular la probabilidad de supervivencia basada en la calidad de las soluciones. Según dichas probabilidades seleccionar aleatoriamente 2 soluciones (p1 padre y p2 madre) de P. 5. Combinación — Aparear p1 con p2 y p2 con p1, generando dos descendientes que, de generar soluciones factibles, serán h1 y h2. 6. Mutación — Para h1 y h2 aplicar el operador de mutación. La solución resultante reemplaza a la peor solución que se encuentra en P. SEGUNDO ALGORITMO: 1. Generar soluciones — Construir un conjunto de soluciones P con tamaño PopSize mediante generación aleatoria. 2. Mejorar soluciones — Aplicar un método de búsqueda local a cada solución del conjunto P. Mientras (número de evaluaciones < MaxEval ) 3. Evaluación — Evaluar las soluciones en P y actualizar, si es necesario, la mejor solución almacenada.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 83
Metaheurísticas y Redes Neuronales
4. Supervivencia — Calcular la probabilidad de supervivencia basada en la calidad de las soluciones. Según dichas probabilidades seleccionar aleatoriamente n_cand soluciones de P. Sea P el nuevo conjunto formado por las soluciones seleccionadas (algunas pueden aparecer repetidas). 5. Combinación — Seleccionar una fracción p c de soluciones de P para ser combinadas. La selección es aleatoria y equi-probable para todos los elementos de P. Los elementos seleccionados se emparejan al azar y, por cada pareja, se generan dos descendientes que reemplazaran a los padres en P. 6. Mutación — Una fracción p m de las soluciones de P se selecciona para aplicar el operador de mutación. La solución resultante reemplaza a la original en P. OBSERVACIÓN: las fracciones se eligen tal que: pc + pm < 1 y n_cand < PopSize.
9.2
Búsqueda Dispersa (Scatter Search)
La Búsqueda Dispersa (BD) es un método evolutivo que ha sido aplicado en la resolución de un gran número de problemas de optimización. Los conceptos y principios fundamentales del método, fueron propuestos a comienzo de la década de los setenta, basados en las estrategias para combinar reglas de decisión, especialmente en problemas de secuenciación, así como en la combinación de restricciones (como el conocido método de las restricciones subrogadas). La BD se basa en el principio de que la información sobre la calidad o el atractivo de un conjunto de reglas, restricciones o soluciones puede ser utilizado mediante la combinación de éstas. En concreto, dadas dos soluciones, se puede obtener una nueva mediante su combinación de modo que mejore a las que la originaron. Al igual que los algoritmos genéticos, el método que nos ocupa se basa en mantener un conjunto de soluciones y realizar combinaciones con éstas; pero a diferencia de éstos no está fundamentado en la aleatorización sobre un conjunto relativamente grande de soluciones sino en las elecciones sistemáticas y estratégicas sobre un conjunto pequeño de éstas. Como ilustración basta decir que los algoritmos genéticos suelen considerar una población de 100 o más soluciones mientras que en la búsqueda dispersa es habitual trabajar con un conjunto de tan sólo 10 soluciones. La primera descripción del método fue publicada en 1977 por Fred Glover donde establece los principios de la BD. En este primer artículo se determina que la BD realiza una exploración sistemática sobre una serie de buenas soluciones llamadas conjunto de referencia. Los siguientes comentarios resumen los principales aspectos de este trabajo: 1. El método se centra en combinar dos o más soluciones del conjunto de referencia. La combinación de más de dos soluciones tiene como objetivo el generar centroides. 2. Generar soluciones en la línea que unen dos dadas se considera una forma reducida del método.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 84
Metaheurísticas y Redes Neuronales
3. Al combinar se deben de seleccionar pesos apropiados y no tomar valores al azar. 4. Se deben de rea lizar combinaciones “convexas” y “no convexas” de las soluciones. 5. La distribución de los puntos se considera importante y deben de tomarse dispersos. En Glover (1994) se introduce la combinación ponderada (weighted combination) como el mecanismo principal para generar nuevas soluciones. En esta versión se enfatizan las búsquedas lineales entre dos soluciones y el uso de pesos para muestrear en dicha línea. Asimismo, se introduce el concepto de combinar soluciones de calidad con sol uciones diversas. Además, el método incluye una componente de intensificación que consiste en tomar una muestra mayor de la línea que ha producido mejores soluciones. En este trabajo el autor especifica que para trabajar con problemas con variables enteras, binarias o que forman una permutación, hay que diseñar métodos específicos de combinación (notar que no tiene sentido hablar de combinación lineal de dos permutaciones). Para ello se introducen los mecanismos de combinación basados en votos. En estos se definen reglas mediante las que cada solución “vota” para que sus características aparezcan en la solución que se está construyendo. Estos métodos de votos han sido muy utilizados en las rutinas de combinación de los algoritmos de BD y parece que constituyen uno de las claves del éxito de estos métodos. A continuación mostramos un ejemplo sobre un problema de rutas de vehículos introducido en Corberán et al. (2000) para ilustrarlos. Dada una serie de localizaciones en donde hay que recoger a unos estudiantes, el problema consiste en encontrar un conjunto de rutas de modo que cada una sea recorrida por un autobús. A los efectos que aquí nos ocupan podemos omitir el resto de detalles y considerar que tenemos dos soluciones del problema para ver cómo se combinan. Consideremos un ejemplo con 10 localizaciones y dos soluciones (A y B) con dos rutas cada una: Solución A: Solución B:
A1 = { 4, 2, 7, 1 }, B1 = { 2, 6, 8, 10, 9 },
A2 = { 5, 10, 6, 9, 3, 8 } B2 = { 3, 4, 7, 1, 5 }
Para poder combinar A y B, tendremos que asociar las rutas de cada una. Si consideramos las dos asociaciones posibles (A1 con B1 y A2 con B2 ó, A1 con B2 y A2 con B1) y contamos el número de elementos comunes, podemos tomar la que mayor número de coincidencias presente. Así, asociamos A2 con B1 y A1 con B2 ya que la primera tiene cuatro elementos en común (6, 8, 9 y 10), y la segunda tiene tres (4, 7 y 1), mientras que la otra asignación presenta 1+2= 3 coincidencias. La nueva solución (N1 y N2) se construye en n pasos, en los que una localización se asigna a una ruta en cada paso. La siguiente tabla muestra el proceso. Paso
Par
1 2 3 4 5
(A1,B2) (A2,B1) (A1,B2) (A2,B1) (A1,B2)
Voto 1 4 5 7 5 7
Voto 2 3 2 3 6 7
Asignación N1 = { 4 } N2 = { 2 } N1 = { 4, 3 } N2 = { 2, 5 } N1 = { 4, 3, 7 }
Regla de selección azar azar 3 antes 7 5 antes 6 igual
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 85
Metaheurísticas y Redes Neuronales
6 7 8 9 10
(A2,B1) (A1,B2) (A2,B1)
10 1 10 9 9
6 1 8 8 9
N2 = { 2, 5, 6 } N1 = { 4, 3, 7, 1 } N2 = { 2, 5, 6, 10 } N2 = { 2, 5, 6, 10, 8 } N2 = { 2, 5, 6, 10, 8, }
azar igual 10 antes 8 8 antes 9 igual
En el paso 1, comenzamos construyendo la ruta N 1 con el par (A1,B2). El primer elemento en la ruta A1 es el 4, así que esta ruta vota para que el 4 sea el primer elemento de la ruta N 1 (Voto 1). Análogamente el voto asociado con B 2 es para la localización 3 (Voto 2). Como ambas localizaciones ocupan en sus rutas la misma posición (la primera) los dos votos valen lo mismo por lo que desempatamos al azar y gana el 4. En el paso 2 realizamos lo mismo para la otra pareja de rutas. En el paso 3, A1 vota por la localización 7 (la 4 y la 2 ya han sido asignadas) y B2 vota por la 3. Como la 7 está en la tercera posición de la ruta A1 y la localización 3 está en la primera posición de la ruta B 2, la regla especifica dar preferencia a la localización en una posición anterior, por lo que 3 es seleccionada. Procediendo de igual forma se completa la nueva solución hasta obtener N1 = {4, 3, 7, 1} y N2 = {2, 5, 6, 10, 8, 9 }. En 1977 Glover publica una versión más específica del método en donde se recogen y simplifican muchas de las ideas expuestas en trabajos anteriores. Esta publicación tuvo un gran impacto en lo que a la difusión del método se refiere y se ha quedado como la referencia standard de la búsqueda dispersa. Numerosos investigadores comenzaron a aplicar la BD a la resolución de problemas de optimización obteniendo resultados de gran calidad. La siguiente sección describe esta versión del método, actualizada según implementaciones y desarrollos posteriores. Glover, Laguna y Martí (2000) estudian las implementaciones más recientes del método en la resolución de problemas de optimización combinatoria. Además, muestran las conexiones entre este método y el denominado Re- encadenamiento de Trayectorias (“Path relinking”). Desde un punto de vista espacial, el proceso de generar combinaciones lineales de un conjunto de referencia de soluciones, puede ser visto como el generar caminos entre, y más allá, de estas soluciones. Esto lleva a una concepción más amplia del significado de combinar que es la introducida en el re-encadenamiento de trayectorias (RT). RT se basa en el hecho de que entre dos soluciones se puede trazar un camino que las una, de modo que las soluciones en dicho camino contengan atributos de ellas. Las soluciones originales pueden haber sido generadas mediante un método basado en una búsqueda local y estar unidas por un camino, o haber sido generadas por otro método y no estar unidas de ningún modo; en cualquier caso, ahora generaremos un nuevo camino que las una. Las características de dicho camino vendrán especificadas respecto de los atributos que son añadidos o eliminados, o por los movimientos realizados para alcanzar una solución desde la otra. Esto constituye una extensión del concepto de combinación en tanto que se obtienen varias soluciones a partir de dos o mas originales. Consideremos en un problema de permutaciones dos soluciones x=(1,3,4,2) e y=(2,3,1,4). Si aplicamos un método de combinación podemos obtener una determinada solución z =
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 86
(1,3,2,4), mientras que si tratamos de obtener y partiendo de x, podemos obtener la secuencia z1=(2,1,3,4), z2=(2,3,1,4). En este sentido decimos que RT es una extensión de los métodos de combinación. Dado que la búsqueda dispersa se basa es realizar combinaciones y aplicar métodos de búsqueda local, se puede considerar incluido en los llamados algoritmos meméticos (una clase de algoritmos evolutivos en donde la búsqueda local se aplica de forma selectiva). Actualmente, existen implementaciones comerciales del método (del tipo “context independent” mencionado), cómo Opt Quest Callable Library (Laguna y Martí, 2000), que están compitiendo en la industria con métodos de optimización establecidos en la resolución de problemas reales. A continuación se describen las partes esenciales de un algoritmo de búsqueda dispersa para pasar después a comentar algunas mejoras y aspectos avanzados del método. El Algoritmo de Búsqueda Dispersa El método se basa en combinar las soluciones que aparecen en el llamado conjunto de referencia. En este conjunto se tienen las soluciones buenas que se han ido encontrando. Es importante destacar que el significado de buena no se restringe a la calidad de la solución, sino que también se considera la diversidad que esta aporta al conjunto. La Búsqueda Dispersa consta básicamente de los siguientes elementos: 1. Un generador de soluciones diversas. El método se basa en generar un conjunto P de soluciones diversas (alrededor de 100), del que extraeremos un subconjunto pequeño (alrededor de b =10) con el que realizar las combinaciones y que denominamos R. 2. Un conjunto de referencia R. Extraído del conjunto de soluciones diversas según el criterio de contener soluciones de calidad y diferentes entre sí (Calidad y Diversidad). Si el método no logra mejorar a la solución, se considera que el output es la propia solución considerada. Las soluciones en este conjunto están ordenadas de mejor a peor respecto de su calidad. 2.1. Creación. Iniciamos el conjunto de referencia con las b/2 mejores soluciones de P. Las b/2 restantes se extraen de P por el criterio de máxima distancia con las ya incluidas en el conjunto de referencia. Para ello debemos de definir previamente una función de distancia en el problema. 2.2. Actualización. Las soluciones fruto de las combinaciones pueden entrar en el conjunto de referencia y reemplazar a alguna de las ya incluidas si las mejoran. Así pues, el conjunto de referencia mantiene un tamaño b constante pero va mejorando a lo largo de la búsqueda. En implementaciones sencillas, la actualización de este conjunto se realiza únicamente por calidad, aunque podemos hacerlo también por diversidad. 3. Un método de combinación. BD se basa en combinar todas las soluciones del conjunto de referencia. Para ello, se consideran subconjuntos de 2 o mas elementos del conjunto de referencia y se combinan mediante una rutina diseñada a tal efecto. La solución o Fernando Sandoya, Ph.D.
ESPOL, 2015/ 87
Metaheurísticas y Redes Neuronales
soluciones que se obtienen de esta combinación pueden ser inmediatamente introducidas en el conjunto de referencia (actualización dinámica) o almacenadas temporalmente en una lista hasta terminar de realizar todas las combinaciones y después ver qué soluciones entran en éste (actualización estática). 4. Un método de mejora. Típicamente se trata de un método de búsqueda local para mejorar las soluciones, tanto del conjunto de referencia como las combinadas antes de estudiar su inclusión en el conjunto de referencia. El siguiente esquema muestra cómo actúan los elementos descritos en un esquema básico del algoritmo. Algoritmo de Búsqueda Dispersa 1. Comenzar con P = Ø. Utilizar el método de generación para construir una solución y el método de mejora para tratar de mejorarla; sea x la solución obtenida. Si x P entonces añadir x a P. (i.e., P P x ), en otro caso, rechazar x. Repetir esta etapa hasta que P tenga un tamaño prefijado. 2. Construir el conjunto de referencia R = { x 1 , …, x b } con las b/2 mejores soluciones de P y las b/2 soluciones de P más diversas a las ya incluidas. 3. Evaluar las soluciones en R y ordenarlas de mejor a peor respecto a la función objetivo. 4. Hacer NuevaSolución = TRUE Mientras (NuevaSolución) 5. NuevaSolucion = FALSE 6. Generar los subconjuntos de R en los que haya al menos una nueva solución. Mientras (Queden subconjuntos sin examinar) 7.
Seleccionar un subconjunto y etiquetarlo como examinado.
8. Aplicar el método de combinación a las soluciones del subconjunto. 9. Aplicar el método de mejora a cada solución obtenida por combinación. Sea x la solución mejorada: Si f(x) mejora a f(x b ) y x no está en R) 10. Hacer x b = x y reordenar R 11. Hacer NuevaSolucion = TRUE El algoritmo hace referencia a los subconjuntos de R ya que podemos combinar parejas, tríos o cualquier número de soluciones. Es usual el limitar las combinaciones a parejas, por lo
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 88
que el punto 6 equivaldría a decir: “Generar todas las parejas de soluciones de R en las que al menos una de las dos sea nueva”; donde por nueva entenderemos que haya entrado al
conjunto después de realizar la última combinación de todo R. Notar que el algoritmo se detiene cuando al tratar de combinar vemos que no hay nuevos elementos en el conjunto de referencia (la variable NuevaSolución está en 0). Este algoritmo puede ser anidado en un esquema global que permita reconstruir el conjunto de referencia cuando éste ya ha sido explotado. Así, si el límite de tiempo (o evaluaciones) no se ha excedido, una estrategia habitual es regenerar el conjunto de referencia dejando la mitad superior (b/2 mejores) y eliminando la mitad inferior. Después, se genera un conjunto P como al comienzo del algoritmo, del que se extraen únicamente las b/2 soluciones más diversas con las ya existentes en R. Así obtenemos un nuevo conjunto de referencia en el que mantenemos las soluciones de calidad y renovamos las debidas a diversidad. Ahora se vuelve a combinar como anteriormente sobre este conjunto de referencia (pasos 5 a 11). De este modo se obtiene un esquema cíclico indefinido al que hay que añadirle una variable de control para detenerlo, típicamente esta variable está en función del tiempo o del número de iteraciones (evaluaciones de la función objetivo). Desarrollo y Mejoras La búsqueda dispersa es un método relativamente reciente que hemos de considerar en desarrollo. Durante los últimos años se han realizado nuevas contribuciones aplicando esta metodología en la resolución de conocidos problemas de optimización. Algunas de estas aplicaciones han abierto nuevos campos de estudio, ofreciendo alternativas a los diseños conocidos. Laguna y Armentano (2001) realizan una revisión de los aspectos clave del método desarrollados durante estos años. A continuación las resumimos de forma esquemática: a. Considerar el uso de memoria basada en la frecuencia para desarrollar métodos de diversificación eficientes. En lugar de generar las soluciones al azar, se propone construir un método que basado en el número de apariciones de los elementos significativos en la solución, evite la repetición de estructuras similares. b. Inicializar el conjunto de referencia a partir de un gran conjunto de soluciones creado con el generador antes mencionado. c. Aplicar la rutina de mejora de forma selectiva . Las pruebas indican que el aplicar el método de mejora a todas las soluciones generadas y combinadas, no garantiza el obtener mejores resultados finales. Establecer umbrales de calidad para no aplicar la mejora a soluciones que difícilmente van a proporcionar la mejor solución, es un gasto innecesario de tiempo de computación (Ugray et al., 2001). Por otro lado, al aplicar el método de mejora a todas las soluciones se acelera la convergencia de éste, lo cual pude ser deseable si disponemos de poco tiempo de computación, pero debemos de evitarlo si queremos ejecutar el método en un horizonte largo para obtener soluciones de gran calidad. d. Es necesario estudiar el porcentaje de tiempo que el método está generando soluciones y el tiempo que está combinando. En esencia esta es la cuestión que se Fernando Sandoya, Ph.D.
ESPOL, 2015/ 89
Metaheurísticas y Redes Neuronales
plantea en todos los métodos heurísticos: el equilibrio entre la intensificación y la diversificación. e. Inicializar el conjunto de referencia con la mitad de soluciones por calidad y la otra mitad por diversidad. Se han realizado experimentos con distintos tamaños y parece ser que esta proporción es la que mejores resultados está dando. f.
La calidad es más importante que la diversidad al actualizar el conjunto de referencia. Notar que aunque el método comienza con un conjunto de referencia con soluciones de calidad y diversidad, al realizar las combinaciones, sólo entran al conjunto las soluciones por el criterio de calidad (hasta llegar a la etapa de regenerarlo). En Laguna y Martí (2000) se han probado actualizaciones de este conjunto por diversidad, obteniendo resultados finales peores.
g. Comparar las actualizaciones del conjunto de referencia estática y dinámica. Notar que al combinar las soluciones podemos aplicar dos estrategias, introducirlas en el conjunto, si procede, nada más generarlas, o anotarlas en una “pila” y cuando
terminemos de realizar todas las combinaciones, proceder a la actualización. La primera estrategia es dinámica y más agresiva, en tanto que las soluciones buenas entran rápidamente en el conjunto de referencia, pero dado que este es de tamaño constante, esto implica que hay soluciones que salen sin llegar a haber sido utilizadas para realizar combinaciones. Es necesario comparar ambas estrategias para ver cual proporciona mejores resultados finales. h. La mayor parte de las soluciones de calidad proceden de combinaciones de dos soluciones. Asimismo, las buenas soluciones suelen proceder de combinar buenas soluciones. Campos et al. (1999) realizan numerosos experimentos realizando un seguimiento a lo largo de la búsqueda de las soluciones de calidad en un problema concreto. i.
El uso de múltiples métodos de combinación ha de ser considerado. Campos, Laguna y Martí (2001) realizan un análisis de diferentes métodos de combinación, algunos con elementos aleatorios y otros deterministas, de modo que el algoritmo selecciona el método de combinación probabilísticamente, de acuerdo con los éxitos obtenidos por éste. De la misma forma que los métodos de búsqueda local basados en distintos entornos (Variable Neighborhood Search) están proporcionando muy buenos resultados, hemos de considerar el definir varios “entornos” de combinación para
realizar una búsqueda más completa del espacio de soluciones. Como conclusión podemos decir que la búsqueda dispersa es un método evolutivo que se encuentra en desarrollo. Sus orígenes se pueden situar en la década de los 70 y, aunque menos conocida que los algoritmos genéticos, se está aplicando en la resolución de numerosos problemas difíciles de optimización. En la actualidad no existe un esquema único para aplicar la búsqueda dispersa. En este trabajo hemos tratado de introducir aquellos aspectos básicos del método que son
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
ESPOL, 2015/ 90
ampliamente aceptados, así como revisar las últimas implementaciones realizadas y las cuestiones que son actualmente objeto de estudio. EJERCICIO: Aplicar la búsqueda dispersa a la resolución del VRP capacitado.
Fernando Sandoya, Ph.D.
Metaheurísticas y Redes Neuronales
10. Métodos
10.1
ESPOL, 2015/ 91
de evolución diferencial
Introducción
La evolución diferencial (DE) fue originalmente diseñada por Price y Storn en 1999 (Storn, R., Price, K.: Differential evolution – a simple and efficient adaptive scheme for global optimization over continuous spaces, Technical Report 1999) para resolver problemas de optimización contínuos, pero luego ha sido extendida para resolver problemas combinatorios basados en permutaciones. La DE fue desarrollada con el fin de satisfacer los tres requerimientos básicos para que una técnica de optimización sea buena: 1. Independientemente de los valores iniciales el método deberá encontrar buenas soluciones. 2. La convergencia deberá ser rápida. 3. El programa deberá tener unos pocos parámetros de control para que sea fácil de usar. Por otro lado la DE ha demostrado ser un método que se desempeña muy bien en una amplia gama de problemas de prueba, y es intrínsecamente paralelo ya que está basado en una población. La estrategia básica emplea la diferencia de dos vectores de parámetros seleccionados aleatoriamente como la fuente de variaciones aleatorias para un tercer vector de parámetros. Desde el punto de vista de la DE los problemas de optimización del mundo real pueden ser clasificados en uno de los dos tipos siguientes: 1. Aquellos que son caracterizados por parámetros contínuos. 2. Aquellos que son caracterizados por parámetros combinatorios basados en permutaciones. La DE original fue desarrollada solo para problemas caracterizados por parámetros contínuos, pero recientemente ha sido ampliada a la resolución de problemas combinatorios (Onwubolu, G., Davendra, D.: Differential Evolution: A Handbook for Global Permutation-Based Combinatorial Optimization). 9.1 Problemas de Optimización DE en el espacio contínuo. Un típico problema de optimización DE en el espacio contínuo es la function generalizada de Rosenbrock dada como:
− , , … , = 100(+ ) 1, 30 ≤ ≤ 30, 0,1, … , 1, > 1, Fernando Sandoya, Ph.D.
ESPOL, 2015/ 92
Metaheurísticas y Redes Neuronales
, , … , ∗ 0,∗ 1
La solución del problema es , pero aunque es aparentemente simple es extremadamente difícil encontrarla por medio de algún método numeric (con DE no es muy complicado).
10.2
Optimización combinatoria DE basada en permutaciones.
Un problema típico de optimización combinatorio DE basado en permutaciones es el Job Shop Problem. El objetivo es hallar la mejor secuencia que garantice el makespan óptimo. Como se puede ver, este problema es muy diferente que el problema en el espacio contínuo ya que estamos interesados en una secuencia de los trabajos, que tiene una naturaleza de permutación. Así, si es el tiempo de operación del trabajo en la máquina , y es el instante de finalización de la ejecución del trabajo en la máquina , entonces el problema es:
, min 1,. ., {,} , {−,, ,−},
,
10.3 Adecuación de la DE como un optimizador combinatorio. En los últimos años se ha adaptado bastante bien la DE para resolver problemas combinatorios, hacienda esta técnica muy competitive frente a otras Metaheurísticas. Algunas de estas adaptaciones incluyen: 1. 2. 3. 4. 5.
Enfoque de transformación Forward/Backward; Enfoque de indexación de la posición relativa; Enfoque de la posición del valor más pequeño; Enfoque Discreto/binario; y, Enfoque de manipulación de conjunto discrete.
En este texto abordaremos el enfoque de indexación de la indexación de la posición relativa, que es más simple de implementar computacionalmente, y que ha dado Buenos reusltoados en algunos problemas de optimización combinatorial.
10.4
DE canónica para problemas de optimización contínuos.
ℐ 0 < ≤ 1.2 , 0 < < 1
Los parámetros usados en DE son = costo o valor de la function objetivo, = dimension del problema, = tamaño de la población, = población de -vectores, =número de generación, = máximo número de generación, = vector compuesto de parámetros, = vector de pruebas compuesto de parámetros, =factor de cruce. Otros son: =factor de escala , = cota superior, = cota inferior, y =vectores de pruebas, = vector con mínimo costo en la generación
,
= i-ésimo vector en la generación
,
= i-ésimo vector regulador (buffer) en la generación , = vector seleccionado aleatoriamente, =entero aleatorio . En la formulación = número de ciudades.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 93
Metaheurísticas y Redes Neuronales
La evolución diferencial DE es un método de bpusqueda paralela directa, que utiliza vectores de parámetros:
, 0,1,2,… , 1
Como una población para cada generación . El tamaño de la población, , no cambia durante el proceso de minimización. La población inicial es generada aleatoriamente asumiendo una distribución de probabilidad uniforme para todas las decisions aleatorias si no hay información inteligente inicial para el sistema. La idea crucial detrás de DE es un Nuevo esquema para la generación de los vectores de parámetros de prueba. DE genera nuevos vectores de parámetros al añadir el vector de diferencias ponderado entre dos miembros de la población a un tercer miembro. Si el vector resultante produce un valor objetivo menor que un miembro predeterminado de la población, el nuevo vector generado reemplaza al vector con el cual fue comparado. El vector de comparación puede, pero no necesita ser parte del
proceso de generación mencionado. Adicionalmente el mejor vector de parámetros , es evaluado para cada generación con el fin de realizar un seguimiento del progreso que se ha logrado durante el proceso de minimización. La extracción de información de distancia y dirección desde la población para generar desviaciones aleatorias resulta en un esquema adaptativo con excelentes propiedades de convergencia.
Las descripciones para las primeras dos variants mas prometedoras de DE, que se conocen como DE2 y DE3, son las siguientes: ESQUEMA DE2 Inicialización: Como con todos los algoritmos evolutivos, DE trabaja con una población de soluciones, no con una solución única para el problema de optimización. La población de la generación contiene vectores solución llamados individuos de la población y cada vector representa una solución potencial para el problema de optimización:
, 1, 2,… ,; 1,… , , , 1,2,… ,; 1, …,
Adicionalmente, cada vector contiene parámetros:
En orden a establecer un punto de inicio para la búsqueda del óptimo, la población deberá ser inicializada. A menudo no hay más conocimiento acerca de la ubicación del óptimo global que las cotas de las variables del problema. En ese caso, una manera natural para inicializar la
, [0,1] ,∀ ∈ [1,]; ∀ ∈ [1,] [0,1]
población (población inicial) es sembrarla con valores aleatorios dentro de las restricciones de acotamiento dadas:
Donde
representa un número aleatorio uniformemente distribuido en
restricciones de acotamiento superior e inferior son
y
, respectivamente:
[0,1]
. Las
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 94
Metaheurísticas y Redes Neuronales
≤ ≤ , ∀ ∈ [1, ] Para este y otros esquemas, tres operadores son cruciales: mutación, cruce y selección. MUTACIÓN: La primera variante de DE trabaja de la siguiente manera: para cada vector
, 0,1,2, … , 1 + , , , , ∈ [1,]; 1∈ [≠1,2],≠3> 0≠ 1 2 3 ∈ [1,] 1,2 3 1, 2 3 [0,1] , un vector de prueba es generado de acuerdo a:
Donde generados, con tal que
y los enteros .
,
y
son aleatoriamente
Los tres indices seleccionados aleatoriamente, y se refieren a tres vectores seleccionados aleatoriamente de la población, los cuales on mutuamente diferentes y también diferentes de el índice que se está corriendo . Nuevos valores aleatorios y se asignan para cada valor del índice (para cada vector). Un Nuevo valor para el número aleatorio es asignado para cada valor de índice (para cada vector parámetro). es un factor constant y real, que controla la aplificación de la variación diferencial. El siguiente gráfico ilustra los diferentes vectores de DE2 para una function de dos variables.
: NP Vectores parámetros de la generación G. : Nuevo vector parámetro generado
Mínimo
CRUCE: Para incrementar la diversidad de los vectores parámetros se construye el vector:
〈 〈 para 〉 , 1〉 , … ,〈 1〉 , , … , ; Si no Fernando Sandoya, Ph.D.
ESPOL, 2015/ 95
Metaheurísticas y Redes Neuronales
〈⋅〉
Donde representa la function modulo con modulo . Esto hace que una secuencia de los elementos de son idénticos a los elementos de , mientras los otros elementos de
[ ] [ ] 0 , 1 0 , 1 ∈ [0.1] 7 2 3 23 4 Vect o r parámet r o con⏟ los parámetros
toman los valores originales de . Escoger un subgrupo de parámetros para mutación es similar al proceso de cruce de los algoritmos genéticos. El índice inicial es escogido aleatoriamente en , mientras que es escogido en con probabilidad , donde es la probabilidad de cruce, que es una variable de control en el esquema DE2. La determinación aleatoria de y se hace para cada vector de prueba . Esta idea es representada en la siguiente figura con , y .
j=0
j=0
j=0
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
6
6
6
,=,,…,−
Para decidir si el nuevo vector pasará a ser un miembro de la población de la generación
1+
, se lo compara con
,
. Si el vector da un menor valor de la function objetivo que en
es igual a , sino se retiene el viejo valor de
.
ESQUEMA DE3: Básicamente, el esquema DE3 trabaja de la misma manera que DE2, pero genera el vector introduciendo una nueva variable de control :
La idea detrás de
es proveer un mecanismo para aumentar el character glotón del
esquema incorporando el major vector encontrado . La construcción de y al igual que el proceso de decision es idéntico a DE2. La siguiente figura ilustra el proceso de genración de vectores de la ecuación anterior.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 96
Metaheurísticas y Redes Neuronales
: NP Vectores parámetros de la generación G. : Nuevo vector parámetro generado v
Mínimo
También existen otras estrategias DE para generar el vector , cuya efectividad dpende del tipo de problema para el cual son aplicadas. Estas estrategias pueden variar basadas en el vector a ser perturbado, número de vectores diferencia consideradospara la perturbación y finalmente del tipo de cruce usado.
10.5
DE para problemas de optimización combinatorios basados en permutaciones.
La DE canónica no puede ser aplicada a problemas permutativos o discretos, a menos que sea modificada. El mecanismo interno de cruce y mutación cambia invariablemente en cada número real, esto en si mismo conducirá a soluciones infactibles. La solución es una transformación o bien en la población o en el mecanismo interno de mutación y cruce. A lgunos invstigadores han decidido no modificar las estrategias de operación de DE, pero si manipular la población de tal manera que permita a la DE operar sin obstáculos. Ya que la solución para una población es permutativa, son necesarias rutinas de conversion adecuadas para cambiar la solución desde los enteros a los reales y luego regresar a los enteros después del cruce. Algunas áreas de aplicación donde puede aplicarse la DE para problemas de optimización combinatoria basadas en permutaciones son las siguientes:
Scheduling: Flow Shop, Job Shop, Open Shop, etc. Knapsack Problem. Problema de asignamiento lineal (LAP) Problema de asignamiento cuadrático (QAP) Problema del Agente Viajero (TSP) Problema de ruteo de vehículos (VRP) Modelo pick-and-place dinámico.
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 97
Metaheurísticas y Redes Neuronales
10.6 E nfoque de la indexación de la pos ición relativa o el enfoque Knapsack. El enfoque de la indexación de la posición relativa también es conocido como representación basada en el orden, y aunque puede que no sea el mejor método para resolver los problemas combinatorios, se muestra como una herramienta muy versátil que se puede adaptar para encontrar resultados razonables a un amplio rango de problemas de optimización combinatoria, y lo más útil es que requiere de muy poco código computacional, y en particular DE está implementada en Mathematica. Para explicar el enfoque establecemos lo siguiente: Tenemos un grupo de vectores denominados cromosomas, constituidos por genes de valores contínuos, ellos se aparean de acuerdo a una probabilidad de cruce, mutan por diferencias con otros pares y compiten con un cromosoma padre para ver quien pasa a la siguiente generación. En Mathematica estas opciones se manipulan por medio de los comandos CrossProbability, ScalingFactor y SearchPoints. Cada variable corresponde a un gen en cada cromosoma. CrossProbability es el parámetro CR, SearchPoints es NP, es decir el tamaño de la población o número de vectores cromosoma, y ScalingFactor es F. Los valores por defecto de estos parámetros son los que se recomienda en el artículo original de DE. La función de Mathematica que invoca a DE es NMinimize, en la cual se debe establecer como Method DifferentialEvolution. También se debe establecer la opción MaxIterations, que corresponde al número de generaciones. Es decir, se invoca a DE en Mathematica con las siguientes instrucciones:
→
NMinimize[objetivo, restricciones, variables, Method
→
{“DifferentialEvolution”, opciones método}, otras opc.]
Los valores que están por defecto para las opciones de DE en Mathematica se pueden consultar con la opción: Options[NMinimize`DifferentialEvolution]
Estas opciones que están establecidas por defecto (pero pueden ser cambiadas) son: {"CrossProbability" → 1/2, "InitialPoints" → Automatic, "PenaltyFunction" → Automatic, "PostProcess" → Automatic, "RandomSeed" → 0, "ScalingFactor" → 3/5, "SearchPoints" → Automatic, "Tolerance" → 0.001}
Un parámetro importante es el del número de iteraciones (MaxIterations), que está puesto por defecto en 100, lo cual podría ser muy poco en la resolución de problemas de optimización, si uno desea mejoras más grandes en la función objetivo este parámetro debe ser puesto en 1,000 o más. Una parte importante que se debe definir es el campo de restricciones, en el cual se debe especificar, entre otras, la restricción de integralidad de las variables. Para esto hay al menos dos enfoques viables:
Fernando Sandoya, Ph.D.
ESPOL, 2015/ 98
Metaheurísticas y Redes Neuronales
El primero es permitir que las variables tomen valores en los reales, pero usar funciones de penalidad para empujarlas al campo de los enteros. Por ejemplo se
( )
puede añadir para cada variable , una penalidad del tipo ; donde es una constante grande adecuada. NMinimize no usa este enfoque, pero el usuario puede ponerlo de manera explícita usando la opción PenaltyFunction. El segundo método (que es el que usa por defecto NMinimize, es redondear explícitamente todas las variables de valor real antes de evaluarlas en la función objetivo. La experiencia en el desempeño de esta función indica que es el enfoque más eficiente.
Esto todavía no aborda el tema del cumplimiento del rango. Por ejemplo, supongamos que estamos usando variables en el rango {1,…,n} para construir una permutación de n elementos.
Si un valor resbala fuera del rango el efecto podría ser muy malo, por ejemplo se podría colgar la ejecución o un resultado sin sentido, por lo tanto es importante en el código hacer cumplir cuidadosamente las cotas de las variables. La implementación hace exactamente eso. SI una variable es restringida a tomar valores entre una cota inferior y una cota superior (restricción rectangular), entonces el código de NMinimize la forzará a caer dentro de las cotas, esto está ya implementado y no necesita ser invocado por el usuario. En la literatura de los métodos basados en evolución, frecuentemente se asocian las nociones de genotipo y fenotipo, el primero se refiere a los valores actuales de los cromosomas. Recordemos el trabajo básico de DE. Típicamente se forma un nuevo cromosoma a partir del apareamiento de sus cromosomas padre con una mutación proveniente de un segundo padre aleatorio. Dicha mutación es a su vez dada como una diferencia de otros dos cromosomas aleatorios. Estas operaciones son todas dadas en el nivel genotipo. Es en la traducción del cromosoma a un objeto combinatorio (por ejemplo una permutación) que se encuentra el fenotipo, que se refiere a la expresión del cromosoma como algo que puede ser usado para su evaluación en la función objetivo, dicho de otra manera uno decodifica un genotipo para obtener un fenotipo. Queremos genotipos que sean dóciles para las operaciones de mutación y apareamiento de la DE, y fenotipos que respondan bien al genotipo, en el sentido de que permitan mejoras razonables de la función objetivo. 10.6.1 Ejemplos Consideremos primero dos ejemplos simples para introducir la forma en que DE resuelve los problemas de optimización: 10.6.1.1
TRIPLETAS PITAGÓRICAS:
Son ternas ordenadas de enteros
x,y,z
tales que
x y z
.
El problema es hallar estas tripletas (supongamos que en un rango adecuado, por ejemplo los números enteros entre 1 y 25 que cumplen esto). Una forma de resolverlo es:
. . 1 ≤ ≤ 25; 1 ≤ ≤ 25; 1 ≤ ≤ 25; ≤ ; ,, ∈ Fernando Sandoya, Ph.D.