Problemas resueltos

Anuncio
RESOLUCIÓN DE PROBLEMAS DE PROGRAMACIÓN LINEAL,
DUALIDAD Y ANÁLISIS DE SENSIBILIDAD
CON LA FUNCIÓN lp DEL PAQUETE DE R lpSolve
EJEMPLO 1: PROBLEMA CON SOLUCIÓN ÚNICA
El siguiente problema tiene solución única x1 = 1, x2 = 1, con valor de la función objetivo
13
Min z = 5x1 + 8x2
sujeto a
x1 + x2 ≥ 2
x1 + 2x2 ≥ 3
x1 , x 2 ≥ 0
Resolución con R
R> library(lpSolve)
R> Ejemplo1 <- lp(objective.in=c(5,8), const.mat=matrix(c(1,1,1,2),nrow=2, byrow=TRUE),
+
const.rhs=c(2,3), const.dir=c(“>=”,“>=”))
R> Ejemplo1
Success: the objective function is 13
R> Ejemplo1$solution
[1] 1 1
EJEMPLO 2: PROBLEMA INFACTIBLE
El siguiente problema tiene solución única x1 = 1, x2 = 1, con valor de la función objetivo
13
Min z = 5x1 + 8x2
sujeto a
x1 + x2 ≥ 2
x1 + 2x2 ≤ 1
x1 , x 2 ≥ 0
Resolución con R
R> library(lpSolve)
R> Ejemplo2 <- lp(objective.in=c(5,8), const.mat=matrix(c(1,1,1,2),nrow=2, byrow=TRUE),
+
const.rhs=c(2,1), const.dir=c(“>=”,“<=”))
R> Ejemplo2
Error: no feasible solution found
R> Ejemplo2$status
[1] 2
1
EJEMPLO 3: PROBLEMA CON ÓPTIMOS ALTERNATIVOS
Esta función no identifica cuando un problema tiene óptimos alternativos. Por ejemplo,
para
Min z = 4x1 + 8x2
sujeto a
x1 + x2 ≥ 2
x1 + 2x2 ≥ 3
x1 , x 2 ≥ 0
son soluciones (1,1) y (3,0) y, por tanto, cualquier punto del segmento que los une. Sin
embargo, al aplicar la función anterior a este problema, resulta:
R> library(lpSolve)
R> Ejemplo3 <- lp(objective.in=c(4,8), const.mat=matrix(c(1,1,1,2),nrow=2, byrow=TRUE),
+
const.rhs=c(2,3), const.dir=c(“>=”,“>=”))
R> Ejemplo3
Success: the objective function is 12
R> Ejemplo3$solution
[1] 3 0
EJEMPLO 4: PROBLEMA CON SOLUCIÓN NO ACOTADA
Cuando el problema tiene solución no acotada, da error. Por ejemplo para
Máx z = 5x1 + 8x2
sujeto a
x1 + x2 ≥ 2
x1 + 2x2 ≥ 3
x1 , x 2 ≥ 0
Resolución con R
R> library(lpSolve)
R> Ejemplo4 <- lp(direction=”max”, objective.in=c(5,8),
+
const.mat=matrix(c(1,1,1,2),nrow=2, byrow=TRUE),
+
const.rhs=c(2,3), const.dir=c(“>=”,“>=”))
R> Ejemplo4
Error: status 3
EJEMPLO 5: CASO DE VARIABLES NO NECESARIAMENTE NO NEGATIVAS
Esta función no contempla el caso en que haya variables no necesariamente no negativas.
La forma de abordar este problema con la función lp() es la habitual transformación
previa.
Min z = x1 + 10x2
sujeto a
2
x1 + x2 ≥ 2
x1 − x2 ≤ 3
x1 ≥ 0
Hacemos x2 = x3 − x4 , con x3 , x4 ≥ 0 y el problema se transforma en
Min z = x1 + 10x3 − 10x4
sujeto a
x1 + x3 − x4 ≥ 2
x1 − x3 + x4 ≤ 3
x1 , x 3 , x 4 ≥ 0
Resolución con R
R> library(lpSolve)
R> Ejemplo5 <- lp(objective.in=c(1,10,-10),
+
const.mat=matrix(c(1,1,-1,1,-1,1,nrow=2, byrow=TRUE),
+
const.rhs=c(2,3), const.dir=c(“>=”,“<=”))
R> Ejemplo5
Success: the objective function is -2.5
R> Ejemplo5$solution
[1] 2.5 0.0 0.5
Y la solución al problema original es x1 = 2,5 y x2 = 0 − 0,5 = −0,5
EJEMPLO 6: DUALIDAD Y ANÁLISIS DE SENSIBILIDAD
Las siguientes tablas del simplex son la tabla inicial y óptima de un problema en forma
estándar de maximizar.
cB
0
0
cB
15
30
TABLA INICIAL
cj 15 30 20 0 0
V B x1 x2 x3 s1 s2 xB
s1
1 0 1 1 0 4
s2 0,5 2 1 0 1 3
TABLA ÓPTIMA
15 30 20
0
0
cj
VB
x1 x2 x3
s1
s2
xB
x1
1 0
1
1
0
4
0 1 0,25 −0,25 0,5
0,5
x2
zj − cj 0 0 2,5
7,5
15 Z = 75
3
a) ¿Cuál es el precio sombra asociado a la segunda restricción? ¿Qué significa?
b) Determinar el rango de variación de cada uno de los coeficientes de la
función objetivo para que la solución siga siendo óptima.
c) Determinar el rango de variación de cada uno de los recursos para que la
solución siga siendo óptima.
Resolución con R
R> library(lpSolve)
R> Obj.Ej6<-c(15,30,20)
R> Mat.Ej6<-matrix(c(1,0,1,0.5,2,1),nrow=2,byrow=TRUE)
R> Dir.Ej6<-c(“<=”,“<=”)
R> Rec.Ej6<-c(4,3)
R> Sol.Ej6<-lp(direction=”max”,objective.in=Obj.Ej6,const.mat=Mat.Ej6,const.dir=Dir.Ej6,
+
const.rhs=Rec.Ej6,compute.sens=1)
R> Sol.Ej6$solution
[1] 4.0 0.5 0.0
R> Sol.Ej6$sens.coef.from
[1] 1.25e+01 2.00e+01 -1.00e+30
R> Sol.Ej6$sens.coef.to
[1] 1.00e+30 6.00e+01 2.25e+01
R> Sol.Ej6$duals
[1] 7.5 15.0 0.0 0.0 -2.5
R> Sol.Ej6$duals.from
[1] -8.881784e-16 2.000000e+00 -1.000000e+30 -1.000000e+30 -1.000000e+30
R> Sol.Ej6$duals.to
[1] 6e+00 1e+30 1e+30 1e+30 2e+00
Las respuestas son:
a) El precio sombra asociado a la segunda restricción es 15 (elemento zj − cj correspondiente a la segunda variable de holgura en la tabla óptima y se corresponde con el
segundo elemento del resultado de solicitar Sol.Ej6$duals en R). Significa el incremento
que se produce en el valor óptimo de la función objetivo cuando el segundo recurso se
incrementa en una unidad. O bien, la contribución por unidad del segundo recurso a la
variación del valor óptimo del objetivo.
b) Considerando un valor c1 arbitrario para que la tabla siga siendo óptima (nuevos
zj −cj ≥ 0) se debe cumplir c1 +30×0,25−20 ≥ 0 y c1 −0,25×30 ≥ 0, es decir, c1 ≥ 12,5.
Dicho resultado se deduce a partir de los primeros elementos de Sol.Ej6$sens.coef.from
y Sol.Ej6$sens.coef.to, 1.25e+01 (12.5) y 1.00e+30(equivalente a +∞), respectivamente.
Considerando un valor c2 arbitrario para que la tabla siga siendo óptima (nuevos
zj − cj ≥ 0) se debe cumplir 15 + 0,25c2 − 20 ≥ 0, 15 − 0,25c2 ≥ 0 y 0,5c2 ≥ 0, es
decir, 20 ≤ c2 ≤ 60. Dicho resultado se deduce a partir de los segundos elementos de
4
Sol.Ej6$sens.coef.from y Sol.Ej6$sens.coef.to, 2.00e+01 (20) y 6.00e+01(60), respectivamente.
c) Obtenemos el nuevo valor de x
bB en cada uno de los casos e imponemos factibilidad
Recurso 1
µ
x
bB =
1
0
−0,25 0,5
¶µ
bb1
3
Ã
¶
=
bb1
−0,25bb1 + 1,5
!
Se deduce que se debe cumplir bb1 ≥ 0 y −0,25bb1 + 1,5 ≥ 0, es decir, 0 ≤ bb1 ≤ 6,
en cuyo caso la solución x1 = bb1 , x2 = −0,25bb1 + 1,5 sigue siendo óptima con Z ∗ =
15 × bb1 + 30(−0,25bb1 + 1,5).
El resultado 0 ≤ bb1 ≤ 6 se deduce de los primeros elementos de Sol.Ej6$duals.from y
Sol.Ej6$duals.to, -8.881784e-16 (0) y 6e+00, respectivamente.
Recurso 2
µ
x
bB =
1
0
−0,25 0,5
¶µ
4
bb2
¶
µ
=
4
b
0,5b2 − 1
¶
Se deduce que se debe cumplir 0,5bb2 − 1 ≥ 0, es decir, bb2 ≥ 2. Ası́, si bb2 ∈ (2, +∞), la
solución x1 = 4, x2 = 0,5bb2 − 1 sigue siendo óptima con Z ∗ = 15 × 4 + 30(0,5bb2 − 1).
El resultado bb2 ≥ 2 se deduce de los segundos elementos de Sol.Ej6$duals.from y Sol.Ej6$duals.to,
2.000000e+00 (2) y 1e+30 (equivalente a +∞), respectivamente.
5
Descargar