【问题标题】:Algorithm to assign workers to teams based on workers preferences根据员工偏好将员工分配到团队的算法
【发布时间】:2017-03-16 02:02:39
【问题描述】:

我们有N 工作人员,他们应该被分配到M 团队之一。每个团队最多可以有K 工人。每个工作人员按优先顺序对团队进行排名,从最喜欢的团队的1 到最不喜欢的团队的M。现在的问题是找到一个匹配项,让工人最终加入他们最喜欢的团队,假设每个团队最多可以有K 工人。

起初我以为,这是一个Assignment problem,可以使用Hungarian Algorithm 解决。但后来我意识到匈牙利算法只有在每个工人都被分配到一个项目时才能使用。但在我的情况下,可以将几个工人分配到同一个团队。

现在我不确定这到底是什么问题。这是(多个)Knapsack problemBin packing problem 吗?我可以使用什么样的算法来解决这个问题?

【问题讨论】:

    标签: algorithm language-agnostic computer-science


    【解决方案1】:

    这是stable marriage problem。基本情况允许 1-1 匹配,但它可以很容易地概括为允许 1-K 匹配。在 1-K 匹配的情况下,团队不需要都具有相同的大小。团队也可能更偏爱某些特定的工人,或者可能平等地偏爱所有工人。

    如果团队没有偏好,这相当于首先将所有工作人员分配到他们最喜欢的团队。然后,如果任何团队超额认购,将额外的工人溢出到他们的第二个偏好。重复直到所有工作人员都被分配。

    【讨论】:

      【解决方案2】:

      有两种方法可以解决这个问题,哪种更有效取决于你有多少人和多少个团队,以及K 有多大。

      更简单的方法(在@Alex L. 的回答中已经提到)是将每个团队分成K 团队,并将问题转换为常规加权二分匹配,可以用匈牙利算法解决。现在,匈牙利算法的复杂度是O(n^2 * m)。这里我们选择n 作为人数,m 作为团队数量。在我们将每个团队分成k 之后,最终的复杂度将是O(n^2 * m * k)

      另一种方法是将此问题视为最小成本最大流量问题。您构建了一个图,其中一个源和一个接收器是两个额外的节点,所有工作人员直接连接到源,容量为1 和权重0,所有团队连接到接收器,容量为k 和权重0 ,以及连接到具有1 容量和成本的团队的工作人员,具体取决于他们的偏好。最小成本最大流具有复杂性O(n^3 * m)。现在,如果我们选择工人数量为n,团队数量为m,我们得到的结果比匈牙利语更差(因为大概是k < n)。但是,如果我们将n 作为团队数量,将m 作为工人数量,我们可能会得到比匈牙利更好的东西,如果工人数量多,团队数量少,k 是也很大。

      所以这一切都取决于你的约束。如果m 明显小于kn,则最好使用最小成本最大流量,否则只需将团队分成k 并使用香草匈牙利算法。

      【讨论】:

      • 最小成本最大流量 (MCF) 有许多不同的算法来解决它。这是一个问题表述,没有一种算法。因此,您发布的复杂性是不准确的,有更有效的算法(例如成本缩放为 O(n^2 m log(nC)),其中 C 是网络中最大的成本)。见:arxiv.org/pdf/1207.6381.pdf
      【解决方案3】:

      稍加调整,就可以变成一个Assignment问题:

      如果您将每个团队复制到容量为 1 的 K 团队 - 那么您需要将每个工作人员分配给一个团队,并且每个团队只能分配给一个工作人员。

      在分配问题中,代理和任务的数量不必相等。

      【讨论】:

      • 这是否意味着每个工人都必须提供 M*K 偏好?
      • 不,偏好是我们无法更改的问题的输入。相反,在定义分配成本时,应考虑初始偏好
      猜你喜欢
      • 2017-05-30
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多