scipy的输入结构最小化功能

时间:2013-11-07 18:26:13

标签: python numpy scipy minimize

我继承了一些试图使用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

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

1 个答案:

答案 0 :(得分:37)

简短的回答是,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元组的用途。 documentation试图解释如何使用args元组,但是解析起来有点困难:

  

args:元组,可选

     

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

实际上,scipy.optimize.minimize将使用星号参数表示法将args中的任何内容传递给fun的其余参数:该函数随后被称为fun(x, *args)在优化期间。 x部分由优化器传入,args元组作为剩余参数给出。

因此,在您的代码中,优化程序在评估G的可能值时保留G元素的值,并按原样传递(D_neg, D, C)元组。