Вы находитесь на странице: 1из 7

15.

053

Martes, 9 de abril

Resumen de tcnicas para resolver problemas de programacin entera


Tcnicas de enumeracin
Enumeracin completa hace una lista de todas las soluciones y elige la mejor Branch & Bound Busca implcitamente todas las soluciones, pero elimina selectivamente la gran mayora antes incluso de buscarlas Enumeracin implcita Branch & Bound aplicado a variables binarias

Ramificacin y acotamiento (Branch & Bound)

Entregas: material de clase

Tcnicas de planos de corte


Usa la PL para resolver programas enteros aadiendo restricciones para eliminar las soluciones fraccionadas.

Ejemplo de anlisis de inversiones Presupuesto = $14.000

Enumeracin
4 3$ 8$ 5 4$ 11$ 6 6$ 19$

Inversin Lquido necesario (miles) VAN aadido (miles)

1 5$

2 7$

3 4$ 12$

Considera sistemticamente todos los posibles valores de las variables de decisin.


Si existen n variables binarias, hay 2n modos diferentes.

16 $ 22$

maximizar 16x1 + 22x2 + 12x3 + 8x4 +11x5 + 19x6 sujeto a 5x1 + 7x2 + 4x3 + 3x4 +4x5 + 6x6 14 xj binario para j = 1 a 6
3

Idea usual: de forma iterativa divida el problema en dos. En la primera iteracin, consideramos por separado el caso x 1 = 0 y x1 = 1.

Un rbol de enumeracin
Problema original x1 = 0 x1 = 1

Sobre la enumeracin completa


x2 = 0

x2 = 1

x2 = 0

x2 = 1

Supongamos que pudisemos evaluar mil millones de soluciones por segundo. n = nmero de variables binarias Tiempos de las soluciones
n = 30, n = 40, n = 50 n = 60 1 segundo 17 minutos 11,6 das 31 aos
6

x3 = 0

x3 = 1

x3 = 0

x3 = 1

x3 = 0

x3 = 1

x3 = 0

x3 = 1

Sobre la enumeracin completa


Branch & Bound


La idea esencial: busque en el rbol de enumeracin, pero en cada nodo Resuelva el problema PL en el nodo Elimine el subrbol (pdelo) si:
1. La solucin es entera (no hay necesidad de ir ms all) o 2. La mejor solucin en el subrbol no puede ser tan buena como la mejor solucin disponible (la incumbente) o 3. No existe solucin factible
8

Supongamos que podemos evaluar 1 billn de soluciones por segundo, y de forma instantnea eliminar el 99,9999999% de todas las soluciones por no merecer consideracin. n = nmero de variables binarias Tiempos de las soluciones
n = 70, n = 80, n = 90 n = 100 1 segundo 17 minutos 11,6 das 31 aos
7

1. 2.

Branch & Bound


1
44 3/7

Branch & Bound


Nodo 1 es la relajacin PL original 1 x1 = 0
44 44 3/7

maximizar 16x1 + 22x2 + 12x3 + 8x4 +11x5 + 19x6 sujeto a 5x 1 + 7x2 + 4x3 + 3x4 +4x5 + 6x6 14 0 xj 1 para j = 1 a 6 Solucin en nodo 1: x1 =1 x2 = 3/7 x3 = x4 = x5 = 0 x6 =1 z = 44 3/7 2

Nodo 2 es la relajacin PL original ms la restriccin x1 = 0.

maximizar 16x1 + 22x2 + 12x3 + 8x4 +11x5 + 19x6 sujeto a 5x 1 + 7x2 + 4x3 + 3x4 +4x5 + 6x6 14 0 xj 1 para j = 1 a 6, x1 = 0 Solucin en nodo 2: x1 = 0 x2 = 1 x3 = 1/4 x4 = x5 = 0 x6 = 1 z = 44

El programa entero no puede tener un valor superior a 44 3/7


9

10

Branch & Bound


1 x1 = 0
44 44 3/7

Branch & Bound


Nodo 3 es la relajacin PL original ms la restriccin x1 = 1. 1 x1 = 0
44 x2 = 0 44 3/7

x1 = 1 3
44 3/7

x1 = 1 3

