【发布时间】: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