【问题标题】:Assignment allocation (linear programming) lookalike分配分配(线性规划)相似
【发布时间】:2012-10-27 13:15:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: mathematical-optimization linear-programming


    【解决方案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 天雇用工人 w 的成本。双重求和:

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

    为了适应工人几天的偏好, 你可以叠加另一组成本,比如P_wt

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

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      这可以作为二分图上的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 是工人 w 对第 d 天的偏好。这是一个totally unimodular 约束矩阵,因此不需要混合整数求解器。

      【讨论】:

      • 嗯。这似乎很接近。但是你如何决定从 5 个可用工人中分配哪 3 个呢?抱歉,我还是运筹学的新手,大学期间没学过这些。现在我正在自学。
      • @user1491884 网络单纯形算法将为您提供满足每个汇节点需求且不超过每个源节点容量的最低成本。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        • 1970-01-01
        • 2022-01-20
        • 2018-05-02
        • 2022-12-11
        • 1970-01-01
        相关资源
        最近更新 更多