首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用basinhopping求一个不太好的hehaved函数的全局最小值

使用basinhopping求一个不太好的hehaved函数的全局最小值
EN

Stack Overflow用户
提问于 2015-05-23 02:58:15
回答 1查看 437关注 0票数 1

我有一个R* R-> R类型的函数,定义为

代码语言:javascript
复制
f(x,y)=(y-5)^2 if x = 9 
       (x-9)^2 otherwise

除了在x = 9附近,这个函数是平滑的。还可以观察到该函数是非负的,并且

f(x,y) == 0 <==> (x,y) = (9,5)

因此,(9,5)是f的唯一全局最小值。但我发现使用scipy的全局优化工具很难定位(或近似)这一点。我尝试过使用spicy.optimize.basinhopping

代码语言:javascript
复制
import scipy.optimize as op

def f(X):
  if X[0]==9:
    return (X[1]-5)**2
  else:
    return (X[0]-9)**2


res=op.basinhopping(f,[7.0,7.0],minimizer_kwargs={'method':'powell'},niter=100,stepsize=50)
print res

我得到了

代码语言:javascript
复制
    fun: 3.1554436208840472e-30
    nfev: 5806
 message: ['requested number of basinhopping iterations completed successfully']
     nit: 100
       x: array([  9.        ,  20.01509711])

有没有一种方法可以正确地设置basinhopping,以便找到真正的全局最小值(9,5)?

EN

回答 1

Stack Overflow用户

发布于 2015-10-09 04:53:11

对于任何数值优化算法来说,这都是一个极其困难的问题。极小化将朝着x=9方向移动,但在实际达到9之前很久就会达到收敛标准。它必须精确到9,才能知道y轴的任何信息。这只能通过运气或预先存在的关于问题的知识来实现。即使是像网格搜索这样的强力优化技术也只能靠运气来解决它。

l-bfgs-b在迭代2次后停止,认为它在9.00000017,7处找到了解。函数值为2.773339593234183e-14,梯度为3.43066965e-07,0.00000000e+00

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30404039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档