123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #ifndef _TRUSTREGIONBASE_OPTIMIZATION_H
- #define _TRUSTREGIONBASE_OPTIMIZATION_H
- #include <iostream>
- #include <core/basics/NonCopyable.h>
- #include <core/optimization/gradientBased/OptimizationProblemFirst.h>
- namespace NICE {
- class TrustRegionBase {
- public:
- TrustRegionBase(double typicalGradientNorm = 0.1)
- : eta1(0.05), eta2(0.9), alpha1(2.5), alpha2(0.25),
- deltaMin(1E-5), epsilonM(std::numeric_limits<double>::epsilon()),
-
- epsilonR(1E-5),
- epsilonG(epsilonR * typicalGradientNorm),
- epsilonDelta(2.0 * epsilonM), epsilonRho(2.0 * epsilonM),
- maxIterations(10000000) {
- }
- virtual ~TrustRegionBase();
-
- inline void setEpsilonR(double _epsilonR, double _typicalGradient) {
-
- if (_typicalGradient < 1e-300) {
- _typicalGradient = 1e-300;
- }
- epsilonR = _epsilonR;
- setEpsilonG(_epsilonR * _typicalGradient);
- }
-
- inline void setEpsilonG(double _epsilonG) {
- epsilonG = _epsilonG;
- }
-
- inline void setMaxIterations(unsigned int _maxIterations) {
- maxIterations = _maxIterations;
- }
-
- inline void setDeltaMin(double _deltaMin) {
- deltaMin = _deltaMin;
- }
-
- inline void setEta1(double _eta1 = 0.05) {
- eta1 = _eta1;
- }
-
- inline void setEta2(double _eta2 = 0.9) {
- eta2 = _eta2;
- }
-
- inline void setAlpha1(double _alpha1 = 2.5) {
- alpha1 = _alpha1;
- }
-
- inline void setAlpha2(double _alpha2 = 2.5) {
- alpha2 = _alpha2;
- }
- protected:
-
- double eta1;
-
- double eta2;
-
- double alpha1;
-
- double alpha2;
-
- double deltaMin;
-
- double epsilonM;
-
- double epsilonR;
-
- double epsilonG;
-
- double epsilonDelta;
-
- double epsilonRho;
-
- int maxIterations;
-
- bool changeIsMinimal(const Vector& step,
- const Vector& position);
- };
- };
- #endif
|