【问题标题】:Algorithm for non-cyclic workforce scheduling非循环劳动力调度算法
【发布时间】:2013-08-09 17:41:35
【问题描述】:

似乎有大量关于循环(或“轮换”)劳动力调度问题的信息。我正在寻找一种算法,该算法将有助于生成员工轮班时间表,而无需关心前一周的时间表是什么样的。根据我的研究,这听起来像是一个非循环的劳动力调度问题。

基本上,我知道员工的空闲时间、他们的最短/最长小时数以及他们请求的休假时间。有了这些信息,我想创建一个优化的时间表,以满足员工期望的可用性,同时满足每天所需的轮班次数。

有没有人为此目的提供有关良好算法的提示?谢谢!

【问题讨论】:

  • 你有没有找到关于这个问题的更多细节?
  • 这个项目被搁置了,但我很快就会重新审视它。下面的答案确实提供了最好的信息。您要么陷入次优贪心算法,要么陷入约束规划。

标签: php algorithm scheduling


【解决方案1】:

对于像员工调度这样的问题,解决方案有很多限制,我更喜欢从不违反任何限制或尽可能接近的方法。 (遗传交叉等一些方法会违反约束,然后执行额外的操作来修复解决方案 - 这也是一种有效的方法,但您需要注意走入死胡同。)

两种方法基于使用贪心算法。

第一种是使用半随机贪心算法;如果你有两个选择,那么通常你总是会选择局部最优的选择,但是使用半随机贪心方法你会引入选择不是局部最优的选择的可能性。例如,选项一的权重为 5,选项二的权重为 2;通常您会选择选项一,但在这种情况下,您将使用随机数生成器并在 rand(5 + 2) 小于 5 时选择选项一,否则选择选项二。现在多次运行该算法并采取“最佳”解决方案。

第二种选择是从贪心或半随机贪心解决方案开始,并使用本地搜索算法重新分配员工职位以尝试改进解决方案。例如,如果员工的工作时间少于他们想要的工作时间,那么将占用对次优员工合法的位置的员工进行碰撞,并将次优员工分配给它,如果需要,继续搜索以重新分配被碰撞的员工。与第一个解决方案不同,如果您不小心,此解决方案可能不会终止。

这两种方法可以结合使用,使用半随机贪心方法生成多个解决方案,然后进行本地搜索以提高最佳结果。

【讨论】:

  • 感谢您的回答,非常有见地。我一直在对使用约束编程进行一些研究。不幸的是,大多数在线资源似乎都过于复杂。不过,理想情况下,您是否同意约束编程会产生最佳解决方案(可能使用更简单的代码)?
  • @Luke Sapan 如果您愿意投资,那么约束规划是解决此类问题的绝佳方法,并且有许多可用的库。当应用于现实世界的问题时,约束编程的好处是,如果添加或删除约束,那么您通常不必完全重做所有事情,而在遗传算法之类的东西中更改约束可能要复杂得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 2014-05-05
  • 1970-01-01
  • 2017-01-18
  • 2014-01-18
  • 2019-01-08
相关资源
最近更新 更多