【问题标题】:Unbalanced worker/machine assignment不平衡的工人/机器分配
【发布时间】:2017-01-06 00:10:08
【问题描述】:

我有一个问题,将 7 个可能的工人分配给 3 台机器。将工作人员分配给机器以及工作人员空闲时都会产生成本。要求使用所有 3 台机器。成本矩阵是

        M1  M2  M3
    W1 [72, 74, 74]         [64,
    W2 [48, 50, 50]          44,
C = W3 [52, 52, 52]     I =  52,
    W4 [40, 20, 18]          10,
    W5 [46, 48, 48]          42,
    W6 [40, 26, 26]          18,
    W7 [40, 20, 18]          12]

矩阵 C 是分配给每台机器的每个工人的成本。矩阵 I 表示每个工人空闲的成本。

我目前正在使用scipy.optimize.linear_sum_assignment 来确定成本矩阵的最低成本

        M1  M2  M3 
    W1 [72, 74, 74,64,M,M,M,M,M,M]         
    W2 [48, 50, 50,M,44,M,M,M,M,M]         
C = W3 [52, 52, 52,M,M,52,M,M,M,M]     With M being very big.   
    W4 [40, 20, 18,M,M,M,10,M,M,M]         
    W5 [46, 48, 48,M,M,M,M,42,M,M]         
    W6 [40, 26, 26,M,M,M,M,M,18,M]         
    W7 [40, 20, 18,M,M,M,M,M,M,12]          

使用当前的成本矩阵,有时会发生并非所有机器都已分配的情况。为了解决这个问题,我简单地将所有闲置成本乘以 10,以确保首先选择机器。

然而,我的 python 代码并没有给我最佳答案。是否可以使用其他功能来解决此类问题?

代码:

from scipy.optimize import linear_sum_assignment
C = [[72, 74, 74, 640, M, M, M, M, M, M],
    [48, 50, 50, M, 440, M, M, M, M, M],
    [52, 52, 52, M, M, 520, M, M, M, M],
    [40, 20, 18, M, M, M, 100, M, M, M],
    [46, 48, 48, M, M, M, M, 420, M, M],
    [40, 26, 26, M, M, M, M, M, 180, M],
    [40, 20, 18, M, M, M, M, M , M, 120]]

row_ind, col_ind = linear_sum_assignment(C)
print(row_ind)
print(col_ind )

我需要一种方法来解决分配问题,同时强制为所有三台机器分配一个工人。我定义成本矩阵的方式似乎可以做到,但没有给出想要的答案(使用禁忌搜索获得)。我不确定如何强制scipy.optimize.linear_sum_assignment 始终分配三台机器。 这甚至可以在scipy.optimize.linear_sum_assignment 中完成,还是我应该使用不同的 python 包?

【问题讨论】:

  • 但是我的 python 代码并没有给我最佳答案如果你不给我们看代码,我们怎么能提供帮助?
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布代码并准确描述问题之前,我们无法有效地帮助您。

标签: python matrix variable-assignment


【解决方案1】:

发现它有什么问题。我不得不使用许多虚拟机器,允许将工人分配给他们而不是机器。通过将矩阵的维度更改为正方形(7x7)并更改成本矩阵

        M1  M2  M3 
    W1 [72, 74, 74,64,64,64,64]         
    W2 [48, 50, 50,44,44,44,44]         
C = W3 [52, 52, 52,52,52,52,52]    
    W4 [40, 20, 18,10,10,10,10]         
    W5 [46, 48, 48,42,42,42,42]         
    W6 [40, 26, 26,18,18,18,18]         
    W7 [40, 20, 18,12,12,12,12]

scipy.optimize.linear_sum_assignment 现在给我正确的分配。

【讨论】:

    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多