Nodo 4 es la relajacin PL original ms las restricciones x1 = 0, x2 = 0.


44 3/7

La solucin en el nodo 1 era x1 =1 x2 = 3/7 x3 = x4 = x5 = 0 x6 =1 z = 44 3/7


42

4 4

Nota: era la mejor solucin sin restricciones en x 1. Por tanto, tambin es la solucin para el nodo 3. (Si aade una restriccin, y la antigua solucin ptima es factible, entonces sigue siendo ptima)

Solucin en nodo 4:

z = 42

Primera solucin incumbente!


11

A partir del nodo 4 no se busca ms porque no puede existir una mejor solucin entera.

12

Branch & Bound


1 x1 = 0
44 x2 = 0 42 4 4 44 44 3/7

Branch & Bound


La solucin incumbente tiene valor 42 1 x1 = 0
44 x2 = 0 42 4 4 44
x3 = 0

44 3/7

x1 = 1 3

x1 = 1 3

La solucin incumbente tiene valor 42

2
x2 = 1 5 44 x2 = 0 6

44 3/7 x2 = 1 44 1/3 7

2
x2 = 1 5
x3 = 1

x2 = 0 44
x3 = 0

44 3/7 x2 = 1 44 1/3 7

6
x3 = 1

x3 = 0

x3 = 1

43,75 8

43,5 9

43,25 10

43,8 11

44,3 12

13 -Inf. 13

A continuacin resolvimos los problemas de PL asociados con con los nodos 5, 6, y 7. No se encontraron soluciones enteras.
13

A continuacin resolvimos los problemas PL asociados con los nodos 8 -13

14

Branch & Bound Resumen hasta ahora


1 x1 = 0
44 x2 = 0 42 4 44
x3 = 0

44 3/7

Hasta aqu hemos resuelto 13 problemas de programacin lineal.


Una solucin entera hallada Un subrbol podado porque la solucin era entera (nodo 4) Un subrbol podado porque la solucin no era factible (nodo 13) No hay subrboles podados por la cota.

x1 = 1 3

La solucin incumbente tiene valor 42


44 3/7 x2 = 1 44 1/3 7

2
x2 = 1 5
x3 = 1

x2 = 0 44
x3 = 0

6
x3 = 1

x3 = 0

x3 = 1

43,75 8

43,5 9

43,25 10

43,8 11

44,3 12

-Inf. 13

43,75 42,66

Luego resolvimos los problemas de PL asociados con los nodos


15

siguientes. Podemos podar el nodo con z = 42,66. Por qu?

16

Cmo obtener una mejor cota


Branch & Bound


1 x1 = 0
44 x2 = 0 42 4 44
x3 = 0

44 3/7

La cota en cada nodo se obtiene resolviendo un problema de PL. Pero sabemos que la mejor solucin entera tiene un valor objetivo entero. Si la mejor solucin entera para un nodo es a lo sumo 42,66, entonces sabemos que la mejor cota es como mximo 42. Otras cotas tambin se pueden redondear.

x1 = 1 3

La solucin incumbente tiene valor 42


44 3/7 x2 = 1 44 1/3 7

2
x2 = 1 5
x3 = 1

x2 = 0 44
x3 = 0

6
x3 = 1

x3 = 0

x3 = 1

43,75 8

43,5 9

43,25 10

43,8 11

44,3 12

Inf. 13

43,75 42,66

17

18

Branch & Bound


1 x1 = 0
44 x2 = 0 42 4 44
x3 = 0

Branch & Bound


La solucin incumbente tiene valor 42 1 x1 = 0
44 x2 = 1 x2 = 0 42
x3 = 1

44

44

x1 = 1 3
44

x1 = 1 3
44

La solucin incumbente tiene valor 42


x2 = 1 44 7

2
x2 = 1 5
x3 = 1

2
x2 = 1 44
x3 = 0

x2 = 0 44
x3 = 0

x2 = 0 44
x3 = 1 x3 = 0

6
x3 = 1

44
x3 = 0

6
x3 = 1

x3 = 0

x3 = 1

43

43

43

10

43

11

44

12

Inf 13

43 8

43 9

43 10

43 11

44 12

Inf 13

43

42

43

42

43

42

43

