13#ifndef OPTIMIST_OPTIMIZER_PARTICLE_SWARM_HH
14#define OPTIMIST_OPTIMIZER_PARTICLE_SWARM_HH
41 template <
typename Real, Integer N>
70 std::string
name_impl()
const {
return "PatternSearch";}
75 "set_max_num_stagnation({}) argument must be >0\n", nstg
77 m_max_num_stagnation = nstg;
93 while ( m_stencil_failure ) {
98 if ( m_fun_evaluation_count >= m_max_fun_evaluation )
return;
101 search_dir.noalias() = x_best - x_old;
106 while ( m_fun_evaluation_count < m_max_fun_evaluation && lambda > 0.1 ) {
107 x_new.noalias() = x_best + lambda*search_dir;
108 Real new_f = eval_function(x_new);
109 if ( new_f < f_best-(0.25*lambda)*max_der ) {
110 Real der = (f_best-new_f)/lambda;
111 if ( der > max_der ) max_der = der;
112 x_best.noalias() = x_new;
135 for ( integer j = 0; j < N; ++j ) {
136 Real s_dirh = search_sign(j) *
m_h;
137 m_p.noalias() = x_best; m_p(j) += s_dirh;
138 Real fp = eval_function( m_p );
139 if ( fp >= f_best ) {
140 m_p1.noalias() = x_best; m_p1(j) -= s_dirh;
141 Real fp1 = eval_function( m_p1 );
143 m_p.noalias() = m_p1; fp = fp1;
145 search_sign(j) = -search_sign(j);
151 x_best.noalias() = m_p;
167 template <
typename FunctionLambda>
172 this->m_stencil_failure =
false;
181 search_sign.setOnes();
185 integer stagnations{0};
193 if (this->m_stencil_failure) {
break;}
203 this->m_h *= this->m_rho;
206 if (f_old <= f_best) {
208 if (stagnations > this->m_max_stagnations) {
break;}
Class container for the multi-dimensional optimizer.
Definition Optimizer.hh:47
Optimizer()
Definition Optimizer.hh:69
typename SolverBase< Real, N, 1, PatternSearch< Real, N >, ForceEigen >::InputType Vector
Definition Optimizer.hh:60
typename SolverBase< Real, N, 1, PatternSearch< Real, N >, ForceEigen >::SecondDerivativeType Matrix
Definition Optimizer.hh:64
std::vector< Vector > Simplex
Definition ParticleSwarm.hh:52
bool solve_impl(FunctionLambda &&function, Vector const &x_ini, Vector &x_sol)
Definition ParticleSwarm.hh:168
bool m_stencil_failure
Definition ParticleSwarm.hh:57
Real m_rho
Definition ParticleSwarm.hh:55
static constexpr bool requires_function
Definition ParticleSwarm.hh:45
void search()
Definition ParticleSwarm.hh:88
static constexpr bool requires_first_derivative
Definition ParticleSwarm.hh:46
void set_max_num_stagnation(integer nstg)
Definition ParticleSwarm.hh:72
static constexpr bool requires_second_derivative
Definition ParticleSwarm.hh:47
void best_nearby()
Definition ParticleSwarm.hh:125
Real m_h
Definition ParticleSwarm.hh:56
std::string name_impl() const
Definition ParticleSwarm.hh:70
PatternSearch()
Definition ParticleSwarm.hh:64
void info(Real residuals, std::string const ¬es="-")
Definition SolverBase.hh:924
Integer m_iterations
Definition SolverBase.hh:84
Integer m_max_iterations
Definition SolverBase.hh:85
void header()
Definition SolverBase.hh:870
void reset()
Definition SolverBase.hh:748
bool m_verbose
Definition SolverBase.hh:92
bool m_converged
Definition SolverBase.hh:98
void bottom()
Definition SolverBase.hh:900
bool evaluate_function(FunctionLambda &&function, InputType const &x, OutputType &out)
Definition SolverBase.hh:768
Real m_tolerance
Definition SolverBase.hh:91
Namespace for the Optimist library.
Definition Optimist.hh:88