La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Ramificación y acotación (Branch and Bound)"— Transcripción de la presentación:

1 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

2 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

3 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.

4 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

5 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)

6 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.

7 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)

8 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

9 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.

10 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).

11 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]

12 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.

13 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.

14 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.

15 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.

16 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

17 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  53 ˆ c 25 ˆ c  31 1 2 3 4 12       12 11 3 2      

18 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.

19 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.

20 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

21 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

22 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 ,

23 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 ?

24 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

25 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 ...


Descargar ppt "Ramificación y acotación (Branch and Bound)"

Presentaciones similares


Anuncios Google