Ramificación y acotación (Branch and Bound)

Slides:



Advertisements
Presentaciones similares
Branch-and-bound Search
Advertisements

Tania Guzmán García Luis González Varela Alexandre González Rivas
ESTRUCTURA DE DATOS Unidad 04 TDA no lineales - Árboles.
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
GRAFOS Presentado por: Oscar Leonardo Ramírez John Freddy Sandoval
Árboles Grafo que no contiene ciclos, es decir es un grafo también acíclico, pero a su vez es conexo.
Búsqueda con retroceso
GRAFOS: ALGORITMOS FUNDAMENTALES
MATRIZ DE CHEQUEO DE PARIDAD
MATEMÁTICAS DISCRETAS.
Investigación de Operaciones II
ESTRUCTURAS DE DATOS AVANZADAS
Búsqueda Informada Heurísticas.
Inteligencia Artificial Búsqueda informada y exploración
Solución de problemas por búsqueda inteligente
Inteligencia Artificial Resolver problemas mediante búsqueda
Tema Nº4.
Inteligencia Artificial Resolver problemas mediante búsqueda
Teoría de Grafos.
Complejidad Problemas NP-Completos
AED I. Estructuras de Datos.
GRAFOS HUGO ARAYA CARRASCO.
PROGRAMACIÓN PARALELA EN ALGORITMOS SOBRE GRAFOS
Modelos Cuantitativos
Material de apoyo Unidad 4 Estructura de datos
Grafos. Un Grafo G es un par de conjuntos (V, E), donde V es un conjunto no vacío de elementos llamados vértices o nodos y E es un conjunto formado por.
Ciudad de Könisberg, Prusia, en XVIII:
Teoria de grafos.-clase 4
Universidad de los Andes-CODENSA
Árboles, montículos y grafos Cola de prioridades, montículos
Trabajo presentado por: LUIS FERNANDO OBANDO ING
Optimización Combinatoria usando Algoritmos Evolucionistas Problemas de Optimización. Idea: Encontrar una solución "factible" y "óptima" de acuerdo a algún.
Programación Lineal Unidad 1 Parte 3.
Optimización, Búsqueda Heurística
Problemas de Decisión y Optimización
Agentes de resoluciones d problemas Parte I. Un agente puede adoptar una meta o un propósito para satisfacer.
Estructura de Datos y Algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Métodos de Búsqueda Informada. Búsqueda de la mejor Ruta En esta sección no sólo nos interesa encontrar una posible ruta, sino obtener aquella ruta que.
Parte I. Estructuras de Datos.
Diseño y análisis de algoritmos
Parte II. Algorítmica. 3. Algoritmos voraces.
Diseño y análisis de algoritmos
Material de apoyo Unidad 4 Estructura de datos
Diseño y análisis de algoritmos
INSTITUTO TECNOLÓGICO DE VILLAHERMOSA. CATEDRATICO:
Algoritmos de Búsqueda “Backtracking y Branch and Bound”
Árboles Recomendado: 1. Nivelación Funciones
Backtracking 1. Método general. 2. Análisis de tiempos de ejecución.
Parte II. Algorítmica. 5. Backtracking. 1. Análisis de algoritmos.
Diseño y análisis de algoritmos
Matemáticas Discretas
Parte I. Estructuras de Datos.
Sesión 3: Teoría de Grafos
Métodos de diseño de Algoritmos
Tema 12. Backtracking. 1. Método general.
Parte I. Estructuras de Datos.
Tema 10: Algoritmos voraces
Tema 13: Ramificación y poda
Estructura de Datos 4 Grafos Dirigidos
Instituto Tecnológico De Villahermosa Alumno: Lázaro García Hernández.
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
ARBOLES GENERALIZADOS
Capítulo 8: Árboles Autor: José Alfredo Jiménez Murillo.

