13#ifndef OPTIMIST_OPTIMIZER_HJ_PATTERN_SEARCH_HH
14#define OPTIMIST_OPTIMIZER_HJ_PATTERN_SEARCH_HH
36 template <
typename Real, Integer N>
38 :
public Optimizer<Real, N, PatternSearch<Real, N>, true> {
66 return "PatternSearch";
70 UTILS_ASSERT(nstg > 0,
71 "set_max_num_stagnation({}) argument must be >0\n",
73 m_max_num_stagnation = nstg;
88 while (m_stencil_failure) {
94 if (m_fun_evaluation_count >= m_max_fun_evaluation)
98 search_dir.noalias() = x_best - x_old;
103 while (m_fun_evaluation_count < m_max_fun_evaluation && lambda > 0.1) {
104 x_new.noalias() = x_best + lambda * search_dir;
105 Real new_f = eval_function(x_new);
106 if (new_f < f_best - (0.25 * lambda) * max_der) {
107 Real der = (f_best - new_f) / lambda;
110 x_best.noalias() = x_new;
132 for (integer j = 0; j < N; ++j) {
133 Real s_dirh = search_sign(j) *
m_h;
134 m_p.noalias() = x_best;
136 Real fp = eval_function(m_p);
138 m_p1.noalias() = x_best;
140 Real fp1 = eval_function(m_p1);
142 m_p.noalias() = m_p1;
145 search_sign(j) = -search_sign(j);
151 x_best.noalias() = m_p;
168 template <
typename FunctionLambda>
174 this->m_stencil_failure =
false;
182 Vector x_best(x_ini);
188 UTILS_ASSERT(success,
189 "Optimist::Optimizer::PatternSearch::solve(...): "
190 "function evaluation failed at the initial point.");
196 integer stagnations{0};
204 if (this->m_stencil_failure) {
210 this->
info(residuals);
218 this->m_h *= this->m_rho;
221 if (f_old <= f_best) {
223 if (stagnations > this->m_max_stagnations) {
Class container for the multi-dimensional optimizer.
Definition Optimizer.hh:46
Optimizer()
Definition Optimizer.hh:67
static constexpr bool RequiresFunction
Definition PatternSearch.hh:40
std::vector< Vector > Simplex
Definition PatternSearch.hh:47
bool m_stencil_failure
Definition PatternSearch.hh:52
Real m_rho
Definition PatternSearch.hh:50
void search()
Definition PatternSearch.hh:83
void set_max_num_stagnation(integer nstg)
Definition PatternSearch.hh:69
static constexpr bool RequiresSecondDerivative
Definition PatternSearch.hh:42
constexpr std::string name_impl() const
Definition PatternSearch.hh:65
void best_nearby()
Definition PatternSearch.hh:124
static constexpr bool RequiresFirstDerivative
Definition PatternSearch.hh:41
Real m_h
Definition PatternSearch.hh:51
PatternSearch()
Definition PatternSearch.hh:59
bool solve_impl(FunctionLambda &&function, const Vector &x_ini, Vector &x_sol)
Definition PatternSearch.hh:169
void info(Scalar residuals, const std::string ¬es="-")
Definition SolverBase.hh:1232
bool evaluate_function(FunctionLambda &&function, const Real &x, TypeTrait< Real >::Scalar &out)
Definition SolverBase.hh:1040
Integer m_max_iterations
Definition SolverBase.hh:121
Scalar m_tolerance
Definition SolverBase.hh:128
void header()
Definition SolverBase.hh:1168
void reset_counters()
Definition SolverBase.hh:1022
Integer m_iterations
Definition SolverBase.hh:120
bool m_verbose
Definition SolverBase.hh:130
bool m_converged
Definition SolverBase.hh:136
void bottom()
Definition SolverBase.hh:1205
Namespace for the Optimist library.
Definition Optimist.hh:90