非線形最適化ライブラリNloptの概要
9106 ワード
非線形最適化ライブラリNlopt
Nloptは軽量レベルのオープンソース非線形最適化ライブラリであり,多様な最適化アルゴリズムに統一されたインタフェースを提供する.ホームページ:https://nlopt.readthedocs.io/en/latest/ git:https://github.com/stevengj/nlopt
目次非線形最適化ライブラリNlopt 目次 ダウンロードインストール API nlopt_create nlopt_set_min_objective nlopt_set_lower_bounds nlopt_add_inequality_constraint nlopt_set_stopval nlopt_minimize_econstrained return value
ダウンロード
ダウンロード:nlopt-2.4.2.tar.gzインストール:
API
nlopt_create
アルゴリズムの詳細:https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/
nlopt_set_min_objective
nlopt_set_lower_bounds
nlopt_add_inequality_constraint
nlopt_set_stopval
nlopt_minimize_econstrained
return value
Nloptは軽量レベルのオープンソース非線形最適化ライブラリであり,多様な最適化アルゴリズムに統一されたインタフェースを提供する.ホームページ:https://nlopt.readthedocs.io/en/latest/ git:https://github.com/stevengj/nlopt
目次
ダウンロード
ダウンロード:nlopt-2.4.2.tar.gzインストール:
./configure && make && sudo make install
API
nlopt_create
nlopt_create
は、与えられた最適化アルゴリズムnlopt_algorithm
に従ってnlopt_opt
オブジェクトを返し、n
は最適化変数次元数であるnlopt_opt nlopt_create(nlopt_algorithm algorithm, unsigned n);
nlopt_algorithm
含むtypedef enum {
/* Naming conventions:
NLOPT_{G/L}{D/N}_*
= global/local derivative/no-derivative optimization,
respectively
*_RAND algorithms involve some randomization.
*_NOSCAL algorithms are *not* scaled to a unit hypercube
(i.e. they are sensitive to the units of x)
*/
NLOPT_GN_DIRECT = 0,
NLOPT_GN_DIRECT_L,
NLOPT_GN_DIRECT_L_RAND,
NLOPT_GN_DIRECT_NOSCAL,
NLOPT_GN_DIRECT_L_NOSCAL,
NLOPT_GN_DIRECT_L_RAND_NOSCAL,
NLOPT_GN_ORIG_DIRECT,
NLOPT_GN_ORIG_DIRECT_L,
NLOPT_GD_STOGO,
NLOPT_GD_STOGO_RAND,
NLOPT_LD_LBFGS_NOCEDAL,
NLOPT_LD_LBFGS,
NLOPT_LN_PRAXIS,
NLOPT_LD_VAR1,
NLOPT_LD_VAR2,
NLOPT_LD_TNEWTON,
NLOPT_LD_TNEWTON_RESTART,
NLOPT_LD_TNEWTON_PRECOND,
NLOPT_LD_TNEWTON_PRECOND_RESTART,
NLOPT_GN_CRS2_LM,
NLOPT_GN_MLSL,
NLOPT_GD_MLSL,
NLOPT_GN_MLSL_LDS,
NLOPT_GD_MLSL_LDS,
NLOPT_LD_MMA,
NLOPT_LN_COBYLA,
NLOPT_LN_NEWUOA,
NLOPT_LN_NEWUOA_BOUND,
NLOPT_LN_NELDERMEAD,
NLOPT_LN_SBPLX,
NLOPT_LN_AUGLAG,
NLOPT_LD_AUGLAG,
NLOPT_LN_AUGLAG_EQ,
NLOPT_LD_AUGLAG_EQ,
NLOPT_LN_BOBYQA,
NLOPT_GN_ISRES,
/* new variants that require local_optimizer to be set,
not with older constants for backwards compatibility */
NLOPT_AUGLAG,
NLOPT_AUGLAG_EQ,
NLOPT_G_MLSL,
NLOPT_G_MLSL_LDS,
NLOPT_LD_SLSQP,
NLOPT_LD_CCSAQ,
NLOPT_GN_ESCH,
NLOPT_NUM_ALGORITHMS /* not an algorithm, just the number of them */
} nlopt_algorithm;
アルゴリズムの詳細:https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/
nlopt_set_min_objective
nlopt_set_min_objective
とnlopt_set_max_objective
はnlopt_opt
設定目標関数nlopt_func
nlopt_result nlopt_set_min_objective(nlopt_opt opt, nlopt_func f, void* f_data);
nlopt_result nlopt_set_max_objective(nlopt_opt opt, nlopt_func f, void* f_data);
nlopt_func
の定義は、n
が次元数、x
が入力、grad
が勾配戻り値、f_data
が関数に必要な入力のカスタムパラメータです. double f(unsigned n, const double* x, double* grad, void* f_data);
nlopt_set_lower_bounds
nlopt_set_lower_bounds
とnlopt_set_upper_bounds
最適化変数上下境界を設定nlopt_result nlopt_set_lower_bounds(nlopt_opt opt, const double* lb);
nlopt_result nlopt_set_upper_bounds(nlopt_opt opt, const double* ub);
nlopt_add_inequality_constraint
nlopt_add_inequality_constraint
とnlopt_add_equality_constraint
はnlopt_opt
に不等式と等式の制約を追加nlopt_result nlopt_add_inequality_constraint(nlopt_opt opt, nlopt_func fc, void* fc_data, double tol);
nlopt_result nlopt_add_equality_constraint(nlopt_opt opt, nlopt_func h, void* h_data, double tol);
nlopt_set_stopval
nlopt_set_stopval
nlopt_set_ftol_rel
nlopt_set_ftol_abs
nlopt_set_xtol_rel
nlopt_set_xtol_abs
はnlopt_opt
に停止条件を設定nlopt_result nlopt_set_stopval(nlopt_opt opt, double stopval);
nlopt_result nlopt_set_ftol_rel(nlopt_opt opt, double tol);
nlopt_result nlopt_set_ftol_abs(nlopt_opt opt, double tol);
nlopt_result nlopt_set_xtol_rel(nlopt_opt opt, double tol);
nlopt_result nlopt_set_xtol_abs(nlopt_opt opt, const double* tol);
nlopt_minimize_econstrained
nlopt_minimize_econstrained
を直接呼び出して最適化計算を完了できます.nlopt_result
NLOPT_STDCALL nlopt_minimize_econstrained(
nlopt_algorithm algorithm,
int n, nlopt_func_old f, void *f_data,
int m, nlopt_func_old fc, void *fc_data_, ptrdiff_t fc_datum_size,
int p, nlopt_func_old h, void *h_data_, ptrdiff_t h_datum_size,
const double *lb, const double *ub, /* bounds */
double *x, /* in: initial guess, out: minimizer */
double *minf, /* out: minimum */
double minf_max, double ftol_rel, double ftol_abs,
double xtol_rel, const double *xtol_abs,
double htol_rel, double htol_abs,
int maxeval, double maxtime)
return value
/*Successful termination (positive return values)*/
NLOPT_SUCCESS` `=` `1
/*Generic success return value.*/
NLOPT_STOPVAL_REACHED` `=` `2
/*Optimization stopped because stopval (above) was reached.*/
NLOPT_FTOL_REACHED` `=` `3
/*Optimization stopped because ftol_rel or ftol_abs (above) was reached.*/
NLOPT_XTOL_REACHED` `=` `4
/*Optimization stopped because xtol_rel or xtol_abs (above) was reached.*/
NLOPT_MAXEVAL_REACHED` `=` `5
/*Optimization stopped because maxeval (above) was reached.*/
NLOPT_MAXTIME_REACHED` `=` `6
/*Optimization stopped because maxtime (above) was reached.*/
/*Error codes (negative return values)*/
NLOPT_FAILURE` `=` `-1
/*Generic failure code.*/
NLOPT_INVALID_ARGS` `=` `-2
/*Invalid arguments (e.g. lower bounds are bigger than upper bounds, an unknown algorithm was specified, etcetera).*/
NLOPT_OUT_OF_MEMORY` `=` `-3
/*Ran out of memory.*/
NLOPT_ROUNDOFF_LIMITED` `=` `-4
/*Halted because roundoff errors limited progress. (In this case, the optimization still typically returns a useful result.)*/
NLOPT_FORCED_STOP` `=` `-5
/*Halted because of a forced termination: the user called nlopt_force_stop(opt) on the optimization’s nlopt_opt object opt from the user’s objective function or constraints.*/