- メインページ
- モジュール
- ネームスペース
- データ構造
- ファイル

- ファイル一覧
- グローバル

ネームスペース | 関数
minimization.h

関数の最小化を扱うためのライブラリ [詳細]

`#include "config/mist_conf.h"`
`#include "matrix.h"`
`#include "limits.h"`
`#include <cmath>`
`#include <vector>`
`#include <algorithm>`

ソースコードを見る。

## ネームスペース
namespace | mist
namespace | mist::gold
| 黄金分割を用いた極小値の1次元探索（1次収束）
namespace | mist::brent
| Brent の放物線補間を用いた極小値の1次元探索（2次収束）
namespace | mist::Armijo
| Armijoの基準を用いた極小値の一次元探索
namespace | mist::gradient_with_vector
| 勾配関数をユーザーが定義する最急降下法（勾配を用いた多変数関数の極小値の探索）
namespace | mist::gradient
| 最急降下法（勾配を用いた多変数関数の極小値の探索）
namespace | mist::conjugate_gradient
| 共役勾配法（勾配を用いた多変数関数の極小値の探索）
namespace | mist::powell
| Powell法（方向集合を用いた多変数関数の極小値の探索）
namespace | mist::lucidi
| Lucidi法（方向集合を用いた多変数関数の極小値の探索）
namespace | mist::condor
| CONDOR法（多変数関数の極小値の探索）

