日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)

發布時間:2023/12/19 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 使用Python scipy linprog 线性规划求最大值或最小值(使用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)今天閱讀數據建模第一章線性規劃問題,問題描述如下:通過介紹我們知道了線性規劃,就是目標函數及約束條件均為線性函數。通過畫圖我們可知,X1,X2的最優解為2,6,目標值為26。我們如何時候這個scipy的公式來計算這個值呢:

>>> c = [-1, 4]
>>> A = [[-3, 1], [1, 2]]
>>> b = [6, 4]
>>> x0_bounds = (None, None)
>>> x1_bounds = (-3, None)
>>> from scipy.optimize import linprog
>>> res = linprog(c, A_ub=A, b_ub=b, bounds=(x0_bounds, x1_bounds),
...               options={"disp": True})
>>> print(res)
Optimization terminated successfully.
     Current function value: -11.428571
     Iterations: 2
status: 0
success: True
fun: -11.428571428571429
x: array([-1.14285714,  2.57142857])
message: 'Optimization terminated successfully.'
nit: 2

上面是官方給出的案例,我們很難看出來這個怎么求解最大值,不過英語好的也可以把。言歸正傳,我們先結合官網是思路得出最小值的解。

In [1]:c = np.array([4,3])
In [1]:a = np.array([[2,1],[1,1]])
In [1]:In [1]:b = np.array([10,8])
In [1]:optimize.linprog(c,a,b,bounds=((0,None),(0,7)))
Out[1]:
fun: -0.0
message: 'Optimization terminated successfully.'
nit: 0
slack: array([ 10., 8., 7.])
status: 0
success: True
x: array([ 0., 0.])

按照正常的計算 我們得出了最小值為0,且x的兩個值為 0 , 0。對于上面的的公式有必要說明的是,bounds是針對x的最大最小一次給一個值,從題目可知,x1的取值范圍為大于0,最小值就為0,最大值沒有約束,被其他的條件所約束就可以了 ,沒有明確,所以是寫的 (0,None),而相對x2來說,他最小值為0,最大值被C約束,為7。所以范圍為(0,7),當有三個求解的時候,依次增加,不可省略。接下來我們說這個最大值怎么求,其實只要對C取反我們就可以求除最大值的負數,對結果在取反回來就可以了

In [1]:optimize.linprog(-c,a,b,bounds=((0,None),(0,7)))
Out[1]:
fun: -26.0
message: 'Optimization terminated successfully.'
nit: 2
slack: array([ 0., 0., 1.])
status: 0
success: True
x: array([ 2., 6.])

是不是很簡單,得到的-26取反回來就是我們的最大值求解了,(2,6)就是我們的X1,X2取值了。其實有時候那個條件為>,>=的時候我們要寫成<,<=的模式,一樣對參數和結果取反就行了。我這里在補充一個求三個解的實例:我們的最優解為 14.57

總結

以上是生活随笔為你收集整理的使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。