ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Minimizer1D.cpp
Revision: 1002
Committed: Mon Feb 2 20:29:41 2004 UTC (20 years, 7 months ago) by tim
File size: 1797 byte(s)
Log Message:
Adding GoldenSection and Brent LineSearch Method

File Contents

# User Rev Content
1 tim 1002 #include "Minimizer1D.hpp"
2     void Minimizer1D::Minimize(vector<double>& direction), double left, double right); {
3     setDirection(direction);
4     setRange(left,right);
5     minimize();
6     }
7    
8     int Minimizer1D::checkConvergence(){
9    
10     if ((rightVar - leftVar) < stepTol)
11     return
12     else
13     return -1;
14     }
15    
16     void GoldenSectionMinimizer::minimize(){
17     vector<double> tempX;
18     vector <double> currentX;
19    
20     const double goldenRatio = 0.618034;
21    
22     currentX = model->getX();
23    
24     alpha = leftVar + (1 - goldenRatio) * (rightVar - leftVar);
25     beta = leftVar + goldenRatio * (rightVar - leftVar);
26    
27     tempX = currentX + direction * alpha;
28     fAlpha = model->calcF(tempX);
29    
30     tempX = currentX + direction * beta;
31     fBeta = model->calcF(tempX);
32    
33     for(currentIter = 0; currentIter < maxIteration; currentIter++){
34    
35     if (checkConvergence() > 0){
36     minStatus = MINSTATUS_CONVERGE;
37     return;
38     }
39    
40     if (fAlpha > fBeta){
41     leftVar = alpha;
42     alpha = beta;
43     beta = leftVar + goldenRatio * (rightVar - leftVar);
44    
45     tempX = currentX + beta * direction;
46    
47     prevMinVar = minVar;
48     fPrevMinVar = fMinVar;
49    
50     minVar = beta;
51     fMinVar = model->calcF(tempX);
52    
53     }
54     else{
55     rightVar = beta;
56     beta = alpha;
57     alpha = leftVar + (1 - goldenRatio) * (rightVar - leftVar);
58    
59     tempX = currentX + alpha * direction;
60    
61     prevMinVar = minVar;
62     fPrevMinVar = fMinVar;
63    
64     minVar = alpha;
65     fMinVar = model->calcF(tempX);
66     }
67    
68     }
69    
70     minStatus = MINSTATUS_MAXITER;
71    
72     }
73    
74     /*
75     *
76     */
77    
78     void BrentMinimizer::minimize(){
79    
80     for(currentIter = 0; currentIter < maxIteration; currentIter){
81    
82    
83    
84    
85     }
86    
87    
88     minStatus = MINSTATUS_MAXITER;
89     return;
90     }

Properties

Name Value
svn:executable *