首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在scipy.optimize.minimize中需要ftol和gtol吗?给它一个非常低的值合适吗?

在scipy.optimize.minimize中需要ftol和gtol吗?给它一个非常低的值合适吗?
EN

Stack Overflow用户
提问于 2020-02-04 22:30:59
回答 1查看 1.4K关注 0票数 0

我使用有限内存的BFGS优化器来最小化黑盒函数的值。我随机模拟了许多输入参数组合,并意识到ftolgtol参数只是挡路,它对降低我的函数值没有任何帮助( ftolgtol的输出和随机输入之间存在正相关,所以越小越好)。因此,我将两者都设置为1E-18,并将重点放在配置其他参数上,因此退出消息CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH意味着,我猜整个优化依赖于eps的正确值。

然后,我将ftolgtol都设置为1E-20,使其不会成为障碍,但随后我开始获得次优结果。

所以我的优化器是:

代码语言:javascript
运行
复制
scipy.optimize.minimize(function, x0=guess.flatten(), method='L-BFGS-B', bounds=bounds, options={ 'maxcor': maxcor, 'ftol': 1E-20, 'gtol': 1E-20, 'eps': eps, 'maxfun': maxrounds, 'maxiter': maxrounds, 'maxls': maxls})

因此,我将其设置为1E-20,并随机提供其他值。对于更大的样本,1E-20的平均输出比1E-18小,我不明白为什么,他们应该是非常小的数字,可以忽略不计。我也开始收到像CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL这样的退出消息,我不知道这么小的容忍度是怎么可能的。因此,我有以下问题:

1)是否值得将ftolgtol设置为像1E-20这样低的值?

2)如果已经设置了ftolgtol,我应该设置tol (外部公差值)吗?我不希望它提前退出。或者,如果启用了gtolftol,是否会禁用tol作为退出阈值?

3)有没有可能Scipy、Numpy或Python3本身不能处理20位小数的浮点值?我注意到Python主要打印浮点数的18位数字,所以问题可能是我放了太多的数字。如果是,那么scipy.optimize处理的最大位数是多少?(Scipy v1.4.1 | Numpy v1.18.1 | Python 3.5.3)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-08 16:46:33

由于四舍五入误差,您正在设置的公差不是真正可以实现的。您可以阅读here中有关Python浮点精度的更多信息。您应该为gtol和ftol选择一个较小但合理的数字,通常为1e-6 - 1e-8。

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

https://stackoverflow.com/questions/60059564

复制
相关文章

相似问题

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