为员工分配日期

Assign employees to dates

这是我的初始条件:

I have a set of employees E1, E2, E3, ...
I have a set of dates for an activity D1, D2, D3, ...
For every employee, I know on which dates he is available to perform the activity
Every employee should perform the activity only once

我需要找到允许每个员工执行 activity 的最佳配置,最大限度地减少使用的日期数量并为每个日期提供最大员工数量。因此,例如,如果在特定日期我可以有 20 名员工,我只需要使用其中最好的 10 名员工,将其他 10 名员工转移到不同的日期。

我认为解决方案可能是一些与二部图相关的算法,但我找不到解决它的好方法。

您是否知道如何解决它,或者该问题是否适合某些已知算法?

非常感谢, 马可

这个问题似乎是一个名为 nurse scheduling which is known to be NP-hard 的已知问题。基本上在您的员工中,日期分别对应于护士和班次。您的硬约束是员工可用的天数,软约束是他们的工作质量,正如您提到的在您的示例中选择 最好的 10

不幸的是,我认为您无法凭空想出最佳解决方案。根据员工和日期的规模,找到这样的解决方案可能非常棘手,而且我认为目前为止你对问题的定义不适合判断可以使用哪种方法solve nurse scheduling 可能最适合您的要求。

尽管如此,您可以查看以下几篇论文,了解它们如何满足您的问题实例的具体要求。

A grasp-knapsack hybrid for a nurse-scheduling problem

A two-phase adaptive variable neighborhood approach for nurse rostering

An Indirect Genetic Algorithm for a Nurse Scheduling Problem