library(lpSolve)
La formulación canónica del problema sería así
Este ejemplo tiene tres variables inćognitas llamada \(X_1\), \(W_2\) y \(X_3\). Tendremos que armar una matriz que tenga 3 columnas y tantas filas como restricciones necesitemos poner. Cada restricción nueva incrementa exponemcialmente el tiempo de ejecución.
Aqui tenemos dos incógnitas llamadas P y Q y 6 restricciones. Dos son relativas al potencial de mercado de P y Q y cuatro corresponden a las horas hombres disponibles de A, B, C y D.
# Coeficientes de la función objetivo (costos)
f.obj <- c(90-20-20-5, 100-20-20)
# Matriz de restricciones
f.con <- matrix(c(1,0,0,1,15,10,15,30,15,5,15,5), nrow = 6, byrow = TRUE)
# Direcciones de las restricciones
f.dir <- c("<=", "<=", "<=", "<=", "<=", "<=")
# Valores del lado derecho de las restricciones
f.rhs <- c(100, 90,2400,2400,2400,2400)
Ver las matrices
f.obj
## [1] 45 60
f.con
## [,1] [,2]
## [1,] 1 0
## [2,] 0 1
## [3,] 15 10
## [4,] 15 30
## [5,] 15 5
## [6,] 15 5
f.dir
## [1] "<=" "<=" "<=" "<=" "<=" "<="
f.rhs
## [1] 100 90 2400 2400 2400 2400
solucion <- lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens = TRUE)
solucion$objval # valor óptimo de la función objetivo
## [1] 6300
solucion$objval - 6000 # Solución descontanto el Operating Expense
## [1] 300
solucion$solution # valores óptimos de P y Q
## [1] 100 30
Sensibilidad
solucion$sens.coef.to
## [1] 1e+30 9e+01