clase 11 - programación lineal entera - branch &...

56
Clase 11 Programaci´ on Lineal Entera - Branch & Bound

Upload: others

Post on 28-Jan-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Clase 11

Programacion Lineal Entera - Branch & Bound

Problema Lineal Entero (IP)

El objetivo de la clase de hoy sera resolver el problema:

max c tx

(IP) s.a: Ax ≤ b

x ∈ Zn≥0

Veamos primero como se relaciona este problema con la capsula convexa

de los puntos factibles, antes de adentrarnos a resolver el problema en sı.

1

Capsula Convexa

Llamemos S ={Ax ≤ b, x ∈ Zn

≥0}

. Supongamos por simplicidad que

S 6= ∅ y que ademas es acotado (y por ende tiene solo finitos puntos).

Nosotros buscamos el valor de zIP = max {c tx : x ∈ S}.

Como son solo finitos puntos, ademas de realizarse en algun punto que

llamaremos x∗, tenemos que c tx∗ = zIP <∞

Dada una combinacion convexa de puntos de S, el valor de la funcion

objetivo esta acotado por zIP, pues sik∑

i=1

λi = 1 (con λi ≥ 0 ∀i),

entonces c t(

k∑i=1

λixi

)=

k∑i=1

λi (c txi ) ≤k∑

i=1

λizIP = zIP = c tx∗.

Concluimos que zIP = max {c tx : x ∈ S} = max {c tx : x ∈ conv(S)},pues x∗ ∈ S ⊆ conv(S). La diferencia esta en que este ultimo es un

problema lineal (y la dificultad radica en describir conv(S), la capsula

convexa de S)

2

Capsula Convexa

Llamemos S ={Ax ≤ b, x ∈ Zn

≥0}

. Supongamos por simplicidad que

S 6= ∅ y que ademas es acotado (y por ende tiene solo finitos puntos).

Nosotros buscamos el valor de zIP = max {c tx : x ∈ S}.

Como son solo finitos puntos, ademas de realizarse en algun punto que

llamaremos x∗, tenemos que c tx∗ = zIP <∞

Dada una combinacion convexa de puntos de S, el valor de la funcion

objetivo esta acotado por zIP, pues sik∑

i=1

λi = 1 (con λi ≥ 0 ∀i),

entonces c t(

k∑i=1

λixi

)=

k∑i=1

λi (c txi ) ≤k∑

i=1

λizIP = zIP = c tx∗.

Concluimos que zIP = max {c tx : x ∈ S} = max {c tx : x ∈ conv(S)},pues x∗ ∈ S ⊆ conv(S). La diferencia esta en que este ultimo es un

problema lineal (y la dificultad radica en describir conv(S), la capsula

convexa de S)

2

Capsula Convexa

Llamemos S ={Ax ≤ b, x ∈ Zn

≥0}

. Supongamos por simplicidad que

S 6= ∅ y que ademas es acotado (y por ende tiene solo finitos puntos).

Nosotros buscamos el valor de zIP = max {c tx : x ∈ S}.

Como son solo finitos puntos, ademas de realizarse en algun punto que

llamaremos x∗, tenemos que c tx∗ = zIP <∞

Dada una combinacion convexa de puntos de S, el valor de la funcion

objetivo esta acotado por zIP, pues sik∑

i=1

λi = 1 (con λi ≥ 0 ∀i),

entonces c t(

k∑i=1

λixi

)=

k∑i=1

λi (c txi ) ≤k∑

i=1

λizIP = zIP = c tx∗.

Concluimos que zIP = max {c tx : x ∈ S} = max {c tx : x ∈ conv(S)},pues x∗ ∈ S ⊆ conv(S). La diferencia esta en que este ultimo es un

problema lineal (y la dificultad radica en describir conv(S), la capsula

convexa de S)

2

Capsula convexa - Ejemplo 2D

max y

s.a: −x + y ≤ 1

3x + 2y ≤ 12

2x + 3y ≤ 12

x , y ∈ Z≥0

max y

s.a: −x + y ≤ 1

3x + 2y ≤ 12

2x + 3y ≤ 12

x , y ∈ R≥0

3

Capsula convexa - Ejemplo 2D

max y

s.a: −x + y ≤ 1

3x + 2y ≤ 12

2x + 3y ≤ 12

x , y ∈ Z≥0

max y

s.a: −x + y ≤ 1

