dlib - dlib::find_min_bobyqa 的参数
问题描述
我正在研究 Matt Zucker 的Page dewarping的 C++ 版本。到目前为止一切正常,但我在优化方面遇到了问题。在 Github repo的第 748 行, Matt 使用了 Scipy 的优化功能。我的 C++ 等效项是来自dlib.net的 find_min_bobyqa。代码是:
auto f = [&](const column_vector& ppts) { return objective( dstpoints, ppts, keypoint_index); };
dlib::find_min_bobyqa(f,
params,
2 * params.nr() + 1, // npt - number of interpolation points: x.size() + 2 <= npt && npt <= (x.size()+1)*(x.size()+2)/2
dlib::uniform_matrix<double>(params.nr(), 1, -2), // lower bound constraint
dlib::uniform_matrix<double>(params.nr(), 1, 2), // upper bound constraint
1, // initial trust region radius
1e-5, // stopping trust region radius
4000 // max number of objective function evaluations
);
在我的具体示例params
中,adlib::column_vector
具有 double 值且长度 = 189。params 的每个元素都小于 2.0 且大于 -2.0。函数objective()
返回双精度值并且“单独”它可以正常工作,因为我得到的值与 Python 版本中的值相同。但在运行fin_min_bobyqa
功能后,我通常会收到以下消息:
抛出 'dlib:bobyqa_failure' 的实例后调用终止,从 BOBYQA 返回,因为目标函数已被调用 max_f_evals 次。
我设置max_f_evals
了一个相当大的值来查看它是否优化,但它没有。我对参数做了一些调整,但没有好的结果。我应该如何设置参数find_min_bobyqa
以获得正确的解决方案?
解决方案
我终于解决了这个问题。我使用了 PRAXIS库,因为它不需要衍生信息并且速度很快。我根据自己的需要稍微修改了代码,现在它比用 Python 编写的原始版本快了几秒钟。
推荐阅读
- php - 如何更改 HTACCESS 以指向我的项目所在的子文件夹
- amazon-web-services - policy.addAwsAccountPrincipal() 抛出 MalformedPolicyDocument 错误
- c++ - 反调试器技术:如何使用 VB.NET 对调试器隐藏线程?
- python - 页面渲染时自动登录 Neo4j
- kubernetes - Kubernetes 动态 Pod 供应
- html - 如何一起减少或增加 CSS 中的大小?
- java - 如何修复“java未命名模块从y和z读取包x”
- kotlin - 为什么这个演员不会失败?
- ios - 如何从包含字典的数组中检索和显示表格视图中的数据?
- python - 使用内置的“重塑”功能将图像分割成更小的块