我的工作需要在14天内完成。我有5个工人。有一天需要3名工人。每个工人最多只能工作9天。每个工人都有自己的日常偏好,每个工人每天都有不同的成本。
现在,我如何在数学术语中解决这个问题?如何找到工人分配的最低成本?
我不认为这是分配问题,因为匈牙利算法的设计使得我只能找到1对1的分配。 (在这种情况下,1名工人1天)
答案 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解算器(例如CPLEX
或Excel 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个工人。它认为你需要更多的信息。