數學建模---1線性規劃 指派問題 python

原文鏈接:https://blog.csdn.net/your_answer/article/details/79160045

前言:最近在備戰數模,看到了指派問題,饒有興趣,百度上找了很多關於指派問題的解法,很明顯用的是匈牙利算法,手工的計算,各種各種的博客都很詳盡,大概都瞭解了具體原理(不懂的人可以自行百度),但是基本找不到算法實現,有了也很難去驗證對不對。可能爲了省時間吧(不想重新造輪子,懶),就想找找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)這個函數了。直接貼代碼:

  1. from scipy.optimize import linear_sum_assignment
  2. cost =np.array([[4,1,3],[2,0,5],[3,2,2]])
  3. row_ind,col_ind=linear_sum_assignment(cost)
  4. print(row_ind)#開銷矩陣對應的行索引
  5. print(col_ind)#對應行索引的最優指派的列索引
  6. print(cost[row_ind,col_ind])#提取每個行索引的最優指派列索引所在的元素,形成數組
  7. print(cost[row_ind,col_ind].sum())#數組求和

那麼輸出結果:
  1. [0 1 2]
  2. [1 0 2]
  3. [1 2 2]
  4. 5
索引從0開始就不多說了,還是多嘴一句,官網纔是無敵的!那麼就貼下這個函數的官網吧https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linear_sum_assignment.html#scipy.optimize.linear_sum_assignment

以上。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章