不平衡的工人/机器分配

时间:2016-08-29 20:58:22

标签: python matrix variable-assignment

我有一个问题,即将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包?

1 个答案:

答案 0 :(得分:0)

发现它有什么问题。我不得不使用许多虚拟机器,允许工人分配给他们而不是机器。通过将矩阵的尺寸更改为方形(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现在给了我正确的作业。