Algoritmo GRASP

Anuncio
Introducción
El problema planteado puede ser modelado como un problema de optimización combinatoria.
Específicamente como un problema del agente viajero o TSP (Traveling Salesman Problem). Para
resolverlo se debe determinar la solución óptima o la mejor solución (solución aproximada). Con la
primera forma se corre el riesgo de obtener la solución en tiempos muy largos. En cambio, hallando la
solución aproximada, se obtendrá una respuesta en un tiempo razonable pero con el riesgo de estar
lejos de la solución óptima.
Este tipo de problema está clasificado como problema de complejidad* NP (Non-Deterministic
Polynomial-time) es decir que puede ser resuelto por una máquina de Turing no determinista** en
tiempo polinómico.
* La teoría de la complejidad computacional es la rama de la teoría de la computación que estudia, de
manera teórica, los recursos requeridos durante el cómputo de un algoritmo para resolver un problema.
Los recursos comúnmente estudiados son el tiempo (mediante el número de pasos) y el espacio
(cantidad de memoria). (Wikipedia)
**Mientras que una máquina determinista sigue un solo "camino computacional", una máquina no
determinista tiene un "árbol computacional" (Wikipedia)
Algoritmo GRASP
(Greedy Randomized Adaptive Search Procedure)
Descripción
• Procedimiento de búsqueda:
Procedimiento de búsqueda goloso, aleatorio y adaptativo.
Denominado así por sus siglas en ingles.
Se trata de un procedimiento que realiza búsquedas sin evaluar todas las posibilidades.
Se denomina goloso o voraz porque toma soluciones (elegidas de forma aleatoria) que le
proveen un beneficio inmediato. Además posee un componente adaptativo porque la función
golosa pude variar en cada iteración del algoritmo.
•
Optimización combinatoria.
Comúnmente aplicado para resolver problemas de optimización combinatoria.
Ejemplos:
- Problema de rutas de vehículos (Vehicle routing problem - VRP)
-Árbol expandido mínimo (Minimum spanning tree - MST)
-Problema de las 8 reinas
-Problema de la mochila
-Problema de cortes
•
Algoritmo meta heurístico.
Las técnicas heurísticas y meta-heurísticas son métodos aproximados que ofrecen soluciones
óptimas a problemas NP* a un bajo coste computacional.
*problema de complejidad NP (Non-Deterministic Polynomial-time) es decir que puede ser
resuelto por una máquina de Turing no determinista** en tiempo polinómico.
**Mientras que una máquina determinista sigue un solo "camino computacional", una máquina
no determinista tiene un "árbol computacional"
Aquí el prefijo meta ("más allá") tiene el sentido de "nivel superior". Se sitúan conceptualmente
“por encima” de los heurísticos en el sentido que guían el diseño de éstos.
Están diseñados para resolver problemas en los que los heurísticos clásicos no son efectivos.
Proporcionan un marco general para crear nuevos algoritmos híbridos combinando diferentes
conceptos derivados de la inteligencia artificial, la evolución biológica y los mecanismos
estadísticos”.
Un algoritmo meta-heurístico es un método heurístico que supera limitaciones de los
heurísticos como la miopía del procedimiento* y la voracidad.
*Se escoge la mejor opción disponible en una iteración sin “ver” que esto puede obligar a
realizar malas elecciones en iteraciones posteriores.
•
Procedimiento iterativo, cada paso consta de dos fases:
GRASP es un procedimiento iterativo en donde cada paso consiste en una fase de construcción y
una de mejora.
 Construcción
En la fase de construcción se aplica un procedimiento heurístico constructivo para
obtener una buena solución inicial.
 Mejora
Esta solución se mejora en la segunda fase mediante un algoritmo de búsqueda local. La
mejor de todas las soluciones examinadas se guarda como resultado final.
Forma General
Procedimiento GRASP()
P = Cargar_problema(instancia, α);
Los datos o instancias que serán procesados por el sistema
El parámetro de relajación (α)
Los datos de la condición de parada (ej: el número de iteraciones, tiempo de procesamiento)
Mientras (no se cumpla la condición de parada) hacer
S = Algoritmo_Constructivo(P);
Es cualquier algoritmo que devuelva alguna solución del problema, ésta en general
estará lejos de la solución óptima.
Cada iteración debe regresarnos una solución diferente para explorar el espacio de
soluciones.
S = Busqueda_Local(S);
Aplica pequeñas transformaciones a la solución inicial hasta llegar a un óptimo local.
Registrar_Mejor_Sol(S);
Si la solución obtenida es mejor que solución que tenemos hasta el momento entonces
la guardamos.
Fin Mientras;
Retornar_Mejor_Sol();
Fin GRASP
Algoritmo Constructivo
Añade iterativamente elementos a una estructura, inicialmente vacía, hasta obtener una solución del
problema.
La estrategia para indicar que elemento se añade consiste en elegir, no al mejor elemento, sino elegir al
azar a uno de los mejores elementos de un conjunto llamado lista restringida de candidatos (restricted
candidate list - RCL).
Algoritmo_Constructivo(P)
S = φ; E = P.elementos; α=P.alfa;
Mientras (E <> φ) hacer
τ = Peor {f(e)|e ∈ E};
β = Mejor{f(e)|e ∈ E};
RCL = {e ∈ E | β-α(β-τ)≤f(e)≤β };
c = escoger_elem_azar(RCL);
S = S U {c};
E = E - {c};
Fin Mientras;
Retornar_Sol(S);
Fin Algoritmo_Constructivo
S es la solución parcial al problema, E es el conjunto de elementos del problema, α es el valor del
parámetro de relajación que controla la aleatoriedad del procedimiento. τ es un elemento mínimo del
conjunto E según la función voraz f. β es un elemento máximo del conjunto E según la función voraz f.
RCL es la lista restringida de candidatos (restricted candidate list), contiene elementos de E que
cumplen con que evaluados con la función voraz sus valores se encuentran acotados inferiormente por
β-α(β-τ) y superiormente por β.
α = 0 Criterio totalmente goloso
α = 1 Criterio totalmente aleatorio
0 < a < 1 Criterio Goloso + aleatorio
Busqueda_Local
Consiste en realizar pequeñas transformaciones a una solución dada S de un problema P, de forma de
obtener otras soluciones S’ distintas pero “cercanas” o “vecinas” a la solución original S. Una vez hallado
el espacio de soluciones vecinas simplemente nos quedamos con la mejor de todas ellas.
Busqueda_Local(S)
S_Max= φ;
Mientras (no es posible mejorar S) hacer
V = Construir_Vecindad(S);
sol = Max{F(s)|s ∈ V};
Si ( F(sol) > F (S_Max) ) Entonces
S_Max = sol;
Fin Mientras
Retornar (S_Max);
Fin Busqueda_Local
Ventajas
 Recomendable cuando el conjunto de datos a trabajar es grande y se requiere una solución
aceptable.
 Sencillez y facilidad de implementación.
 Permiten una mayor flexibilidad para el manejo de las características del problema (Variables de
holgura y condiciones de parada)
• Ofrecen más de una solución, lo cual permite ampliar las posibilidades de elección del que
decide
Desventajas
 No se puede conocer la calidad de la solución; es decir, precisar cuan cerca se está de la solución
óptima.
 La solución obtenida no es la óptima
Es deterministico?
Que otras clasificaciones aplican a este algoritmo?
En que consiste cada fase?
Descargar