运输问题是线性编程课程中讲授的经典问题之一。简而言之,问题表明,具有特定需求的给定一组客户必须由具有一定能力(“供应”)的另一组供应商来满足。有关运输问题的详细说明,您可以请阅读:https://econweb.ucsd.edu/~jsobel/172aw02/notes8.pdf。
R中提供的lpSolve软件包可用于建模和解决运输问题。
我将展示如何执行此操作。我定义了一个问题,其中3个供应商试图满足4个客户。供应商的容量分别为100、300和400。客户分别需求100、100、200和400。此外,针对每种可能的组合定义了由供应商j供应客户i的成本,并在成本矩阵中列出。
使用此信息,我们可以使用R中的lpSolve软件包来建模和解决运输问题(确定哪个需求满足哪个供应商)。
首先,我准备建模部分:
library(lpSolve)
#指定成本矩阵
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)
#这是一个最小化的问题
direction = "min"
#容量不得超过
row.signs <- rep("<=",3)
row.rhs <- c(100,300,400)
#必须满足需求
col.signs <- rep(">=",4)
col.rhs <- c(100,100,200,400)
然后,我解决了这个问题:
# 解决并分配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)
让我们回顾一下“最优”成本:
solution
## Success: the objective function is 1400
让我们回顾一下运输问题的最佳解决方案(即,解决该问题的最佳物料)
solution$solution
## [,1] [,2] [,3] [,4]
## [1,] 0 100 0 0
## [2,] 0 0 200 100
## [3,] 100 0 0 300
分配问题是另一个经典问题,您可以在这里看到我如何在R中解决它:最小化生产调度-使用lp.assign使用lpSolve解决分配问题。
专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply