php - 非循环劳动力调度算法

标签 php algorithm scheduling

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

基本上,我了解员工的空闲时间、他们的最短/最长工作时间以及他们要求的休假时间。有了这些信息,我想创建一个优化的时间表,以满足员工所需的可用性,同时满足每天所需的类次数量。

有人有关于用于此目的的良好算法的建议吗?谢谢!

最佳答案

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

两种方法都基于使用贪婪算法。

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

第二种选择是从贪婪或半随机贪婪解决方案开始,并使用本地搜索算法重新分配员工职位以尝试改进解决方案。例如,如果一名员工的工作时间少于其期望的工作时间,则剔除占用次优员工合法职位的员工,并将次优员工分配给该员工,如果需要,继续搜索以重新分配被剔除的员工。与第一个解决方案不同,如果您不小心,这个解决方案可能不会终止。

这两种方法可以结合起来,用半随机贪婪方法生成多个解决方案,然后进行局部搜索以改进最佳结果。

关于php - 非循环劳动力调度算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152567/

相关文章:

php - 如何使 .PHP 文件只能由服务器访问?

linux-kernel - 延迟工作的 CPU 处理

events - 用于事件调度的队列/数据库?

php - CCK为输入形式,但不是节点结构

php - 将 mysql 数据库从实时服务器备份到我的本地 MySQL

php - 对两个日期之间的所有表执行 SELECT

javascript - 无法将数组作为 javascript 函数的参数传递

algorithm - SPOJ 数字总和

c# - 查找一个字符串到另一字符串程序的排列

c++ - 我的 cplex c++ 代码 exportModel() 输出一个空文件名.lp