libcmaes 0.10.2
A C++11 library for stochastic optimization with CMA-ES
Loading...
Searching...
No Matches
cmasolutions.h
1
22#ifndef CMASOLUTIONS_H
23#define CMASOLUTIONS_H
24
25#include <libcmaes/libcmaes_config.h>
26#include <libcmaes/candidate.h>
27#include <libcmaes/eo_matrix.h>
28#include <libcmaes/cmaparameters.h>
29#include <libcmaes/cmastopcriteria.h>
30#include <libcmaes/pli.h>
31#include <vector>
32#include <algorithm>
33
34namespace libcmaes
35{
36
42 {
43 template <class U, class V> friend class CMAStrategy;
44 template <class U, class V, class W> friend class ESOptimizer;
45 template <class U, class V, class W> friend class ESOStrategy;
46 template <class U> friend class CMAStopCriteria;
47 template <class U, class V> friend class IPOPCMAStrategy;
48 template <class U, class V> friend class BIPOPCMAStrategy;
49 friend class CovarianceUpdate;
50 friend class ACovarianceUpdate;
51 template <class U> friend class errstats;
52#ifdef HAVE_SURROG
53 template <template <class X,class Y> class U, class V, class W> friend class SimpleSurrogateStrategy;
54 template <template <class X,class Y> class U, class V, class W> friend class ACMSurrogateStrategy;
55#endif
56 friend class VDCMAUpdate;
57
58 public:
63
68 template<class TGenoPheno=GenoPheno<NoBoundStrategy> >
70
72
77 {
78 std::stable_sort(_candidates.begin(),_candidates.end(),
79 [](Candidate const &c1, Candidate const &c2){return c1.get_fvalue() < c2.get_fvalue();});
80 }
81
87 void update_best_candidates();
88
94 void update_eigenv(const dVec &eigenvalues,
95 const dMat &eigenvectors);
96
104 {
105 if (_best_candidates_hist.empty()) // iter = 0
106 {
107 if (_initial_candidate.get_x_size())
108 return _initial_candidate;
109 else return Candidate(std::numeric_limits<double>::quiet_NaN(),_xmean);
110 }
111 return _best_candidates_hist.back();
112 }
113
119 {
120 return _best_seen_candidate;
121 }
122
128 {
129 return _worst_seen_candidate;
130 }
131
136 inline Candidate& get_candidate(const int &r)
137 {
138 return _candidates.at(r);
139 }
140
141 inline Candidate get_candidate(const int &r) const
142 {
143 return _candidates.at(r);
144 }
145
149 inline std::vector<Candidate>& candidates()
150 {
151 return _candidates;
152 }
153
158 inline int size() const
159 {
160 return _candidates.size();
161 }
162
168 void reset();
169
174 void reset_as_fixed(const int &k);
175
179 bool get_pli(const int &k, pli &p) const
180 {
181 std::map<int,pli>::const_iterator mit;
182 if ((mit=_pls.find(k))!=_pls.end())
183 {
184 p = (*mit).second;
185 return true;
186 }
187 return false;
188 }
189
194 inline int dim() const
195 {
196 return _xmean.size();
197 }
198
203 inline double edm() const
204 {
205 return _edm;
206 }
207
212 inline dMat cov() const
213 {
214 return _cov;
215 }
216
221 inline const dMat& cov_ref() const
222 {
223 return _cov;
224 }
225
230 inline const double* cov_data() const
231 {
232 return _cov.data();
233 }
234
240 dMat full_cov() const;
241
246 inline dMat sepcov() const
247 {
248 return _sepcov;
249 }
250
255 inline const dMat& sepcov_ref() const
256 {
257 return _sepcov;
258 }
259
264 inline const double* sepcov_data() const
265 {
266 return _sepcov.data();
267 }
268
273 inline dMat csqinv() const
274 {
275 return _csqinv;
276 }
277
282 inline dMat sepcsqinv() const
283 {
284 return _sepcsqinv;
285 }
286
294 template<class TGenoPheno=GenoPheno<NoBoundStrategy> >
295 inline dVec stds(const CMAParameters<TGenoPheno> &cmaparams) const
296 {
297 dVec phen_xmean = cmaparams.get_gp().pheno(_xmean);
298 dVec stds;
299 if (!cmaparams.is_sep() && !cmaparams.is_vd())
300 stds = _cov.diagonal().cwiseSqrt();
301 else if (cmaparams.is_sep())
302 stds = _sepcov.cwiseSqrt();
303 else if (cmaparams.is_vd())
304 stds = (dVec::Constant(cmaparams.dim(),1.0)+_v.cwiseProduct(_v)).cwiseSqrt().cwiseProduct(_sepcov);
305 dVec phen_xmean_std = cmaparams.get_gp().pheno(static_cast<dVec>(_xmean + stds));
306 return (phen_xmean_std - phen_xmean).cwiseAbs();
307 }
308
314 template<class TGenoPheno=GenoPheno<NoBoundStrategy> >
316 {
317 return std::sqrt(_sigma)*stds(cmaparams);
318 }
319
324 dMat corr() const;
325
330 double corr(const int &i, const int &j) const;
331
336 inline double sigma() const
337 {
338 return _sigma;
339 }
340
345 inline void set_sigma(const double &sigma)
346 {
347 _sigma = sigma;
348 }
349
354 inline dVec xmean() const
355 {
356 return _xmean;
357 }
358
363 inline void set_xmean(const dVec &xmean)
364 {
365 _xmean = xmean;
366 }
367
372 inline int run_status() const
373 {
374 return _run_status;
375 }
376
381 inline std::string status_msg() const
382 {
383 return CMAStopCriteria<>::_scriterias[_run_status];
384 }
385
390 inline int elapsed_time() const
391 {
392 return _elapsed_time;
393 }
394
399 inline int elapsed_last_iter() const
400 {
401 return _elapsed_last_iter;
402 }
403
408 inline int niter() const
409 {
410 return _niter;
411 }
412
417 inline int nevals() const
418 {
419 return _nevals;
420 }
421
426 inline double min_eigenv() const
427 {
428 return _min_eigenv;
429 }
430
435 inline double max_eigenv() const
436 {
437 return _max_eigenv;
438 }
439
444 inline bool updated_eigen() const
445 {
446 return _updated_eigen;
447 }
448
453 inline int fevals() const
454 {
455 return _nevals;
456 }
457
462 inline dVec eigenvalues() const
463 {
464 return _leigenvalues;
465 }
466
471 inline dMat eigenvectors() const
472 {
473 return _leigenvectors;
474 }
475
481 template <class TGenoPheno=GenoPheno<NoBoundStrategy> >
482 std::ostream& print(std::ostream &out,
483 const int &verb_level=0,
484 const TGenoPheno &gp=TGenoPheno()) const;
485
486 private:
487 dMat _cov;
488 dMat _csqinv;
490 dMat _sepcsqinv;
491 dVec _xmean;
492 dVec _psigma;
493 dVec _pc;
494 short _hsig = 1;
495 double _sigma;
496 std::vector<Candidate> _candidates;
497 std::vector<Candidate> _best_candidates_hist;
498 int _max_hist = -1;
500 double _max_eigenv = 0.0;
501 double _min_eigenv = 0.0;
504 int _niter = 0;
505 int _nevals = 0;
506 int _kcand = 1;
507 std::vector<Candidate> _k_best_candidates_hist;
508 std::vector<double> _bfvalues;
509 std::vector<double> _median_fvalues;
511 int _eigeniter = 0;
512 bool _updated_eigen = true;
514 // status of the run.
515 int _run_status = 0;
516 int _elapsed_time = 0;
517 int _elapsed_last_iter = 0;
518#ifdef HAVE_DEBUG
519 int _elapsed_eval = 0;
520 int _elapsed_ask = 0;
521 int _elapsed_tell = 0;
522 int _elapsed_stop = 0;
523#endif
524
525 std::map<int,pli> _pls;
526 double _edm = 0.0;
529 int _best_seen_iter;
530 Candidate _worst_seen_candidate;
531 Candidate _initial_candidate;
532
533 dVec _v;
535 std::vector<RankedCandidate> _candidates_uh;
537 double _suh;
539 double _tpa_s = 0.0;
540 int _tpa_p1 = 0;
541 int _tpa_p2 = 1;
542 dVec _tpa_x1;
543 dVec _tpa_x2;
545 };
546
547 CMAES_EXPORT std::ostream& operator<<(std::ostream &out,const CMASolutions &cmas);
548}
549
550#endif
ACM Surrogate strategy for CMA-ES, follows: 'Surrogate-Assisted Evolutionary Algorithms',...
Definition surrogatestrategy.h:295
Active Covariance Matrix update. This implementation closely follows N. Hansen, R....
Definition acovarianceupdate.h:39
Implementation of the BIPOP flavor of CMA-ES, with restarts that control the population of offsprings...
Definition bipopcmastrategy.h:38
Holder of the set of evolving solutions from running an instance of CMA-ES.
Definition cmasolutions.h:42
std::vector< Candidate > _candidates
Definition cmasolutions.h:496
int run_status() const
returns current optimization status.
Definition cmasolutions.h:372
Candidate _best_seen_candidate
Definition cmasolutions.h:528
bool updated_eigen() const
returns whether the last update is lazy
Definition cmasolutions.h:444
double _suh
Definition cmasolutions.h:537
dVec _xmean
Definition cmasolutions.h:491
std::vector< Candidate > _k_best_candidates_hist
Definition cmasolutions.h:507
dVec stds(const CMAParameters< TGenoPheno > &cmaparams) const
Definition cmasolutions.h:295
dMat _sepcov
Definition cmasolutions.h:489
std::vector< double > _bfvalues
Definition cmasolutions.h:508
std::vector< RankedCandidate > _candidates_uh
Definition cmasolutions.h:535
dVec eigenvalues() const
returns last computed eigenvalues
Definition cmasolutions.h:462
bool get_pli(const int &k, pli &p) const
get profile likelihood if previously computed.
Definition cmasolutions.h:179
const dMat & cov_ref() const
returns reference to error covariance matrix
Definition cmasolutions.h:221
std::vector< Candidate > & candidates()
get a reference to the full candidate set
Definition cmasolutions.h:149
void sort_candidates()
sorts the current internal set of solution candidates.
Definition cmasolutions.h:76
std::vector< Candidate > _best_candidates_hist
Definition cmasolutions.h:497
const dMat & sepcov_ref() const
returns reference to separable covariance diagonal vector, only applicable to sep-CMA-ES algorithms.
Definition cmasolutions.h:255
int niter() const
returns current number of iterations
Definition cmasolutions.h:408
dMat csqinv() const
returns inverse root square of covariance matrix
Definition cmasolutions.h:273
double edm() const
returns expected distance to minimum.
Definition cmasolutions.h:203
void set_xmean(const dVec &xmean)
sets the current distributions' mean in parameter space
Definition cmasolutions.h:363
void set_sigma(const double &sigma)
sets new step-size value, use with care
Definition cmasolutions.h:345
int _lambda_reev
Definition cmasolutions.h:536
double min_eigenv() const
returns current minimal eigen value
Definition cmasolutions.h:426
int elapsed_last_iter() const
returns time spent on last iteration
Definition cmasolutions.h:399
dVec _xmean_prev
Definition cmasolutions.h:544
Candidate get_best_seen_candidate() const
returns the best seen candidate.
Definition cmasolutions.h:118
int elapsed_time() const
returns currently elapsed time spent on optimization
Definition cmasolutions.h:390
dMat _cov
Definition cmasolutions.h:487
dVec _psigma
Definition cmasolutions.h:492
dMat cov() const
returns error covariance matrix
Definition cmasolutions.h:212
int dim() const
return problem dimension.
Definition cmasolutions.h:194
Candidate best_candidate() const
returns current best solution candidate. NOTE: candidates MUST be sorted
Definition cmasolutions.h:103
std::vector< double > _median_fvalues
Definition cmasolutions.h:509
dMat eigenvectors() const
returns last computed eigenvectors
Definition cmasolutions.h:471
double max_eigenv() const
returns current maximal eigen value
Definition cmasolutions.h:435
double _sigma
Definition cmasolutions.h:495
dMat sepcov() const
returns separable covariance diagonal matrix, only applicable to sep-CMA-ES algorithms.
Definition cmasolutions.h:246
dMat _leigenvectors
Definition cmasolutions.h:503
const double * sepcov_data() const
returns pointer to covariance diagnoal vector
Definition cmasolutions.h:264
dMat sepcsqinv() const
returns inverse root square of separable covariance diagonal matrix, only applicable to sep-CMA-ES al...
Definition cmasolutions.h:282
int fevals() const
returns current number of objective function evaluations
Definition cmasolutions.h:453
int nevals() const
returns current budget (number of objective function calls)
Definition cmasolutions.h:417
Candidate & get_candidate(const int &r)
get a reference to the r-th candidate in current set
Definition cmasolutions.h:136
dVec _v
Definition cmasolutions.h:533
dVec _leigenvalues
Definition cmasolutions.h:502
dVec _pc
Definition cmasolutions.h:493
CMASolutions()
dummy constructor.
Definition cmasolutions.h:62
const double * cov_data() const
returns pointer to covariance matrix array
Definition cmasolutions.h:230
dVec errors(const CMAParameters< TGenoPheno > &cmaparams) const
Definition cmasolutions.h:315
std::string status_msg() const
returns current optimization status' message.
Definition cmasolutions.h:381
Candidate get_worst_seen_candidate() const
returns the worst seen candidate.
Definition cmasolutions.h:127
dVec xmean() const
returns current distribution's mean in parameter space
Definition cmasolutions.h:354
int size() const
number of candidate solutions.
Definition cmasolutions.h:158
double sigma() const
returns current value of step-size sigma
Definition cmasolutions.h:336
std::map< int, pli > _pls
Definition cmasolutions.h:525
CMA-ES termination criteria, see reference paper in cmastrategy.h.
Definition cmastopcriteria.h:76
This is an implementation of CMA-ES. It uses the reference algorithm and termination criteria of the ...
Definition cmastrategy.h:46
candidate solution point, in function parameter space.
Definition candidate.h:34
Covariance Matrix update. This is an implementation closely follows: Hansen, N. (2009)....
Definition covarianceupdate.h:38
Main class describing an evolutionary optimization strategy. Every algorithm in libcmaes descends fro...
Definition esostrategy.h:52
an optimizer main class.
Definition esoptimizer.h:72
ESOptimizer()
dummy constructor
Definition esoptimizer.h:77
Implementation of the IPOP flavor of CMA-ES, with restarts that linearly increase the population of o...
Definition ipopcmastrategy.h:36
Simple surrogate strategy: trains every n steps, and exploits in between, mostly as an example and fo...
Definition surrogatestrategy.h:216
VD-CMA update that is a linear time/space variant of CMA-ES This is an implementation that closely fo...
Definition vdcmaupdate.h:39
Definition errstats.h:34
profile likelihood object holder as a set of points and values.
Definition pli.h:35
linear scaling of the parameter space to achieve similar sensitivity across all components.
Definition acovarianceupdate.h:30