Python數學模型——線性規劃求解(一)

線性規劃求解

線性規劃求解主要弄清楚兩個部分,目標函數(max,min)和約束條件(s.t.),我們求解時一般要化爲MATLAB標準形式

mincTxs.t.{Ax<=bAeqx=beqlb<=x<=ub

MATLAB求解代碼爲:
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
LB,UB分別爲x的上界和下界

在此用Python求解,需要scipy和numpy庫的支持:

from scipy import optimize
import numpy as np

#求解函數
res = optimize.linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
#目標函數最小值
print(res.fun)
#最優解
print(res.x)

例 求解下列線性規劃問題

maxz=2x1+3x25x3s.t.{x1+x2+x3=72x15x2+x3>=10x1+3x2+x3<=12x1,x2,x3>=0

code:
#導入包
from scipy import optimize
import numpy as np

#確定c,A,b,Aeq,beq
c = np.array([2,3,-5])
A = np.array([[-2,5,-1],[1,3,1]])
b = np.array([-10,12)]
Aeq = np.array([[1,1,1]])
beq = np.array([7])

#求解
res = optimize.linprog(-c,A,b,Aeq,beq)
print(res)

reslult:
     fun: -14.571428571428571
 message: 'Optimization terminated successfully.'
     nit: 2
   slack: array([3.85714286, 0.        ])
  status: 0
 success: True
       x: array([6.42857143, 0.57142857, 0.        ])

可以看到求解的結果,我們關注第一個和最後一個,fun就是目標函數最小值,x就是最優解。
注:在求解時帶入-c並且把第二個式子的係數加了負號,是因爲需要化爲MATLAB標準形式,最終求出來的值爲最小值即-14.57,去掉負號就是我們要的最大值。

這是用Python求解線性規劃的基本步驟和方法,在下一篇將討論一個模型建立的應用題,深入探討線性規劃的模型建立與求解。

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