【发布时间】:2010-10-15 00:00:10
【问题描述】:
我的任务是在我的公司执行一个日程安排程序。基本上给定 N 名员工,您应该安排他们在本月轮班。我试图通过蛮力和有序的约束优先级来做到这一点。但是,我在尝试保持垂直和水平约束时遇到了问题。
纵向限制,每个人每个月都应该有相同的班次。 (例如,他们应该在白班、夜班、休息日、早班的平均数量之内)但是,也有一天的横向限制,即每天的班次数量应该每天相等。
我尝试在互联网上搜索,我通常会阅读有关使用遗传算法的答案。在我对遗传算法的研究中,该算法似乎不太适合我的情况。有人知道如何解决这个问题吗?
基于 Enigmativity 评论的附加插图: 基本上有4个班次,
Y 是每月的员工轮班总数,需要平均分配给每个员工。 (即每个员工在当月的班次类型应该相等(或相差一个)) - 垂直约束。
X 是所有员工的每日总数,基本上每个班次也应该平均分配到平日和周末。 - 水平约束
此外,还有其他限制,例如所需班次和相邻班次。但我现在试着用这些平分规则来简化它。
--------------------------------------------------------------------------------
| Employee | 1 | 2 | 3 | 4 | + + + | 28 | 29 | 30 | 31 | S1 | S2 | S3 | S4 |
--------------------------------------------------------------------------------
| EmpA | S3 | S4 | S1 | S2 | + + + | S3 | S4 | S1 | S2 | Y | Y | Y | Y |
--------------------------------------------------------------------------------
| EmpB | S1 | S3 | S4 | S1 | + + + | S2 | S3 | S4 | S1 | Y | Y | Y | Y |
--------------------------------------------------------------------------------
| EmpC | S2 | S1 | S3 | S4 | + + + | S1 | S2 | S3 | S4 | Y | Y | Y | Y |
--------------------------------------------------------------------------------
| EmpD | S2 | S2 | S2 | S3 | + + + | S4 | S1 | S2 | S3 | Y | Y | Y | Y |
--------------------------------------------------------------------------------
| S1 | X | X | X | X | + + + | X | X | X | X | | | | |
--------------------------------------------------------------------------------
| S2 | X | X | X | X | + + + | X | X | X | X | | | | |
-------------------------------------------------------------------------------
| S3 | X | X | X | X | + + + | X | X | X | X | | | | |
--------------------------------------------------------------------------------
| S4 | X | X | X | X | + + + | X | X | X | X | | | | |
--------------------------------------------------------------------------------
【问题讨论】:
-
我不明白你的水平限制。 “每天的班次应该每天相等”是什么意思?此外,您还必须有进一步的限制,例如首选工作日、可用性限制等,否则您的公司只会创建一个固定的时间表——三个白班、三个夜班、三个休息日、三个早班——并将员工分成四组团队。那么,他们不这样做的原因是什么?此外,遗传算法将为每位员工提供每天随机轮班变化的数量 - 这听起来不正确。请提供更多信息。
标签: algorithm scheduling