赋值问题是线性程序中的经典问题。例如,如果在即将到来的轮班中(在制造工厂中)有n个需要制造的工作,并且有m台机器来执行这些任务,那么您想以最佳方式将这些工作分配给机器。也就是说,您可能希望减少制造成本,因此您希望找到成本最佳的生产计划。在此示例中,约束是每台机器在即将到来的轮班期间只能完成一项工作。所有作业都需要安排,即分配给机器。
可以在数学模型中说明问题。下面说明了存在3个作业和3台机器的情况下的问题。在机器1上生产作业1的成本,而在机器2上生产作业2的成本。作业2在机器1上的成本为2 USD,在机器2上的成本为3 USD。在机器1上,作业3的成本为5 USD,在机器2上的成本为1 USD。机器3可以分别以2美元执行作业1,并以3美元执行作业2和3。
为此的数学模型如下所示:
我们可以使用R中的lpSolve程序包来建模和解决此问题,R程序包是用于线性编程的程序包(用于连续和整数问题)。 lp.assign函数可以完成以下任务:
library(lpSolve)
#准备成本矩阵
cost.mat <- rbind(c(1,2,3),
c(2,3,3),
c(5,1,3))
#模型并使用lp.assign解决
solution <- lp.assign(cost.mat=cost.mat,
direction="min")
lp.assign是专门用于解决分配问题的功能。根据定义,分配问题是所有决策变量都是整数变量的问题。因此,我们不需要专门告诉lp.assign决策变量必须视为整数变量。
让我们看看在即将到来的转变中我们必须面对的最低成本:
solution
## Success: the objective function is 5
让我们看看即将发生的转变的最低成本生产计划:
solution$solution
## [,1] [,2] [,3]
## [1,] 1 0 0
## [2,] 0 0 1
## [3,] 0 1 0
运输问题是另一个经典问题。您可以看到我在R中解决了该问题–此处:使用lp.transport使用lpSolve解决Bronson的运输问题。
专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply