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

StrangLBFGSMinimizer Class Reference
[Energy Minimizer]

Limited-memory BFGS minimizer based on the Strang recurrence. More...

#include <strangLBFGS.h>

Inheritance diagram for StrangLBFGSMinimizer:

EnergyMinimizer List of all members.

Public Member Functions

Constructors and Destructors
 StrangLBFGSMinimizer ()
 Default constructor.
 StrangLBFGSMinimizer (ForceField &force_field)
 Constructor expecting a valid force field.
 StrangLBFGSMinimizer (ForceField &force_field, SnapShotManager *ssm)
 Constructor expecting a valid force field and a snapshot manager.
 StrangLBFGSMinimizer (ForceField &force_field, SnapShotManager *ssm, const Options &options)
 Constructor expecting a valid force field, a snapshot manager and options.
 StrangLBFGSMinimizer (ForceField &force_field, const Options &options)
 Constructor expecting a valid force field and options.
 StrangLBFGSMinimizer (const StrangLBFGSMinimizer &rhs)
 Copy constructor.
virtual ~StrangLBFGSMinimizer ()
 Destructor.
Assignments
const StrangLBFGSMinimizeroperator= (const StrangLBFGSMinimizer &rhs)
 Assignment operator.
Setup methods. They do all necessary preparations.
virtual bool specificSetup ()
 Specific setup.
Accessors
void setMaxNumOfStoredVectPairs (Size num)
 Set the maximum number of stored vector pairs.
Size getMaxNumOfStoredVectPairs () const
 Return the maximum number of stored vector pairs.
void setImprovedFlag (bool flag)
 Set the improved flag.
bool getImprovedFlag () const
 Return the improved flag.
virtual double findStep ()
 Calculate the next step.
virtual void updateDirection ()
 Update the stored vector pairs, either by adding a new pair or if there is no space left by replacing the oldest pair.
virtual bool minimize (Size iterations=0, bool resume=false)
 Minimize the energy of the system.

Protected Attributes

Protected Attributes
LineSearch line_search_
 The line search.
bool first_iter_
 Is this an initial first iteration?
Size number_of_atoms_
 Number of movable atoms.
Size max_num_of_vect_pairs_
 Maximum number of stored vector pairs.
Size curr_num_of_vect_pairs_
 Current number of stored vector pairs.
bool improved_
 Should the improved version be used?
vector< float > rho_
 Old and new scaling values.
vector< Vector3stored_s_
 Stored former steps.
vector< Vector3stored_y_
 Stored former changes in gradients.
vector< float > work_val_
 Temporarily used memory for saving scalars associated with the stored vector pairs.
Size index_of_free_vect_
 Index of the vector pair which will be used for saving the data of the current step (usually by replacing old data).
std::vector< Vector3initial_atoms_
 Positions of movable atoms when starting an iteration.

Detailed Description

Limited-memory BFGS minimizer based on the Strang recurrence.

A minimizer for geometry optimization based on the limited-memory BFGS method proposed in

[1] Nocedal J.: Updating quasi-Newton matrices with limited storage. Math. Comp. 35 (1980) 773-782.

[2] Liu D.C., Nocedal J.: On the limited memory BFGS method for large scale optimization. Math. Programming 45 (1989) 503-528.

If the 'improved' option is set, ideas proposed in

[3] Mehiddin Al-Baali: Improved Hessian approximations for the limited memory BFGS method. Numerical Algorithms 22 (1999) 99-112

are adopted.


Constructor & Destructor Documentation

StrangLBFGSMinimizer::StrangLBFGSMinimizer  ) 
 

Default constructor.

virtual StrangLBFGSMinimizer::~StrangLBFGSMinimizer  )  [virtual]
 

Destructor.


Member Function Documentation

virtual double StrangLBFGSMinimizer::findStep  )  [virtual]
 

Calculate the next step.

First, this method updates the model. Second, it performs a line search along the calculated direction afterwards.

Returns:
double $\geq 0$ if the line search found an acceptable solution, otherwise -1.
See also:
EnergyMinimizer::findStep

Reimplemented from EnergyMinimizer.

virtual bool StrangLBFGSMinimizer::minimize Size  iterations = 0,
bool  resume = false
[virtual]
 

Minimize the energy of the system.

This method executes at most iterations minimization steps. If the number of iterations is not given, the number specified in the options is taken.

Parameters:
iterations the maximum number of iterations
resume true to resume a previous run
See also:
EnergyMinimizer::minimize

Reimplemented from EnergyMinimizer.

virtual void StrangLBFGSMinimizer::updateDirection  )  [virtual]
 

Update the stored vector pairs, either by adding a new pair or if there is no space left by replacing the oldest pair.

Compute the search direction afterwards by using the Strang recurrence formula (optional: with an improvement idea of Al-Baali).

Reimplemented from EnergyMinimizer.


Member Data Documentation

Size StrangLBFGSMinimizer::curr_num_of_vect_pairs_ [protected]
 

Current number of stored vector pairs.

Size StrangLBFGSMinimizer::index_of_free_vect_ [protected]
 

Index of the vector pair which will be used for saving the data of the current step (usually by replacing old data).

std::vector<Vector3> StrangLBFGSMinimizer::initial_atoms_ [protected]
 

Positions of movable atoms when starting an iteration.

This is used to reduce slightly rounding errors

Size StrangLBFGSMinimizer::max_num_of_vect_pairs_ [protected]
 

Maximum number of stored vector pairs.

Size StrangLBFGSMinimizer::number_of_atoms_ [protected]
 

Number of movable atoms.

vector<float> StrangLBFGSMinimizer::rho_ [protected]
 

Old and new scaling values.

Also used in the Strang recurrence formula.

vector<Vector3> StrangLBFGSMinimizer::stored_s_ [protected]
 

Stored former steps.

Vectors stored in column order.

vector<Vector3> StrangLBFGSMinimizer::stored_y_ [protected]
 

Stored former changes in gradients.

Vectors stored in column order.

vector<float> StrangLBFGSMinimizer::work_val_ [protected]
 

Temporarily used memory for saving scalars associated with the stored vector pairs.