gpt4 book ai didi

python - scipy.optimize (python) 中的 fmin_bfgs 的基本示例不起作用

转载 作者:行者123 更新时间:2023-12-01 04:40:24 24 4
gpt4 key购买 nike

我正在学习 scipy 中的优化函数。我想使用可以提供函数梯度的 BFGS 算法。作为一个基本示例,我想最小化以下函数: f(x) = x^T A x ,其中 x 是向量。

当我在 python 中实现这个(参见下面的实现)时,我收到以下错误:

message: 'Desired error not necessarily achieved due to precision loss.'

追踪错误源头让我找到了 scipy 的函数,该函数执行行搜索以确定步长,但我不知道为什么它在如此简单的示例中失败。

我的实现代码如下:

# coding: utf-8
from scipy import optimize
import numpy as np

# Matrix to be used in the function definitions
A = np.array([[1.,2.],[2.,3.]])

# Objectve function to be minimized: f = x^T A x
def f(x):
return np.dot(x.T,np.dot(A,x))

# gradient of the objective function, df = 2*A*x
def fp(x):
return 2*np.dot(A,x)

# Initial value of x
x0 = np.array([1.,2.])

# Try with BFGS
xopt = optimize.minimize(f,x0,method='bfgs',jac=fp,options={'disp':1})

最佳答案

这里的问题是您正在寻找最小值,但目标函数 f(x) 的值在负方向上不受限制。

乍一看,您的问题看起来像是凸目标函数的基本示例,但如果您仔细观察,您会发现事实并非如此。

对于凸性,A 必须是正(半)定的。您的情况违反了此条件。 (只要计算 A 的行列式,您就会立即看到)。

如果您选择A = np.array([[2.,2.],[2.,3.]]),一切都会恢复正常。

关于python - scipy.optimize (python) 中的 fmin_bfgs 的基本示例不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com