分配分配(线性编程)看起来很像

时间:2012-10-27 13:15:22

标签: mathematical-optimization linear-programming

我的工作需要在14天内完成。我有5个工人。有一天需要3名工人。每个工人最多只能工作9天。每个工人都有自己的日常偏好,每个工人每天都有不同的成本。

现在,我如何在数学术语中解决这个问题?如何找到工人分配的最低成本?

我不认为这是分配问题,因为匈牙利算法的设计使得我只能找到1对1的分配。 (在这种情况下,1名工人1天)

3 个答案:

答案 0 :(得分:1)

你需要解决这个问题的是 IP(整数编程)公式。你的直觉是正确的,这与任务问题非常相似 - 我们基本上是指派工人去做某些工作天。

以下是制定问题的步骤:

决策变量 :(英文)哪个工作在哪几天工作?

让我们标记日期 t (1..14) 工人 w1到w5

所以,

X_wt = 1 if worker w works on day t

X_wt = 0 otherwise

这些约束现在相当简单地写下来了。 每天只需要3名工人。

X_1t + X_2t + X_3t + X_4t + X_5t = 3 for each t (1..14)

每个工人最多可以工作9天:

(sum over t=1..14) X_wt <= 9 for each w (1..5)

最后,目标函数

C_wt成为第t天雇佣工人的成本。双重求和:

Min (sum over w 1..5)(sum over t 1..14) C_wt

为了适应工人的偏好, 您可以将另一组费用分层,例如P_wt

这是基本的表述。然后,您将需要IP / LP解算器(例如CPLEXExcel Solver或R的optim库)来获得实际解决方案。

希望有所帮助。

答案 1 :(得分:1)

这可以解决为二分图上的minimum-cost network-flow问题。每个工人代表一个供应9个单位的来源,每天代表一个需求为3的汇。每个供应和需求之间的弧都有容量1,并且相应于他们的偏好当天关闭的成本。如果沿着弧线流动,那意味着特定的工人当天应该工作。

虽然这不能用匈牙利方法解决,但有几种快速算法,包括network simplex

代数,配方是

minimize sum_w sum_d p_wd x_wd
subject to
\sum_w x_wd = 3    forall d
\sum_d x_wd <= 5   forall w

如果p_wd是工作人员对第d天的偏好。这是一个totally unimodular约束矩阵,因此它不需要混合整数解算器。

答案 2 :(得分:0)

它可能是bin-packing和tsp问题。寻找容量的车辆路线问题。它有许多问题,但你有3个工人。在容量车辆路由中有x个工人。它认为你需要更多的信息。