【问题标题】:Newton - CG Optimization in python, problems with JacobianNewton - python 中的 CG 优化,Jacobian 问题
【发布时间】:2019-09-16 06:11:21
【问题描述】:

我正在尝试在 python 中制作 Newton - CG 优化。我的函数是 f(x,y) =(1-x)^2 + 2(y-x^2)^2。初始点:x = 3,y = 2。这是我的代码:

from scipy.optimize import minimize 

def f(params): #definite function
    x, y = params #amount of params 
    return (1 - x) ** 2 + 2 * (y - x ** 2) ** 2

def jacobian(params): #definite function
    x, y = params #amount of params
    der = np.zeros_like(x)
    der[0] = -8 * x * (-x ** 2 + y) + 2 * x - 2 #derivative by x
    der[1] = -4 * x ** 2 + 4 * y #derivative by y
    return der

initial_guess = [3, 2] #initial points
result = minimize(f, initial_guess, jac = jacobian, method = 'Newton-CG')

我收到一个错误"IndexError: too many indices for array"

当我制作 Nelder - 蜂蜜酒优化时,BFGS 和它们工作。所以,问题在于雅可比矩阵。我觉得def jacobian 的某个地方是个错误。

【问题讨论】:

  • 不应该是der = np.zeros_like(params)吗?因为x 是一个标量?
  • 哦,是的。我看到它现在有效!非常感谢!
  • @rinkert 我是堆栈溢出的新手,如何“喜欢”您的评论,以提高您的评分或在此论坛上,因为您真的帮助了我
  • 评论左侧有一个小箭头,可以点赞,但是cmet点赞不影响名誉。不过,您可以投票并接受答案。

标签: python optimization scipy


【解决方案1】:

错误确实在 jacobian 函数中,您将 der 定义为零,取 x 的大小,这是一个标量。而是使用params:

def jacobian(params): #definite function
    x, y = params #amount of params
    der = np.zeros_like(params)
    der[0] = -8 * x * (-x ** 2 + y) + 2 * x - 2 #derivative by x
    der[1] = -4 * x ** 2 + 4 * y #derivative by y
    return der

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多