3x + 2y ≤ 12

2x + 3y ≤ 12

x , y ∈ R≥0

3

Capsula convexa - Ejemplo 3D (grafico)

4

Relajacion lineal de un problema entero

Dado un problema de PLE (Programacion Lineal Entera) de la forma:

max c tx

(IP) s.a: Ax ≤ b

x ∈ Zn≥0

Definimos su relajacion lineal al problema que se obtiene al relajar la

condicion de integralidad de las variables en cuestion:

max c tx

(LP) s.a: Ax ≤ b

x ∈ Rn≥0

Observacion: Usando lo visto en las clases anteriores, tenemos las

herramientas para encontrar el optimo de la relajacion lineal.

5

Relajacion lineal de un problema entero

Dado un problema de PLE (Programacion Lineal Entera) de la forma:

max c tx

(IP) s.a: Ax ≤ b

x ∈ Zn≥0

Definimos su relajacion lineal al problema que se obtiene al relajar la

condicion de integralidad de las variables en cuestion:

max c tx

(LP) s.a: Ax ≤ b

x ∈ Rn≥0

Observacion: Usando lo visto en las clases anteriores, tenemos las

herramientas para encontrar el optimo de la relajacion lineal.

5

Relajacion lineal de un problema entero

Dado un problema de PLE (Programacion Lineal Entera) de la forma:

max c tx

(IP) s.a: Ax ≤ b

x ∈ Zn≥0

Definimos su relajacion lineal al problema que se obtiene al relajar la

condicion de integralidad de las variables en cuestion:

max c tx

(LP) s.a: Ax ≤ b

x ∈ Rn≥0

Observacion: Usando lo visto en las clases anteriores, tenemos las

herramientas para encontrar el optimo de la relajacion lineal.

5

Branch & Bound

La idea central del algoritmo, y que sera uno de los criterios de corte a

tener en cuenta, radica en la siguiente observacion.

Si la solucion de la relajacion lineal de un problema tiene todas sus

coordenadas enteras, entonces tambien es solucion al problema entero

Recordemos que estamos maximizando. Si el optimo de la relajacion (que

tiene coordenadas enteras) ocurre en x , tenemos que:

zIP ≤ zLP = c tx ≤ zIP ⇒ zIP = zLP

Normalmente la solucion de la relajacion lineal de nuestro problema no

tiene por que dar un punto con todas sus coordenadas enteras.

Si esto ocurre, vamos a particionar el espacio de busqueda en otros mas

pequenos donde buscamos soluciones de la misma forma (¡sin dejar de

lado vertices enteros al particionar!).

6

Branch & Bound

La idea central del algoritmo, y que sera uno de los criterios de corte a

tener en cuenta, radica en la siguiente observacion.

Si la solucion de la relajacion lineal de un problema tiene todas sus

coordenadas enteras, entonces tambien es solucion al problema entero

Recordemos que estamos maximizando. Si el optimo de la relajacion (que

tiene coordenadas enteras) ocurre en x , tenemos que:

zIP ≤ zLP = c tx ≤ zIP ⇒ zIP = zLP

Normalmente la solucion de la relajacion lineal de nuestro problema no

tiene por que dar un punto con todas sus coordenadas enteras.

Si esto ocurre, vamos a particionar el espacio de busqueda en otros mas

pequenos donde buscamos soluciones de la misma forma (¡sin dejar de

lado vertices enteros al particionar!).

6

Branch & Bound

La idea central del algoritmo, y que sera uno de los criterios de corte a

tener en cuenta, radica en la siguiente observacion.

Si la solucion de la relajacion lineal de un problema tiene todas sus

coordenadas enteras, entonces tambien es solucion al problema entero

Recordemos que estamos maximizando. Si el optimo de la relajacion (que

tiene coordenadas enteras) ocurre en x , tenemos que:

zIP ≤ zLP = c tx ≤ zIP ⇒ zIP = zLP

Normalmente la solucion de la relajacion lineal de nuestro problema no

tiene por que dar un punto con todas sus coordenadas enteras.

Si esto ocurre, vamos a particionar el espacio de busqueda en otros mas

pequenos donde buscamos soluciones de la misma forma (¡sin dejar de

lado vertices enteros al particionar!).

6

Branch & Bound

La idea central del algoritmo, y que sera uno de los criterios de corte a

tener en cuenta, radica en la siguiente observacion.

