当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy optimize.linear_sum_assignment用法及代码示例


本文简要介绍 python 语言中 scipy.optimize.linear_sum_assignment 的用法。

用法:

scipy.optimize.linear_sum_assignment()#

解决线性和分配问题。

参数

cost_matrix 数组

二分图的成本矩阵。

maximize 布尔(默认值:假)

如果为真,则计算最大权重匹配。

返回

row_ind, col_ind 数组

一组行索引和一个对应的列索引,给出最佳分配。分配的成本可以计算为 cost_matrix[row_ind, col_ind].sum() 。行索引将被排序;在平方成本矩阵的情况下,它们将等于 numpy.arange(cost_matrix.shape[0])

注意

线性和分配问题 [1] 也称为二分图中的最小权重匹配。问题实例由矩阵 C 说明,其中每个 C[i,j] 是匹配第一个部分集合(a‘worker’)的顶点 i 和第二个集合(a‘job’)的顶点 j 的成本。目标是找到一个完整的工人分配到最低成本的工作。

形式上,让 X 是一个布尔矩阵,其中 iff 行 i 分配给列 j。那么最优分配有成本

其中,在矩阵 X 为正方形的情况下,每一行恰好分配给一列,每一列恰好分配给一行。

此函数还可以解决成本矩阵为矩形的经典分配问题的推广。如果它的行多于列,则不需要将每一行分配给一列,反之亦然。

此实现是修改后的Jonker-Volgenant 算法,没有初始化,在参考文献中说明。 [2]。

参考

[2]

DF克劳斯。关于实现二维矩形分配算法。IEEE 航空航天和电子系统汇刊, 52(4):1679-1696, 2016 年 8 月,DOI:10.1109/TAES.2016.140952

例子

>>> import numpy as np
>>> cost = np.array([[4, 1, 3], [2, 0, 5], [3, 2, 2]])
>>> from scipy.optimize import linear_sum_assignment
>>> row_ind, col_ind = linear_sum_assignment(cost)
>>> col_ind
array([1, 0, 2])
>>> cost[row_ind, col_ind].sum()
5

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.linear_sum_assignment。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。