为员工指定日期


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

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

我认为解决方案可以是一些与二分图相关的算法,但我找不到一个好的方法来解决它

你知道如何解决它吗?或者这个问题是否适合一些已知的算法?

非常感谢,Marco

这个问题似乎是一个已知的问题,称为护士调度,它是NP难的。基本上,你的员工和日期分别对应于护士和轮班。您的硬约束是员工的可用天数,软约束是他们的工作质量,正如您在示例中提到的选择最佳10

不幸的是,我不认为你能想到一个最佳的解决方案。根据员工和日期的规模,找到这样的解决方案可能相当棘手,我不认为仅仅根据你到目前为止对问题的定义,判断哪种方法可以用来解决护士排班问题可能最适合你的要求。

尽管如此,以下是一些论文,您可以查看它们如何符合您的问题实例的特定要求。

护士调度问题的抓握-背包混合算法

护士排班的两阶段自适应变邻域方法

一个护士调度问题的间接遗传算法