scipy的输入结构最小化功能

sed*_*idw 24 python numpy minimize scipy

我继承了一些试图使用函数最小化函数的代码scipy.optimize.minimize.我无法理解funjac参数的一些输入

最小化调用看起来像这样:

result = minimize(func, jac=jac_func, args=(D_neg, D, C), method = 'TNC' ...other arguments)
Run Code Online (Sandbox Code Playgroud)

func 看起来如下:

def func(G, D_neg, D, C):
#do stuff
Run Code Online (Sandbox Code Playgroud)

jac_func 具有以下结构:

def jac_func(G, D_neg, D, C):
#do stuff
Run Code Online (Sandbox Code Playgroud)

我不明白的是G输入funcjac_func来自哪里.是以某种方式在minimize函数中指定,还是由method指定为TNC?的事实?我试图对这个优化函数的结构进行一些研究,但是我找不到我需要的答案.任何帮助是极大的赞赏

lmj*_*ns3 38

简短的回答是G由优化器作为最小化过程的一部分来维护,而(D_neg, D, and C)参数是从args元组中按原样传递的.

默认情况下,scipy.optimize.minimize接受一个fun(x)接受一个参数的函数x(可能是一个数组等)并返回一个标量.scipy.optimize.minimize然后找到一个参数值xp,使其fun(xp)小于fun(x)其他值x.优化器负责创建值x并将其传递给fun评估.

但是如果你碰巧有一个函数fun(x, y)有一些额外的参数y需要单独传递(但是为了优化而被认为是常量)会怎样?这就是args元组的用途.该文件试图解释ARGS元组是如何使用的,但它可以是一个有点难以解析:

args:元组,可选

传递给目标函数及其衍生物的额外参数(Jacobian,Hessian).

实际上,scipy.optimize.minimize将使用星号参数表示法args将所有参数作为参数的其余部分传递fun:然后fun(x, *args)在优化期间调用该函数.该x部分由优化器传入,args元组作为剩余参数给出.

因此,在您的代码中,G元素的值由优化器维护,同时评估可能的值G,并且(D_neg, D, C)元组按原样传递.

  • @ lmjohns3 @askewchan:初始猜测`x0`不是可选参数,正如您在文档中看到的那样.用户必须始终明确指定它,并且没有默认值. (3认同)
  • 很好的解释!通常你会猜测你期望的“G”是什么,比如“G0”。因此,您可以使用 `minimize(func, jac=jac_func, G0, args=(...,), ...)`,而不是 OP 中的表单。如果你不通过,它通常从 `G=1` 开始。我认为这种形式不那么令人困惑,即使 `G0=1.` 也是如此。 (2认同)