| 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;} |
| 10 |
|
|
| 11 |
|
virtual void printMinizerInfo() = 0; |
| 12 |
< |
|
| 12 |
< |
virtual MinimizerParameterSet* creatParameterSet() = 0; |
| 12 |
> |
void init() {} |
| 13 |
|
void setMinX(vector<double>& x) { minX = x;} |
| 14 |
|
vector<double> getMinX() { return minX;} |
| 15 |
|
|
| 32 |
|
|
| 33 |
|
class MinimizerUsingLineSearch : public Minimizer{ |
| 34 |
|
public: |
| 35 |
< |
void setLineSearchStrategy(); |
| 35 |
> |
MinimizerUsingLineSearch(MinimizerParameterSet* param) : Minimizer(param), lineSearchInit(false){} |
| 36 |
> |
void setLineSearchStrategy(NLModel* nlp, LineSearchStrategy stategy){ |
| 37 |
> |
|
| 38 |
> |
if(stategy == GoldenSection) |
| 39 |
> |
lsMinimizer = new GoldenSectionMinimizer(nlp); |
| 40 |
> |
|
| 41 |
> |
else if(stategy == Brent) |
| 42 |
> |
lsMinimizer = new BrentMinimizer(nlp); |
| 43 |
> |
|
| 44 |
> |
else{ |
| 45 |
> |
cerr << "MinimizerUsingLineSearch Error : Unknown Line Search Strategy" << endl; |
| 46 |
> |
exit(-1); |
| 47 |
> |
} |
| 48 |
> |
|
| 49 |
> |
lsMinimizer->setMaxIteration(paramSet->getLineSearchMaxIteration()); |
| 50 |
> |
lsMinimizer->setStepTol(paramSet->getLineSearchTol()); |
| 51 |
> |
|
| 52 |
> |
lineSearchInit = true; |
| 53 |
> |
} |
| 54 |
> |
|
| 55 |
|
protected: |
| 56 |
+ |
|
| 57 |
|
Minimizer1D* lsMinimizer; |
| 58 |
+ |
bool lineSearchInit; |
| 59 |
|
}; |
| 60 |
|
|
| 61 |
|
#endif |