Transcript
Page 1: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 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

Page 2: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 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

Page 3: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 3

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:– Búsqueda con retroceso:

Los únicos nodos vivos son los que están en el camino de la raíz al nodo en curso.

– Ramificación y acotación:Puede haber más nodos vivos. Se deben almacenar en una estructura de datos auxiliar: lista de nodos vivos.

Introducción: (1) Ramificación…

Page 4: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 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; fsifpara

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; fsifpara

Page 5: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 5

Backtracking Iterativo

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; fsi fparafmientrasdevuelve (MejorSol, CosteMejorSol)

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; fsi fparafmientrasdevuelve (MejorSol, CosteMejorSol)

tipo nodo es tupla X: vector[1..n]de valor k: [1..n+1]ftipo // X[1..k-1] es una asignación parcial

tipo nodo es tupla X: vector[1..n]de valor k: [1..n+1]ftipo // X[1..k-1] es una asignación parcial

Page 6: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 6

Diferentes estrategias de elegir el siguiente nodo del conjunto de nodos vivos

Distintos órdenes de recorrido del árbol desoluciones

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

Introducción:

Page 7: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 7

Ramificación y poda

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; fsi fparafmientrasdevuelve (MejorSol, CosteMejorSol)

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; fsi fparafmientrasdevuelve (MejorSol, CosteMejorSol)

tipo nodo es tupla X: vector[1..n]de valor k: [1..n+1]ftipo // X[1..k-1] es una asignación parcial

tipo nodo es tupla X: vector[1..n]de valor k: [1..n+1]ftipo // X[1..k-1] es una asignación parcial

Page 8: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 8

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

Page 9: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 9

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.

Ramificación y poda

Page 10: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 10

El problema del viajante de comercio

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

¡Estoy hastalas ’s de viajar !

Page 11: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 11

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

Page 12: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 12

Representación del espacio de estados:

– Caso de un grafo completo con |V| = 4.

El problema del viajante de comercio

1

1615131211

10 9 8 7 6

14

5

4 3 2

x1=2 x1=3 x1=4

x2=3 x2=4 x2=2 x2=4 x2=2 x2=3

x3=4 x3=3 x3=4 x3=2 x3=3 x3=2

Cada hoja es una solución y representa el viajedefinido por el camino desde la raíz hasta la hoja.

Page 13: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 13

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)

El problema del viajante de comercio

20 30 10 11

15 16 4 2

3 5 2 4

19 6 18 3

16 4 7 16

Ejemplo de matriz no reducida.

Page 14: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 14

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.

El problema del viajante de comercio

20 30 10 11

15 16 4 2

3 5 2 4

19 6 18 3

16 4 7 16

Ejemplo de matriz no reducida.

Page 15: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 15

– 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

El problema del viajante de comercio

Reducción de la fila 1, t = 10.

20 30 10 11

15 16 4 2

3 5 2 4

19 6 18 3

16 4 7 16

10 20 0 1

15 16 4 2

3 5 2 4

19 6 18 3

16 4 7 16

10 17 0 1

12 11 2 0

0 3 0 2

15 3 12 0

11 0 0 12

20 30 10 11

15 16 4 2

3 5 2 4

19 6 18 3

16 4 7 16

Reducción de la matriz, L = 25.

Page 16: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 16

– 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

Page 17: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 17

Ejemplo:

El problema del viajante de comercio

10 17 0 1

12 11 2 0

0 3 0 2

15 3 12 0

11 0 0 12

20 30 10 11

15 16 4 2

3 5 2 4

19 6 18 3

16 4 7 16

Grafo original. Matriz reducida, L = 25.

1

2 5 4 3

x1 = 2

x1 = 3 x1 = 4

x1 = 5

11 2 0

0 0 2

15 12 0

11 0 12

1 2 0

3 0 2

4 3 0

0 0 12

12 11 0

0 3 2

3 12 0

11 0 0

10 9 0 0 3 0 12 0 9 0 0 12

c 25

c 25 c 25+10 35 c 25+17+11 53 c 25+1+5 31

Page 18: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 18

1

2 5 4 3

x1 = 2

x1 = 3 x1 = 4

x1 = 5

UB =

El problema del viajante de comercio

6 7 8

x2 = 2x2 = 3

x2 = 5

c 25

c 25 c 35 c 53 c 31

c 28

c 50 c 36

9 10

11

x3 = 3 x3 = 5

c 32 c 28

c 28

x4 = 3

Es hoja (solución),se actualiza UB = 28.

El siguiente nodo en curso sería el 5, pero cota(5)>UBluego el algoritmo termina y el hamiltoniano mínimoes 1,4,2,5,3,1.

Page 19: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 19

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

Page 20: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 20

– 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

Page 21: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 21

– 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, cony el algoritmo acaba.

El problema del viajante de comercio

6 7

4 5

2 3

1

20 30 10 11

15 16 4 2

3 5 2 4

19 6 18 3

16 4 7 16

incluir (3,1) excluir (3,1)

incluir (5,3) excluir (5,3)

incluir (1,4) excluir (1,4)

c 25

c 25

c 28

c 28

c 36

c 37

c 36

c (3)36UB

Page 22: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 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 bixi1in

sujeto a pixi1in C

con xi 0,1 , bi 0, pi 0, 1i n

Page 23: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 23

El problema original:

Decisión: encontrar una secuencia de movimientos que lleven al objetivo

Optimización: encontrar la secuencia de movimientos más corta

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.

Problema de Lloyd

1 2 3 45 7 89 10 11121314 15

6

El objetivo

1 2 3 45 7 89 10 111213 1415

6 ?

Page 24: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 24

– 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 45

78

9 10 11121314 15

6

1 23

45

78

9 10 11121314 15

61 2 3 45

78

9 10 11121314 15

61 2 3 45 7 89 10 11

121314 15

61 2 3 45

78

9 10 11121314 15

6

1 234

57

89 10 11

121314 15

61 2

34

57

89 10 11

121314 15

61 2 3

4578

9 10 11121314 15

61 2 3 45

78

9 1011

121314 15

61 2 3 45 7 89 10 11

121314 15

61 2 3 45 7 89 10 11

12131415

61 2 3 45 7 89 10 11

121314 15

61

23 4

57

89 10 11

121314 15

61 2 3 45

78

910

11121314 15

61 2 3 4

57

89 10 11

121314 15

6

1 234

57

8

9 10 11121314 15

6

1 23

45

78

9 10 11121314 15

6 1 23

45

78

9 10 11121314 15

6

1 2 345

78

9 10 11121314 15

6

1 2 3 45

78

9 101112

1314 15

61 2 3 45

78

9 1011

121314 15

6

1 2 3 45 7

89 10 11121314 15

61 2 3 45 7 89 10 11121314 15

6

objetivo

1

2 3 4 5

6 7 8 9 10

11

12

13

14

15

16

17

18

19

20

21

22

23

Un primer ejemplo:El juego del 15

Page 25: Ramificación y acotación (Branch and Bound)

Ramificación y acotación Pág. 25

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

Un primer ejemplo:El juego del 15


Top Related