scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simplex', 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的話,指的就是每一個未知量的範圍了。咱們看一下結果函數
con: array([0.]) fun: -14.571428571428571 message: 'Optimization terminated successfully.' nit: 8 slack: array([0. , 3.85714286]) status: 0 success: True x: array([6.42857143, 0.57142857, 0. ])
重點關注的就是第一行和最後一行了,第一行是整個結果,最後一行是每一個x的結果。爲何第一行是負的呢?原來這個函數實際上是求最小值的,那麼求最大值,怎麼辦呢?很簡單,仔細觀察的人應該發現,以前的函數裏面,我寫的是-c,而不是c。那麼這個函數的出來的結果其實就是-c的最小值,但很明顯這偏偏是c最大值的相反數。那麼答案就是14.57了,以上。
---------------------
做者:your_answer
來源:CSDN
原文:https://blog.csdn.net/your_answer/article/details/79131000
版權聲明:本文爲博主原創文章,轉載請附上博文連接!spa