【问题标题】:why scipy.optimize.basinhopping give different results为什么 scipy.optimize.basinhopping 给出不同的结果
【发布时间】:2022-01-13 20:58:04
【问题描述】:

我需要找到一个复杂函数的全局最小值。 我使用来自 scipy.optimize 的盆地跳跃。当我更改方法时,例如 method="nelder-mead" vs "L-BFGS-B" 或初始猜测 x0,它们给了我不同的结果,特别是在我需要在下一步中使用的 x 值中。 x[5] = 0.6,“nelder-mead”,但 x[5]=0.0008,“L-BFGS-B”,尽管函数值类似于 2055.7795 与 2055.7756(所有这些都具有“成功:TRUE”)。我认为盆地跳跃可以找到全局最小值。因此,无论我使用什么方法或初始猜测,它都应该给出相同的结果。 任何人都可以解释为什么?并建议我应该怎么做才能找到全局最小值并检查它是否是全局的(不是本地的)。

谢谢

【问题讨论】:

  • 你能展示你的代码吗?
  • 您好 Frank Yellin,这是我的代码:
    a=([])
  • Hi Frank Yellin, here is my code: a=np.array([0.45275208, 0.32413238, -0.30483703, 0.99848052, 0.55297566, 4.26764045, 1.03994821, 0.25612404, -4.58725626, 0.67264732, 0.17100111, -3.20751967 ]) bnds = ((-1, 1), (-1, 1),(-1,1),(0,None),(0,None),(None,None),(0,None), (0,None),(None,None),(0,None),(0,None),(None,None)) minimumr_kwargs = dict(method="nelder-mead", bounds=bnds) res=basinhopping( neg_loglike,a,minimizer_kwargs=minimizer_kwargs)。对不起,我是新手。我试图阅读如何格式化 cmets,但无法使其工作。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python scipy minimize scipy-optimize minimization


【解决方案1】:

盆地跳跃方法不能保证为任何函数提供全局最小值。它也不是确定性的,在探索附近的方式中有一个随机分量,如关于take_step 参数a 的帮助中所述

如果您想在两个不同的调用中重现相同的结果,除了使用相同的方法之外,您还必须使用相同的seed 参数。

同样使用相同的种子应该会增加使用不同的局部优化器方法给出相同结果的可能性。

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 2012-06-09
    • 2017-04-29
    • 2021-12-07
    • 2020-10-15
    • 2014-02-01
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多