37

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

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

result = minimize(func, jac=jac_func, args=(D_neg, D, C), method = 'TNC' ...other arguments)

func如下所示:

def func(G, D_neg, D, C):
#do stuff

jac_func具有以下结构:

def jac_func(G, D_neg, D, C):
#do stuff

我不明白G输入的来源funcjac_func来源。是在函数中以某种方式指定的,还是通过将指定为minimize的事实?我试图对这个优化函数的结构进行一些研究,但我无法找到我需要的答案。任何帮助是极大的赞赏methodTNC

4

1 回答 1

54

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

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

但是如果你碰巧有一个函数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)元组按原样传递。

于 2013-11-07T19:42:11.227 回答