【发布时间】:2015-10-02 06:58:56
【问题描述】:
我正在处理一个个人项目,我需要一些帮助来将我的想法直接用于调度算法。
假设您正在主持一个会议:
- 参加者需要被自动分配到全天 8 个可能的研讨会中的 6 个,以及全天可能的 3 个讲座中的 2 个。
- 与会者只能参加一次研讨会或讲座(没有预定的重复)。
- 中午大家去吃午饭。
- 与会者应在午餐前休息一会,午餐后休息一会。
- 研讨会时长 30 分钟,讲座时长 60 分钟。
- 讲座仅在上午 9 点、上午 11 点、下午 1 点和下午 3 点提供,否则参加者在研讨会或休息时间。
理想情况下,基本时间表将是两种变体之一(唯一的区别是他们参加的讲座和时间):
- 上午 9 点 - 中午:3 场研讨会、休息和讲座(A 或 B)
- 下午 1 点 - 下午 4 点:3 场研讨会、休息和讲座(B 或 C)
或
- 上午 9 点 - 中午:讲座(A 或 B)、休息、3 场研讨会
- 下午 1 点 - 下午 4 点:讲座(B 或 C)、休息、3 场研讨会
我有一个员工列表,我可以根据需要构建“会话”信息表。但最后我需要能够遍历员工,找出一个时间表,然后将其存储起来,以便我们以后打印。
你会怎么做呢?我非常乐意详细介绍其他限制/要求。
【问题讨论】:
-
这是constraint satisfaction problem 的一个例子,一般来说,这些都是NP-Complete。所以不要因为不能太容易地解决它们而感到难过。最直观的解决方案类型可能是回溯解决方案。基本上,您就如何解决部分问题做出一些承诺。这可能是将一名员工“承诺”到某个时间表,然后尝试让下一位员工适应没有任何问题。如果您可以为所有员工做到这一点,那么您就有了解决方案。
-
“让每个人都做这 4 个选项中的第一个”是一个有效的时间表吗?如果没有,那么您需要提供更多约束。
-
担心的是,如果我们只使用“前四个选项”,它会提前加载一些会话而让其他会话缺乏,尤其是如果我们最终有奇数的与会者。跨度>
-
@Oranges13:是的,那么您需要以某种方式明确地将其合并到约束或优化标准中。例如。通过要求一个时间表,以最大限度地减少参加人数最少和参加人数最多的活动之间的出席率差异。
标签: algorithm constraints schedule capacity-planning