最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用minimize()?函數(shù)替代matlab的fmincon函數(shù)

 更新時間:2022年09月14日 15:33:52   作者:趙孝正  
這篇文章主要介紹了python使用minimize()函數(shù)替代matlab的fmincon函數(shù),在matlab中,fmincon函數(shù)可以用于求解帶約束的非線性多變量函數(shù)的最小值,即可以用來求解非線性規(guī)劃問題

1. matlab 中的 fmincon() 函數(shù)

matlab 求解非線性規(guī)劃

在matlab中,fmincon函數(shù)可以用于求解帶約束的非線性多變量函數(shù)的最小值,即可以用來求解非線性規(guī)劃問題。

基本語法

[x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options)

  • x 的返回值是決策向量 x 的取值,fval 的返回值是目標(biāo)函數(shù) f(x) 的取值
  • fun 是用 M 文件定義的函數(shù) f(x) ,代表了(非)線性目標(biāo)函數(shù)
  • x0 是 x 的初始值
  • A, b, Aeq, beq 定義了線性約束 ,如果沒有線性約束,則 A=[], b=[], Aeq=[], beq=[]
  • lb 和 ub 是變量 x 的下界和上界,如果下界和上界沒有約束,則 lb=[], ub=[],也可以寫成 lb 的各分量都為 -inf, ub 的各分量都為 inf
  • nonlcon 是用 M 文件定義的非線性向量函數(shù)約束。
  • options 定義了優(yōu)化參數(shù),不填寫表示使用 Matlab 默認(rèn)的參數(shù)設(shè)置。

實(shí)例

示例,求下列非線性規(guī)劃:

(1)編寫 M 函數(shù) fun1.m 定義目標(biāo)函數(shù):

function f = fun1(x);
f = x(1).^2 + x(2).^2 + x(3).^2 + 8;

(2)編寫 M 函數(shù) fun2.m 定義非線性約束條件:

function [g, h] = fun2(x);
g = [-x(1).^2+x(2)-x(3).^2
    x(1)+x(2).^2+x(3).^3-20];
h = [-x(1)-x(2).^2+2
    x(2)+2*x(3).^2-3];

(3)編寫主程序函數(shù)

[x, y] = fmincon('fun1', rand(3, 1), [], [], [], [], zeros(3,1), [], 'fun2')

所得結(jié)果為:

2. python中的minimize()函數(shù)

minimize函數(shù)的尋找參數(shù)

在 python 的 scipy.optimize 庫中包含該函數(shù)的替代函數(shù) minimize() ,該函數(shù)的使用與 matlab 的 fminunc 函數(shù)有些不同,下面總結(jié)下,自己在使用的過程中遇到的問題。

首先查看下該函數(shù):

官方聲明過長,我把它放在該篇博客的最后面:

# 這是其聲明,我認(rèn)為去查看函數(shù)的說明可以達(dá)到事半功倍的效果,千萬別忽略
def minimize(fun, x0, args=(), method=None, jac=None, hess=None,
             hessp=None, bounds=None, constraints=(), tol=None,
             callback=None, options=None):

著重介一些重要參數(shù)代表什么:

fun:該參數(shù)就是 costFunction 你要去最小化的損失函數(shù),將 costFunction 的名字傳給 fun

官方給的提示:

The objective function to be minimized.
fun(x, *args) -> float
where x is an 1-D array with shape (n,) and args
is a tuple of the fixed parameters needed to completely
specify the function.

意思就是損失函數(shù)在定義時,**theta 必須為第一個參數(shù)且其shape必須為(n, )**即一維數(shù)組。在計算損失函數(shù)的時候用到的其他參數(shù)以元組的形式傳入到 args 參數(shù)中(其他參數(shù)具體指 X,Y,lambda 等),最后返回?fù)p失的值,可以為數(shù)組形式,也可以為一個實(shí)數(shù).

  • x0: 參數(shù) x0 就是初始化的 theta, 其 shape 必須為 shape(n,) 即一維數(shù)組.
  • method:該參數(shù)代表采用的方式,默認(rèn)是 BFGS, L-BFGS-B, SLSQP 中的一種,可選 TNC
  • jac:該參數(shù)就是計算梯度的函數(shù),和 fun 參數(shù)類似,第一個必須為 theta 且其 shape 必須為 (n, ) 即一維數(shù)組,最后返回的梯度也必須為一個一維數(shù)組。
  • options:用來控制最大的迭代次數(shù),以字典的形式來進(jìn)行設(shè)置,例如:options={‘maxiter’:400}

