R-Conomics

Dentro de la microeconomía, uno de los tópicos más usados en las empresas suele ser el de la programación lineal, ya que éstos métodos tienen como objetivo el analizar la forma de utilizar los recursos disponibles de la manera más eficiente posible, por ejemplo: Utilizar la menor cantidad de aluminio para crear una lata, obtener la mayor cantidad de beneficios posibles de una venta de productos, etc. Un método usado comunmente es el llamado metodo SIMPLEX, el cual se basa en iteraciones para poder obtener la combinación de recursos que maximice el beneficio, o bien, que minimice el costo, según sea el caso.

A partir de aquí vamos a partir de la idea de que el lector ya está familiarizado con los métodos de programación lineal, por lo que vamos a pasar directamente a dos ejercicios aplicados en R, para conocer la forma de hacerlo en este programa de manera práctica mediante el uso del paquete lpsolve.

Ejercicio 1.

La empresa “Arcoiris” produce pinturas para interiores y exteriores con dos materias primas, A y B. El siguiente cuadro resume las toneladas de materia prima que se requieren para cada tipo de pintura, la disponibilidad diaria de materia prima y la utilidad por tonelada para cada tipo de pintura:

Exteriores Interiores Disponibilidad maxima diaria
Materia prima A 6 4 24
Materia prima B 1 2 6
Utilidad por tonelada 5 4

Una encuesta de mercado indica que la demanda diaria de pintura para interiores no puede exceder la de pintura para exteriores en más de una tonelada. Asimismo, que la demanda diaria máxima de pintura para interiores es de dos toneladas. La empresa se propone determinar la (mejor) combinación óptima de pinturas para interiores y exteriores que maximice la utilidad diaria total.

Solución: La función objetivo es:

\[\begin{equation} Max \; \; Z=5x_1+4x_2 \end{equation}\]

Sujeta a las restricciones:

\[\begin{align} 6x_1 + 4x_2 &\leq 24 \nonumber \\ 1x_1 + 2x_2 &\leq 6 \nonumber \\ x_2 - x_1 &\leq 1 \nonumber \\ x_2 &\leq 2 \end{align}\]

El procedimiento para resolver el problema en R es el siguiente:

# Cargamos el paquete necesario
library(lpSolve)

# Matriz de la función objetivo

objetivo <- c(5,4)

# Matriz de las restricciones 

restricciones <- matrix(c(6,4,
                          1,2,
                          1,-1,
                          0,1), nrow=4, byrow=TRUE)

# Lado derecho de las restricciones 

derecho <- c(24, 6, 1, 2)


# Dirección de las restricciones

direccion <- c("<=","<=","<=","<=")

# Solución óptima 

optimo <- lp(direction = "max", 
   objective.in = objetivo,
   const.mat = restricciones,
   const.dir = direccion,
   const.rhs = derecho,
   all.int = T)

optimo
## Success: the objective function is 18
best_sol <- optimo$solution
names(best_sol) <- c("x_1", "x_2") 
print(best_sol)
## x_1 x_2 
##   2   2

Ejercicio 2.

Laboratorios Novartis desea preparar un medicamento de tal manera que cada frasco contenga al menos 32 unidades de vitamina A, 10 de vitamina B y 40 de vitamina C. Para suministrar estas vitaminas, el laboratorio emplea el aditivo X 1, a un costo de 2 dólares por onza, el cual contiene 15 unidades de vitamina A, 2 de B y 4 de C, un aditivo X 2 a un costo de 4 dólares por cada onza, que contiene 4 unidades de vitamina A, 2 de B y 14 de C. ¿Cuántas onzas de cada aditivo se deben incluir en el frasco para minimizar el costo?

Solución: La función objetivo es:

\[\begin{equation} Min \; \; Z=2x_1 + 4x_2 \end{equation}\]

Sujeta a las restricciones:

\[\begin{align} 15x_1 + 4x_2 &\geq 32 \nonumber \\ 2x_1 + 2x_2 &\geq 10 \nonumber \\ 4x_1 +14x_2 &\geq 40 \end{align}\]

El procedimiento en R es el siguiente:

# Matriz de la función objetivo

objetivo1 <- c(2,4)

# Matriz de las restricciones 

restricciones1 <- matrix(c(15,4,
                          2,2,
                          1,14), nrow=3, byrow=TRUE)

# Lado derecho de las restricciones 

derecho1 <- c(32, 10, 40)


# Dirección de las restricciones

direccion1 <- c(">=",">=",">=")

# Solución óptima 

optimo1 <- lp(direction = "min", 
   objective.in = objetivo1,
   const.mat = restricciones1,
   const.dir = direccion1,
   const.rhs = derecho1,
   all.int = T)

optimo1
## Success: the objective function is 16
best_sol1 <- optimo1$solution
names(best_sol1) <- c("x_1", "x_2") 
print(best_sol1)
## x_1 x_2 
##   2   3

Referencias bibliográficas.

  1. Bazaraa, M. S., Jarvis, J. J., & Sherali, H. D. (1981). Programación lineal y flujo en redes (Vol. 2). Limusa.

  2. Hillier, F. S., & Lieberman, G. J. (2002). Investigación de operaciones. McGraw-Hill/Interamericana Editores, SA.

  3. Salas, H. G. (2009). Programación lineal aplicada. Ecoe Ediciones.

  4. Garrido, R. S. (1993). Programación Lineal, Metodología Y Problemas. Editorial Tebar.

R-Conomics
Todos los derechos reservados