17 |
|
void GoldenSectionMinimizer::minimize(){ |
18 |
|
vector<double> tempX; |
19 |
|
vector <double> currentX; |
20 |
< |
|
20 |
> |
double curF; |
21 |
|
const double goldenRatio = 0.618034; |
22 |
|
|
23 |
|
tempX = currentX = model->getX(); |
24 |
< |
|
24 |
> |
model->calcF(); |
25 |
> |
curF = model->getF(); |
26 |
> |
|
27 |
|
alpha = leftVar + (1 - goldenRatio) * (rightVar - leftVar); |
28 |
|
beta = leftVar + goldenRatio * (rightVar - leftVar); |
29 |
|
|
40 |
|
for(currentIter = 0; currentIter < maxIteration; currentIter++){ |
41 |
|
|
42 |
|
if (checkConvergence() > 0){ |
43 |
+ |
|
44 |
+ |
//quick hack |
45 |
+ |
if (fMinVar > curF) { |
46 |
+ |
fMinVar = curF; |
47 |
+ |
minVar = 0; |
48 |
+ |
minStatus = MINSTATUS_ERROR; |
49 |
+ |
} |
50 |
+ |
|
51 |
|
minStatus = MINSTATUS_CONVERGE; |
52 |
|
return; |
53 |
|
} |