【问题标题】:Scipy: Convergence MetricsScipy:收敛指标
【发布时间】:2015-12-03 02:24:23
【问题描述】:

我正在使用 scipy 的 Basin Hopping algorithm 来优化多元成本函数。温度是影响盆地跳跃算法收敛时间的参数之一。我希望能够通过将成本函数值曲线拟合到当前迭代并确定它是否比之前的温度设置更快收敛来确定basinhopping() 收敛的速度。

盆地跳跃调用如下所示:

res = basinhopping(cost, guess, niter=1, T=t, minimizer_kwargs={"method": "cobyla"})

有什么方法可以“实时”更新成本函数的当前值,以便我可以进行自适应优化?

【问题讨论】:

    标签: python optimization scipy


    【解决方案1】:

    你想找到一个最优的 T, 通过例如 Golden_section_search 关于一个变量的函数:

    ftemperature( T ) = basinhopping( ... T=T ... ) .func  ?
    

    如果是这样,请建立 func Tres 的历史列表,为您的 Tsearch 函数提供信息:

    # initialize history lists for a few T  (grid search) --
    fhist, Thist, reshist = [], [], []
    
    for T in [...]:
        res = basinhopping( cost, guess, T=T ... )
        print "T %.3g  func %.3g" % (T, res.func)
        fhist.append( res.func )
        Thist.append( T )
        reshist.append( res )
    
    # search for new T --
    while True:
        T = Tsearch( Thist, fhist )  # golden search or ...
        if T is None:  break
        res = basinhopping( cost, guess, T=T ... )
        print "T %.3g  func %.3g" % (T, res.func)
        fhist.append( res.func )
        Thist.append( T )
        reshist.append( res )
    

    如果不是,请澄清。

    (正如@Jacob Stevenson 所说,你可以在callbacks 内部做同样的事情。)

    (有一些更好的方法可以最小化一个变量的函数,参见例如 scipy.optimize.minimize_scalar .)

    【讨论】:

    • 嗨@denis,它是许多变量的函数。感谢您的回复!
    • @nick_name,我建议从小处着手:单独改变 T,看看结果如何变化。
    【解决方案2】:

    我不是 100% 确定我理解您的问题,但盆地跳跃参数 callback 听起来像您正在寻找的。​​p>

    顺便说一句,您尝试做的事情在概念上听起来与本文 Freeze-Thaw Bayesian Optimization

    有点相似

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 2019-09-01
      • 2019-03-12
      • 2021-10-16
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多