Si la solucion de la relajacion lineal de un problema tiene todas sus

coordenadas enteras, entonces tambien es solucion al problema entero

Recordemos que estamos maximizando. Si el optimo de la relajacion (que

tiene coordenadas enteras) ocurre en x , tenemos que:

zIP ≤ zLP = c tx ≤ zIP ⇒ zIP = zLP

Normalmente la solucion de la relajacion lineal de nuestro problema no

tiene por que dar un punto con todas sus coordenadas enteras.

Si esto ocurre, vamos a particionar el espacio de busqueda en otros mas

pequenos donde buscamos soluciones de la misma forma (¡sin dejar de

lado vertices enteros al particionar!).

6

Branch & Bound - Criterios de Poda

Observemos que informacion podemos deducir de un problema entero en

funcion del resultado obtenido al resolver su relajacion lineal.

1. Si la relajacion lineal es infactible, entonces nuestro problema en

cuestion tambien es infactible.

2. Si la relajacion lineal tiene un optimo con todas sus coordenadas

enteras, entonces el problema entero en cuestion esta resuelto y el

optimo coincide.

3. Toda solucion entera tendra un valor menor al de la relajacion

lineal.

7

Branch & Bound - Criterios de Poda

Observemos que informacion podemos deducir de un problema entero en

funcion del resultado obtenido al resolver su relajacion lineal.

1. Si la relajacion lineal es infactible, entonces nuestro problema en

cuestion tambien es infactible.

2. Si la relajacion lineal tiene un optimo con todas sus coordenadas

enteras, entonces el problema entero en cuestion esta resuelto y el

optimo coincide.

3. Toda solucion entera tendra un valor menor al de la relajacion

lineal.

7

Branch & Bound - Criterios de Poda

Observemos que informacion podemos deducir de un problema entero en

funcion del resultado obtenido al resolver su relajacion lineal.

1. Si la relajacion lineal es infactible, entonces nuestro problema en

cuestion tambien es infactible.

2. Si la relajacion lineal tiene un optimo con todas sus coordenadas

enteras, entonces el problema entero en cuestion esta resuelto y el

optimo coincide.

3. Toda solucion entera tendra un valor menor al de la relajacion

lineal.

7

Branch & Bound - Criterios de Poda

Observemos que informacion podemos deducir de un problema entero en

funcion del resultado obtenido al resolver su relajacion lineal.

1. Si la relajacion lineal es infactible, entonces nuestro problema en

cuestion tambien es infactible.

2. Si la relajacion lineal tiene un optimo con todas sus coordenadas

enteras, entonces el problema entero en cuestion esta resuelto y el

optimo coincide.

3. Toda solucion entera tendra un valor menor al de la relajacion

lineal.

7

Branch & Bound - Criterios de Poda

A lo largo del algoritmo vamos a mantener una coleccion de problemas

enteros a resolver, y el valor de la mejor solucion entera obtenida hasta el

momento (valor incumbente).

Esto nos da otra observacion a tener en cuenta durante el algoritmo.

3.1 Si el valor optimo de la relajacion lineal es menor al valor

incumbente, entonces no hace falta terminar de resolver el

problema entero en cuestion.

8

Branch & Bound - Criterios de Poda

A lo largo del algoritmo vamos a mantener una coleccion de problemas

enteros a resolver, y el valor de la mejor solucion entera obtenida hasta el

momento (valor incumbente).

Esto nos da otra observacion a tener en cuenta durante el algoritmo.

3.1 Si el valor optimo de la relajacion lineal es menor al valor

incumbente, entonces no hace falta terminar de resolver el

problema entero en cuestion.

8

Branch & Bound - Algoritmo

Juntando todas estas ideas, podemos formular un algoritmo para resolver

un problema lineal entero, para el cual introducimos la siguiente

notacion.

• z iIP al valor incumbente de la mejor solucion encontrada

• L a la lista de problemas que quedan por resolver

• S i sera la i-esima region a considerar y z iR su cota incumbente

1. L = {S}, z0IP = −∞2. Mientras L no este vacıo: (Si L = ∅ terminamos)

2.1 Sacar algun S i ∈ L. Resolver su relajacion con optimo z iR en x iR (si la

relajacion es infactible no hace falta hacer nada).

2.2 Si z iR > z iIP y x iR ∈ S i : Actualizar la solucion y el valor incumbente.

