【用python學數學建模】用scipy.optimize.linprog實現線性規劃
阿新 • • 發佈:2018-12-19
因為近期要參加一個建模比賽,沒有安裝MATLAB,所以熟悉下演算法的python實現,本篇為用scipy.optimize.linprog線性規劃。
線性規劃主要解決下面這種問題:
(第一次用LaTex,公式做的不好看,不是這樣要轉化一下,如求最大值)
scipy.optimize.
linprog
(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simplex', callback=None, options=None)
其中,c是價值向量;A_ub和b_ub對應線性不等式約束;A_eq和b_eq對應線性等式約束;bounds對應公式中的lb和ub,決策向量的下界和上界;method是求解器的型別,如單純形法;其他的引數暫時不用。
例題1:
用scipy.optimize.linprog計算
from scipy.optimize import linprog
C = [-1,4]
A = [[-3,1],[1,2]]
b = [6,4]
X0_bounds = [None,None]
X1_bounds = [-3,None]
res = linprog(C,A,b,bounds=(X0_bounds,X1_bounds))
print(res)
fun: -22.0 message: 'Optimization terminated successfully.' nit: 1 slack: array([39., 0.]) status: 0 success: True x: array([10., -3.])
最優解為-22,x0=10,x1=-3.
例題2:
如果是求最大值
我們轉化為
用scipy.optimize.linprog計算
from scipy.optimize import linprog
C = [1,-4]
A = [[-3,1],[1,2]]
b = [6,4]
X0_bounds = [None,None]
X1_bounds = [-3,None]
res = linprog(C,A,b,bounds=(X0_bounds,X1_bounds))
print(res)
fun: -11.428571428571429 message: 'Optimization terminated successfully.' nit: 2 slack: array([0., 0.]) status: 0 success: True x: array([-1.14285714, 2.57142857])
最優解為11.428571428571429,x0=-1.14285714,x1=2.57142857。