如何解决当找不到解决方案时,如何返回对 scipy 最小化的最佳猜测?
在我的优化过程中,scipy 经常找不到解决方案而只是返回我最初的猜测。我宁愿使用迄今为止发现的最佳值,而不是我最初的猜测。
> results = optimize.minimize(optimize_me,x0,method='BFGS',jac=True)
> results.success
False
> results.x == x0
True
像这样optimize_me(x0) == results.fun
。但我更希望 optimize_me(results.x)
/results.fun
是找到的最低值,即使没有找到解决方案也是如此。
解决方法
这是一个带有 callback
func = lambda x: np.cos(14.5 * x - 0.3) + (x + 0.2) * x
x0=[1.]
def print_fun(x):
print("Current value: {}".format(x))
minimize (func,x0,method = 'BFGS',callback=print_fun)
这会将每次迭代的当前值打印为:
Current value: [1.05820172]
Current value: [1.09236336]
Current value: [1.09262207]
Current value: [1.09260106]
fun: 0.4259196810917082
hess_inv: array([[0.00477712]])
jac: array([-1.2665987e-06])
message: 'Optimization terminated successfully.'
nfev: 16
nit: 4
njev: 8
status: 0
success: True
x: array([1.09260106])
您可以根据自己的喜好修改打印功能。然而,并不是所有的优化例程都支持回调。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。