利用make_cost_matrix()函数创建Munkres算法所需的成本矩阵的方法
要使用Munkres算法,我们需要创建一个成本矩阵,其中包含每个任务对应的成本。可以使用python中的make_cost_matrix()函数来创建成本矩阵。
make_cost_matrix()函数的基本语法如下:
make_cost_matrix(cost_matrix, cost_of_vacant=None, small_score=float('inf'))
参数说明:
- cost_matrix:一个二维列表,表示每个任务之间的成本。列表的行表示工人,列表的列表示任务,每个元素表示对应任务的成本。
- cost_of_vacant:一个值,表示如果将任务留空的成本。默认值为None,表示没有留空成本。
- small_score:一个小的成本值,默认为无穷大。当使用最小化函数时,这个值将用作初始化的激励值。
对于每个任务,如果可以由工人执行,则在成本矩阵中指定一个正数值。如果任务不能被执行,则在成本矩阵中指定一个负数值。如果任务可以留空,则指定cost_of_vacant的值。
让我们通过一个例子来说明如何使用make_cost_matrix()函数。
假设我们有3名工人和3个任务,我们想要找到一种分配方式,使得总成本最小化。每个工人可以执行所有任务,我们有以下成本矩阵:
cost_matrix = [[3, 1, 2],
[5, 2, 1],
[4, 6, 4]]
在这个例子中,我们可以使用make_cost_matrix()函数创建该成本矩阵。代码如下:
from munkres import make_cost_matrix
cost_matrix = [[3, 1, 2],
[5, 2, 1],
[4, 6, 4]]
cost_matrix = make_cost_matrix(cost_matrix)
这样就创建了一个Munkres算法所需的成本矩阵。
我们可以使用Hungarian类中的compute()方法来计算最优分配。
让我们继续使用上面的例子来演示如何使用Munkres算法。
from munkres import Munkres, make_cost_matrix
cost_matrix = [[3, 1, 2],
[5, 2, 1],
[4, 6, 4]]
cost_matrix = make_cost_matrix(cost_matrix)
m = Munkres()
indexes = m.compute(cost_matrix)
for row, column in indexes:
print(f"工人 {row+1} 被分配执行任务 {column+1}")
输出结果为:
工人 1 被分配执行任务 1
工人 2 被分配执行任务 3
工人 3 被分配执行任务 2
这表示工人1被分配执行任务1,工人2被分配执行任务3,工人3被分配执行任务2。这是一种使总成本最小化的最优分配方式。
总结:
使用make_cost_matrix()函数可以创建一个适用于Munkres算法的成本矩阵。然后,通过使用Munkres类的compute()方法,可以得到一个最优的任务分配。这在许多应用中都非常有用,例如任务调度,指派问题等。
