13#if !defined(ULTRA_DE_NUMERICAL_REFINER_H)
14#define ULTRA_DE_NUMERICAL_REFINER_H
50 evaluator_individual_t<E> &ind,
const E &eva,
56 const auto eval([&eva](
const auto &cand)
58 if constexpr (
requires { eva.core(); })
59 return eva.core()(cand);
64 auto dv(extract_decision_vector(ind));
69 std::vector<interval<double>> ranges;
70 ranges.reserve(dv.size());
72 for (
const auto val : dv.values)
74 const auto delta(std::max(std::abs(val) * params.de.
rel_radius,
76 ranges.emplace_back(val - delta, val + delta);
90 std::ranges::copy(vec, dv.values.
begin());
91 trial.apply_decision_vector(dv);
96 const auto base(eval(ind));
98 search de_search(de_prob, de_eva);
100 const auto res(de_search.
run());
102 if (!res.runs() || res.best_measurements().fitness <= base)
105 std::ranges::copy(res.best_individual(), dv.values.begin());
106 ind.apply_decision_vector(dv);
108 return res.best_measurements().fitness;
127 evaluator_individual_t<E> &ind,
search_stats< individual_t, fitness_t > run(unsigned=1, const model_measurements< fitness_t > &={})
Definition search.h:230
Definition de/individual.h:36
Definition de/problem.h:29
Definition de/search.h:28
std::optional< evaluator_fitness_t< E > > optimise(evaluator_individual_t< E > &, const E &, Backend &&) const
Definition refiner.h:34
const_iterator begin() const noexcept
Definition vector_individual.h:65
Supports numerical optimisation via decision-vector perturbation.
Definition decision_vector.h:97
std::optional< evaluator_fitness_t< E > > optimise(const refiner &opt, evaluator_individual_t< E > &ind, const E &eva)
Definition numerical_refiner.h:126
Definition numerical_refiner.h:31
std::optional< evaluator_fitness_t< E > > operator()(evaluator_individual_t< E > &ind, const E &eva, const parameters::refinement_parameters ¶ms) const
Definition numerical_refiner.h:49
static constexpr std::size_t min_individuals
Minimum population size required for Differential Evolution.
Definition parameters.h:188
unsigned generations
Definition parameters.h:119
std::size_t individuals
Definition parameters.h:54
std::size_t init_subgroups
Definition parameters.h:68
std::size_t individuals
Definition parameters.h:225
std::size_t generations
Definition parameters.h:230
double rel_radius
Definition parameters.h:214
double min_radius
Definition parameters.h:220
Parameters controlling numerical optimisation of GP individuals.
Definition parameters.h:203
bool messages
Definition parameters.h:275