python求解線性規劃問題

2021-10-06 18:01:51 字數 1624 閱讀 1780

最近在做最優化的作業,涉及到線性規劃問題,之前運籌學也學過相關問題,都是通過手寫單純性表來進行求解的,但學了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 線性不等式約束的係數矩陣,若沒有線性不等式約束,則...