43

Hemos hallado una nueva solucin incumbente


19

x1 = 1, x2 = x3 = 0, x4 = 1, x5 = 0, x6 = 1 z = 43

20

Branch & Bound


1 x1 = 0
44 x2 = 0 42 4 44
x3 = 0

Branch & Bound


La nueva solucin incumbente tiene valor 43 1 x1 = 0
44 x2 = 1 44 7 42
x3 = 1

44

44

x1 = 1 3
44

x1 = 1 3
44

La mieva solucin incumbente tiene valor 43


x2 = 1 44 7

2
x2 = 1 5
x3 = 1

2
x2 = 1 44
x3 = 0

x2 = 0 44
x3 = 0

x2 = 0 4

x2 = 0 44
x3 = 1 x3 = 0

6
x3 = 1

5
9 43 9

6
x3 = 1

x3 = 0

x3 = 0

x3 = 1

8 43 8

9 43 9

10 43 10

11 43 11

44 12

Inf 13

8 43 8

10 43 10

11 43 11

44 12

Inf 13

43

42

43

42

43

43

Hemos hallado una nueva solucin incumbente x1 = 1, x2 = x3 = 0, x4 = 1, x5 = 0, x6 = 1 z = 43


21

Si hubiesemos encontrado antes este incumbente, habramos buscado menos.


22

Finalizacin
1 x1 = 0
44 x2 = 0 42 4 44
x3 = 0

44

x1 = 1 3
44

La nueva solucin incumbente tiene valor 43


x2 = 1 44 7

Conclusiones

Branch & Bound puede acelerar la bsqueda


Slo se evaluaron 25 nodos (programacin lineal) Otros nodos se podaron

2
x2 = 1 5
x3 = 1

x2 = 0 44
x3 = 0


x3 = 1

Obtener pronto un buen incumbente puede ser valioso


slo se habran evaluado 19 nodos

6
x3 = 1

x3 = 0

Resuelve problemas de PL ms rpido, porque comenzamos con una solucin excelente u ptima
usa una tcnica denominada el mtodo simplex dual

8 43 8

9 43 9

10 43 10

11 43 11

44 12

Inf 13

Obtener mejores cotas puede ser valioso.


A veces utilizamos propiedades que nos son obvias, como el hecho de que las soluciones enteras tienen valores de solucin enteros

44 14 44 16 38 18 19

15 Inf 17 Inf Inf


23

24

Branch & Bound


Anotacin:
z* = solucin entera ptima Subdivisin: un nodo del rbol B&B Incumbente: la mejor solucin a mano zI: valor de la incumbente zPL: valor de la relajacin PL del nodo actual LIST: la coleccin de nodos activos (no podados) Hijo de un nodo : los dos problemas creados para un nodo, p. ej., diciendo x j = 1 o xj = 0.

Algoritmo Branch & Bound


PASO INICIAL SELECCIONAR:
Si LIST = , la incumbente es ptima si existe, y el problema no tiene solucin factible si no existe incumbente; si no, supongamos que S sea una subdivisin de LIST. Sea xPL la solucin ptima de S Sea zPL = su valor objetivo CASO 1. zPL = - (la PL no es factible) Quitar S de LIST (podarlo) Volver a SELECCIONAR

Paso inicial: LIST = {problema original} Incumbente: = zI = -


25

26

Algoritmo Branch & Bound


PASO INICIAL SELECCIONAR:
Si LIST = , la incumbente es ptima (si existe), y el problema no tiene solucin factible si no existe incumbente; si no, supongamos que S sea una subdivisin de LIST. Sea xPL la solucin ptima de S Sea zPL = su valor objetivo CASO 2. - < zPL <= zI. Esto es, la solucin incumbente domina la PL Quitar S de LIST (podarlo) Volver a SELECCIONAR

Algoritmo Branch & Bound


PASO INICIAL SELECCIONAR:
Si LIST = , la incumbente es ptima (si existe), y el problema no tiene solucin factible si no existe incumbente; si no, supongamos que S sea una subdivisin de LIST. Sea xPL la solucin ptima de S Sea zPL = su valor objetivo CASO 2. - < zPL <= zI. Esto es, la solucin incumbente domina la PL Quitar S de LIST (podarlo) Volver a SELECCIONAR

