日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

利用python解决指派问题(匈牙利算法)

發布時間:2024/5/14 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用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解决指派问题(匈牙利算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。