El problema del transporte es uno de los problemas más clásicos que se enseñan en las clases de programación lineal. El problema, en pocas palabras, establece que un conjunto dado de clientes con una demanda específica debe ser satisfecho por otro conjunto de proveedores con ciertas capacidades («oferta»). Para obtener una explicación detallada del problema de transporte, puede, por ejemplo, lea esto: https://econweb.ucsd.edu/~jsobel/172aw02/notes8.pdf.
El paquete lpSolve disponible en R se puede utilizar para modelar y resolver el problema de transporte.
Para realizar esto primero se define un problema en el que 3 proveedores buscan satisfacer a 4 clientes. Los proveedores tienen capacidades 100, 300 y 400 unidades respectivamente. Los clientes tienen una demanda de 100, 100, 200 y 400 unidades respectivamente. Además, el costo de abastecimiento del cliente i por el proveedor j se define para cada combinación posible y se indica en una matriz de costos.
Con esta información se puede modelar y resolver el problema de transporte (decidir qué demanda satisfacer por qué proveedor) con el paquete lpSolve en R.
Primero, se formula el modelo:
library(lpSolve)
# especificando la matriz de costos
cost.mat <- matrix(nrow=3,ncol=4)
cost.mat[1,] <- 1:4
cost.mat[2,] <- 4:1
cost.mat[3,] <- c(1,4,3,2)
# este es un problema de minimización
direction = "min"
# la capacidad no se puede exceder
row.signs <- rep("<=",3)
row.rhs <- c(100,300,400)
# la demanda debe ser satisfecha
col.signs <- rep(">=",4)
col.rhs <- c(100,100,200,400)
Luego, se resuelve el problema:
# resolver y asignar objeto lp
solution <- lp.transport(cost.mat = cost.mat,
direction = direction,
row.signs = row.signs,
row.rhs = row.rhs,
col.signs = col.signs,
col.rhs = col.rhs)
Se buscan los costos «óptimos»:
solution
## Success: the objective function is 1400
Se revisa la solución óptima del problema de transporte (es decir, los flujos de material óptimos para este problema):
solution$solution
## [,1] [,2] [,3] [,4]
## [1,] 0 100 0 0
## [2,] 0 0 200 100
## [3,] 100 0 0 300
Otro modelo similar al problema de transporte es el problema de asignación. Para ver como resolver un modelo de asignación utilizando lp.assign de la librería lpSolve de R, dirigirse a éste artículo: Programación de producción de costo mínimo: resolviendo el problema de asignación con lpSolve, usando lp.assign.
Editado y traducido por: Ricardo Caballero, M.Sc.
Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply