使用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
相關文章
- 目標匹配:匈牙利演算法的python實現演算法Python
- 線性表演算法實現演算法
- 線性表的使用——順序實現
- 線性表及其演算法(java實現)演算法Java
- 線性表及其實現
- go語言使用切片實現線性表Go
- pytorch實現線性迴歸PyTorch
- TensorFlow實現線性迴歸
- 智慧客服系統的坐席分配策略-我們已經實現
- 資料結構和演算法(一)線性表實現資料結構演算法
- 線性表1.0(陣列實現)陣列
- 為什麼我牆裂建議大家使用列舉來實現單例。單例
- 使用Runtime來實現自己的KVO
- 【pytorch_5】線性迴歸的實現PyTorch
- 你問我答:DevOps完美實現一定要用容器嗎?dev
- 使用LinkedHashMap來實現一個使用LRU(Least Recently Used)演算法的cacheHashMapAST演算法
- 使用LangChain實現自動寫作LangChain
- 使用Quartz實現定時作業quartz
- 我也來實現一把MVVMMVVM
- 線性迴歸 go 語言實現Go
- Pytorch 實現簡單線性迴歸PyTorch
- Rust 中的Box型別實現堆分配Rust型別
- 【數值計算方法】線性方程組迭代演算法的Python實現演算法Python
- 使用Redis分散式鎖實現主備Redis分散式
- Java使用雪花演算法實現生成全域性唯一idJava演算法
- [譯] 我如何使用 Node.js 來實現工作自動化Node.js
- 梯度下降法實現最簡單線性迴歸問題python實現梯度Python
- Segment使用Go、gRPC和Envoy作為後端REST API實現GoRPC後端RESTAPI
- ZooKeeper系列(3)--基於ZooKeeper實現主從協作
- postgresql使用pgagent來實現job功能SQL
- 使用YARP來實現負載均衡負載
- 使用KeepAlived來實現高可用的DR模型模型
- CRM公海客戶自動分配功能的實現
- Django使用channels實現Websocket連線DjangoWeb
- 關於ie中實現彈性盒模型-我的css模型CSS
- 預處理(3):python實現用scikit-learn實現的線性判別分析(LDA)PythonLDA
- 作業系統中檔案系統的實現和分配方式探析(下)作業系統
- 一起來實現單使用者登入 —— 功能實現