Sacar de L todos los problemas S j con z jR ≤ z iR = z i+1IP

2.3 Si z iR > z iIP y x iR 6∈ S i : Particionar S i en {S i

j }kj=1, y agregar a S ij a L

con zRij = z iR

9

Branch & Bound - Algoritmo

Juntando todas estas ideas, podemos formular un algoritmo para resolver

un problema lineal entero, para el cual introducimos la siguiente

notacion.

• z iIP al valor incumbente de la mejor solucion encontrada

• L a la lista de problemas que quedan por resolver

• S i sera la i-esima region a considerar y z iR su cota incumbente

1. L = {S}, z0IP = −∞2. Mientras L no este vacıo: (Si L = ∅ terminamos)

2.1 Sacar algun S i ∈ L. Resolver su relajacion con optimo z iR en x iR (si la

relajacion es infactible no hace falta hacer nada).

2.2 Si z iR > z iIP y x iR ∈ S i : Actualizar la solucion y el valor incumbente.

Sacar de L todos los problemas S j con z jR ≤ z iR = z i+1IP

2.3 Si z iR > z iIP y x iR 6∈ S i : Particionar S i en {S i

j }kj=1, y agregar a S ij a L

con zRij = z iR

9

Branch & Bound - Algoritmo

Juntando todas estas ideas, podemos formular un algoritmo para resolver

un problema lineal entero, para el cual introducimos la siguiente

notacion.

• z iIP al valor incumbente de la mejor solucion encontrada

• L a la lista de problemas que quedan por resolver

• S i sera la i-esima region a considerar y z iR su cota incumbente

1. L = {S}, z0IP = −∞2. Mientras L no este vacıo: (Si L = ∅ terminamos)

2.1 Sacar algun S i ∈ L. Resolver su relajacion con optimo z iR en x iR (si la

relajacion es infactible no hace falta hacer nada).

2.2 Si z iR > z iIP y x iR ∈ S i : Actualizar la solucion y el valor incumbente.

Sacar de L todos los problemas S j con z jR ≤ z iR = z i+1IP

2.3 Si z iR > z iIP y x iR 6∈ S i : Particionar S i en {S i

j }kj=1, y agregar a S ij a L

con zRij = z iR

9

Branch & Bound - Algoritmo

Juntando todas estas ideas, podemos formular un algoritmo para resolver

un problema lineal entero, para el cual introducimos la siguiente

notacion.

• z iIP al valor incumbente de la mejor solucion encontrada

• L a la lista de problemas que quedan por resolver

• S i sera la i-esima region a considerar y z iR su cota incumbente

1. L = {S}, z0IP = −∞2. Mientras L no este vacıo: (Si L = ∅ terminamos)

2.1 Sacar algun S i ∈ L. Resolver su relajacion con optimo z iR en x iR (si la

relajacion es infactible no hace falta hacer nada).

2.2 Si z iR > z iIP y x iR ∈ S i : Actualizar la solucion y el valor incumbente.

Sacar de L todos los problemas S j con z jR ≤ z iR = z i+1IP

2.3 Si z iR > z iIP y x iR 6∈ S i : Particionar S i en {S i

j }kj=1, y agregar a S ij a L

con zRij = z iR

9

Branch & Bound - Particionar Problemas

Dado un problema, la forma que utilizaremos para obtener un

subproblema a partir del mismo sera agregando una restriccion.

En el i−esimo paso, si tenemos x iR 6∈ S i , entonces tiene alguna

coordenada que no es entera. Sea j tal que xRij 6∈ Z, particionamos S i en

dos subproblemas S i1 y S i2 agregando las restricciones xj ≤⌊xR

ij

⌋en S i1 y

xj ≥⌈xR

ij

⌉en S i2.

Dependiendo de nuestro problema, podemos optar por distintas formas

de particionar. La que vimos anteriormente funciona en cualquier caso y

se la conoce como “variable dichotomy”. En caso de haber varios j tal

que xRij 6∈ Z, conviene fijar algun criterio (que idealmente dependera de

nuestro problema)

10

Branch & Bound - Particionar Problemas

Dado un problema, la forma que utilizaremos para obtener un

subproblema a partir del mismo sera agregando una restriccion.

En el i−esimo paso, si tenemos x iR 6∈ S i , entonces tiene alguna

