使用lap.lapjv實現線性分配(我主要用來作為匈牙利演算法的實現)
使用lap.lapjv實現線性分配(我主要用來作為匈牙利演算法的實現)
lapjv演算法是一種最佳任務分配方法,可以應用的地方很多。需要輸入一個分數方陣,最終獲得一列最佳分配數值。如 n 個數值,要實現其最佳的配對,那麼配對就需要根據n*n的一個分數方陣來計算,以總體最小代價實現任務分配,每一個數值不會重複分配。這裡不討論如何構建分數矩陣。如下圖,依據分數矩陣,以最小代價給每一個工人分配任務。
例1
以上工人分配顯然不是最佳,那麼最佳方式是怎麼樣的呢?下面用程式碼來看看:
>>> import lap
>>> from lap import lapjv
>>> import numpy as np
>>> a = np.array([[1,2,3,4],[2,4,6,8],[3,6,9,12],[4,8,12,16]])
>>> a
array([[ 1, 2, 3, 4],
[ 2, 4, 6, 8],
[ 3, 6, 9, 12],
[ 4, 8, 12, 16]])
>>> c,x,y = lapjv(a)
>>> c
20.0
>>> x
array([3, 2, 1, 0])
>>> y
array([3, 2, 1, 0])
由此可以看出,最佳分配為:a-s,b-r,c-q,d-p, 總代價最小為20.
程式碼測試二:
>>> import lap
>>> from lap import lapjv
>>> import numpy as np
>>> a = np.array([[0.1,0.6,0.3],[0.2,0.1,0.6],[0.5,0.2,0.9]])
>>>
>>> c,x,y = lapjv(a)
>>> c
0.7
>>> x
array([2, 0, 1])
>>> y
array([1, 2, 0])
>>>
這裡返回三個值:
c: 賦值的代價,如果return_cost為False,則不返回。
x: 一個大小為n的陣列,用於指定每一行被分配到哪一列。
y: 一個大小為n的陣列,用於指定每列被分配到哪一行。
行索引分配[2,0,1]: cost = 0.3+0.2 +0.2 = 0.7
列索引分配 [1,2,0]:cost = 0.2 + 0.2 +0.3 =0.7
相關文章
- 我就是要用CSS實現CSS
- 線性表演算法實現演算法
- 目標匹配:匈牙利演算法的python實現演算法Python
- 線性表的使用——順序實現
- 線性表及其演算法(java實現)演算法Java
- 使用ReactJS作為Backbone的view實現ReactJSView
- Redis作為LRUCache的實現Redis
- 線性表及其實現
- go語言使用切片實現線性表Go
- 演算法學習之路|二分圖的最大匹配—匈牙利演算法(Dfs實現)演算法
- 拿來主義實用主義以人為本----現代人生存
- 智慧客服系統的坐席分配策略-我們已經實現
- 資料結構和演算法(一)線性表實現資料結構演算法
- 【練習】串的堆分配實現
- 串的堆分配表示與實現
- TensorFlow實現線性迴歸
- 【機器學習】線性迴歸sklearn實現機器學習
- 線性表1.0(陣列實現)陣列
- 線性表分析及Java實現Java
- pytorch實現線性迴歸PyTorch
- 訂單生產線分配以及拆分邏輯實現
- 為什麼我牆裂建議大家使用列舉來實現單例。單例
- 【演算法題】任務分配問題---匈牙利演算法演算法
- 機器學習--線性迴歸--梯度下降的實現機器學習梯度
- 批量監控主機方法2-使用rhost來實現
- 批量監控主機方法3-使用ftp來實現FTP
- 我也來實現一把MVVMMVVM
- 線性迴歸 go 語言實現Go
- 【機器學習】線性迴歸python實現機器學習Python
- 【pytorch_5】線性迴歸的實現PyTorch
- 你問我答:DevOps完美實現一定要用容器嗎?dev
- 用銀行家演算法實現系統資源分配薦演算法
- 使用Quartz實現定時作業quartz
- 使用LangChain實現自動寫作LangChain
- 使用Runtime來實現自己的KVO
- 數學推導+Python實現機器學習演算法:線性迴歸Python機器學習演算法
- 機器學習演算法(一):1. numpy從零實現線性迴歸機器學習演算法
- 為什麼我希望用C而不是C++來實現ZeroMQC++MQ