Search Procedure) Efrn Garca Buitrago NDICE Introducin Descripcin general Definicin Fases (Constructiva y de Mejora) Ejemplo CutWith Fase de construccin Fase de mejora Usos prcticos Alternativas/mejoras GRASP Ventajas e incovenientes Descripcin General GRASP fue introducido por Feo and Resende (1989) y proviene de una heurstica semi-constructiva.
GRASP es el acrnimo de Greedy Randomized Adaptive Search Procedure, que, en espaol, puede traducirse por Procedimiento de Bsqueda Adaptativo Aleatorizado y Avaricioso.
Definicin de GRASP: Es un algoritmo metaheurstico multi-arranque en el que cada arranque se corresponde con una iteracin. Se aplica comnmente a la optimizacin de problemas combinatorios. GRASP, por lo general consiste de iteraciones que se componen de 2 fases:
1. La fase de construccin, que se encarga de obtener una solucin factible de alta calidad. 2. La fase de mejora, que se basa en la optimizacin (local) de la solucin obtenida en la primera fase.
Descripcin General G reedy R andomize Fase de construccin A daptative S earch P rocedure Fase de mejora Fase Constructiva 1. Eleccin aleatoria semilla. 2. Asignacin costes: Funcin Greedy. 3. Creacin lista de candidatos RCL. RCL = Cmin + x (Cmax - Cmin) 4. Eleccin aleatoria de elemento (Randomize). 5. Adaptacin de la solucin con el nuevo elemento (Adaptative) Fase Constructiva Fase de mejora Una bsqueda local para mejorar la fase constructora Ejemplo Cutwidth A F C E D
B Ejemplo Cutwidth Planteamiento Grafo Matriz Ejemplo Cutwidth Posible solucin A F C E D
B A B C D E F 2 4 4 4 1 Max(xi) = 4 Pseudocdigo Grasp {x_final: TipoSolucion} = MSM(M: integer; f : TipoFuncionObjetivo) var i: integer; x : TipoSolucion; begin for i := 1 to M do /*Construir una solucin a travs de cualquier heurstico o proc. aleatorio*/ {x} := ConstruirSolucion(); {x} := MejorarSolucion(x , f ); {x_final} := ActualizarSolucion( f , x_final, x ) end for end Ejemplo Cutwidth (Construccin) A F C E D
B Primer elemento semilla/aleatorio A Ejemplo Cutwidth (Construccin) A F C E D
B Nodos Costes B C D
E F 0 1 0 1 0 A A A A A B C D E F 0 1 0 1 0 A Ejemplo Cutwidth (Construccin) B C E F D
0 0 0 Lista Candidatos Restringida RCL_umbral = 0,5 Elegimos uno aleatoriamente Ejemplo Cutwidth (Construccin) A F C E D
B Nodos Costes B C
D E 1 1 0 1 A F A A A A F F F F B C D E 0 1 1 1 0 0 1 1 Ejemplo Cutwidth (Construccin) B C E D
1 1 0 1 D
0 RCL_umbral = 0,5 Elegimos uno aleatoriamente A F C E D
B A F Cmin = 0 Cmax = 1 = 0,5 Lista Candidatos Restringida RCL_umbral = Cmin + x (Cmax - Cmin)
Ejemplo Cutwidth (Construccin) A F C E D
B Nodos Costes B C
E 2 1 2 A F A A A F F F D D D 0 1 1 1 1 1 D B C D 2 1 2 Ejemplo Cutwidth (Construccin) A F C E D
B A F D B C E
2 1 2 C
1 RCL_umbral = 1,5 Elegimos uno aleatoriamente Cmin = 1 Cmax = 2 = 0,5 Lista Candidatos Restringida RCL_umbral = Cmin + x (Cmax - Cmin)
Ejemplo Cutwidth (Construccin) A F C E D
B Nodos Costes B E
3 3 A F A A F F D D 1 2 2 2 D C C 3 3 C B E 2 3 Ejemplo Cutwidth (Construccin) A F C E D
B A F D B E 3 3 RCL_umbral = 3 Elegimos uno aleatoriamente Cmin = 3 Cmax = 3 = 0,5 Lista Candidatos Restringida RCL_umbral = Cmin + x (Cmax - Cmin)
C B E 3 3 Ejemplo Cutwidth (Construccin) A F C E D
B A F D C E B 2 3 4 5 2 Max(xi) = 5 Solucin factible Pseudocdigo Grasp {x_final: TipoSolucion} = MSM(M: integer; f : TipoFuncionObjetivo) var i: integer; x : TipoSolucion; begin for i := 1 to M do /*Construir una solucin a travs de cualquier heurstico o proc. aleatorio*/ {x} := ConstruirSolucion(); {x} := MejorarSolucion(x , f ); {x_final} := ActualizarSolucion( f , x_final, x ) end for end
Ejemplo Cutwidth (Mejora por intercambio)
A F C E D
B A F D C E B A D C E B D F A C E B C F D A E B E F D C A B B F D C E A F Max(xi) = 5 Max(xi) = 5 Max(xi) = 5 Max(xi) = 5 Max(xi) = 4 Max(xi) = 3 Ejemplo Cutwidth (Mejora por inserccin)
A F C E D
B A F D C E B A F D C E E B A F D C C E B A F D D C E B A F F D C E B A B Max(xi) = 5 Max(xi) = 4 Max(xi) = 5 Max(xi) = 4 Max(xi) = 4 Max(xi) = 5 Pseudocdigo Grasp {x_final: TipoSolucion} = MSM(M: integer; f : TipoFuncionObjetivo) var i: integer; x : TipoSolucion; begin for i := 1 to M do /*Construir una solucin a travs de cualquier heurstico o proc. aleatorio*/ {x} := ConstruirSolucion(); {x} := MejorarSolucion(x , f ); {x_final} := ActualizarSolucion( f , x_final, x ) end for end Usos prcticos
Cubrimiento de conjuntos. Enrutamiento y Transporte (TSP) Lgica (N-reinas, tablero-figuras) Grafos (CutWith) Localizacin (p-mediana) Telecomunicaciones (VLSI) Alternativas/mejoras GRASP GRASP Reactivo. no es fijo, se selecciona de un conjunto de valores discretos en cada iteracin. Este conjunto viene determinado por los valores delas soluciones en iteraciones previas ( auto-ajusta su valor)
Funciones de desplazamiento. Como todos lo elementos de la RCL tienen la misma probabilidad de ser incluidos en la solucin de forma aleatoria se hacen estas funciones que son distribuciones de probabilidad encargadas de enfocar la seleccin de un elemento a ciertos candidatos, los candidatos por tanto dejan de ser equi-probables.
Memoria y aprendizaje. Introduccin de memoria a largo plazo. Se tiene en cuenta la historia pasada (soluciones de iteraciones anteriores) a la hora de tomar una decisin en la fase de construccin. Ventajas e inconvenientes Entre los puntos fuertes de esta metaheurstica estn el hecho de que es fcil de programar, muy rpida, tienen muy pocos parmetros, se maneja bien en presencia de restricciones, genera soluciones buenas y se puede hibridizar y paralelizar con facilidad.
Entre los inconvenientes del mtodo estn que hay que definir el proceso constructivo y en particular el ndice de forma "ad hoc" (especfico) para cada problema y, desgraciadamente, no todos los problemas permiten definir un ndice que mida de forma efectiva el impacto de las sucesivas decisiones en la calidad de la solucin finalmente generada.