libcmaes 0.10.2
A C++11 library for stochastic optimization with CMA-ES
Loading...
Searching...
No Matches
rsvm_surr_strategy.hpp
1
22#include <libcmaes/cmaes.h>
23#include <libcmaes/surrogatestrategy.h>
24#include <libcmaes/opti_err.h>
25#include <libcmaes/surrogates/rankingsvm.hpp>
26
27#ifndef RSVMSURROGATESTRATEGY_H
28#define RSVMSURROGATESTRATEGY_H
29
30namespace libcmaes
31{
32
33 // Interfacing candidates with an Eigen matrix of double x and a vector of objective function value.
34 void to_mat_vec(std::vector<Candidate> &cp,
35 dMat &x, dVec &fvalues,
36 const bool &train)
37 {
38 if (train)
39 std::sort(cp.begin(),cp.end(),
40 [](Candidate const &c1, Candidate const &c2){return c1.get_fvalue() > c2.get_fvalue();}); // descending sort
41 x = dMat(cp.at(0).get_x_size(),cp.size());
42 fvalues = dVec(cp.size());
43 for (int i=0;i<(int)cp.size();i++)
44 {
45 x.col(i) = cp.at(i).get_x_dvec().transpose();
46 fvalues(i) = cp.at(i).get_fvalue();
47 }
48 }
49
50 template <class TGenoPheno> using eostrat = ESOStrategy<CMAParameters<TGenoPheno>,CMASolutions,CMAStopCriteria<TGenoPheno> >;
51
52 template<template <class U, class V> class TStrategy, class TCovarianceUpdate=CovarianceUpdate,class TGenoPheno=GenoPheno<NoBoundStrategy>>
53 class RSVMSurrogateStrategy : public ACMSurrogateStrategy<TStrategy,TCovarianceUpdate,TGenoPheno>
54 {
55 public:
59 {
60 this->_train = [this](const std::vector<Candidate> &c, const dMat &cov)
61 {
62 if (c.empty())
63 return 0;
64 dMat x;
65 dVec fvalues;
66 std::vector<Candidate> cp = c;
67 to_mat_vec(cp,x,fvalues,true);
69 _rsvm = RankingSVM<RBFKernel>();
70 _rsvm._encode = true;
71 _rsvm.train(x,_rsvm_iter,cov,xmean);
72 return 0;
73 };
74 this->_predict = [this](std::vector<Candidate> &c, const dMat &cov)
75 {
76 dMat x_test(c.at(0).get_x_size(),c.size());
77 for (int i=0;i<(int)c.size();i++)
78 x_test.col(i) = c.at(i).get_x_dvec().transpose();
79
80 dMat x_train;
81 dVec fvalues;
82 std::vector<Candidate> tset = this->_tset;
83 to_mat_vec(tset,x_train,fvalues,true);
84
85 dVec fit;
87 _rsvm.predict(fit,x_test,x_train,cov,xmean);
88 if (fit.size() != 0)
89 for (int i=0;i<(int)c.size();i++)
90 c.at(i).set_fvalue(fit(i));
91 return 0;
92 };
93 }
94
96
98 int _rsvm_iter = 1e6;
99 };
100
101}
102
103#endif
void train(dMat &x, const int &niter, const dMat &covinv, const dVec &xmean)
trains a ranker from a set of points
Definition rankingsvm.hpp:142
void predict(dVec &fit, dMat &x_test, dMat &x_train, const dMat &covinv, const dVec &xmean)
predicts a ranking from a learnt ranker
Definition rankingsvm.hpp:180
bool _encode
Definition rankingsvm.hpp:346
ACM Surrogate strategy for CMA-ES, follows: 'Surrogate-Assisted Evolutionary Algorithms',...
Definition surrogatestrategy.h:295
dVec xmean() const
returns current distribution's mean in parameter space
Definition cmasolutions.h:354
CMASolutions & get_solutions()
returns reference to current solution object
Definition esostrategy.h:193
an optimizer main class.
Definition esoptimizer.h:72
Definition rsvm_surr_strategy.hpp:54
int _rsvm_iter
Definition rsvm_surr_strategy.hpp:98
std::vector< Candidate > _tset
Definition surrogatestrategy.h:198
SurrFunc _predict
Definition surrogatestrategy.h:200
CSurrFunc _train
Definition surrogatestrategy.h:199
linear scaling of the parameter space to achieve similar sensitivity across all components.
Definition acovarianceupdate.h:30