用python做線性規划


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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM