Modeling and Solving Linear Programming with R书在第3.7节中有一个关于规划转变的很好的例子。我无法用R解决它。另外,我不清楚书中提供的解决方案。
一家公司有一个紧急中心,每天24小时工作。在 下表详细列出了每个员工的最低需求 这一天分为六个小时,四个小时。
Shift Employees
00:00 - 04:00 5
04:00 - 08:00 7
08:00 - 12:00 18
12:00 - 16:00 12
16:00 - 20:00 15
20:00 - 00:00 10
我使用以下内容来解决上述问题。
library(lpSolve)
obj.fun <- c(1,1,1,1,1,1)
constr <- c(1,1,0,0,0,0,
0,1,1,0,0,0,
0,0,1,1,0,0,
0,0,0,1,1,0,
0,0,0,0,1,1,
1,0,0,0,0,1)
constr.dir <- rep(">=",6)
constr.val <-c (12,25,30,27,25,15)
day.shift <- lp("min",obj.fun,constr,constr.dir,constr.val,compute.sens = TRUE)
而且,我得到以下结果。
> day.shift$objval
[1] 1.666667
> day.shift$solution
[1] 0.000000 1.666667 0.000000 0.000000 0.000000 0.000000
这与书中提到的数值解决方案无关。
根据数值解法所需的解决方案总数为38
。但是,由于问题表明,每个时期都有明确的最低雇员人数,这个解决方案如何有效?
s1 5
s2 6
s3 12
s4 0
s5 15
s6 0
答案 0 :(得分:3)
您的错误是在初始化变量constr
时,因为您没有将其定义为矩阵。第二个错误是你的矩阵本身。看看我的例子。
我想知道为什么你不坚持书中的例子,因为我想检查我的解决方案。我的基础是。
library(lpSolve)
obj.fun <- c(1,1,1,1,1,1)
constr <- matrix(c(1,0,0,0,0,1,
1,1,0,0,0,0,
0,1,1,0,0,0,
0,0,1,1,0,0,
0,0,0,1,1,0,
0,0,0,0,1,1), ncol = 6, byrow = TRUE)
constr.dir <- rep(">=",6)
constr.val <-c (5,7,18,12,15,10)
day.shift <- lp("min",obj.fun,constr,constr.dir,constr.val,compute.sens = TRUE)
day.shift$objval
# [1] 38
day.shift$solution
# [1] 5 11 7 5 10 0
根据评论中的问题进行编辑:
这是期间变化的分布:
shift | 0-4 | 4-8 | 8-12 | 12-16 | 16-20 | 20-24
---------------------------------------------------
20-4 | 5 | 5 | | | |
0-8 | | 11 | 11 | | |
4-12 | | | 7 | 7 | |
8-16 | | | | 5 | 5 |
12-20 | | | | | 10 | 10
18-24 | | | | | |
----------------------------------------------------
sum | 5 | 16 | 18 | 12 | 15 | 10
----------------------------------------------------
need | 5 | 7 | 18 | 12 | 15 | 10
---------------------------------------------------