我继承了一些试图使用的代码 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 功能,或者是 method 指定为 TNC?我试图对这种优化功能的结构进行一些研究,但是我很难找到所需的答案。任何帮助是极大的赞赏

有帮助吗?

解决方案

简短的答案是 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: 元组,可选

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

有效, scipy.optimize.minimize 会通过的一切 args 作为其余论点 fun, ,使用星号参数符号:然后将功能称为 fun(x, *args) 在优化期间。这 x 部分由优化器传递给 args 元组作为其余的论点。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top