clase 11 - programación lineal entera - branch &...
TRANSCRIPT
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
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
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