minimize求解約束函數(shù)最小值

  • fun: 求最小值的目標(biāo)函數(shù)
  • x0:變量的初始猜測值,如果有多個變量,需要給每個變量一個初始猜測值。minimize會出現(xiàn)局部最優(yōu)的情況,所以這塊的處理方法需要尋找。
  • args:常數(shù)值,后面例子會講解,fun中沒有數(shù)字,都以變量的形式表示,對于常數(shù)項,需要在這里給值
  • method:求極值的方法,官方文檔給了很多種。一般使用默認(rèn)。每種方法我理解是計算誤差,反向傳播的方式不同而已,這塊有很大理論研究空間
  • constraints:約束條件,針對fun中為參數(shù)的部分進(jìn)行約束限制
1.計算 1/x+x 的最小值

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

執(zhí)行結(jié)果:函數(shù)的最小值為2點(diǎn)多

到此這篇關(guān)于python使用minimize() 函數(shù)替代matlab的fmincon函數(shù)的文章就介紹到這了,更多相關(guān)python fmincon內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django中使用session保持用戶登陸連接的例子

    Django中使用session保持用戶登陸連接的例子

    今天小編就為大家分享一篇Django中使用session保持用戶登陸連接的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 基于python實(shí)現(xiàn)數(shù)組格式參數(shù)加密計算

    基于python實(shí)現(xiàn)數(shù)組格式參數(shù)加密計算

    這篇文章主要介紹了基于python實(shí)現(xiàn)數(shù)組格式參數(shù)加密計算,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • pandas?Dataframe實(shí)現(xiàn)批量修改值的方法

    pandas?Dataframe實(shí)現(xiàn)批量修改值的方法

    這篇文章主要介紹了pandas?Dataframe實(shí)現(xiàn)批量修改值的方法,在使用dataframe的時候?有時候會碰到需要批量修改數(shù)據(jù)的時候,下面文章主要說明兩種情況使用iloc對某幾行某幾列進(jìn)行全部修該和對數(shù)據(jù)進(jìn)行判定后,相互+/-/*某個數(shù),使用內(nèi)置函數(shù),需要的朋友可以參考一下
    2022-06-06
  • python opencv實(shí)現(xiàn)圖像矯正功能

    python opencv實(shí)現(xiàn)圖像矯正功能

    這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)圖像矯正功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Python中可復(fù)用函數(shù)的6種實(shí)踐

    Python中可復(fù)用函數(shù)的6種實(shí)踐

    為了實(shí)現(xiàn)可維護(hù)性,我們的Python函數(shù)應(yīng)該:小型、只做一項任務(wù);沒有重復(fù);有一個層次的抽象性;有一個描述性的名字和有少于四個參數(shù),下面我們就來看看這6個特性的實(shí)踐吧
    2023-08-08
  • Python下調(diào)用Linux的Shell命令的方法

    Python下調(diào)用Linux的Shell命令的方法

    有時候難免需要直接調(diào)用Shell命令來完成一些比較簡單的操作,這篇文章主要介紹了Python下調(diào)用Linux的Shell命令的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Python分割列表list方法使用(平均n等份拆成)

    Python分割列表list方法使用(平均n等份拆成)

    本文主要介紹了Python分割列表list方法使用(平均n等份拆成),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 詳解python中的生成器、迭代器、閉包、裝飾器

    詳解python中的生成器、迭代器、閉包、裝飾器

    這篇文章主要介紹了python中的生成器、迭代器、閉包、裝飾器的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Python面向?qū)ο竽Хǚ椒ê蛦卫K代碼實(shí)例

    Python面向?qū)ο竽Хǚ椒ê蛦卫K代碼實(shí)例

    這篇文章主要介紹了Python面向?qū)ο竽Хǚ椒ê蛦卫K代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • python__name__原理及用法詳解

    python__name__原理及用法詳解

    這篇文章主要介紹了python__name__原理及用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11

最新評論

邮箱| 富锦市| 红桥区| 浠水县| 桓仁| 东乡县| 延川县| 沁水县| 郯城县| 金昌市| 什邡市| 中牟县| 赤水市| 五华县| 阿勒泰市| 老河口市| 肃北| 玛纳斯县| 资阳市| 无棣县| 西安市| 鹤岗市| 永昌县| 磴口县| 道孚县| 澎湖县| 长岛县| 常宁市| 汕尾市| 济源市| 莱州市| 永嘉县| 南靖县| 清流县| 宿州市| 深圳市| 丁青县| 崇左市| 枣庄市| 勃利县| 西青区|