在建模和求解线性规划的有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
你的错误是在你初始化变量的时候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
---------------------------------------------------
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句