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;
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;
182 search_sign.setOnes();
186 integer stagnations{0};
207 if (f_old <= f_best) {
209 if (stagnations > this->m_max_stagnations) {
break;}
bool solve(FunctionWrapper function, Vector const &x_ini, Vector &x_sol)
Definition Optimizer.hh:160
Optimizer()
Definition Optimizer.hh:80
void set_max_num_stagnation(integer nstg)
Definition PatternSearch.hh:75
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 > >::Matrix Matrix
Definition PatternSearch.hh:51
typename Optimizer< Real, N, PatternSearch< Real, N > >::Vector Vector
Definition PatternSearch.hh:50
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
typename Optimizer< Real, N, PatternSearch< Real, N > >::FunctionWrapper FunctionWrapper
Definition PatternSearch.hh:52
static constexpr bool requires_first_derivative
Definition PatternSearch.hh:47
std::string name_impl() const
Definition PatternSearch.hh:73
Real m_tolerance
Definition Solver.hh:92
bool m_verbose
Definition Solver.hh:93
bool m_converged
Definition Solver.hh:99
void header()
Definition Solver.hh:799
void reset()
Definition Solver.hh:693
void bottom()
Definition Solver.hh:829
void evaluate_function(FunctionWrapper function, const InputType &x, OutputType &out)
Definition Solver.hh:710
void info(Real residuals, std::string const ¬es="-")
Definition Solver.hh:853
Integer m_iterations
Definition Solver.hh:85
Integer m_max_iterations
Definition Solver.hh:86
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