scipy.optimize.minimize||非線性規划


https://blog.csdn.net/sinat_17697111/article/details/81534935

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html

1.非凸函數的非線性規划

 非線性規划包括凸函數的和非凸函數的兩種,minimize主要是針對非凸函數的 求極值的

 

 2.minimize函數

 

 fun: 求最小值的目標函數

x0:變量的初始猜測值,如果有多個變量,需要給每個變量一個初始猜測值。

method:求極值的方法.

minimize是求局部最優解的。

 

 x0是一個向量,可以存儲多個輸入進來的參數。

constraints可以給x0中對應的變量設置范圍。

3.例子

# coding=utf-8
from scipy.optimize import minimize
import numpy as np
 
#demo 1
#計算 1/x+x 的最小值
def fun():
    v=lambda x:1/x[0] +x[0]
    #v=1/x0+x0#不能這么寫
    return v
 
if __name__ == "__main__":
    x0 = np.asarray((2))  # 初始猜測值
    res = minimize(fun(), x0, method='SLSQP')
    print(res.fun)#這樣來調用
    print(res.success)
    print(res.x)

#輸出:
2.0000000815356342
True
[1.00028559]

 

如果初始化為3的話

if __name__ == "__main__":
    x0 = np.asarray((3))  # 初始猜測值
    res = minimize(fun(), x0, method='SLSQP')
    print(res.fun)#這樣來調用
    print(res.success)
    print(res.x)

#輸出:
-305175768.37511855
True
[-3.05175768e+08]

 

可以看到它計算出了新的極小值,該函數的圖像,那能計算出負的這么大的,也是很神奇了。

4.返回的結果

from scipy.optimize import minimize
def fun():
    v=lambda x:1/x[0] +x[0]
    return v
coef=minimize(fun(),2)

#
>>> coef
      fun: 2.0
 hess_inv: array([[0.50030262]])
      jac: array([0.])
  message: 'Optimization terminated successfully.'
     nfev: 24
      nit: 6
     njev: 8
   status: 0
  success: True
        x: array([1.])

 

其中x就是取極小值時x的取值,可以通過

>>> coef['x']
array([1.])

 

獲取到,用於其他計算。


免責聲明!

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



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