coordenada que no es entera. Sea j tal que xRij 6∈ Z, particionamos S i en

dos subproblemas S i1 y S i2 agregando las restricciones xj ≤⌊xR

ij

⌋en S i1 y

xj ≥⌈xR

ij

⌉en S i2.

Dependiendo de nuestro problema, podemos optar por distintas formas

de particionar. La que vimos anteriormente funciona en cualquier caso y

se la conoce como “variable dichotomy”. En caso de haber varios j tal

que xRij 6∈ Z, conviene fijar algun criterio (que idealmente dependera de

nuestro problema)

10

Branch & Bound - Particionar Problemas

Imaginemos ahora que en el problema en cuestion nuestras variables son

binarias y tenemos una restriccion de la siguiente forma (se las conoce

como GUB, de Generalized Upper Bound constraint y surgen

naturalmente al modelar problemas):∑j∈Q

xj = 1

Al resolver la relajacion lineal, obtenemos que 0 < xk < 1 con k ∈ Q,

¿Parece sensato separar en los problemas con xk = 1 y xk = 0?

Sin ninguna informacion extra, al considerar el subproblema con xk = 0

tenemos un problema muy similar al que tenıamos originalmente. En

general conviene dividir a la region factible en subproblemas de tamano

similar, por ejemplo, podemos tomar Q = Q1

d∪Q2 y #Q1 ∼ #Q2 y

separar en subproblemas que agreguen la restriccion∑j∈Qi

xj = 0

11

Branch & Bound - Particionar Problemas

Imaginemos ahora que en el problema en cuestion nuestras variables son

binarias y tenemos una restriccion de la siguiente forma (se las conoce

como GUB, de Generalized Upper Bound constraint y surgen

naturalmente al modelar problemas):∑j∈Q

xj = 1

Al resolver la relajacion lineal, obtenemos que 0 < xk < 1 con k ∈ Q,

¿Parece sensato separar en los problemas con xk = 1 y xk = 0?

Sin ninguna informacion extra, al considerar el subproblema con xk = 0

tenemos un problema muy similar al que tenıamos originalmente. En

general conviene dividir a la region factible en subproblemas de tamano

similar, por ejemplo, podemos tomar Q = Q1

d∪Q2 y #Q1 ∼ #Q2 y

separar en subproblemas que agreguen la restriccion∑j∈Qi

xj = 0

11

Branch & Bound - Eleccion del proximo problema

Las formas de elegir el proximo subproblema a tratar se dividen en dos

grupos, segun si seguimos reglas definidas a priori, o utilizamos reglas

adaptativas segun la informacion obtenida en cada subproblema (cotas

incumbentes por ejemplo).

La mas utilizada del primer tipo es la busqueda en profundidad, donde el

proximo problema a considerar es un subproblema del ultimo problema

visto. En caso de terminar de considerar un problema, volvemos al ultimo

que vimos que todavıa tenga subproblemas por considerar.

12

Branch & Bound - Eleccion del proximo problema

Las formas de elegir el proximo subproblema a tratar se dividen en dos

grupos, segun si seguimos reglas definidas a priori, o utilizamos reglas

adaptativas segun la informacion obtenida en cada subproblema (cotas

incumbentes por ejemplo).

La mas utilizada del primer tipo es la busqueda en profundidad, donde el

proximo problema a considerar es un subproblema del ultimo problema

visto. En caso de terminar de considerar un problema, volvemos al ultimo

que vimos que todavıa tenga subproblemas por considerar.

12

Branch & Bound - Eleccion del proximo problema

Las formas de elegir el proximo subproblema a tratar se dividen en dos

grupos, segun si seguimos reglas definidas a priori, o utilizamos reglas

adaptativas segun la informacion obtenida en cada subproblema (cotas

incumbentes por ejemplo).

La mas utilizada del primer tipo es la busqueda en profundidad, donde el

proximo problema a considerar es un subproblema del ultimo problema

visto. En caso de terminar de considerar un problema, volvemos al ultimo

que vimos que todavıa tenga subproblemas por considerar.

12

Branch & Bound - Eleccion del proximo problema

Notemos que en todo momento, tenemos una cota de cuan lejos estamos

del optimo. Pues el valor incumbente nos da una cota inferior a nuestra

solucion, y al resolver una relajacion lineal tenemos una cota superior al

valor del optimo. Por lo tanto, en todo momento vale la siguiente

relacion:

