0

我的任务是改进公司的基本调度流程,使其更加数据驱动、高效和精简。就目前而言,我们目前只是每月汇总项目所需的总小时数,并将此值与可能的工作时间 * 员工人数进行比较。我们比较这些结果并确定我们是否需要提供更多帮助。

我希望在这个过程中更加精确,因此我开始研究使用诸如稳定婚姻问题之类的资源进行优化。最终,我从 Job-Shop 问题中偶然发现了遗传算法和模拟退火,因为我相信我的问题最终会比多匹配婚姻问题更复杂一些,但我可能是错的。

我的基本问题被设置为具有许多限制标准的优化任务。

工人:John、Jane、Dale 等。
他们也可以担任多个角色(John 可以是经理或劳工)

项目:项目 A、项目 B、项目 C 等。
项目有开始和结束日期。
理想情况下,我想限制项目的不同阶段的子开始和结束日期,但总体开始/结束日期可以。这些子日期包括每种角色类型所需的小时数(经理 8 小时、劳动者 20 小时等)

工作时间:每位员工不超过 45 小时。

我的问题是我真的需要使用 GA 或模拟退火,还是有更简单的过程。另外,我在 R 中找不到任何这些进程的伪代码。

感谢您提供的所有帮助,如果需要更多详细信息,我很乐意为任何人澄清!

4

1 回答 1

2

您可以尝试将其建模为混合整数程序,例如使用lpSolve包。您将拥有john_manager_project_A_week_1求解器要确定的变量(例如 John 在第 1 周作为经理在项目 A 上工作的小时数),以及线性约束,例如

john_manager_project_A_week_1 + john_manager_project_B_week_1 + ... <= 45
john_manager_project_A_week_1 + jane_manager_project_A_week_1 + ... >= 8

这个框架似乎有些局限,但通过一些建模技巧,您还可以表达“约翰不能在第一周作为项目 A 的经理和工人”这样的条件。

解决这些问题是 NP 难的,但求解器往往相当不错,如果你只有几十个人、项目和时间段,它应该是可以解决的。您甚至可以有一个要优化的线性目标函数(例如,将上面的“45”替换为max_work_hours,并将其最小化)。

于 2015-10-23T08:44:10.037 回答