任务是找到具有明确定义步骤的函数的最小值。
我浏览了 scipy.optimize 包的方法,这些方法使用近似方法(COBYLA、COBYQA),但没有找到任何可用于传递步长的参数和选项。
例如:
initial_x_1 = np.float16([4.0])
res_opt_x_1 = optimize.minimize(f_x_1, initial_x_1, method='COBYLA', options={'rhobeg': [2.0], 'maxiter': 50, 'disp': False, 'catol': 1e-4})
scipy.optimize 中还有其他数值方法,我们可以在其中显式设置步长吗?
或者,更一般地说,其他Python数学库中是否还有其他数值方法,我们可以在其中显式设置步长?
scipy.optimize 中还有其他数值方法,我们可以在其中显式设置步长吗?
不,不是开箱即用的。如果您希望收敛,您必须适当地控制每次迭代的步长。
但是您可以使用一些工具来组合一个最小化器,使您可以在每次迭代时设置步长。例如,一个非常容易编写但非常糟糕的梯度下降实现:
from scipy.optimize import approx_fprime
def f(x):
return (x - 1) @ (x - 1)
def df(x):
return approx_fprime(x, f)
def step(i, x, fx, dfx):
return 0.1 * np.linalg.norm(dfx)
def minimize(f, x0, step):
x = x0
for i in range(1000):
fx = f(x)
dfx = df(x)
step_x = step(i, x, fx, dfx)
x = x - step_x*dfx
if step_x < 1e-4:
break
return x, fx
x0 = np.asarray([1, 2])
minimize(f, x0, step)
# (array([0.99999999, 1.00024972]), 6.237025220521198e-08)
或者,更一般地说,其他 Python 数学库中是否还有其他数值方法,我们可以在其中显式设置步长?我无法回答这部分。来自
https://stackoverflow.com/help/on-topic:
要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止已采取的解决措施。