Scipy:使用自定义步骤进行优化

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

任务是找到具有明确定义步骤的函数的最小值。

我浏览了 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数学库中是否还有其他数值方法,我们可以在其中显式设置步长?

python optimization scipy
1个回答
0
投票

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 来说是偏离主题的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止已采取的解决措施。

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