![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
このクラスは、関数の非線形・無制約の最小化を実行するために使用される。 さらに...
#include <opencv2/core/optim.hpp>
公開メンバ関数 | |
| virtual void | getInitStep (OutputArray step) const =0 |
| downhill simplexアルゴリズムで使用される初期ステップを返す。 | |
| virtual void | setInitStep (InputArray step)=0 |
| downhill simplexアルゴリズムで使用される初期ステップを設定する。 | |
Public Member Functions inherited from cv::MinProblemSolver | |
| virtual Ptr< Function > | getFunction () 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 |
| ソルバの終了条件を設定する。 | |
Public Member Functions inherited from 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 |
| 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 オブジェクトへの参照を返す。 | |
Static Public Member Functions inherited from 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) |
| ファイルノードからアルゴリズムを読み込む。 | |
Additional Inherited Members | |
Protected Member Functions inherited from cv::Algorithm | |
| void | writeFormat (FileStorage &fs) const |
このクラスは、関数の非線形・無制約の最小化を実行するために使用される。
n 次元ユークリッド空間上で定義され、Nelder-Mead法(downhill simplex法とも呼ばれる)を用いる**。この手法の基本的な考え方については http://en.wikipedia.org/wiki/Nelder-Mead_method から得られる。
この手法は決定論的ではあるものの、むしろヒューリスティックであり、そのため必ずしも大域的最小値ではなく局所的最小値に収束する可能性があることに注意すべきである。これは反復的な最適化手法であり、各ステップで n+1 個の点でのみ評価された関数の値に関する情報を使用する。これらの点は n 次元空間における シンプレックス として配置される(これがこの手法のもう一つの名前の由来である)。各ステップで関数を評価する新しい点が選ばれ、得られた値が以前のものと比較され、この情報に基づいてシンプレックスはその形状を変化させながら、ゆっくりと局所的最小値へと移動する。したがって、この手法は決定を下すために関数値 のみ を使用しており、これは例えば(同じく optim に実装されている)非線形共役勾配法とは対照的である。
Algorithm は、実行された関数評価の回数が termcrit.maxCount を超えたとき、シンプレックスの頂点における関数値が termcrit.epsilon の範囲内に収まったとき、あるいはシンプレックスが termcrit.epsilon の辺を持つ箱に収まるほど小さくなったときのいずれか最初に達した時点で停止する。ここで termcrit.maxCount はユーザーが定義する正の整数、termcrit.epsilon は正の非整数である。
|
static |
この関数は、すぐに使用できる DownhillSolver オブジェクトへの参照を返す。
すべての引数は省略可能であるため、この手続きは引数を一切指定せずに呼び出すこともできる。その場合はデフォルト値が使用される。終了条件についてはデフォルト値が唯一の妥当なものであるため、各引数が create() に与えられなかった場合は、得られたオブジェクトに対して MinProblemSolver::setFunction() および DownhillSolver::setInitStep() を呼び出すべきである。それ以外では、2つの方法(createDownhillSolver() に引数を与えるか、それらを省略して MinProblemSolver::setFunction() および DownhillSolver::setInitStep() を呼び出すか)は完全に等価である(そして無効な入力が検出された場合には、同じ方法で同じエラーを出す)。
| f | 最小化される関数へのポインタ。MinProblemSolver::setFunction を通じて渡すものと同様。 |
| initStep | 初期ステップ。MinProblemSolver::setInitStep を介して指定するものと同様に、初期シンプレックスを構築するために使用される。 |
| termcrit | アルゴリズムの終了条件。MinProblemSolver::setTermCriteria を通じて渡すものと同様。 |
|
pure virtual |
downhill simplexアルゴリズムで使用される初期ステップを返す。
| step | アルゴリズムで使用される初期ステップ。対応するセッターは列ベクトルも行ベクトルも受け付けるが、このメソッドは行ベクトルを返すことに注意。 |
|
pure virtual |
downhill simplexアルゴリズムで使用される初期ステップを設定する。
ステップは、(DownhillSolver::minimize で与えられる)初期点とともに、初期シンプレックスの形状を決定するために使用される2つの n 次元ベクトルである。大まかに言えば、初期点はシンプレックスの位置(シンプレックスの重心となる)を決定し、ステップはシンプレックスの広がり(各次元のサイズ)を決定する。より正確には、\(s,x_0\in\mathbb{R}^n\) をそれぞれ初期ステップと初期点とすると、シンプレックスの頂点は次のようになる: \(v_0:=x_0-\frac{1}{2} s\) および \(i=1,2,\dots,n\) について \(v_i:=x_0+s_i\)。ここで \(s_i\) は初期ステップの n 番目の座標への射影を表す(射影の結果は \(s_i:=e_i\cdot\left<e_i\cdot s\right>\) で与えられるベクトルとして扱われ、\(e_i\) は正準基底をなす)
| step | アルゴリズムで使用される初期ステップ。大まかに言えば、初期シンプレックスの広がり(各次元のサイズ)を決定する。 |