【发布时间】:2020-07-07 15:07:35
【问题描述】:
先发制人:几天来我一直在尝试寻找不同的解决方案,但无济于事,寻找任何有用的东西。
问题:
我目前正在尝试为Minimum Shift Design 问题寻找解决方案,通过该解决方案我们尝试优化在一段时间内满足人员配备要求所需的工作人员和员工数量。
接近
我们有:
-
shift_needs = s_i代表每小时的人员需求i=0..11以及 -
max_employees最大员工人数 -
e_i_j,其中i是员工编号,j是小时。True表示员工i正在工作时间j
所以它本质上是一个简单的 ILP,解决它是微不足道的,但我遇到的问题是限制轮班。即,我们需要有连续的True,中间没有False。
没关系:
[True, True, True, True, False, False, False, False, False, False, False, False]
这不行:
[True, True, False, True, False, False, True, True, False, False, False, False]
我尝试添加一个约束:
- 如果
e_i_j == True那么我们不能有And(e_i_j+1 == False, e_i_j-1 == False) - 如果
e_i_j == False那么我们不能有And(e_i_j+1 == True, e_i_j-1 == True)
但我仍然得到集群。
实现目标的最佳方法是什么?提前致谢。
【问题讨论】:
-
如果您实际发布了一个您尝试过但效果不佳的代码示例,则 Stack-overflow 效果最好。见stackoverflow.com/help/minimal-reproducible-example
标签: z3 linear-programming