我有一个问题,即将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包?
答案 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
现在给了我正确的作业。