5 #include "opencv2/opencv.hpp"
7 #include <vision_module/Tools/General.hpp>
8 #include <vision_module/Tools/OptimizorParam.hpp>
20 vector<OptimizorParam> parameters;
21 unsigned int paramsCount;
23 float (T::*pFunc)(
const vector<OptimizorParam>& parameters);
25 HillOptimizer(T& obj,
float (T::*pFunc)(
const vector<OptimizorParam>& parameters)) :
26 paramsCount(0),obj(obj), pFunc(pFunc)
31 bool TuneForBest(
int maxIteration,
double tol = 0.0000001)
33 double lastRes = Tune();
34 cout <<
" First Tune =" << lastRes << endl;
35 int successCounter = 0;
36 for (
int i = 0; i < maxIteration; i++)
38 double curRes = Tune();
39 cout <<
" Tune counter = " << i <<
" TuneRes = " << curRes << endl;
40 if ((lastRes - curRes) < tol)
48 if (successCounter >= 3)
59 float bestResult = 999999999;
60 for (
size_t i = 0; i < paramsCount; i++)
62 float resOld = (obj.*pFunc)(parameters);
63 float resAbove = resOld;
64 float resBelow = resOld;
69 float oldParameter = parameters[i].data;
71 float stepAbove = oldParameter + parameters[i].step;
72 float stepBelow = oldParameter - parameters[i].step;
74 parameters[i].data = stepAbove;
75 resAbove = (obj.*pFunc)(parameters);
77 parameters[i].data = stepBelow;
78 resBelow = (obj.*pFunc)(parameters);
80 if (resAbove < resBelow && resAbove < resOld)
82 parameters[i].data = stepAbove;
85 else if (resAbove > resBelow && resBelow < resOld)
87 parameters[i].data = stepBelow;
92 parameters[i].data = oldParameter;
93 bestResult = min(bestResult, resOld);
101 void setParameters(vector<OptimizorParam> _parameters)
103 parameters = _parameters;
104 paramsCount = _parameters.size();
106 vector<OptimizorParam> getParameters()
const
A class for hill climbing optimization.
Definition: HillOptimizer.hpp:17