z iIP ≤ zIP ≤ maxi∈L

z iR

De aquı, una regla adaptativa que surge naturalmente es la de resolver el

subproblema que tenga mayor valor de z iR , de forma de reducir la

expresion del lado derecho (o encontrar una solucion factible que tenga

dicho valor).

13

Ejemplo 1

max 5x1 + 7x2s.a: x1 + x2 ≤ 6

5x1 + 9x2 ≤ 45

x1, x2 ∈ Z≥0

14

Ejemplo 1

max 5x1 + 7x2s.a: x1 + x2 ≤ 6

5x1 + 9x2 ≤ 45

x1, x2 ∈ Z≥0

14

Ejemplo 1

max 5x1 + 7x2s.a: x1 + x2 ≤ 6

5x1 + 9x2 ≤ 45

x1, x2 ∈ Z≥0

14

Ejemplo 1

max 5x1 + 7x2s.a: x1 + x2 ≤ 6

5x1 + 9x2 ≤ 45

x1, x2 ∈ Z≥0

14

Ejemplo 1

max 5x1 + 7x2s.a: x1 + x2 ≤ 6

5x1 + 9x2 ≤ 45

x1, x2 ∈ Z≥0

14

Ejemplo 1

max 5x1 + 7x2s.a: x1 + x2 ≤ 6

5x1 + 9x2 ≤ 45

x1, x2 ∈ Z≥0

14

Ejemplo 1

max 5x1 + 7x2s.a: x1 + x2 ≤ 6

5x1 + 9x2 ≤ 45

x1, x2 ∈ Z≥0

14

Redondear soluciones de la relajacion lineal

No siempre redondear la solucion de la relajacion lineal es adecuado:

Podrıa no ser optima Podrıa no ser factible

15

Problema de la Mochila

Dados n objetos, cada uno con peso wi > 0, valor vi y una capacidad

global W . Buscamos encontrar el subconjunto de objetos con mayor

suma de valor que tenga suma de pesos menor o igual a W

maxn∑

i=1

xivi

s.a:n∑

i=1

xiwi ≤W

xi ∈ {0, 1} ∀i ∈ {1, . . . , n}

Observacion: La relajacion lineal al problema puede resolverse de

manera sencilla.

16

Problema de la Mochila

Dados n objetos, cada uno con peso wi > 0, valor vi y una capacidad

global W . Buscamos encontrar el subconjunto de objetos con mayor

suma de valor que tenga suma de pesos menor o igual a W

maxn∑

i=1

xivi

s.a:n∑

i=1

xiwi ≤W

xi ∈ {0, 1} ∀i ∈ {1, . . . , n}

Observacion: La relajacion lineal al problema puede resolverse de

manera sencilla.

16

Problema de la Mochila

Dados n objetos, cada uno con peso wi > 0, valor vi y una capacidad

global W . Buscamos encontrar el subconjunto de objetos con mayor

suma de valor que tenga suma de pesos menor o igual a W

maxn∑

i=1

xivi

s.a:n∑

i=1

xiwi ≤W

xi ∈ {0, 1} ∀i ∈ {1, . . . , n}

Observacion: La relajacion lineal al problema puede resolverse de

manera sencilla.

16

Problema de la Mochila Fraccionario

En el caso de que podemos utilizar cantidades infinitesimalmente

pequenas de cada objeto, obtenemos el siguiente problema:

maxn∑

i=1

xivi

s.a:n∑

i=1

xiwi ≤W

0 ≤ xi ≤ 1 ∀i ∈ {1, . . . , n}

La solucion se resume al siguiente algoritmo goloso:

Siempre conviene utilizar la mayor cantidad posible del objeto que tenga

mayor valor por unidad de peso

Es decir, debemos utilizar a los objetos en orden decreciente de viwi

• Pensar por que no funciona ordenar decreciente por vi• Pensar por que no funciona ordenar creciente por wi

• Pensar por que no funciona en el caso entero

17

Problema de la Mochila Fraccionario

En el caso de que podemos utilizar cantidades infinitesimalmente

pequenas de cada objeto, obtenemos el siguiente problema:

maxn∑

i=1

xivi

s.a:n∑

i=1

xiwi ≤W

0 ≤ xi ≤ 1 ∀i ∈ {1, . . . , n}

La solucion se resume al siguiente algoritmo goloso:

