8#include <kernel/solver/linesearch.hpp> 
   31    template<
typename Functional_, 
typename Filter_>
 
   40        typedef typename Functional_::DataType 
DataType;
 
   68          Functional_& functional, Filter_& filter,
 
   70          const bool keep_iterates = 
false) :
 
   71          BaseClass(
"S-LS", functional, filter, keep_iterates),
 
   94        Functional_& functional, Filter_& filter) :
 
   95          BaseClass(
"S-LS", section_name, section, functional, filter),
 
   98            auto secant_step_p = section->
query(
"secant_step");
 
   99            if(secant_step_p.second)
 
  115          return "SecantLinesearch";
 
  197          Statistics::add_solver_expression(std::make_shared<ExpressionStartSolve>(this->
name()));
 
  214          DataType alpha_update(alpha);
 
  219          vec_sol.axpy(this->
_vec_pn, alpha);
 
  238              this->_fval_min = fval;
 
  260            alpha_update *= df/(df_prev - df);
 
  261            alpha += alpha_update;
 
  265            vec_sol.axpy(this->
_vec_pn, alpha);
 
  313    template<
typename Functional_, 
typename Filter_>
 
  315      Functional_& functional, Filter_& filter,
 
  317      bool keep_iterates = 
false)
 
  319        return std::make_shared<SecantLinesearch<Functional_, Filter_>>(functional, filter, secant_step,
 
  341    template<
typename Functional_, 
typename Filter_>
 
  344      Functional_& functional, Filter_& filter)
 
  346        return std::make_shared<SecantLinesearch<Functional_, Filter_>>(section_name, section, functional, filter);
 
#define XASSERT(expr)
Assertion macro definition.
A class organizing a tree of key-value pairs.
std::pair< String, bool > query(String key_path) const
Queries a value by its key path.
Helper class for iteration statistics collection.
Index get_num_iter() const
Returns number of performed iterations.
Status _status
current status of the solver
Index _num_iter
number of performed iterations
virtual void plot_summary() const
Plot a summary of the last solver run.
VectorType _vec_grad
Gradient vector.
DataType _norm_dir
The 2-norm of the search direction.
Functional_ & _functional
The (nonlinear) functional.
VectorType _vec_initial_sol
Initial solution.
virtual Status _startup(DataType &alpha, DataType &fval, DataType &delta, const VectorType &vec_sol, const VectorType &vec_dir)
Performs the startup of the iteration.
VectorType _vec_pn
descend direction vector, normalized for better numerical stability
virtual void reset()
Resets various member variables in case the solver is reused.
DataType _fval_min
Functional functional value.
Filter_ & _filter
The filter to be applied to the functional's gradient.
DataType _alpha_0
Initial line search parameter.
DataType _alpha_min
Line search parameter.
virtual Status _check_convergence(const DataType fval, const DataType df, const DataType alpha)
Performs the line search convergence checks using the strong Wolfe conditions.
Functional_::DataType DataType
Underlying floating point type.
SecantLinesearch(Functional_ &functional, Filter_ &filter, const DataType secant_step=secant_step_default, const bool keep_iterates=false)
Standard constructor.
virtual Status _apply_intern(VectorType &vec_sol, const VectorType &vec_dir)
Internal function: Applies the solver.
virtual Status apply(VectorType &vec_cor, const VectorType &vec_dir) override
Applies the solver, setting the initial guess to zero.
virtual ~SecantLinesearch()
static constexpr DataType secant_step_default
Default initial step length.
SecantLinesearch(const String §ion_name, const PropertyMap *section, Functional_ &functional, Filter_ &filter)
Constructor using a PropertyMap.
Filter_ FilterType
Filter type to be applied to the gradient of the functional.
DataType _secant_step
Default step for calculating the "other" secant point in the initial step. Crucial.
virtual Status correct(VectorType &vec_sol, const VectorType &vec_dir) override
Applies the solver, making use of an initial guess.
void set_secant_step(DataType secant_step)
Sets the length of the first secant step.
virtual void reset() override
Resets various member variables in case the solver is reused.
Functional_::VectorTypeR VectorType
Input vector type for the functional's gradient.
Linesearch< Functional_, Filter_ > BaseClass
Our base class.
virtual String name() const override
Returns a descriptive string.
String class implementation.
T_ sqrt(T_ x)
Returns the square-root of a value.
T_ abs(T_ x)
Returns the absolute value.
std::shared_ptr< SecantLinesearch< Functional_, Filter_ > > new_secant_linesearch(Functional_ &functional, Filter_ &filter, typename Functional_::DataType secant_step=SecantLinesearch< Functional_, Filter_ >::secant_step_default, bool keep_iterates=false)
Creates a new SecantLinesearch object.
Status
Solver status return codes enumeration.
@ success
solving successful (convergence criterion fulfilled)
@ progress
continue iteration (internal use only)
@ undefined
undefined status
@ stagnated
solver stagnated (stagnation criterion fulfilled)