## 関数
template<class Functor >
bool | mist::enclose (double &a, double &b, double &c, double &fa, double &fb, double &fc, Functor f, size_t max_iterations=100)
| f(x)の一次元探索において，極小値を与える x を囲む区間を決定する
template<class Functor >
double | mist::gold::minimization (double a, double b, double &x, Functor f, double tolerance, size_t &iterations, size_t max_iterations, bool use_enclose=true)
| 黄金分割を利用して，f(x)の極小値の一次元探索を行う（1次収束）
template<class Functor >
double | mist::gold::minimization (double a, double b, double &x, Functor f, double tolerance, size_t max_iterations=1000, bool use_enclose=true)
| 黄金分割を利用して，f(x)の極小値の一次元探索を行う（1次収束）
template<class Functor >
double | mist::brent::minimization (double a, double b, double &x, Functor f, double tolerance, size_t &iterations, size_t max_iterations, bool use_enclose=true)
| Brent の放物線補間を用いて，指定された区間内の f(x) の極小値の一次元探索を行う（2次収束）
template<class Functor >
double | mist::brent::minimization (double a, double b, double &x, Functor f, double tolerance, size_t max_iterations=1000, bool use_enclose=true)
| Brent の放物線補間を用いて，f(x)の極小値の一次元探索を行う（2次収束）
template<class T , class Allocator , class Functor , class T2 >
double | mist::Armijo::minimization (array2< T, Allocator > &p, Functor f, const array2< T, Allocator > &grad, const array2< T, Allocator > &d, T2 &data, const double rho=0.7, const double c=0.1, const size_t max_iterations=10)
| Armijoの基準を用いて，f(x)の極小値の一次元探索を行う
template<class T , class Allocator , class Functor >
double | mist::Armijo::minimization (array2< T, Allocator > &p, Functor f, const array2< T, Allocator > &grad, const array2< T, Allocator > &d, const double rho=0.7, const double c=0.1, const size_t max_iterations=10)
| Armijoの基準を用いて，f(x)の極小値の一次元探索を行う
template<class T , class Allocator , class Functor1 , class Functor2 >
double | mist::gradient_with_vector::minimization (matrix< T, Allocator > &p, Functor1 f, Functor2 g, double tolerance, size_t &iterations, size_t max_iterations=1000)
| 探索の開始点を指定し，ユーザーが指定した勾配計算関数を用いて最小値を探索する
template<class T , class Allocator , class Functor1 , class Functor2 >
double | mist::gradient_with_vector::minimization (matrix< T, Allocator > &p, const matrix< T, Allocator > &bound, Functor1 f, Functor2 g, double tolerance, size_t &iterations, size_t max_iterations=1000)
| 探索の開始点を指定し，ユーザーが指定した勾配計算関数を用いて最小値を探索する
template<class T , class Allocator , class Functor1 , class Functor2 >
double | mist::gradient_with_vector::minimization (matrix< T, Allocator > &p, const matrix< T, Allocator > &bound, Functor1 f, Functor2 g, double tolerance, size_t max_iterations=1000)
| 探索の開始点を指定し，ユーザーが指定した勾配計算関数を用いて最小値を探索する
template<class T , class Allocator , class Functor1 , class Functor2 >
double | mist::gradient_with_vector::minimization (matrix< T, Allocator > &p, Functor1 f, Functor2 g, double tolerance, size_t max_iterations=1000)
| 探索の開始点を指定し，ユーザーが指定した勾配計算関数を用いて最小値を探索する
template<class T , class Allocator , class Functor >
double | mist::gradient::minimization (matrix< T, Allocator > &p, Functor f, double tolerance, double distance, size_t &iterations, size_t max_iterations=1000)
| 探索の開始点を指定し，勾配を計算しながら最小値を探索する
template<class T , class Allocator , class Functor >
double | mist::gradient::minimization (matrix< T, Allocator > &p, const matrix< T, Allocator > &bound, Functor f, double tolerance, double distance, size_t &iterations, size_t max_iterations=1000)
| 探索の開始点を指定し，勾配を計算しながら最小値を探索する
template<class T , class Allocator , class Functor1 , class Functor2 , class T2 >
double | mist::gradient::minimization (array2< T, Allocator > &p, Functor1 f, Functor2 g, const T2 &data, double tolerance, size_t &iterations, const size_t max_iterations=12, const double armijo_rho=0.7, const double armijo_c=0.1, const size_t armijo_max_iteration=10)
| 探索の開始点を指定し，最急降下法(Steepest descent method)によりユーザーが指定した勾配計算関数を用いて最小値を探索する
template<class T , class Allocator , class Functor1 , class Functor2 >
double | mist::gradient::minimization (array2< T, Allocator > &p, Functor1 f, Functor2 g, double tolerance, size_t &iterations, const size_t max_iterations=12, const double armijo_rho=0.7, const double armijo_c=0.1, const size_t armijo_max_iteration=10)
| 探索の開始点を指定し，最急降下法(Steepest descent method)によりユーザーが指定した勾配計算関数を用いて最小値を探索する
template<class T , class Allocator , class Functor >
double | mist::gradient::minimization (matrix< T, Allocator > &p, Functor f, double tolerance, double distance=1.0, size_t max_iterations=1000)
| 探索の開始点を指定し，勾配を計算しながら最小値を探索する
template<class T , class Allocator , class Functor >
double | mist::gradient::minimization (matrix< T, Allocator > &p, const matrix< T, Allocator > &bound, Functor f, double tolerance, double distance=1.0, size_t max_iterations=1000)
| 探索の開始点を指定し，勾配を計算しながら最小値を探索する
template<class T >
double | mist::conjugate_gradient::Polak_Ribiere_Polyak (const array2< T > &g0, const array2< T > &g1)
| 共役勾配法(conjugate gradient method)のβをPolak-Ribiere-Polyakの公式で計算する
template<class T >
double | mist::conjugate_gradient::Fletcher_Reeves (const array2< T > &g0, const array2< T > &g1)
| 共役勾配法(conjugate gradient method)のβをFletcher-Reevesの公式で計算する
template<class T , class Allocator , class Functor1 , class Functor2 >
double | mist::conjugate_gradient::minimization (array2< T, Allocator > &p, Functor1 f, Functor2 g, double tolerance, size_t &iterations, const size_t max_iterations=12, const double armijo_rho=0.7, const double armijo_c=0.1, const size_t armijo_max_iteration=10)
| 探索の開始点を指定し，共役勾配法(conjugate gradient method)によりユーザーが指定した勾配計算関数を用いて最小値を探索する
template<class T , class Allocator , class Functor1 , class Functor2 , class T2 >
double | mist::conjugate_gradient::minimization (array2< T, Allocator > &p, Functor1 f, Functor2 g, const T2 &data, double tolerance, size_t &iterations, const size_t max_iterations=12, const double armijo_rho=0.7, const double armijo_c=0.1, const size_t armijo_max_iteration=10)
| 探索の開始点を指定し，共役勾配法(conjugate gradient method)によりユーザーが指定した勾配計算関数を用いて最小値を探索する
template<class T , class Allocator , class Functor >
double | mist::powell::minimization (matrix< T, Allocator > &p, matrix< T, Allocator > &dirs, Functor f, double tolerance, size_t &iterations, size_t max_iterations=1000)
| Powell 法による多次元変数による極小値の探索を行う
template<class T , class Allocator , class Functor >
double | mist::powell::minimization (matrix< T, Allocator > &p, matrix< T, Allocator > &dirs, matrix< T, Allocator > &bound, Functor f, double tolerance, size_t &iterations, size_t max_iterations=1000)
| Powell 法による多次元変数による極小値の探索を行う
template<class T , class Allocator , class Functor >
double | mist::powell::minimization (matrix< T, Allocator > &p, matrix< T, Allocator > &dirs, Functor f, double tolerance, size_t max_iterations=1000)
| Powell 法による多次元変数による極小値の探索を行う
template<class T , class Allocator , class Functor >
double | mist::powell::minimization (matrix< T, Allocator > &p, matrix< T, Allocator > &dirs, matrix< T, Allocator > &bound, Functor f, double tolerance, size_t max_iterations=1000)
| Powell 法による多次元変数による極小値の探索を行う
template<class T , class Allocator , class Functor >
double | mist::lucidi::minimization (matrix< T, Allocator > &p, matrix< T, Allocator > &dirs, Functor f, double tolerance, size_t &iterations, size_t max_iterations=1000)
| Lucidi 提案の多変数関数の極小値探索
template<class T , class Allocator , class Functor >
double | mist::lucidi::minimization (matrix< T, Allocator > &p, matrix< T, Allocator > &dirs, Functor f, double tolerance, size_t max_iterations=1000)
| Powell 法による多次元変数による極小値の探索を行う
template<class Matrix , class Functor >
size_t | mist::condor::generate_first_point_set (const Matrix &xbase, std::vector< Matrix > &x, Matrix &f, Functor func, double rho)
| CONDOR アルゴリズムの初期パラメータ群を求める関数
template<class Matrix >
bool | mist::condor::compute_polynomial_basis (std::vector< Matrix > &x, Matrix &f, std::vector< __condor_utility__::polynomial > &poly_bases, __condor_utility__::polynomial &poly)
| 指定したパラメータと評価値からラグランジェ多項式を構成する
template<class Matrix >
double | mist::condor::compute_lambda_function1 (const Matrix &H)
| Trust Region を求める際のλの上下限の計算に用いる補助関数
template<class Matrix >
double | mist::condor::compute_lambda_function2 (const Matrix &H, double alpha=1.0)
| Trust Region を求める際のλの上下限の計算に用いる補助関数
template<class Matrix >
double | mist::condor::compute_lambda_lower_bound (const Matrix &H, double dg_delta)
| Trust Region を求める際のλの下限の初期値
template<class Matrix >
double | mist::condor::compute_lambda_upper_bound (const Matrix &H, double dg_delta)
| Trust Region を求める際のλの上限の初期値
template<class Matrix >
void | mist::condor::compute_trust_region_step (const Matrix &xbest, Matrix &s, __condor_utility__::polynomial &poly, double delta, size_t max_loop=1000)
| CONDOR アルゴリズム内で使用する Trust Region 内の最小値を与える方向を求める関数
template<class T , class Allocator , class Functor >
double | mist::condor::minimization (matrix< T, Allocator > &p, Functor func, double rho, double rho_end, double tolerance, size_t &iterations, size_t max_iterations=1000)
| CONDOR アルゴリズムを用いて評価関数の最小値を探索する
template<class T , class Allocator , class Functor >
double | mist::condor::minimization (matrix< T, Allocator > &p, Functor f, double rho, double rho_end, size_t max_iterations)
| CONDOR アルゴリズムを用いて評価関数の最小値を探索する
template<class T , class Allocator , class Functor >
double | mist::condor::minimization (matrix< T, Allocator > &p, Functor f, double tolerance, size_t max_iterations)
| CONDOR アルゴリズムを用いて評価関数の最小値を探索する

## 説明

関数の最小化を扱うためのライブラリ

- 関数の最小化
  - W. H. Press, S. A. Teukolsky, W. T. Vetterling, and B. P. Flannery, `Numerical Recipes in C, The Art of Scientific Computing Second Edition,'' Cambridge University Press, pp. 321--336, 1999.`
  - `Richard P. Brent,`Algorithms for Minimization Without Derivatives", DOVER PUBLICATIONS, Mineola, New York.
  - F. V. Berghen, H. Bersini, ``CONDOR, a new parallel, constrained extension of Powell's UOBYQA algorithm: Experimental results and comparison with the DFO algorithm,'' Journal of Computational and Applied Mathematics, Elsevier, Volume 181, Issue 1, September 2005, pp. 157–175