使用lpSolve解决R中的lp.transport线性运输问题

运输问题是线性编程课程中讲授的经典问题之一。简而言之,问题表明,具有特定需求的给定一组客户必须由具有一定能力(“供应”)的另一组供应商来满足。有关运输问题的详细说明,您可以请阅读: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解决分配问题。

Leave a Reply

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Close

其他操作