La programación lineal (LP, también conocida como optimización lineal) es el campo de la programación matemática dedicado a maximizar o minimizar (optimizar) una función lineal, denominada función objetivo, de tal forma que las variables de dicha función estén sujetas a una serie de restricciones expresadas mediante un sistema de ecuaciones o inecuaciones también lineales. En este tutorial te muestro como puedes ayudarte de Rstudio para resolver problemas de este tipo.

CÓDIGO EN R DEL VIDEO

 

## PROGRAMACIÓN LINEAL EN R

 

install.packages(«lpSolve»)
library(lpSolve)

 

#EJERCICIO 1


#max z= 5×1 + 7×2

# sujeto a :
# 1×1 + 0x2 <= 16 1 0
# 2×1 + 3×2 <= 19 2 3
# 1×1 + 1×2 <= 8 1 1

# x1 , x2 >= 0

# 1 Fijar coeficientes de la función objetivo

funcion_objetivo <- c(5,7)

# 2 fijar la matriz correspondiente a los coeficientes de restricciones por filas

f_res <- matrix(c(1, 0,
2, 3,
1, 1), nrow = 3, byrow = TRUE)

# 3 Establecer signos de desigualdad

f.dir <- c(«<=»,
«<=»,
«<=»)

# 4.Establecer coeficientes del lado derecho

f.rhs <- c(16,
19,
8)

#5 función

lp(«max», funcion_objetivo, f_res, f.dir, f.rhs)
lp(«max», funcion_objetivo, f_res, f.dir, f.rhs)$solution


### EJERCICIO 2

# min 8×1 + 6×2

# sujeto a :

#x1 + x2 >= 0 1 1
#x1 >= 5 1 0
#x1 <= 12 1 0
#2×2 >= 6 0 2
#x2<= 10 0 1

# 1 Fijar coeficientes de la función objetivo

funcion_objetivo <- c(8,6)


# 2 fijar la matriz correspondiente a los coeficientes de restricciones por filas

f_res <- matrix(c(1,1,
1,0,
1,0,
0,2,
0,1), nrow =5,byrow = T)

# 3 Establecer signos de desigualdad

f.dir <- c(«>=»,»>=»,»<=»,»>=»,»<=»)

# 4.Establecer coeficientes del lado derecho

f.rhs <- c(20,5,12,6,10)


#5.

lp(«min», funcion_objetivo, f_res, f.dir, f.rhs)
lp(«min», funcion_objetivo, f_res, f.dir, f.rhs)$solution

##

# EJERCICIO 3

# MAX z= 20×1 + 30×2

# s.a

# 3X1 + 6×2 <= 150
# x1+0.5×2 <= 22
# x1 + x2 <= 27.5

# x1,x2 >=0

 

# 1 Fijar coeficientes de la función objetivo

funcion_objetivo <- c(20,30)


# 2 fijar la matriz correspondiente a los coeficientes de restricciones por filas

f_res <- matrix(c(3,6,
1,0.5,
1,1), nrow =3,byrow = T)

# 3 Establecer signos de desigualdad

f.dir <- c(«<=»,»<=»,»<=»)

# 4.Establecer coeficientes del lado derecho

f.rhs <- c(150,22,27.5)


#5.

lp(«max», funcion_objetivo, f_res, f.dir, f.rhs)
lp(«max», funcion_objetivo, f_res, f.dir, f.rhs)$solution


### EJEMPLO 4 CON 4 VARIABLES ( paquete linprog)

install.packages(«linprog»)
library(linprog)


Max z = 10×1 + 15×2 + 4×3 + 2×4

#s.a

#10×1 + 20×2 + 2×3 + 3×4 <= 4000
#5×1 + 5×2 + 5×3 + 4×4 <= 1500
#4×1 + 2×2 + 6×3 + 6×4 <= 800


f_objetivo <- c( 10,15,4,2) #valores función objetivo

f_coef <- matrix(c(10,5,4,20,5,2,2,5,6,3,4,6),ncol=4) #coeficientes

f_rhs<- c(4000,1500,800)


f_dir <- rep(«<=»,3)


f_optimizacion <- solveLP(f_objetivo,f_rhs,f_coef,maximum=TRUE)
summary(f_optimizacion)

f_optimizacion <- solveLP(f_objetivo,f_rhs,f_coef,maximum=TRUE,verbose=4)

#con verbose nos muestra todas las tablas que utilizó en el proceso

summary(f_optimizacion)

 

Por Victor A.Rico

Diplomado en Ciencias Empresariales y Operador del Mercado Español de Futuros y Opciones

Deja una respuesta

Tu dirección de correo electrónico no será publicada.