我正在使用跳盆算法来优化多元成本函数。温度是影响跳频算法收敛时间的重要参数之一。我希望能够通过将成本函数值曲线拟合到当前的迭代,并确定它是否比以前的温度设置更快的收敛速度来确定basinhopping()的收敛速度。
下面是跳槽电话的样子:
res = basinhopping(cost, guess, niter=1, T=t, minimizer_kwargs={"method": "cobyla"})有什么方法可以“实时”更新成本函数的当前值,这样我就可以进行自适应优化了吗?
发布于 2016-01-05 11:46:11
你想通过一个变量函数的搜索来找到一个最优的T吗?
ftemperature( T ) = basinhopping( ... T=T ... ) .func ?如果是这样的话,请构建func T和res的历史列表,这些列表为您的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 )如果没有,请澄清。
(你可以在callback里面做同样的事情,就像@Jacob说的那样。)
(有一些更理想的方法来最小化一个变量的函数,参见例如标量。)
发布于 2015-12-04 18:00:58
我不是百分之百肯定我理解你的问题,但基本跳跃参数callback听起来像你要找的东西。
顺便说一句,你想要做的事情听起来有点像本文中的冻结-Thaw贝叶斯优化
https://stackoverflow.com/questions/34056788
复制相似问题