首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xtol在最小化(method=‘Nelder’)中的作用是什么?

xtol在最小化(method=‘Nelder’)中的作用是什么?
EN

Stack Overflow用户
提问于 2017-04-26 21:26:37
回答 1查看 4.8K关注 0票数 6

最小化(方法=‘Nelder’)的文档是:迭代之间xopt的绝对错误,这对于收敛来说是可以接受的。那到底是什么意思?是否有例子说明如何使用它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-27 00:46:08

简短的答案:从绝对错误的角度来说,这是你想要的结果的精确程度。如果xatol为0.01,并且该方法返回最小值的位置为[1.23, 4.56],则有希望(但不确定)实际最小值的坐标在1.22-1.24和4.55-4.57之间。

长答案。 用单纯形(二维三角形,三维四面体等)操作。维基百科页面显示了这个单纯形是如何向最小方向移动的,同时改变了大小和形状(它在最小值附近变得更小)。如果满足两个条件,搜索就被认为是成功的:

  1. 单纯形的大小最多为xatol (此方法不推荐xtol选项;建议使用xatol )。
  2. 单形顶点处函数值的差异至多为fatol

非正式地说,这意味着单纯形变小了,目标函数在其顶点的值几乎是相同的。形式上,这是停车条件

代码语言:javascript
运行
复制
if (numpy.max(numpy.ravel(numpy.abs(sim[1:] - sim[0]))) <= xatol and
        numpy.max(numpy.abs(fsim[0] - fsim[1:])) <= fatol):
    break

这里,sim[0]是单形的第一个顶点,sim[1:]是其余的顶点。该条件要求每个顶点的每个坐标都在xatol对应的sim[0]坐标内。数组fsim在这些顶点保存函数值;这里的要求是所有k的函数值都是|fsim[k] - fsim[0]| <= fatol

xatol的默认值是0.0001。当搜索成功时,最后的单纯形将覆盖一个最小点;因此,单形的大小就是我们知道最小值位置的精度。较小的xatol可用于更精确地确定最小值,而以牺牲较长的运行时间为代价。

使用实例

寻找最小值(x^2+y^2),这当然是在点(0,0)。在默认设置下,答案约为3e-5。

代码语言:javascript
运行
复制
>>> from scipy.optimize import minimize
>>> minimize(lambda x: x[0]**2+x[1]**2, [1, 2], method='Nelder-Mead').x
array([ -3.62769110e-05,  -3.03662006e-05])

对于较小的xatol (1e-6而不是默认的1e-4),结果大约要精确100倍,误差约为3e-7。

代码语言:javascript
运行
复制
>>> minimize(lambda x: x[0]**2+x[1]**2, [1, 2], method='Nelder-Mead', options={'xatol': 1e-6}).x
array([  3.12645001e-07,  -2.53507540e-07])
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43644797

复制
相关文章

相似问题

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