OpenCV 4.10.0
开源计算机视觉库
加载中...
搜索中...
无匹配项
公有成员函数 | 静态公有成员函数 | 所有成员列表
cv::DownhillSolver 类参考abstract

此类用于执行函数的非线性无约束最小化,. 更多...

#include <opencv2/core/optim.hpp>

cv::DownhillSolver 的协作图

公有成员函数

virtual void getInitStep (OutputArray step) const =0
 返回在下坡单纯形算法中使用的初始步长。
 
virtual void setInitStep (InputArray step)=0
 设置在下坡单纯形算法中使用的初始步长。
 
- 从 cv::MinProblemSolver 继承的公有成员函数
virtual Ptr< FunctiongetFunction () const =0
 优化函数的获取器。
 
virtual TermCriteria getTermCriteria () const =0
 获取先前为该算法设置的终止条件。
 
virtual double minimize (InputOutputArray x)=0
 实际运行算法并执行最小化。
 
virtual void setFunction (const Ptr< Function > &f)=0
 优化函数的设置器。
 
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< DownhillSolvercreate (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< _Tpload (const String &filename, const String &objname=String())
 从文件中加载算法。
 
template<typename _Tp >
static Ptr< _TploadFromString (const String &strModel, const String &objname=String())
 从字符串中加载算法。
 
template<typename _Tp >
static Ptr< _Tpread (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 中实现)形成对比。

Algorithm 在执行的函数评估次数超过 termcrit.maxCount 时停止,当单纯形顶点的函数值在 termcrit.epsilon 范围内或单纯形变得如此小,以至于可以包含在具有 termcrit.epsilon 边长的盒子中时停止,以先发生者为准,其中 termcrit.maxCount 是用户定义的正整数,termcrit.epsilon 是正的非整数。

注意
DownhillSolver 是抽象接口 cv::MinProblemSolver 的派生类,后者又派生自 Algorithm 接口,用于封装 optim 模块中所有非线性优化算法共有的功能。
终止条件应满足以下条件
termcrit.type == (TermCriteria::MAX_ITER + TermCriteria::EPS) && termcrit.epsilon > 0 && termcrit.maxCount > 0
@ MAX_ITER
同上
定义 types.hpp:894
@ EPS
迭代算法停止所需的精度或参数变化
定义 types.hpp:895

成员函数文档

◆ create()

static Ptr< DownhillSolver > cv::DownhillSolver::create ( const Ptr< MinProblemSolver::Function > &  f = PtrMinProblemSolver::Function >(),
InputArray  initStep = Mat_< double >(1, 1, 0.0),
TermCriteria  termcrit = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 5000, 0.000001) 
)
static

此函数返回对可直接使用的 DownhillSolver 对象的引用。

所有参数都是可选的,因此即使没有参数,也可以调用此过程。在这种情况下,将使用默认值。由于终端标准的默认值是唯一明智的,因此如果相应的参数没有传递给 MinProblemSolver::setFunction()DownhillSolver::setInitStep(),则应在获得的对象上调用它们。否则,这两种方法(向 createDownhillSolver() 传递参数或省略它们并调用 MinProblemSolver::setFunction()DownhillSolver::setInitStep())绝对等效(并且如果检测到无效输入,将以相同的方式抛出相同的错误)。

参数
f指向将被最小化的函数的指针,类似于您通过 MinProblemSolver::setFunction 提交的函数。
initStep初始步长,用于构建初始单纯形,类似于您通过 MinProblemSolver::setInitStep 提交的步长。
termcrit算法的终止标准,类似于您通过 MinProblemSolver::setTermCriteria 提交的标准。

◆ getInitStep()

virtual void cv::DownhillSolver::getInitStep ( OutputArray  step) const
pure virtual

返回在下坡单纯形算法中使用的初始步长。

参数
step算法中使用的初始步长。请注意,尽管相应的设置器接受列向量和行向量,但此方法将返回一个行向量。
另请参见
DownhillSolver::setInitStep

◆ setInitStep()

virtual void cv::DownhillSolver::setInitStep ( InputArray  step)
pure virtual

设置在下坡单纯形算法中使用的初始步长。

步长,连同初始点(在 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算法中使用的初始步长。简而言之,它决定初始单纯形的扩展(每个维度的尺寸)。

此类的文档是从以下文件生成的