27

28

Algoritmo Branch & Bound


PASO INICIAL SELECCIONAR:
Si LIST = , la incumbente es ptima (si existe), y el problema no tiene solucin factible si no existe incumbente; si no, supongamos que S sea una subdivisin de LIST. Sea xPL la solucin ptima de S Sea zPL = su valor objetivo CASO 3. zI < zPL y xPL es entero Esto es, la solucin PL es entera y domina la incumbente. Entonces la solucin incumbente := xPL; zI := zPL Eliminar S de LIST (podado por nmeros enteros) Volver a SELECCIONAR

Algoritmo Branch & Bound


PASO INICIAL SELECCIONAR:
Si LIST = , la incumbente es ptima (si existe), y el problema, no tiene solucin factible si no existe incumbente; si no, supongamos que S sea una subdivisin de LIST. Sea xPL la solucin ptima de S Sea zPL = su valor objetivo CASO 4. zI < zPL y xPL no es entero. No hay suficiente informacin para podar S Quitar S de LIST Aadir el hijo de S a LIST Volver a SELECCIONAR
29 30

Ramificacin Hay varias reglas de seleccin


Regla general 1: no deje que LIST crezca demasiado (las soluciones han de almacenarse). Por tanto, d prioridad a los nodos que estn ms abajo en el rbol. Regla general 2: : escoja un dodo de LIST que tenga probabilidad de dar una incumbente mejorada. A veces se utilizan heursticas especiales para dar con una buena solucin incumbente.
X2

El rbol B&B no tiene por que ser simtrico, y no se seleccionan subrboles considerando las variables disponibles.
X1

=0
X2

X1

=1

=0

=1

X8 =

0
X3 = X 3=

X8
0

=1
=1

=0

X3 X3 =
. . . . . .

=0

X3 =

1 0
. . . . . .

1
. . . . . . . . . . . .

X3=

X3

Saber cmo ramificar para reducir el tiempo de ejecucin se basa en la experiencia.

. . . . . .

. . . . . .

. . .

. . .

. . .

. . .

31

32

Existen diferentes tcnicas de acotamiento

Se pueden dar diferentes reglas de ramificacin



Ramificacin: determinar hijos para un nodo. Existen muchas posibilidades. Regal general 1: si resulta claro que x j = 1 en una solucin ptima, suele ser bueno ramificar en x j = 0 vs xj = 1. Regla general 2: ramificar en variables importantes merece la pena
P.ej., en el problema de localizacin, ramifique primero sobre las variables de localizacin de la fbrica

Utilizamos la cota obtenida eliminando las restricciones enteras (relajacin PL). Existen otras opciones. Equilibrio clave en las cotas: tiempo necesario para obtener una cota contrapuesto a la calidad de la cota Si podemos obtener una cota ms rpido, a veces no nos importara obtener una cota que es peor A menudo merece la pena obtener una cota mejor con tal de que no nos lleve mucho tiempo (ver siguiente leccin).
34

La esperanza es que una subdivision con x j = 0 se puede podar.

33

Qu ocurre si las variables son variables enteras generales?


Resumen

Se pueden elegir hijos del siguiente modo:


hijo 1: x 1 3 hijo 2: x1 4 (o xj k) (o xj k+1)

Cmo se elegira la variable j y el valor k


Lo usual sera tomar un valor fraccional de xPL. p. ej., si x 7 = 5.62, entonces es posible ramificar en x 7 5 y x7 6. Otras opciones tambin son posibles.

Branch & Bound es el mtodo estndar de alcanzar la optimidad en los problemas de PE. Hacerlo funcionar en la prctica requiere algo de arte. Gran parte del arte viene incorporado en modernos programas de software, tipo CPLEX.

35

36

Un mal ejemplo de enumeracin implcita


maximizar sujeto a 2x 1 + 2x2 + 2x3 + . . . + 2x100 2x1 + 2x2 + 2x3 + . . . + 2x100 101 xi {0,1} para i = 1 a 100. Por qu es un mal ejemplo? Qu pasara si ussemos el mtodo branch & bound, tal y como lo hemos descrito?
37

Вам также может понравиться