OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
cv::DownhillSolver 類參考抽象類

此類用於執行函式的非線性非約束最小化。 更多...

#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
 最佳化函式的 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< 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 中實現)相反。

當完成的函式評估次數超過 termcrit.maxCount 時,當單純形頂點處的函式值在 termcrit.epsilon 範圍內時,或者當單純形變得太小以至於可以包含在具有 termcrit.epsilon 邊的框中時,Algorithm 停止,無論哪個先發生,對於某些使用者定義的正整數 termcrit.maxCount 和正非整數 termcrit.epsilon。

注意
DownhillSolver 是抽象介面 cv::MinProblemSolver 的派生類,而 cv::MinProblemSolver 反過來又派生自 Algorithm 介面,用於封裝 optim 模組中所有非線性最佳化演算法的通用功能。
終止標準應滿足以下條件
termcrit.type == (TermCriteria::MAX_ITER + TermCriteria::EPS) && termcrit.epsilon > 0 && termcrit.maxCount > 0
@ MAX_ITER
同上
定義 types.hpp:901
@ EPS
迭代演算法停止時的所需精度或引數變化
定義 types.hpp:902

成員函式文件

◆ 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 物件的引用。

所有引數都是可選的,因此即使根本沒有引數也可以呼叫此過程。在這種情況下,將使用預設值。由於終止標準的預設值是唯一合理的,如果未將各個引數提供給 create(),則應在獲得的物件上呼叫 MinProblemSolver::setFunction()DownhillSolver::setInitStep()。否則,兩種方式(將引數提供給 createDownhillSolver() 或遺漏它們並呼叫 MinProblemSolver::setFunction()DownhillSolver::setInitStep())絕對等效(並且如果檢測到無效輸入,將以相同的方式丟棄相同的錯誤)。

引數
◆ hashtableResize()指向將被最小化的函式的指標,類似於您透過 MinProblemSolver::setFunction 提交的指標。
initStep將用於構造初始單純形的初始步長,類似於您透過 MinProblemSolver::setInitStep 提交的步長。
終止條件演算法的終止標準,類似於您透過 MinProblemSolver::setTermCriteria 提交的標準。

◆ getInitStep()

virtual void cv::DownhillSolver::getInitStep ( OutputArray step) const
純虛擬函式

返回下山單純形演算法中將使用的初始步長。

引數
step演算法中將使用的初始步長。請注意,雖然相應的 setter 接受列向量以及行向量,但此方法將返回一個行向量。
另請參見
DownhillSolver::setInitStep

◆ setInitStep()

virtual void cv::DownhillSolver::setInitStep ( InputArray step)
純虛擬函式

設定下山單純形演算法中將使用的初始步長。

步長與初始點(在 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演算法中將使用的初始步長。粗略地說,它確定初始單純形的擴充套件(每個維度的大小)。

此類文件是從以下檔案生成的