OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimGDoptimizer.cpp
Go to the documentation of this file.
1 
10 
11 #include <cmath>
12 #include <iostream>
13 
18  m_func = nullptr;
19 }
20 
21 
28  m_func = src.m_func;
29 }
30 
31 
36 }
37 
38 
45  m_func = function;
46 }
47 
48 
57  bool retVal = false;
58 
59  if(m_func != nullptr) retVal = true;
60  m_func = function;
61 
62 return retVal;
63 }
64 
65 
76 std::vector<ossim_float64> ossimGDoptimizer::optimize(std::vector<ossim_float64> point, ossim_float64 gamma, ossim_float64 precision, ossim_uint32 maxEpoch) const {
77 
78  ossim_uint32 iter = 0;
79  ossim_float64 step = 10000;
80 
81  std::vector<ossimTerm*> derivative;
82  for(size_t i = 0; i < point.size(); ++i){
83  derivative.push_back(m_func->derivative(i));
84  }
85 
86  std::vector<ossim_float64> prevPoint;
87  while(step > precision && iter < maxEpoch){
88  step = 0;
89  prevPoint = point;
90  for(size_t i = 0; i < point.size(); ++i){
91  point[i] += -gamma * derivative[i]->evaluate(point);
92  step += pow(point[i]-prevPoint[i], 2);
93  }
94  step = sqrt(step);
95  }
96 
97  for(size_t i = 0; i < derivative.size(); ++i){
98  delete derivative[i];
99  }
100 
101 return point;
102 }
An abstract class to containing a multivariable function.
Definition: ossimTerm.h:35
std::vector< ossim_float64 > optimize(std::vector< ossim_float64 > startPoint, ossim_float64 gamma=0.001, ossim_float64 precision=0.0001, ossim_uint32 maxEpoch=10000) const
Optimizes the function.
virtual ossimTerm * derivative(const ossim_uint32 &variable) const =0
Calculates the derivative of the term.
~ossimGDoptimizer()
Destroys the object !DOES NOT DELETE FUNCTION!
bool setFunction(ossimTerm *function)
Sets the function to be optimized.
ossimGDoptimizer()
Public Copy constructor.
double ossim_float64
unsigned int ossim_uint32
ossimTerm * m_func
Simple Gradient Descent optimizer for ossim.