微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当找不到解决方案时,如何返回对 scipy 最小化的最佳猜测?

如何解决当找不到解决方案时,如何返回对 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 举报,一经查实,本站将立刻删除。