用python作線性規劃的幾種工具包和入門介紹

本文介紹三種常見的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庫解整數規劃問題

優化

相關文章
相關標籤/搜索