當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。