El problema de Goldratt P&Q

library(lpSolve)

TOC Energia 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.

Forma Canónica
Forma Canónica

Planteo del problema de Goldratt

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.

Ecuaciónes
Ecuaciónes

Armado para la formulación con la biblioteca lpSolve

# 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

  1. Función Objetivo a maximizar
f.obj
## [1] 45 60
  1. Matriz de Coeficientes Técnicos (restricciones)
f.con
##      [,1] [,2]
## [1,]    1    0
## [2,]    0    1
## [3,]   15   10
## [4,]   15   30
## [5,]   15    5
## [6,]   15    5
  1. Matriz de dirección de las restricciones
f.dir
## [1] "<=" "<=" "<=" "<=" "<=" "<="
  1. Límite de las restricciones (lado derecho de la ecuación)
f.rhs
## [1]  100   90 2400 2400 2400 2400

Resolver el problema de programación lineal

solucion <- lp("max", f.obj, f.con, f.dir, f.rhs, compute.sens = TRUE)

Mostrar el resultado

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

Otros valores Interesantes

Sensibilidad

solucion$sens.coef.to
## [1] 1e+30 9e+01