13#ifndef OPTIMIST_OPTIMIZER_HJ_PATTERN_SEARCH_HH
14#define OPTIMIST_OPTIMIZER_HJ_PATTERN_SEARCH_HH
41 template <
typename Real>
73 std::string
name_impl()
const {
return "PatternSearch";}
78 "set_max_num_stagnation({}) argument must be >0\n", nstg
80 m_max_num_stagnation = nstg;
96 while ( m_stencil_failure ) {
101 if ( m_fun_evaluation_count >= m_max_fun_evaluation )
return;
104 search_dir.noalias() = x_best - x_old;
109 while ( m_fun_evaluation_count < m_max_fun_evaluation && lambda > 0.1 ) {
110 x_new.noalias() = x_best + lambda*search_dir;
111 Real new_f = eval_function(x_new);
112 if ( new_f < f_best-(0.25*lambda)*max_der ) {
113 Real der = (f_best-new_f)/lambda;
114 if ( der > max_der ) max_der = der;
115 x_best.noalias() = x_new;
138 for ( integer j = 0; j < N; ++j ) {
139 Real s_dirh = search_sign(j) *
m_h;
140 m_p.noalias() = x_best; m_p(j) += s_dirh;
141 Real fp = eval_function( m_p );
142 if ( fp >= f_best ) {
143 m_p1.noalias() = x_best; m_p1(j) -= s_dirh;
144 Real fp1 = eval_function( m_p1 );
146 m_p.noalias() = m_p1; fp = fp1;
148 search_sign(j) = -search_sign(j);
154 x_best.noalias() = m_p;
173 this->m_stencil_failure =
false;
182 search_sign.setOnes();
186 integer stagnations{0};
194 if (this->m_stencil_failure) {
break;}
204 this->m_h *= this->m_rho;
207 if (f_old <= f_best) {
209 if (stagnations > this->m_max_stagnations) {
break;}
Optimizer()
Definition Optimizer.hh:79
bool solve(FunctionWrapper function, Vector const &x_ini, Vector &x_sol)
Definition Optimizer.hh:159
void set_max_num_stagnation(integer nstg)
Definition PatternSearch.hh:75
typename Optimizer< Real, N, PatternSearch< Real, N >, true >::Vector Vector
Definition PatternSearch.hh:50
Real m_rho
Definition PatternSearch.hh:58
void search()
Definition PatternSearch.hh:91
static constexpr bool requires_second_derivative
Definition PatternSearch.hh:48
std::vector< Vector > Simplex
Definition PatternSearch.hh:55
typename Optimizer< Real, N, PatternSearch< Real, N >, true >::FunctionWrapper FunctionWrapper
Definition PatternSearch.hh:52
bool m_stencil_failure
Definition PatternSearch.hh:60
bool solve_impl(FunctionWrapper function, Vector const &x_ini, Vector &x_sol)
Definition PatternSearch.hh:169
Real m_h
Definition PatternSearch.hh:59
static constexpr bool requires_function
Definition PatternSearch.hh:46
void best_nearby()
Definition PatternSearch.hh:128
PatternSearch()
Definition PatternSearch.hh:67
static constexpr bool requires_first_derivative
Definition PatternSearch.hh:47
std::string name_impl() const
Definition PatternSearch.hh:73
typename Optimizer< Real, N, PatternSearch< Real, N >, true >::Matrix Matrix
Definition PatternSearch.hh:51
void info(Real residuals, std::string const ¬es="-")
Definition SolverBase.hh:860
Integer m_iterations
Definition SolverBase.hh:86
Integer m_max_iterations
Definition SolverBase.hh:87
void header()
Definition SolverBase.hh:806
void reset()
Definition SolverBase.hh:700
bool m_verbose
Definition SolverBase.hh:94
bool m_converged
Definition SolverBase.hh:100
void bottom()
Definition SolverBase.hh:836
Real m_tolerance
Definition SolverBase.hh:93
void evaluate_function(FunctionWrapper function, const InputType &x, OutputType &out)
Definition SolverBase.hh:717
Namespace for the Optimist library.
Definition Optimist.hh:87
OPTIMIST_DEFAULT_INTEGER_TYPE Integer
The Integer type as used for the API.
Definition Optimist.hh:95