Main Page | Modules | Namespace List | Class Hierarchy | Class List | Namespace Members | Class Members

LineSearch Class Reference
[Energy Minimizer]

Basic line search class. More...

#include <lineSearch.h>

List of all members.

Public Member Functions

Constructors and Destructors
 LineSearch ()
 Default constructor.
 LineSearch (EnergyMinimizer &minimizer)
 Detailed constructor.
 LineSearch (const LineSearch &line_search)
 Copy constructor.
virtual ~LineSearch () throw ()
 Destructor.
Assignments
const LineSearchoperator= (const LineSearch &LineSearch)
 Assignment operator.
Accessors
void setAlpha (double alpha)
 Set the parameter alpha (convergence criterion for the line search).
void setBeta (double beta)
 Set the parameter beta (convergence criterion for the line search).
double getAlpha () const
 Get the parameter alpha (convergence criterion for the line search).
double getBeta () const
 Get the parameter beta (convergence criterion for the line search).
Size getMaxSteps () const
 Get the parameter max_steps.
void setMaxSteps (Size steps)
 Set the parameter max_steps.
void setLowerBound (double lbound)
 Set the lower bound on energy values.
double getLowerBound () const
 Get the lower bound on energy values.
void setXTol (double xtol)
 Set the nonnegative relative tolerance for an acceptable step length.
double getXTol () const
 Get the nonnegative relative tolerance for an acceptable step length.
void setBracketedFlag (bool bracktd)
 Set the flag is_bracketed_.
bool isBracketed () const
 Return whether a minimizer has already been bracketed.
void setMinimizer (EnergyMinimizer &minimizer)
 Set the minimizer class which provides the search direction and the force field among other things.
virtual void takeStep (double &st_a, double &f_a, double &g_a, double &st_b, double &f_b, double &g_b, double &stp, double f, double g, double minstp, double maxstp)
 Computes a safeguarded step for a search procedure by case differentiation dependend on whether a minimum could already be bracketed or not.
Minimization
virtual bool minimize (double &stp, bool keep_gradient=false)
 Perform a line search.

Protected Attributes

double alpha_
double beta_
Size max_steps_
double lower_energy_bound_
double stptol_
bool is_bracketed_
EnergyMinimizerminimizer_


Detailed Description

Basic line search class.

This method minimizes the energy of a system along a given direction using a two stage algorithm. It is based on cubic and quadratic interpolation methods of Jorge J. More and David J. Thuente. See

[1] J. More and D. Thuente, "Line search algorithms with guaranteed sufficient decrease," ACM Transactions on Mathematical Software 20 (1994), no. 3, pp. 286-307.


Constructor & Destructor Documentation

LineSearch::LineSearch  ) 
 

Default constructor.

LineSearch::LineSearch EnergyMinimizer minimizer  ) 
 

Detailed constructor.

virtual LineSearch::~LineSearch  )  throw () [virtual]
 

Destructor.


Member Function Documentation

double LineSearch::getAlpha  )  const
 

Get the parameter alpha (convergence criterion for the line search).

See also:
minimize

double LineSearch::getBeta  )  const
 

Get the parameter beta (convergence criterion for the line search).

See also:
minimize

double LineSearch::getLowerBound  )  const
 

Get the lower bound on energy values.

Size LineSearch::getMaxSteps  )  const
 

Get the parameter max_steps.

double LineSearch::getXTol  )  const
 

Get the nonnegative relative tolerance for an acceptable step length.

bool LineSearch::isBracketed  )  const
 

Return whether a minimizer has already been bracketed.

Warning: this returns only the flag is_bracketed_. If this flag has not been set by the algorithm but changed by setBracketedFlag this might not be trustworthy!

virtual bool LineSearch::minimize double &  stp,
bool  keep_gradient = false
[virtual]
 

Perform a line search.

Find the minimum position for all atoms along the direction provided by the minimization algorithm. A two stage algorithm is used proposed by Jorge J. More and David J. Thuente. If necessary (the convergence criterion is not fulfilled) a minimizer along the given direction is bracketed in the first stage. In the second stage this function looks for a minimizer whithin the bracketed interval. The routine exits

(1) if the strong Wolfe conditions are satisfied (convergence criterion for the line search), that are

\[E_{k+1} \leq E_k + \alpha\cdot stp\cdot<g_k, d_k>\]

and

\[|<g_{k+1}, d_k>| \leq \beta\cdot |<g_k, d_k>|\]

where $g_k$ and $g_{k+1}$ are the initial and the current gradient and $d_k$ is the search direction, $E_{k+1}$ is the current and $E_k$ the initial energy (stp = 0), $\alpha$ and $\beta$ are two parameters (usually 0.9 and 0.0001).

(2) if the relative tolerance for an acceptable step is reached (length of the bracketing interval).

(3) if there has been some numerical problems. In this case the best step length which could be found is returned.

Parameters:
stp Unused on entry since the line search always starts with stp = 1.0. On exit the step length corresponding to a successful step or just the best this function was able to find.
keep_gradient If true, we will not calculate the gradient for stp = 1 but assume that this has already been performed instead.

void LineSearch::setAlpha double  alpha  ) 
 

Set the parameter alpha (convergence criterion for the line search).

See also:
minimize

void LineSearch::setBeta double  beta  ) 
 

Set the parameter beta (convergence criterion for the line search).

See also:
minimize

void LineSearch::setBracketedFlag bool  bracktd  ) 
 

Set the flag is_bracketed_.

The algorithm will act as if a minimizer has already been bracketed (true) or not (false). Warning: this can be useful if a user exactly knows what they are doing. Usually, this flag should not be touched! The algorithm sets this flag automatically if a minimizer could be bracketed.

void LineSearch::setLowerBound double  lbound  ) 
 

Set the lower bound on energy values.

An estimation for the maximum step length is computed based on this value.

void LineSearch::setMaxSteps Size  steps  ) 
 

Set the parameter max_steps.

void LineSearch::setMinimizer EnergyMinimizer minimizer  ) 
 

Set the minimizer class which provides the search direction and the force field among other things.

void LineSearch::setXTol double  xtol  ) 
 

Set the nonnegative relative tolerance for an acceptable step length.

virtual void LineSearch::takeStep double &  st_a,
double &  f_a,
double &  g_a,
double &  st_b,
double &  f_b,
double &  g_b,
double &  stp,
double  f,
double  g,
double  minstp,
double  maxstp
[virtual]
 

Computes a safeguarded step for a search procedure by case differentiation dependend on whether a minimum could already be bracketed or not.

All computations are done by safeguarded quadratic and cubic interpolation. The interval that contains a step that satisfies a sufficient decrease and the curvature condition is updated. This function is based on the proposed step computation of Jorge J. More and David J. Thuente. Don't worry if interval bounds are changed after this routine exits.

Parameters:
st_a Best step obtained so far and an endpoint of the interval that contains the minimizer.
f_a Energy value at st_a.
g_a Directional derivative at st_a.
st_b Second endpoint of the interval that contains the minimizer.
f_b Energy value at st_b.
g_b Directional derivative at st_b.
stp Current step. If is_bracketed_ is set to true then stp must be between st_a and st_b.
f Energy value at stp.
g Directional derivative at stp.
minstp Lower bound for the step.
maxstp Upper bound for the step.