1 |
#ifndef _MINIMIZER1D_H_
|
2 |
#define _MINIMIZER1D_H_
|
3 |
|
4 |
#include "MinimizerBase.hpp"
|
5 |
|
6 |
//abstract class of one dimension minimizer for line searching
|
7 |
// optimize f(x+val*direction)
|
8 |
//some potential problem, such as which class is responsible for deleting NLModel,
|
9 |
//can be resolved by using smart pointer
|
10 |
class Minimizer1D : public MinimizerBase{
|
11 |
|
12 |
public:
|
13 |
Minimizer1D(NLModel* nlp) {model = nlp;}
|
14 |
virtual ~Minimizer1D() {}
|
15 |
|
16 |
virtual void init() {}
|
17 |
virtual bool isSolvable();
|
18 |
|
19 |
virtual void Minimize() = 0;
|
20 |
virtual void Minimize(vector<double>& direction, double left, double right){
|
21 |
setRange(left, right);
|
22 |
setDirection(direction);
|
23 |
minimize();
|
24 |
}
|
25 |
|
26 |
void setRange(double left, double right) {leftFVal = left, rightVal = right;}
|
27 |
void setDirection(vector<double>& direction) {this->direction = direction;}
|
28 |
double getMinVar() {return minVar;}
|
29 |
double getPrevMinVar() {return prevMinVar;}
|
30 |
|
31 |
void setMaxIteration(int iter) {maxIteration = iter;}
|
32 |
|
33 |
int getMaxIteration() {return maxIteration;}
|
34 |
int getCurrentIteration() {return currentIter;}
|
35 |
|
36 |
void setStepTol(double tol) {stepTol =tol;}
|
37 |
double getStepTol() {return stepTol;}
|
38 |
protected:
|
39 |
|
40 |
NLModel* model;
|
41 |
double leftVar;
|
42 |
double rightVar;
|
43 |
double minVar;
|
44 |
double prevMinVar;
|
45 |
|
46 |
vector<double> direction;
|
47 |
|
48 |
int maxIteration;
|
49 |
int currentIter;
|
50 |
int stepTol;
|
51 |
};
|
52 |
|
53 |
class GoldenSectionMinimizer : public Minimizer1D{
|
54 |
|
55 |
public:
|
56 |
|
57 |
GoldenSectionMinimizer(NLModel* nlp);
|
58 |
void Minimize();
|
59 |
|
60 |
virtual int checkConvergence();
|
61 |
|
62 |
protected:
|
63 |
|
64 |
double fMinVar;
|
65 |
double fPrevMinVar;
|
66 |
|
67 |
double fAlpha;
|
68 |
double fBeta;
|
69 |
double alpha;
|
70 |
double beta;
|
71 |
|
72 |
};
|
73 |
|
74 |
class BrentMinimizer : public Minimizer1D{
|
75 |
public:
|
76 |
|
77 |
BrentMinimizer(NLModel* nlp);
|
78 |
|
79 |
void minimize();
|
80 |
|
81 |
virtual int checkConvergence();
|
82 |
protected:
|
83 |
|
84 |
double fMinVar;
|
85 |
double fPrevMinVar;
|
86 |
double midVar;
|
87 |
|
88 |
};
|
89 |
#endif
|