利用python解决指派问题(匈牙利算法)
生活随笔
收集整理的這篇文章主要介紹了
利用python解决指派问题(匈牙利算法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言:最近在備戰數模,看到了指派問題,饒有興趣,百度上找了很多關于指派問題的解法,很明顯用的是匈牙利算法,手工的計算,各種各種的博客都很詳盡,大概都了解了具體原理(不懂的人可以自行百度),但是基本找不到算法實現,有了也很難去驗證對不對。可能為了省時間吧(不想重新造輪子,懶),就想找找python有沒有什么庫函數可以實現,找了很多博客什么的,還是找不到。想著指派問題也是0-1規劃,線性規劃用的也是scipy.optimize的庫函數,一氣之下,直接去翻scipy.optimize的官網。還是官網無敵啊。廢話不多說了,先看個示例的開銷矩陣:
那么肉眼看的話就很簡單了,第一行[4 1 3]就選第二列的1,第二行[2 0 5]就選第一列的2,第三行[3 2 2]就選第三列的2,那么開銷的和就是5。那么用python解的話,用到scipy.optimize.linear_sum_assignment(cost_matrix)這個函數了。直接貼代碼:
from scipy.optimize import linear_sum_assignmentcost =np.array([[4,1,3],[2,0,5],[3,2,2]]) row_ind,col_ind=linear_sum_assignment(cost) print(row_ind)#開銷矩陣對應的行索引 print(col_ind)#對應行索引的最優指派的列索引 print(cost[row_ind,col_ind])#提取每個行索引的最優指派列索引所在的元素,形成數組 print(cost[row_ind,col_ind].sum())#數組求和那么輸出結果: [0 1 2] [1 0 2] [1 2 2] 5索引從0開始就不多說了,還是多嘴一句,官網才是無敵的!那么就貼下這個函數的官網吧 https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linear_sum_assignment.html#scipy.optimize.linear_sum_assignment
以上。
總結
以上是生活随笔為你收集整理的利用python解决指派问题(匈牙利算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hdu1011:星舰部队(java实现)
- 下一篇: 如何利用Python实现财务自由,如果你