![]() |
OpenCV 4.12.0
开源计算机视觉
|
此类用于执行函数的非线性非约束最小化。 更多...
#include <opencv2/core/optim.hpp>
公共成员函数 | |
| virtual void | getInitStep (OutputArray step) const =0 |
| 返回下山单纯形算法中将使用的初始步长。 | |
| virtual void | setInitStep (InputArray step)=0 |
| 设置下山单纯形算法中将使用的初始步长。 | |
继承自 cv::MinProblemSolver 的公共成员函数 | |
| virtual Ptr< Function > | getFunction () const =0 |
| 优化函数的 Getter。 | |
| virtual TermCriteria | getTermCriteria () const =0 |
| 此算法先前设置的终止标准的 Getter。 | |
| virtual double | minimize (InputOutputArray x)=0 |
| 实际运行算法并执行最小化。 | |
| virtual void | setFunction (const Ptr< Function > &f)=0 |
| 优化函数的 Setter。 | |
| virtual void | setTermCriteria (const TermCriteria &termcrit)=0 |
| 设置求解器的终止标准。 | |
继承自 cv::Algorithm 的公共成员函数 | |
| Algorithm () | |
| virtual | ~Algorithm () |
| virtual void | clear () |
| 清除算法状态。 | |
| virtual bool | empty () const |
| 如果 Algorithm 为空(例如,在最开始或在读取不成功后),则返回 true。 | |
| virtual String | getDefaultName () const |
| virtual void | read (const FileNode &fn) |
| 从文件存储中读取算法参数。 | |
| virtual void | save (const String &filename) const |
| void | write (const Ptr< FileStorage > &fs, const String &name=String()) const |
| virtual void | write (FileStorage &fs) const |
| 将算法参数存储到文件存储中。 | |
| void | write (FileStorage &fs, const String &name) const |
静态公共成员函数 | |
| static Ptr< DownhillSolver > | create (const Ptr< MinProblemSolver::Function > &f=Ptr< MinProblemSolver::Function >(), InputArray initStep=Mat_< double >(1, 1, 0.0), TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 5000, 0.000001)) |
| 此函数返回指向可立即使用的 DownhillSolver 对象的引用。 | |
继承自 cv::Algorithm 的静态公共成员函数 | |
| template<typename _Tp > | |
| static Ptr< _Tp > | load (const String &filename, const String &objname=String()) |
| 从文件中加载算法。 | |
| template<typename _Tp > | |
| static Ptr< _Tp > | loadFromString (const String &strModel, const String &objname=String()) |
| 从字符串加载算法。 | |
| template<typename _Tp > | |
| static Ptr< _Tp > | read (const FileNode &fn) |
| 从文件节点读取算法。 | |
额外的继承成员 | |
继承自 cv::Algorithm 的保护成员函数 | |
| void | writeFormat (FileStorage &fs) const |
此类用于执行函数的非线性非约束最小化。
定义在 n 维欧几里得空间上,使用 Nelder-Mead 方法,也称为下山单纯形法**。有关该方法的基本思想可以从 http://en.wikipedia.org/wiki/Nelder-Mead_method 获取。
应该注意的是,此方法虽然是确定性的,但更像是一种启发式方法,因此可能会收敛到局部最小值,而不一定是全局最小值。它是一种迭代优化技术,每一步都仅使用在 n+1 个点处评估的函数值信息,这些点排列为 n 维空间中的单纯形(因此该方法的第二个名称)。在每一步中,都会选择一个新的点来评估函数,将获得的值与先前的值进行比较,并根据此信息,单纯形改变其形状,缓慢地移动到局部最小值。因此,此方法仅使用函数值来做出决策,与例如非线性共轭梯度法(也在 optim 中实现)相反。
当完成的函数评估次数超过 termcrit.maxCount 时,当单纯形顶点处的函数值在 termcrit.epsilon 范围内时,或者当单纯形变得太小以至于可以包含在具有 termcrit.epsilon 边的框中时,Algorithm 停止,无论哪个先发生,对于某些用户定义的正整数 termcrit.maxCount 和正非整数 termcrit.epsilon。
|
static |
此函数返回指向可立即使用的 DownhillSolver 对象的引用。
所有参数都是可选的,因此即使根本没有参数也可以调用此过程。在这种情况下,将使用默认值。由于终止标准的默认值是唯一合理的,如果未将各个参数提供给 create(),则应在获得的对象上调用 MinProblemSolver::setFunction() 和 DownhillSolver::setInitStep()。否则,两种方式(将参数提供给 createDownhillSolver() 或遗漏它们并调用 MinProblemSolver::setFunction() 和 DownhillSolver::setInitStep())绝对等效(并且如果检测到无效输入,将以相同的方式丢弃相同的错误)。
| ◆ hashtableResize() | 指向将被最小化的函数的指针,类似于您通过 MinProblemSolver::setFunction 提交的指针。 |
| initStep | 将用于构造初始单纯形的初始步长,类似于您通过 MinProblemSolver::setInitStep 提交的步长。 |
| 终止条件 | 算法的终止标准,类似于您通过 MinProblemSolver::setTermCriteria 提交的标准。 |
|
纯虚函数 |
返回下山单纯形算法中将使用的初始步长。
| step | 算法中将使用的初始步长。请注意,虽然相应的 setter 接受列向量以及行向量,但此方法将返回一个行向量。 |
|
纯虚函数 |
设置下山单纯形算法中将使用的初始步长。
步长与初始点(在 DownhillSolver::minimize 中给出)是两个 n 维向量,用于确定初始单纯形的形状。粗略地说,初始点确定单纯形的位置(它将成为单纯形的质心),而步长确定单纯形的扩展(每个维度的大小)。更准确地说,如果 \(s,x_0\in\mathbb{R}^n\) 分别是初始步长和初始点,则单纯形的顶点将是:\(v_0:=x_0-\frac{1}{2} s\) 和 \(v_i:=x_0+s_i\) 对于 \(i=1,2,\dots,n\),其中 \(s_i\) 表示初始步长的 n 次坐标的投影(投影结果被视为由 \(s_i:=e_i\cdot\left<e_i\cdot s\right>\) 给出的向量,其中 \(e_i\) 形成规范基)
| step | 算法中将使用的初始步长。粗略地说,它确定初始单纯形的扩展(每个维度的大小)。 |