関数の最小化を扱うためのライブラリ [詳細]
#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 アルゴリズムを用いて評価関数の最小値を探索する |
関数の最小化を扱うためのライブラリ
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.