本文介紹三種常見的python作線性規劃的工具包:scipy、pulp、cvxpy,後面2個包也支持整數規劃(Integer Program)、01規劃(Binary Program)仍是混合整數線性規劃(MILP)。html
1、scipy作線性規劃
一、scipy簡單介紹
scipy庫是個功能很強大的包,能夠經過調用optimize.linprog函數解決簡單的線性規劃:python
scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None,
bounds=None, method=‘simplex’, callback=None, options=None)
git
c指的應該是要求最大值的函數的係數數組,A_ub是應該是不等式未知量的係數矩陣,【注意:來這不等式指的是<=的不等式,那若是是>=,就須要乘個負號】。A_eq就是其中等式的未知量係數矩陣了。B_ub就是不等式的右邊了,B_eq就是等式右邊了。bounds的話,指的就是每一個未知量的範圍了。github
二、案例
題目:
代碼示例:
編程
from scipy import optimize as op import numpy as np c=np.array([2,3,-5]) A_ub=np.array([[-2,5,-1],[1,3,1]])#注意是-2,5,-1 B_ub=np.array([-10,12]) A_eq=np.array([[1,1,1]]) B_eq=np.array([7]) # 上限7是根據約束條件1和4得出的 x1=(0,7) x2=(0,7) x3=(0,7) res=op.linprog(-c,A_ub,B_ub,A_eq,B_eq,bounds=(x1,x2,x3)) print(res)
結果:
數組
2、pulp工具包
一、pulp簡單介紹
Python的scipy庫中提供瞭解簡單線性或非線性規劃問題,可是不能求解如揹包問題的0-1規劃問題,或整數規劃問題,混合整數規劃問題,pulp庫能夠求解以上類型的問題,而且有更多的通用性,編寫程序更自由。
官方有不少案例和教程:
https://coin-or.github.io/pulp/CaseStudies/a_transportation_problem.html#presentation-of-solution-and-analysis
編程語言
二、案例
pulp官方教程和網上可參看案例比較多,我的推薦下面一篇文章
https://www.jianshu.com/p/9be417cbfebb
裏面還有運輸問題,指派問題的案例。
函數
3、cvxpy工具包
一、cvxpy簡單介紹
CVXPY是一種能夠內置於Python中的模型編程語言,解決凸優化問題(整數規劃、01規劃和混合規劃)。它能夠自動轉化問題爲標準形式,調用解法器,解包結果集。cvxpy包相對前面2種算是最專業了,功能也更強大。從安裝難度和官方教程就能夠看出來。
我前面一篇文章介紹了cvxpy的安裝。
工具
二、案例
複雜一些的問題,建議參考教程案例裏面有大量很複雜的問題案例。我本身使用直接用的是上千變量的外部數據,不適合入門介紹,就不分享了。簡單的入門能夠參考以下2篇文章:
https://blog.csdn.net/GeekWill/article/details/78836054
使用Python中的cvxpy庫解整數規劃問題
優化