libcmaes 0.10.2
A C++11 library for stochastic optimization with CMA-ES
Loading...
Searching...
No Matches
esostrategy.h
1
22#ifndef ESOSTRATEGY_H
23#define ESOSTRATEGY_H
24
25#include <libcmaes/eo_matrix.h> // to include Eigen everywhere.
26#include <libcmaes/candidate.h>
27#include <libcmaes/eigenmvn.h>
28#include <random>
29
30namespace libcmaes
31{
32 typedef std::function<double (const double*, const int &n)> FitFunc;
33 typedef std::function<dVec (const double*, const int &n)> GradFunc;
34
35 typedef std::function<void(const dMat&, const dMat&)> EvalFunc;
36 typedef std::function<dMat(void)> AskFunc;
37 typedef std::function<void(void)> TellFunc;
38
39 template<class TParameters,class TSolutions>
40 using ProgressFunc = std::function<int (const TParameters&, const TSolutions&)>; // template aliasing.
41
42 template<class TParameters,class TSolutions>
43 using PlotFunc = std::function<int (const TParameters&, const TSolutions&, std::ofstream &fplotstream)>;
44
50 template<class TParameters,class TSolutions,class TStopCriteria>
52 {
53 public:
58 {
59 }
60
66 ESOStrategy(FitFunc &func,
68
75 ESOStrategy(FitFunc &func,
77 const TSolutions &solutions);
78
79 protected:
81
82 public:
87 dMat ask();
88
98 void eval(const dMat &candidates,
99 const dMat &phenocandidates=dMat(0,0));
100
105 void tell();
106
111 bool stop();
112
122 int optimize(const EvalFunc &evalf, const AskFunc &askf, const TellFunc &tellf);
123
127 void inc_iter();
128
133 void update_fevals(const int &evals);
134
139 void set_gradient_func(GradFunc &gfunc) { _gfunc = gfunc; }
140
149
155 {
156 _parameters.set_x0(sol.best_candidate().get_x_dvec());
157 _solutions = sol;
158 _solutions.reset();
159 }
160
167 void set_plot_func(PlotFunc<TParameters,TSolutions> &pffunc) { if (!_parameters._full_fplot) _pffunc = pffunc; }
168
174 dVec gradf(const dVec &x);
175
181 dVec gradgp(const dVec &x) const;
182
187 double edm();
188
193 TSolutions& get_solutions() { return _solutions; }
194
199 TParameters& get_parameters() { return _parameters; }
200
207 double fitfunc(const double *x, const int N) { return _func(x,N); }
208
213 void uncertainty_handling();
214
218 void perform_uh(const dMat& candidates, const dMat& phenocandidates, int& nfcalls);
219
223 void select_candidates_uh(const dMat& candidates, const dMat& phenocandidates, dMat& candidates_uh);
224
228 void eval_candidates_uh(const dMat& candidates, const dMat& candidates_uh, std::vector<RankedCandidate>& nvcandidates, int& nfcalls);
229
233 void set_candidates_uh(const std::vector<RankedCandidate>& nvcandidates);
234
235
240 void tpa_update();
241
242 // deprecated.
243 Candidate best_solution() const;
244
245 void set_initial_elitist(const bool &e) { _initial_elitist = e; }
246
247 protected:
248 FitFunc _func;
250 int _niter;
254 GradFunc _gfunc = nullptr;
256 FitFunc _funcaux;
257 bool _initial_elitist = false;
259 private:
260 std::mt19937 _uhgen;
261 std::uniform_real_distribution<> _uhunif;
263 };
264
265}
266
267#endif
Definition eigenmvn.h:109
candidate solution point, in function parameter space.
Definition candidate.h:34
Main class describing an evolutionary optimization strategy. Every algorithm in libcmaes descends fro...
Definition esostrategy.h:52
int _nevals
Definition esostrategy.h:249
FitFunc _func
Definition esostrategy.h:248
ProgressFunc< TParameters, TSolutions > _pfunc
Definition esostrategy.h:253
double fitfunc(const double *x, const int N)
execute objective function
Definition esostrategy.h:207
TParameters _parameters
Definition esostrategy.h:252
TSolutions & get_solutions()
returns reference to current solution object
Definition esostrategy.h:193
TSolutions _solutions
Definition esostrategy.h:251
TParameters & get_parameters()
returns reference to current optimization parameters object
Definition esostrategy.h:199
void set_progress_func(ProgressFunc< TParameters, TSolutions > &pfunc)
Sets the possibly custom progress function, that is called in between every search step,...
Definition esostrategy.h:148
bool stop()
Decides whether to stop the search for solutions.
std::mt19937 _uhgen
Definition esostrategy.h:260
int _niter
Definition esostrategy.h:250
int optimize(const EvalFunc &evalf, const AskFunc &askf, const TellFunc &tellf)
Finds the minimum of the objective function. It makes alternative calls to ask(), tell() and stop() u...
void set_plot_func(PlotFunc< TParameters, TSolutions > &pffunc)
Sets the possibly custom plot to file function, that is useful for storing into file various possibly...
Definition esostrategy.h:167
void tell()
Updates the state of the stochastic search, and prepares for the next iteration.
ESOStrategy()
dummy constructor.
Definition esostrategy.h:57
void set_gradient_func(GradFunc &gfunc)
sets the gradient function, if available.
Definition esostrategy.h:139
PlotFunc< TParameters, TSolutions > _pffunc
Definition esostrategy.h:255
dMat ask()
Generates a set of candidate points.
void start_from_solution(const TSolutions &sol)
starts optimization from a given solution object.
Definition esostrategy.h:154
an optimizer main class.
Definition esoptimizer.h:72
ESOptimizer()
dummy constructor
Definition esoptimizer.h:77
linear scaling of the parameter space to achieve similar sensitivity across all components.
Definition acovarianceupdate.h:30