Matemáticas Discretas MISTI
Recorridos de grafos Segunda Parte M.C. Meliza Contreras González.
Algoritmos voraces Códigos de Huffman. Descripción del problema Tenemos un archivo de entrada. Asumiremos que el archivo está compuesto de bytes (enteros.
Transcripción de la presentación:

Ramificación y acotación (Branch and Bound) Introducción El problema del viajante de comercio El problema de la mochila 0-1 El juego del 15

Introducción: Branch and Bound Al igual que los métodos de búsqueda con retroceso: se aplica a problemas de optimización con restricciones (algunas veces también a probl. de decisión) se genera el espacio de soluciones, organizándolo en un árbol. Se podan subárboles inútiles. Terminología: Nodo vivo: nodo del espacio de soluciones del que no se han generado aún todos sus hijos. Nodo muerto: nodo del que no se van a generar más hijos porque: no hay más no es completable, no producirá una solución mejor que la solución en curso Nodo en curso (o en expansión): nodo del que se están generando hijos

Introducción: (1) Ramificación… Diferencia fundamental con el método de búsqueda con retroceso: Búsqueda con retroceso: Tan pronto como se genera un nuevo hijo del nodo en curso, este hijo pasa a ser el nodo en curso. Ramificación y acotación: Se generan todos los hijos del nodo en curso antes de que cualquier otro nodo vivo pase a ser el nuevo nodo en curso. En consecuencia: Los únicos nodos vivos son los que están en el camino de la raíz al nodo en curso. Puede haber más nodos vivos. Se deben almacenar en una estructura de datos auxiliar: lista de nodos vivos.

Recordemos: Backtracking para problemas de optimización (minimización) algoritmo BackTracking(ent k:entero; entsal X:vector[1..n]de valor) {Pre: X[1..k-1] es completable, cota(X,k-1)<CosteMejorSol}  para todo v en Ci hacer X[k]:=v; si (completable(X,k)  cota(X,k)<CosteMejorSol) entonces si Sol(X,k) entonces MejorSol:= X; CosteMejorSol:= Coste(X) fsi; si k<n entonces BackTracking(k+1,X) fsi fpara

Backtracking Iterativo tipo nodo es tupla X: vector[1..n]de valor k: [1..n+1] ftipo // X[1..k-1] es una asignación parcial algoritmo BackTracking()   variable P es pila de nodo; CosteMejorSol:= pvacia(P); apilar(P,<X,1>) mientras vacia(P) hacer <X,k>:=cima(P); desapilar(P); para todo v en Ci hacer X[k]:=v; si (completable(X,k)  cota(X,k)<CosteMejorSol) entonces si Sol(X,k) entonces MejorSol:= X; CosteMejorSol:= Coste(X) fsi; si k<n entonces apila(P,<X,k+1>) fsi fpara fmientras devuelve (MejorSol, CosteMejorSol)

Introducción: Diferentes estrategias de elegir el siguiente nodo del conjunto de nodos vivos  Distintos órdenes de recorrido del árbol de soluciones pila: recorr. en profundidad cola:  recorrido por niveles cola con prioridades (Branch and Bound): selección del nodo vivo más prometedor.  recorrido “extraño” La prioridad de un nodo se calcula de acuerdo con una función de estimación que mide cuánto de “prometedor” es un nodo.

Ramificación y poda tipo nodo es tupla X: vector[1..n]de valor k: [1..n+1] ftipo // X[1..k-1] es una asignación parcial algoritmo BranchAndBound()   variable C es cola_prioritaria de nodo; CosteMejorSol:=  cvacia(C); encolar(C,<X,1,pr(X,1)>) mientras  vacia(C) hacer <X,k>:=primero(C); desencolar(C); para todo v en Ci hacer X[k]:=v; si (completable(X,k)  cota(X,k)<CosteMejorSol) entonces si Sol(X,k) entonces MejorSol:= X; CosteMejorSol:= Coste(X) fsi; si k<n entonces encola(C,<X,k+1,pr(X,k+1)>) fsi fpara fmientras devuelve (MejorSol, CosteMejorSol)

Ramificación y poda La prioridad sirve para “guiar” la búsqueda y encontrar pronto una solución óptima. Si prioridad(X,k) = “coste de la mejor extensión de X”, el algoritmo irá directo a la mejor solución La cota sirve para descubrir pronto que es inútil continuar por el camino actual Si, además, cota(X,k)= “coste de la mejor extensión de X”, podará el resto de ramas. En general, conseguir prioridades y cotas perfectas es imposible. Si prioridad(X,k)  “coste de la mejor extensión de X”, el algoritmo irá casi directo a la mejor solución Si cota(X,k)  “coste de la mejor extensión de X”, el algoritmo podará casi todas las ramas En general, el coste espacial y temporal del método es O(p(n) dn) d=max{|Ci|} p(n) es un polinomio

Ramificación y poda Punto clave de los métodos de ramificación y acotación: Encontrar buenas funciones de prioridad y buenas cotas. Habitualmente se usa la cota como prioridad del nodo (si la cota es buena, es una buena medida de lo prometedor que es el nodo). Si no decimos lo contrario, nosotros también lo haremos.

El problema del viajante de comercio ¡Estoy hasta las ’s de viajar ! Recordar: Encontrar un recorrido de longitud mínima para un viajante que tiene que visitar varias ciudades y volver al punto de partida, conocida la distancia existente entre cada dos ciudades. Es decir, dado un grafo dirigido con arcos de longitud no negativa, se trata de encontrar un circuito de longitud mínima que comience y termine en el mismo vértice y pase exactamente una vez por cada uno de los vértices restantes (circuito hamiltoniano).

El problema del viajante de comercio Formalización: Sean G=(V,A) un grafo orientado, V={1,2,…,n}, D[i,j] la longitud de (i,j)A, D[i,j]= si no existe el arco (i,j). El circuito buscado empieza en el vértice 1. Candidatos: E = { 1,X,1 | X es una permutación de (2,3,…,n) } |E| = (n-1)! Soluciones factibles: E = { 1,X,1 | X = x1,x2,…,xn-1, es una permutación de (2,3,…,n) tal que (ij,ij+1)A, 0<j<n, (1, x1) A , (xn-1,1) A} Funcion objetivo: F(X)=D[1,x1]+D[x1, x2] + D[x2, x3]+...+D[xn-2, xn-1]+ +D[xn,1]

El problema del viajante de comercio Representación del espacio de estados: Caso de un grafo completo con |V| = 4. 1 16 15 13 12 11 10 9 8 7 6 14 5 4 3 2 x1=2 x1=3 x1=4 x2=3 x2=4 x2=2 x3=4 x3=3 x3=2 Cada hoja es una solución y representa el viaje definido por el camino desde la raíz hasta la hoja.

El problema del viajante de comercio Definición de una cota(X,k) muy sencilla: Suma de aristas ya escogidas cota(X,k)=D[1,X[1]]+ i=1..k-2 D[X[i],X[i+1]] Ejemplo: (n=5)  20 30 10 11 15 16 4 2 3 5 19 6 18 7       Ejemplo de matriz no reducida.

El problema del viajante de comercio Puede mejorarse usando la matriz de distancias reducida: Una fila (columna) de la matriz de distancias se dice reducida si sus elementos son no negativos y contiene al menos un 0. Una matriz de distancias se dice reducida si cada fila y columna es reducida. Para cada k, 1<k<n, todo circuito hamiltoniano incluye exactamente un arco de la forma (k,-) y exactamente un arco de la forma (-,k). Si se resta una constante t de cada elemento de una fila (columna) de la matriz de distancias, la longitud de todo hamiltoniano se reduce exactamente en t y un hamiltoniano de distancia mínima lo sigue siendo.  20 30 10 11 15 16 4 2 3 5 19 6 18 7       Ejemplo de matriz no reducida. 

El problema del viajante de comercio Si se elige t como el mínimo de los elementos de la fila (columna) i-ésima y se resta t de todos los elementos de esa fila (columna), la fila resultante es reducida. Repitiendo el proceso para filas y columnas, siempre se puede conseguir que la matriz de distancias sea reducida. La cantidad total L restada de filas y columnas es una cota inferior de la longitud de un hamiltoniano de longitud mínima Reducción de la fila 1, t = 10.  20 30 10 11 15 16 4 2 3 5 19 6 18 7       1  10 17 1 12 11 2 3 15       20 30 16 4 5 19 6 18 7 Reducción de la matriz, L = 25.

El problema del viajante de comercio Cálculo de la cota inferior para los nodos distintos de la raíz y de las hojas: Sea A la matriz de distancias reducida para el nodo y. Sea x un hijo de y que corresponda a incluir el arco (i,j) en el recorrido y que no sea hoja. La matriz B reducida para x, y por tanto cota(x), se calcula de la siguiente forma: 1. Cambiar todos los elementos de la fila i y de la columna j de A por . Esto evita el incluir más arcos que salgan de i o lleguen a j. 2. Cambiar el elemento (j,1) de A por  Esto evita considerar el arco (j,1). 3. B es la matriz que se obtiene al reducir todas las filas y columnas de la matriz resultante (excepto aquéllas formadas sólo por “”). Si r es el valor total restado en el paso (3): cota(x)=cota(y) + D[i,j] + r

El problema del viajante de comercio Ejemplo:  20 30 10 11 15 16 4 2 3 5 19 6 18 7        10 17 1 12 11 2 3 15       Grafo original. Matriz reducida, L = 25.  11 2 15 12        10 9 3 12       ˆ c  25 1 x1 = 2 x1 = 5 x1 = 3 x1 = 4 2 3 4 5 ˆ c  25+10  35 ˆ c  25+17+11  53 ˆ c  25 ˆ c  25+1+5  31  1 2 3 4 12        12 11 3 2      

El problema del viajante de comercio ˆ c  25 1 UB =  x1 = 2 x1 = 5 x1 = 3 x1 = 4 ˆ c  35 2 ˆ c  53 3 ˆ c  25 4 ˆ c  31 5 x2 = 2 x2 = 5 x2 = 3 ˆ c  28 6 7 8 ˆ c  36 ˆ c  50 x3 = 3 x3 = 5 ˆ c  32 9 10 ˆ c  28 x4 = 3 Es hoja (solución), se actualiza UB = 28. ˆ c  28 11 El siguiente nodo en curso sería el 5, pero cota(5)>UB luego el algoritmo termina y el hamiltoniano mínimo es 1,4,2,5,3,1.

El problema del viajante de comercio Otras versiones, basadas en otra representación del espacio de estados: G=(V,A), |V|=n, |A|=a A={(oi, di)}, oi V, di  V D[oi, di], distancia de la arista Un hamiltoniano es un conjunto de n arcos. Además, para cada vértice i, 0<i<n+1, debe haber en ese conjunto exactamente un arco de la forma (i,j) y uno de la forma (k,i). Soluciones Factibles: {X=()| i xi {0,1}, xi =n, u V ((!i (xi =1  oi =u)  (!j (xj =1  dj =u)) } Función Objetivo: F(X)= xi D[oi, di] Arbol de búsqueda= árbol binario: Un hijo izquierdo representa la inclusión de un determinado arco en el hamiltoniano mientras que su hermano derecho representa la exclusión de ese arco.

El problema del viajante de comercio Si se elige, para empezar, el arco (i,j): el subárbol izquierdo representa todos los recorridos que incluyen el arco (i,j), y el subárbol derecho los recorridos que no lo incluyen; si hay un recorrido óptimo incluido en el subárbol izquierdo, entonces sólo faltan por seleccionar n-1 arcos para encontrarlo, mientras que si todos están en el derecho, hay que seleccionar todavía n arcos. Ejercicio: pensar en como se calcula la cota de un nodo, dada la cota de su padre

El problema del viajante de comercio Por ejemplo, con el grafo de antes: Se llega al nodo 6. Se han elegido ya tres arcos: (3,1), (5,3), (1,4). Para los dos restantes, sólo queda ya una opción: (4,2) y (2,5). Así, se obtiene el recorrido: 5,3,1,4,2,5. Con distancia total: 28 (así, UB = 28) El siguiente nodo en curso es el 3, con y el algoritmo acaba. ˆ c  25 6 7 4 5 2 3 1  20 30 10 11 15 16 4 2 3 5 19 6 18 7       incluir (3,1) excluir (3,1) ˆ c  25 ˆ c  36 incluir (5,3) excluir (5,3) ˆ c  28 ˆ c  36 incluir (1,4) excluir (1,4) ˆ c  28 ˆ c  37 ˆ c ( 3 )  36  UB

El problema de la mochila 0-1 Recordar el problema de la mochila… Se tienen n objetos fraccionables y una mochila. El objeto i tiene peso pi y beneficio bi. El objetivo es llenar la mochila, de capacidad C, de manera que se maximice el beneficio. ya vimos una cota que consistía en resolver el problema permitiendo fracciones en los objetos sobre los que aún no se ha decidido. maximizar b i x 1  n  sujeto a p C con  ,   

Un primer ejemplo: El juego del 15 Samuel Loyd: El juego del 15 o “taken”. Problema publicado en un periódico de Nueva York en 1878 y por cuya solución se ofrecieron 1000 dólares. El problema original: Decisión: encontrar una secuencia de movimientos que lleven al objetivo Optimización: encontrar la secuencia de movimientos más corta Problema de Lloyd 1 2 3 4 5 7 8 9 10 11 12 13 14 15 6 El objetivo ?

Un primer ejemplo: El juego del 15 Configuración: permutación de (1,2,...,16) Solución: secuencia de configuraciones que empiezan en el estado inicial y acaban en el final. De cada configuración se puede pasar a la siguiente. No hay configuraciones repetidas 1 2 3 4 5 7 8 9 10 11 12 13 14 15 6     objetivo 16 17 18 19 20 21 22 23

Un primer ejemplo: El juego del 15 Problema muy difícil para backtracking El árbol de búsqueda es potencialmente muy profundo (16! niveles), aunque puede haber soluciones muy cerca de la raíz. Se puede resolver con branch and bound (aunque hay métodos mejores) funciones de prioridad: numero de fichas mal colocadas (puede engañar) suma, para cada ficha, de la distancia a la posición donde le tocaría estar ...