r语言 - 用于工作项目调度和优化的遗传算法或模拟退火



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

我想在这个过程中更加精确,所以我开始研究优化资源,如稳定的婚姻问题。最终,我无意中发现了Job-Shop问题的遗传算法和模拟退火,因为我相信我的问题最终会比多配对婚姻问题更复杂,但我可能错了。

我的基本问题被设置为一个具有许多限制条件的优化任务。

工人

:约翰,简,戴尔等。
他们也都可以有多个角色(John可以是Manager或labor)

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

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

我的问题是,我是否真的需要利用遗传算法或模拟退火,或者有一个更简单的过程。此外,我还没能在r中找到这两个进程的任何伪代码。

感谢任何和所有的帮助,如果需要更多的细节,我很乐意为任何人澄清!

您可以尝试将其建模为混合整数程序,例如使用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,并将其最小化)。

最新更新