最近在做最優化的作業,涉及到線性規劃問題,之前運籌學也學過相關問題,都是通過手寫單純性表來進行求解的,但學了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標準形式,最終求出來的值為最小值即為相反數,去掉負號就是我們要的最大值。
線性規劃求解路徑問題
給定乙個帶權重的有向圖g v,e v為頂點集,e為有向邊集,每一條有向邊均有乙個權重。對於給定的頂點s t,以及v的子集v 尋找從s到t的不成環有向路徑p,使得p經過v 中所有的頂點 對經過v 中節點的順序不做要求 記邊的變數為ei 對應權重為ci 點記為vi 其出邊記為vo ji,其入邊記為vi ...
linprog線性規劃求解
linprog 四要素 min quad c tx s.t.quad begin a cdot x leq b aeq cdot x beq lb leq x leq ub end 其中,c 和 x 為 n 維向量,a aeq為適當維數的矩陣,b beq為適當維數的列向量。matlab 中求解線性規...
非線性規劃問題的matlab求解
函式 x,fval fmincon fun,x0,a,b,aeq,beq,lb,ub,nonlcon 返回的x 是乙個向量 在取得目標函式最小時各個xi的取值 返回的fval 目標函式的最小值 引數fun 目標函式 引數x0 向量x的初始值 引數a 線性不等式約束的係數矩陣,若沒有線性不等式約束,則...