ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-4/src/minimizers/PRCG.cpp
Revision: 1900
Committed: Tue Jan 4 22:18:06 2005 UTC (20 years, 6 months ago) by tim
File size: 1257 byte(s)
Log Message:
minimizers in progress

File Contents

# User Rev Content
1 tim 1900 #include "minimizers/PRCG.hpp"
2 gezelter 1490 void PRCGMinimizer::init(){
3    
4     calcG();
5    
6     for(int i = 0; i < direction.size(); i++){
7     direction[i] = -curG[i];
8     }
9    
10     }
11    
12     int PRCGMinimizer::step(){
13     int lsStatus;
14    
15     prevF = curF;
16     prevG = curG;
17     prevX = curX;
18    
19     //optimize along the search direction and reset minimum point value
20     lsStatus = doLineSearch(direction, stepSize);
21    
22     if (lsStatus < 0)
23     return -1;
24     else
25     return 1;
26     }
27    
28     void PRCGMinimizer::prepareStep(){
29 tim 1826 std::vector<double> deltaGrad;
30 gezelter 1490 double beta;
31     size_t i;
32    
33     deltaGrad.resize(ndim);
34    
35     //calculate the new direction using Polak-Ribiere Conjugate Gradient
36    
37     for(i = 0; i < curG.size(); i++)
38     deltaGrad[i] = curG[i] - prevG[i];
39    
40     #ifndef IS_MPI
41     beta = dotProduct(deltaGrad, curG) / dotProduct(prevG, prevG);
42     #else
43     double localDP1;
44     double localDP2;
45     double globalDP1;
46     double globalDP2;
47    
48     localDP1 = dotProduct(deltaGrad, curG);
49     localDP2 = dotProduct(prevG, prevG);
50    
51     MPI_Allreduce(&localDP1, &globalDP1, 1, MPI_DOUBLE,MPI_SUM, MPI_COMM_WORLD);
52     MPI_Allreduce(&localDP2, &globalDP2, 1, MPI_DOUBLE,MPI_SUM, MPI_COMM_WORLD);
53    
54     beta = globalDP1 / globalDP2;
55     #endif
56    
57     for(i = 0; i < direction.size(); i++)
58     direction[i] = -curG[i] + beta * direction[i];
59    
60     }

Properties

Name Value
svn:executable *