制約付き最適化関数の比較
NMinimize,NMaximize,Minimize,Maximizeは,大域的最適化アルゴリズムを使用するので,大域的最適値が必要なときに適している.
MinimizeとMaximizeは,任意の多項式問題を含む最適化問題のクラスでの厳密な大域的最適値を見付けることができる.しかし,使用されるアルゴリズムには膨大な漸近的計算量があるため,変数の数が少ない問題にしか適さない.
FindMinimumは局所的最小点を見付けようとするので,局所的最適値が必要な場合や,問題には1つの最適値しかない,または異なる初期値を使って見付けられる最適値が数個しかないということが予め分かっている場合に適している.
局所的最適化のときでも,小さい問題にはNMinimizeを使った方がよい.NMinimizeは4つの直接探索法(Nelder–Mead法,微分進化法,焼きなまし法,ランダムサーチ法)の中の1つを使い,KKT条件の解,内点法,ペナルティ法を組み合せて使うことで解を微調整する.したがって,効率が問題にならない場合は,NMinimizeの方が大域的最適化処理になるだけでなくFindMinimumよりもロバストである.
次は,4つの変数を持つ問題におけるNMinimizeのデフォルトの動作である.
下は,KKTとFindMinimumの2つのポストプロセッサがデフォルトの結果を出さないことを示している.FindMinimumという名前は,PostProcessのオプション値として使われると,制約条件付き最適化問題を制約条件のない最適化問題に変換し,(制約条件のない)FindMinimumを使って解くのにペナルティ法が使われる過程を表している.
しかし,効率が重要ならば,極小値だけが必要なとき,よい初期値を与えることができるとき,問題の最小値は1つしかない(凸状等)ことが分かっているとき,問題が大きい/高価なときにFindMinimumを使うとよい.以下ではFindMinimumとNMinimizeを使って7つの変数を持つ同じ問題を解く.制約条件は比較的高価である.この場合は,明らかにFindMinimumの方がNMinimizeよりも格段に速い.