2 |
|
#define _MINIMIZER_H_ |
3 |
|
#include "MinimizerBase.hpp" |
4 |
|
#include "Minimizer1D.hpp" |
5 |
< |
|
5 |
> |
typedef enum {GoldenSection, Brent} LineSearchStrategy; |
6 |
|
class Minimizer : public MinimizerBase{ |
7 |
|
|
8 |
|
public: |
9 |
+ |
Minimizer(MinimizerParameterSet* param) : paramSet(param), outputFunc(NULL) {} |
10 |
|
|
11 |
|
virtual void printMinizerInfo() = 0; |
12 |
+ |
void init() {} |
13 |
|
|
14 |
< |
virtual MinimizerParameterSet* creatParameterSet() = 0; |
14 |
> |
|
15 |
> |
void setOutputFunctor(OutputFunctor* functor) {outputFunc = functor;} |
16 |
> |
virtual void writeOut(vector<double>& x, int iter){ |
17 |
> |
if (outputFunc !=NULL) |
18 |
> |
(*outputFunc)(x, iter); |
19 |
> |
} |
20 |
> |
|
21 |
|
void setMinX(vector<double>& x) { minX = x;} |
22 |
|
vector<double> getMinX() { return minX;} |
23 |
|
|
29 |
|
protected: |
30 |
|
|
31 |
|
MinimizerParameterSet* paramSet; |
32 |
+ |
OutputFunctor* outputFunc; |
33 |
|
int currentIter; |
34 |
|
|
35 |
|
// Coordinates yielding the minimum value of the function. |
41 |
|
|
42 |
|
class MinimizerUsingLineSearch : public Minimizer{ |
43 |
|
public: |
44 |
< |
void setLineSearchStrategy(); |
44 |
> |
MinimizerUsingLineSearch(MinimizerParameterSet* param) : Minimizer(param), lineSearchInit(false){} |
45 |
> |
void setLineSearchStrategy(NLModel* nlp, LineSearchStrategy stategy){ |
46 |
> |
|
47 |
> |
if(stategy == GoldenSection) |
48 |
> |
lsMinimizer = new GoldenSectionMinimizer(nlp); |
49 |
> |
|
50 |
> |
else if(stategy == Brent) |
51 |
> |
lsMinimizer = new BrentMinimizer(nlp); |
52 |
> |
|
53 |
> |
else{ |
54 |
> |
cerr << "MinimizerUsingLineSearch Error : Unknown Line Search Strategy" << endl; |
55 |
> |
exit(-1); |
56 |
> |
} |
57 |
> |
|
58 |
> |
lsMinimizer->setMaxIteration(paramSet->getLineSearchMaxIteration()); |
59 |
> |
lsMinimizer->setStepTol(paramSet->getLineSearchTol()); |
60 |
> |
|
61 |
> |
lineSearchInit = true; |
62 |
> |
} |
63 |
> |
|
64 |
|
protected: |
65 |
+ |
|
66 |
|
Minimizer1D* lsMinimizer; |
67 |
+ |
bool lineSearchInit; |
68 |
|
}; |
69 |
|
|
70 |
|
#endif |