Siempre conviene utilizar la mayor cantidad posible del objeto que tenga

mayor valor por unidad de peso

Es decir, debemos utilizar a los objetos en orden decreciente de viwi

• Pensar por que no funciona ordenar decreciente por vi• Pensar por que no funciona ordenar creciente por wi

• Pensar por que no funciona en el caso entero

17

Problema de la Mochila Fraccionario

En el caso de que podemos utilizar cantidades infinitesimalmente

pequenas de cada objeto, obtenemos el siguiente problema:

maxn∑

i=1

xivi

s.a:n∑

i=1

xiwi ≤W

0 ≤ xi ≤ 1 ∀i ∈ {1, . . . , n}

La solucion se resume al siguiente algoritmo goloso:

Siempre conviene utilizar la mayor cantidad posible del objeto que tenga

mayor valor por unidad de peso

Es decir, debemos utilizar a los objetos en orden decreciente de viwi

• Pensar por que no funciona ordenar decreciente por vi• Pensar por que no funciona ordenar creciente por wi

• Pensar por que no funciona en el caso entero

17

Problema de la Mochila Fraccionario (Demostracion)

Consideremos que tenemos los ındices ordenados decrecientemente en

valor por unidad de peso, es decir viwi≥ vi+1

wi+1

Sea x la solucion generada por el algoritmo goloso e y alguna solucion

optima. Podemos asumir que ambas completan la capacidad de la

mochila. Consideremos k al menor ındice donde estas soluciones difieren.

Por construccion tenemos que xk > yk . Llamemos r = xk − yk

Consideremos la siguiente “solucion”y ′

• y ′j = yj si j 6= k

• y ′k = xk

El problema es que nos estamos pasando en r · wk de peso. A cambio

estamos mejorando en r · vk de valor.

Para “arreglar” y ′ restemos a cada yj con j > k una cierta cantidad

0 ≤ zj ≤ yj . Tomemos una asignacion (cualquiera) tal quen∑

j=k+1

zjwj = r · wk ¿Que nos asegura que podemos hacer esto?

18

Problema de la Mochila Fraccionario (Demostracion)

Consideremos que tenemos los ındices ordenados decrecientemente en

valor por unidad de peso, es decir viwi≥ vi+1

wi+1

Sea x la solucion generada por el algoritmo goloso e y alguna solucion

optima. Podemos asumir que ambas completan la capacidad de la

mochila. Consideremos k al menor ındice donde estas soluciones difieren.

Por construccion tenemos que xk > yk . Llamemos r = xk − yk

Consideremos la siguiente “solucion”y ′

• y ′j = yj si j 6= k

• y ′k = xk

El problema es que nos estamos pasando en r · wk de peso. A cambio

estamos mejorando en r · vk de valor.

Para “arreglar” y ′ restemos a cada yj con j > k una cierta cantidad

0 ≤ zj ≤ yj . Tomemos una asignacion (cualquiera) tal quen∑

j=k+1

zjwj = r · wk ¿Que nos asegura que podemos hacer esto?

18

Problema de la Mochila Fraccionario (Demostracion)

Consideremos que tenemos los ındices ordenados decrecientemente en

valor por unidad de peso, es decir viwi≥ vi+1

wi+1

Sea x la solucion generada por el algoritmo goloso e y alguna solucion

optima. Podemos asumir que ambas completan la capacidad de la

mochila. Consideremos k al menor ındice donde estas soluciones difieren.

Por construccion tenemos que xk > yk . Llamemos r = xk − yk

Consideremos la siguiente “solucion”y ′

• y ′j = yj si j 6= k

• y ′k = xk

El problema es que nos estamos pasando en r · wk de peso. A cambio

estamos mejorando en r · vk de valor.

Para “arreglar” y ′ restemos a cada yj con j > k una cierta cantidad

0 ≤ zj ≤ yj . Tomemos una asignacion (cualquiera) tal quen∑

j=k+1

zjwj = r · wk ¿Que nos asegura que podemos hacer esto?

18

Problema de la Mochila Fraccionario (Demostracion)

Consideremos que tenemos los ındices ordenados decrecientemente en

valor por unidad de peso, es decir viwi≥ vi+1

wi+1

Sea x la solucion generada por el algoritmo goloso e y alguna solucion

optima. Podemos asumir que ambas completan la capacidad de la

mochila. Consideremos k al menor ındice donde estas soluciones difieren.

