python求解線性規劃問題

最近在做最優化的作業,涉及到線性規劃問題,之前運籌學也學過相關問題,都是通過手寫單純性表來進行求解的,但學了python之後感覺太麻煩了,不如利用python來幫我們求解。
線性規劃求解主要弄清楚兩個部分,目標函數(max,min)和約束條件(s.t.),我們求解時一般要化爲python的標準形式:
在這裏插入圖片描述
在此用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)

好啦上門可以跳過不看,來通過一個例子掌握python求解線性規劃:
在這裏插入圖片描述

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

#確定c,A,b,Aeq,beq
c = np.array([1,-2,1,0])
A = np.array([[2,-1,4,0],[-1,2,-4,0]])
b = np.array([8,4])
Aeq = np.array([[1,1,-2,1]])
beq = np.array([10])

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

結果如下

     con: array([2.16662244e-11])
     fun: -18.999999999960654
 message: 'Optimization terminated successfully.'
     nit: 5
   slack: array([4.74820183e-12, 1.77671211e-11])
  status: 0
 success: True
       x: array([5.02499921e-13, 1.20000000e+01, 5.00000000e+00, 8.00000000e+00])

可以看到求解的結果,我們關注第一個和最後一個,fun就是目標函數最小值,x就是最優解。
注:如果原問題是求最大值,則在求解時帶入-c,化爲python標準形式,最終求出來的值爲最小值即爲相反數,去掉負號就是我們要的最大值。

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