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