Open CASCADE Technology 7.8.0
Public Member Functions | Protected Attributes
math_BFGS Class Reference

This class implements the Broyden-Fletcher-Goldfarb-Shanno variant of Davidson-Fletcher-Powell minimization algorithm of a function of multiple variables.Knowledge of the function's gradient is required. More...

#include <math_BFGS.hxx>

Inheritance diagram for math_BFGS:
Inheritance graph
[legend]

Public Member Functions

 math_BFGS (const Standard_Integer NbVariables, const Standard_Real Tolerance=1.0e-8, const Standard_Integer NbIterations=200, const Standard_Real ZEPS=1.0e-12)
 Initializes the computation of the minimum of a function with NbVariables. Tolerance, ZEPS and NbIterations are described in the method Perform. Warning: A call to the Perform method must be made after this initialization to effectively compute the minimum of the function F.
 
virtual ~math_BFGS ()
 
void SetBoundary (const math_Vector &theLeftBorder, const math_Vector &theRightBorder)
 Set boundaries for conditional optimization. The expected indices range of vectors is [1, NbVariables].
 
void Perform (math_MultipleVarFunctionWithGradient &F, const math_Vector &StartingPoint)
 Given the starting point StartingPoint, minimization is done on the function F. The solution F = Fi is found when : 2.0 * abs(Fi - Fi-1) <= Tolerance * (abs(Fi) + abs(Fi-1) + ZEPS). Tolerance, ZEPS and maximum number of iterations are given in the constructor.
 
virtual Standard_Boolean IsSolutionReached (math_MultipleVarFunctionWithGradient &F) const
 This method is called at the end of each iteration to check if the solution is found. It can be redefined in a sub-class to implement a specific test to stop the iterations.
 
Standard_Boolean IsDone () const
 Returns true if the computations are successful, otherwise returns false.
 
const math_VectorLocation () const
 returns the location vector of the minimum. Exception NotDone is raised if the minimum was not found.
 
void Location (math_Vector &Loc) const
 outputs the location vector of the minimum in Loc. Exception NotDone is raised if the minimum was not found. Exception DimensionError is raised if the range of Loc is not equal to the range of the StartingPoint.
 
Standard_Real Minimum () const
 returns the value of the minimum. Exception NotDone is raised if the minimum was not found.
 
const math_VectorGradient () const
 Returns the gradient vector at the minimum. Exception NotDone is raised if the minimum was not found.
 
void Gradient (math_Vector &Grad) const
 Returns the value of the gradient vector at the minimum in Grad. Exception NotDone is raised if the minimum was not found. Exception DimensionError is raised if the range of Grad is not equal to the range of the StartingPoint.
 
Standard_Integer NbIterations () const
 Returns the number of iterations really done in the calculation of the minimum. The exception NotDone is raised if the minimum was not found.
 
void Dump (Standard_OStream &o) const
 Prints on the stream o information on the current state of the object. Is used to redefine the operator <<.
 

Protected Attributes

math_Status TheStatus
 
math_Vector TheLocation
 
math_Vector TheGradient
 
Standard_Real PreviousMinimum
 
Standard_Real TheMinimum
 
Standard_Real XTol
 
Standard_Real EPSZ
 
Standard_Integer nbiter
 
Standard_Boolean myIsBoundsDefined
 
math_Vector myLeft
 
math_Vector myRight
 

Detailed Description

This class implements the Broyden-Fletcher-Goldfarb-Shanno variant of Davidson-Fletcher-Powell minimization algorithm of a function of multiple variables.Knowledge of the function's gradient is required.

It is possible to solve conditional optimization problem on hyperparallelepiped. Method SetBoundary is used to define hyperparallelepiped borders. With boundaries defined, the algorithm will not make evaluations of the function outside of the borders.

Constructor & Destructor Documentation

◆ math_BFGS()

math_BFGS::math_BFGS ( const Standard_Integer  NbVariables,
const Standard_Real  Tolerance = 1.0e-8,
const Standard_Integer  NbIterations = 200,
const Standard_Real  ZEPS = 1.0e-12 
)

Initializes the computation of the minimum of a function with NbVariables. Tolerance, ZEPS and NbIterations are described in the method Perform. Warning: A call to the Perform method must be made after this initialization to effectively compute the minimum of the function F.

◆ ~math_BFGS()

virtual math_BFGS::~math_BFGS ( )
virtual

Member Function Documentation

◆ Dump()

void math_BFGS::Dump ( Standard_OStream o) const

Prints on the stream o information on the current state of the object. Is used to redefine the operator <<.

◆ Gradient() [1/2]

const math_Vector & math_BFGS::Gradient ( ) const

Returns the gradient vector at the minimum. Exception NotDone is raised if the minimum was not found.

◆ Gradient() [2/2]

void math_BFGS::Gradient ( math_Vector Grad) const

Returns the value of the gradient vector at the minimum in Grad. Exception NotDone is raised if the minimum was not found. Exception DimensionError is raised if the range of Grad is not equal to the range of the StartingPoint.

◆ IsDone()

Standard_Boolean math_BFGS::IsDone ( ) const

Returns true if the computations are successful, otherwise returns false.

◆ IsSolutionReached()

virtual Standard_Boolean math_BFGS::IsSolutionReached ( math_MultipleVarFunctionWithGradient F) const
virtual

◆ Location() [1/2]

const math_Vector & math_BFGS::Location ( ) const

returns the location vector of the minimum. Exception NotDone is raised if the minimum was not found.

◆ Location() [2/2]

void math_BFGS::Location ( math_Vector Loc) const

outputs the location vector of the minimum in Loc. Exception NotDone is raised if the minimum was not found. Exception DimensionError is raised if the range of Loc is not equal to the range of the StartingPoint.

◆ Minimum()

Standard_Real math_BFGS::Minimum ( ) const

returns the value of the minimum. Exception NotDone is raised if the minimum was not found.

◆ NbIterations()

Standard_Integer math_BFGS::NbIterations ( ) const

Returns the number of iterations really done in the calculation of the minimum. The exception NotDone is raised if the minimum was not found.

◆ Perform()

void math_BFGS::Perform ( math_MultipleVarFunctionWithGradient F,
const math_Vector StartingPoint 
)

Given the starting point StartingPoint, minimization is done on the function F. The solution F = Fi is found when : 2.0 * abs(Fi - Fi-1) <= Tolerance * (abs(Fi) + abs(Fi-1) + ZEPS). Tolerance, ZEPS and maximum number of iterations are given in the constructor.

◆ SetBoundary()

void math_BFGS::SetBoundary ( const math_Vector theLeftBorder,
const math_Vector theRightBorder 
)

Set boundaries for conditional optimization. The expected indices range of vectors is [1, NbVariables].

Field Documentation

◆ EPSZ

Standard_Real math_BFGS::EPSZ
protected

◆ myIsBoundsDefined

Standard_Boolean math_BFGS::myIsBoundsDefined
protected

◆ myLeft

math_Vector math_BFGS::myLeft
protected

◆ myRight

math_Vector math_BFGS::myRight
protected

◆ nbiter

Standard_Integer math_BFGS::nbiter
protected

◆ PreviousMinimum

Standard_Real math_BFGS::PreviousMinimum
protected

◆ TheGradient

math_Vector math_BFGS::TheGradient
protected

◆ TheLocation

math_Vector math_BFGS::TheLocation
protected

◆ TheMinimum

Standard_Real math_BFGS::TheMinimum
protected

◆ TheStatus

math_Status math_BFGS::TheStatus
protected

◆ XTol

Standard_Real math_BFGS::XTol
protected

The documentation for this class was generated from the following file: