用python做線性規劃

2021-08-14 21:29:22 字數 1398 閱讀 9910

比如要做這道題吧,需要用到scipy庫裡面的函式

scipy.optimize.

linprog(c

, a_ub=none

, b_ub=none

, a_eq=none

, b_eq=none

, bounds=none

, method='******x'

, callback=none

, options=none

)直接貼**吧

from scipy import optimize as op

import numpy as np

c=np.array([2,3,-5])

a_ub=np.array([[-2,5,-1],[1,3,1]])

b_ub=np.array([-10,12])

a_eq=np.array([[1,1,1]])

b_eq=np.array([7])

x1=(0,7)

x2=(0,7)

x3=(0,7)

res=op.linprog(-c,a_ub,b_ub,a_eq,b_eq,bounds=(x1,x2,x3))

print(res)

很容易發現,c指的應該是要求最大值的函式的係數陣列,a_ub是應該是不等式未知量的係數矩陣,仔細觀察的人應該發現,為什麼第一行裡面寫的是[-2,5,-1]而不是[2,5,-1]呢,應該要與圖里對應才對啊,原來這不等式指的是<=的不等式,那如果是》=呢,乘個負號就行了。a_eq就是其中等式的未知量係數矩陣了。b_ub就是不等式的右邊了,b_eq就是等式右邊了。bounds的話,指的就是每個未知量的範圍了。我們看一下結果

fun: -14.571428571428571

message: 'optimization terminated successfully.'

nit: 2

slack: array([3.85714286, 0.57142857, 6.42857143, 7. , 0. ])

status: 0

success: true

x: array([6.42857143, 0.57142857, 0. ])

重點關注的就是第一行和最後一行了,第一行是整個結果,最後一行是每個x的結果。為什麼第一行是負的呢?原來這個函式其實是求最小值的,那麼求最大值,怎麼辦呢?很簡單,仔細觀察的人應該發現,之前的函式裡面,我寫的是-c,而不是c。那麼這個函式的出來的結果其實就是-c的最小值,但很明顯這恰恰是c最大值的相反數。那麼答案就是14.57了,以上。

python線性規劃教程 用python做線性規劃

scipy.optimize.linprog c,a ub none,b ub none,a eq none,b eq none,bounds none,method x callback none,options none from scipy importoptimize as opimport...

用LaTeX寫線性規劃

線性規劃由目標函式和若干約束構成,latex中並沒有直接的命令來寫線性規劃。簡單的做法是使用 begin end命令,但eqnarray命令是使若干方程按照中間的二元關係符 如等號 垂直對齊的,而線性規劃的約束條件上雖然有二元關係符,但約束條件後面往往還有量詞符號,它們也需要垂直對齊。也就是說,線性...

快速用matlab求解線性規劃

用matlab也有一年時間了,但是從來都懶得記怎麼用,所以老師上個月講的函式,這個月要用的時候一般都會在視窗自動先打出help 某函式,於是最近整理了乙個可以快速看懂函式用法的文章,幫助和我一樣懶惰的同學.eg 某飯店24小時中需要服務員數量如下表,如果每個服務員連續工作8小時,試問在2點,6點,1...