如何使用 trust-ncg 进行 scipy 优化最小化

问题描述 投票:0回答:1

我的作业是使用

'trust-ncg'
scipy.opt.minimize
方法。 我已经给出了我的函数的输出
f(x,y)
。我在函数中手动查找雅可比行列式。黑森州也是如此。简单来说就是:

def foo(params):
  x,y = params
  return x*x+y

def df(params):  # jacobian
  x,y = params
  return np.array([2*x, 1])

def hf(params):  # hessian
  x,y = params
  return np.array([[2, 0], [0, 0])

那么,我的尝试是: res = opt.minimize(foo, [1, 1], jac=df, hess=hf, method='trust-ncg', tol=1e-10)

我收到:

ValueError: shapes (2,11) and (2,11) not aligned: 11 (dim 1) != 2 (dim 0)

我正在玩弄容差,如https://www.programcreek.com/python/example/57330/scipy.optimize.minimize。如果我将容差设置为 1,我只会进行 1 次迭代,但随后我只会返回一条直线,这不是我的目标。 我还尝试更改函数参数的顺序,但这没有达到预期的效果。我尝试了其他版本的粗麻布,如一维数组,但它对我没有帮助。我还尝试将雅可比矩阵设为 [[0], [1]] 类型。再次,没有效果。

如何使用 trust-ncg 正确调用 scipy opt minimise?

numpy optimization scipy minimize scipy-optimize-minimize
1个回答
0
投票

尝试转置任何矩阵

arr.T
,以便在内部
matrix multiplication
中进行对齐,由 scipy.optimize.minimize 实现完成,需要形状 (2,11) 和 (11,2) 进行乘法对齐,因为矩阵需要当彼此相乘时,转置相对于彼此 - 这是正确的:

第一个到达点:(dim 1) 11 个元素 == 第二个到达点:(dim 0) 11 个元素

© www.soinside.com 2019 - 2024. All rights reserved.