9 #ifndef SOT_MERIT_FUNCTIONS_H 10 #define SOT_MERIT_FUNCTIONS_H 40 virtual inline mat pickPoints(
const mat &cand,
const std::shared_ptr<Surrogate>& surf,
41 const mat &points,
int newPoints,
double distTol) = 0;
58 vec mWeights = {0.3, 0.5, 0.8, 0.95};
61 inline mat pickPoints(
const mat &cand,
const std::shared_ptr<Surrogate>& surf,
const mat &points,
int newPoints,
double distTol) {
62 int dim = cand.n_rows;
67 mat dists = arma::sqrt(squaredPairwiseDistance<mat>(points, cand));
69 vec surfVals = surf->evals(cand);
71 vec minDists = arma::min(dists).t();
74 mat newx = arma::zeros<mat>(dim, newPoints);
77 for(
int i=0; i < newPoints; i++) {
78 double weight = mWeights[mNextWeight % mWeights.n_elem];
83 vec newDists = arma::sqrt(squaredPointSetDistance<mat,vec>((
vec)newx.col(i-1), cand));
84 minDists = arma::min(minDists, newDists);
85 valScores(winner) = std::numeric_limits<double>::max();
90 vec merit = weight * valScores + (1.0 - weight) * distScores;
91 merit.elem(arma::find(minDists < distTol)).fill(std::numeric_limits<double>::max());
92 double scores = merit.min(winner);
93 newx.col(i) = cand.col(winner);
mat pickPoints(const mat &cand, const std::shared_ptr< Surrogate > &surf, const mat &points, int newPoints, double distTol)
Method for picking the next point.
Definition: merit_functions.h:61
Abstract class for a SOT merit function.
Definition: merit_functions.h:28
arma::vec vec
Default (column) vector class.
Definition: common.h:17
Merit function for choosing candidate points.
Definition: merit_functions.h:56
vec unitRescale(const vec &x)
Map a vector of values to the range [0, 1].
Definition: utils.h:119
SOT namespace.
Definition: sot.h:27
virtual mat pickPoints(const mat &cand, const std::shared_ptr< Surrogate > &surf, const mat &points, int newPoints, double distTol)=0
Method for picking the next point.
arma::mat mat
Default matrix class.
Definition: common.h:16