Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

完成一维和多维无约束非线性优化的功能,并添加文档 #89

Merged
merged 1 commit into from
May 6, 2024
Merged

完成一维和多维无约束非线性优化的功能,并添加文档 #89

merged 1 commit into from
May 6, 2024

Conversation

zhaoxi-scut
Copy link
Member

@zhaoxi-scut zhaoxi-scut commented May 6, 2024

Pull Request 合并请求准备清单

详情参见此处

  • 我同意在 Apache 2 开源许可下为本项目做贡献
  • 此 pull request 是在正确的分支上提出的
  • 此 pull request 有对应的错误报告或其他待改进的内容
  • 我本地的 RMVL 进行了单元测试、性能测试,有对应的测试数据
  • 我提交的 feature 有很好的文档记录,并且可以使用 CMake 项目构建示例代码

具体内容

  1. 添加一维最优化方法 rm::fminbnd,使用黄金分割法实现了该功能;
  2. 添加多维无约束最优化方法 rm::fminunc,使用共轭梯度法和下山单纯形法实现了该功能;
  3. 添加自动求导(求梯度)、数值微分的方法 rm::derivativerm::grad
  4. 并没有按照 添加最优化工具库(头文件)optimal.hpp #84 建议的开设新的 optimal.hpp 文件,而是在 numcal.hpp 文件中添加的以上内容,但源文件做了区分;
  5. 暂时未添加多维有约束最优化方法 rm::fmincon,需求暂时不高,后续版本继续完善
  6. Fix and close 添加最优化工具库(头文件)optimal.hpp #84 .

本地单元测试

分别对以下内容做了准确性测试

  • 中心差商、Richardson 外推法的数值微分
  • 一维寻优
  • 下山单纯形法的无约束多维寻优
  • 共轭梯度法的无约束多维寻优

测试结果如下

[----------] 4 tests from Optimal
[ RUN      ] Optimal.derivative
[       OK ] Optimal.derivative (0 ms)
[ RUN      ] Optimal.fminbnd
[       OK ] Optimal.fminbnd (0 ms)
[ RUN      ] Optimal.fminunc_simplex
[       OK ] Optimal.fminunc_simplex (0 ms)
[ RUN      ] Optimal.fminunc_conjgrad
[       OK ] Optimal.fminunc_conjgrad (0 ms)
[----------] 4 tests from Optimal (0 ms total)

详细内容可参考 <project>/modules/core/test/test_optimal.cpp 文件

本地基准测试结果

---------------------------------------------------------------------------------------------------
Benchmark                                                         Time             CPU   Iterations
---------------------------------------------------------------------------------------------------
fminunc (conj_grad, quadratic) - by rmvl  /iterations:50      11618 ns        11661 ns           50
fminunc (conj_grad, quadratic) - by opencv/iterations:50      36976 ns        36996 ns           50
fminunc (simplex, rosenbrock) - by rmvl  /iterations:50        7740 ns         7758 ns           50
fminunc (simplex, rosenbrock) - by opencv/iterations:50        1655 ns         1655 ns           50

其中

  • 使用共轭梯度法求解二次型函数,比 OpenCV 的 cv::ConjGradSolver 快近 3 倍,容许误差、最大迭代次数均相同;
  • 使用下山单纯形法求解 RosenBrock 函数,比 OpenCV 慢约 3.7 倍,容许误差、最大迭代次数均相同。

@zhaoxi-scut zhaoxi-scut added the feature 新特性、新功能 label May 6, 2024
@zhaoxi-scut zhaoxi-scut merged commit 9e987dc into cv-rmvl:master May 6, 2024
3 checks passed
@zhaoxi-scut zhaoxi-scut deleted the optimal-dev branch May 6, 2024 14:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 新特性、新功能
Projects
None yet
Development

Successfully merging this pull request may close these issues.

添加最优化工具库(头文件)optimal.hpp
1 participant