Por construccion tenemos que xk > yk . Llamemos r = xk − yk

Consideremos la siguiente “solucion”y ′

• y ′j = yj si j 6= k

• y ′k = xk

El problema es que nos estamos pasando en r · wk de peso. A cambio

estamos mejorando en r · vk de valor.

Para “arreglar” y ′ restemos a cada yj con j > k una cierta cantidad

0 ≤ zj ≤ yj . Tomemos una asignacion (cualquiera) tal quen∑

j=k+1

zjwj = r · wk

¿Que nos asegura que podemos hacer esto?

18

Problema de la Mochila Fraccionario (Demostracion)

Consideremos que tenemos los ındices ordenados decrecientemente en

valor por unidad de peso, es decir viwi≥ vi+1

wi+1

Sea x la solucion generada por el algoritmo goloso e y alguna solucion

optima. Podemos asumir que ambas completan la capacidad de la

mochila. Consideremos k al menor ındice donde estas soluciones difieren.

Por construccion tenemos que xk > yk . Llamemos r = xk − yk

Consideremos la siguiente “solucion”y ′

• y ′j = yj si j 6= k

• y ′k = xk

El problema es que nos estamos pasando en r · wk de peso. A cambio

estamos mejorando en r · vk de valor.

Para “arreglar” y ′ restemos a cada yj con j > k una cierta cantidad

0 ≤ zj ≤ yj . Tomemos una asignacion (cualquiera) tal quen∑

j=k+1

zjwj = r · wk ¿Que nos asegura que podemos hacer esto?18

Problema de la Mochila Fraccionario (Demostracion)

Como ambas mochilas esta completas y k es el primer ındice donde

difieren, sabemos quen∑

j=k

xjwj =n∑

j=k

yjwj ⇒ r · wk =n∑

j=k+1

(yj − xj)wj ≤n∑

j=k+1

yjwj

Luego, si tomamos y ′ tal que:

• y ′j = yj si j < k

• y ′k = xk• y ′j = yj − zj si j > k

Solo nos resta ver que no empeoramos la funcion objetivo. Es decir,

queremos ver que r · vk ≥n∑

j=k+1

zj · vj .

n∑j=k+1

zjvj =n∑

j=k+1

zjvjwj

wj ≤n∑

j=k+1

zj ·vkwk

wj =vkwk

n∑j=k+1

zjwj =vkwk·r ·wk = r ·vk

19

Problema de la Mochila Fraccionario (Demostracion)

Como ambas mochilas esta completas y k es el primer ındice donde

difieren, sabemos quen∑

j=k

xjwj =n∑

j=k

yjwj ⇒ r · wk =n∑

j=k+1

(yj − xj)wj ≤n∑

j=k+1

yjwj

Luego, si tomamos y ′ tal que:

• y ′j = yj si j < k

• y ′k = xk• y ′j = yj − zj si j > k

Solo nos resta ver que no empeoramos la funcion objetivo. Es decir,

queremos ver que r · vk ≥n∑

j=k+1

zj · vj .

n∑j=k+1

zjvj =n∑

j=k+1

zjvjwj

wj ≤n∑

j=k+1

zj ·vkwk

wj =vkwk

n∑j=k+1

zjwj =vkwk·r ·wk = r ·vk

19

Problema de la Mochila Fraccionario (Demostracion)

Como ambas mochilas esta completas y k es el primer ındice donde

difieren, sabemos quen∑

j=k

xjwj =n∑

j=k

yjwj ⇒ r · wk =n∑

j=k+1

(yj − xj)wj ≤n∑

j=k+1

yjwj

Luego, si tomamos y ′ tal que:

• y ′j = yj si j < k

• y ′k = xk• y ′j = yj − zj si j > k

Solo nos resta ver que no empeoramos la funcion objetivo. Es decir,

queremos ver que r · vk ≥n∑

j=k+1

zj · vj .

n∑j=k+1

zjvj =n∑

j=k+1

zjvjwj

wj ≤n∑

j=k+1

zj ·vkwk

wj =vkwk

n∑j=k+1

zjwj =vkwk·r ·wk = r ·vk

19

Ejemplo 2

max 8x1 + 11x2 + 6x3 + 4x4s.a: 5x1 + 7x2 + 4x3 + 3x4 ≤ 14

x1, x2, x3, x4 ∈ {0, 1}

20