So-Bogus
A c++ sparse block matrix library aimed at Second Order cone problems
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
bogus::DualAMA< BlockMatrixType > Class Template Reference

Dual AMA iterative solver (Alternating Minimization Algorithm on dual formuation of quadratic optimization problem). More...

#include <ADMM.hpp>

Inheritance diagram for bogus::DualAMA< BlockMatrixType >:
bogus::ConstrainedSolverBase< DualAMA< BlockMatrixType >, BlockMatrixType > bogus::BlockSolverBase< BlockMatrixType >

Public Types

typedef ConstrainedSolverBase
< DualAMA, BlockMatrixType > 
Base
 
typedef Base::GlobalProblemTraits GlobalProblemTraits
 
typedef GlobalProblemTraits::Scalar Scalar
 
typedef LocalProblemTraits
< Base::BlockTraits::RowsPerBlock,
Scalar > 
BlockProblemTraits
 
typedef BlockMatrixTraits
< BlockMatrixType > 
BlockTraits
 
typedef Signal< unsigned, Scalar > CallBackType
 

Public Member Functions

 DualAMA ()
 Default constructor – you will have to call setMatrix() before using the solve() function.
 
 DualAMA (const BlockObjectBase< BlockMatrixType > &matrix)
 Constructor with the system matrix.
 
template<typename NSLaw , typename MatrixT , typename RhsT , typename ResT >
Scalar solve (const NSLaw &law, const BlockObjectBase< MatrixT > &A, const RhsT &f, const RhsT &w, ResT &v, ResT &r) const
 Solve function using default variant.
 
template<admm::Variant variant, typename NSLaw , typename MatrixT , typename RhsT , typename ResT >
Scalar solve (const NSLaw &law, const BlockObjectBase< MatrixT > &A, const RhsT &f, const RhsT &w, ResT &v, ResT &r) const
 Solve function with variant as template argument.
 
template<admm::Variant variant, typename NSLaw , typename AType , typename BType , typename HType , typename PrecondT , typename RhsT , typename ORhsT , typename ResT , typename OResT >
Scalar solveWithLinearConstraints (const NSLaw &law, const BlockObjectBase< AType > &A, const BlockObjectBase< BType > &B, const BlockObjectBase< HType > &H, const PrecondT &preconditioner, const RhsT &f, const ORhsT &k, const RhsT &w, ResT &v, OResT &p, ResT &r, Scalar stepRatio=1) const
 Idem with constraint ( B v + k = 0 )
 
DualAMAsetMatrix (const BlockObjectBase< BlockMatrixType > &matrix)
 Sets the problem matrix – the one defining the constraints.
 
void setFpStepSize (const Scalar size)
 Sets the step size for updating the dual variable (forces).
 
void setProjStepSize (const Scalar size)
 
void setDefaultVariant (admm::Variant variant)
 Sets the variant that will be used when calling solve() without template arguments.
 
Scalar fpStepSize () const
 
Scalar projStepSize () const
 
void setLineSearchIterations (const unsigned lsIterations)
 Sets the maximum number of line-search iterations.
 
void setLineSearchOptimisticFactor (const Scalar lsOptimisticFactor)
 
void setLineSearchPessimisticFactor (const Scalar lsPessimisticFactor)
 
unsigned lineSearchIterations () const
 
Scalar lineSearchOptimisticFactor () const
 
Scalar lineSearchPessimisticFactor () const
 
void useInfinityNorm (bool useInfNorm)
 Sets whether the solver will use the infinity norm instead of the l1 one to compute the global residual from the local ones.
 
bool usesInfinityNorm () const
 
Scalar eval (const NSLaw &law, const ResT &y, const RhsT &x) const
 Eval the current global residual as a function of the local ones. More...
 
void projectOnConstraints (const NSLaw &projector, VectorT &x) const
 Projects the variable x on the constraints defined by projector.
 
void dualityCOV (const NSLaw &law, const RhsT &b, ResT &x) const
 Compute associated change of variable (see NSLaw)
 
Scalar solve (const NSLaw &law, const RhsT &b, ResT &x) const
 
void setMaxIters (unsigned maxIters)
 For iterative solvers: sets the maximum number of iterations.
 
unsigned maxIters () const
 
void setTol (Scalar tol)
 For iterative solvers: sets the solver tolerance.
 
Scalar tol () const
 
CallBackTypecallback ()
 Callback hook; will be triggered every N iterations, depending on the solver. More...
 
const CallBackTypecallback () const
 
const BlockObjectBase
< BlockMatrixType > & 
matrix () const
 

Protected Types

typedef Base::Index Index
 

Protected Member Functions

void init ()
 Sets up the default values for all parameters.
 
void updateScalings ()
 

Protected Attributes

Scalar m_fpStepSize
 
Scalar m_projStepSize
 
admm::Variant m_defaultVariant
 
unsigned m_lsIters
 
Scalar m_lsOptimisticFactor
 
Scalar m_lsPessimisticFactor
 
GlobalProblemTraits::DynVector m_scaling
 
bool m_useInfinityNorm
 See useInfinityNorm(). Defaults to false.
 
const BlockObjectBase
< BlockMatrixType > * 
m_matrix
 Pointer to the matrix of the system.
 
unsigned m_maxIters
 See setMaxIters()
 
Scalar m_tol
 See setTol()
 
CallBackType m_callback
 

Detailed Description

template<typename BlockMatrixType>
class bogus::DualAMA< BlockMatrixType >

Dual AMA iterative solver (Alternating Minimization Algorithm on dual formuation of quadratic optimization problem).

Minimizes .5 r' M A^-1 M' r + r' ( w - M A^-1 f ) for r in C

as min H(x) + G(r)  , x = M' r
with H(x) = .5 x' A^-1 x - x' A^-1 f
     G(r) = I_C(r) + r'w

thanks to the identities
 prox_{l,G} (y) = prox_{l,Ic}( y - lw ) = Pi_C ( y - lw )
and
 inf_x  H(x) - < v, x > = A v + f

Main advantage of this solver is that it does not require inverting or solving linear system with the stiffness matrix A.

Warning
Experimental

Member Function Documentation

template<typename BlockMatrixType >
CallBackType& bogus::BlockSolverBase< BlockMatrixType >::callback ( )
inherited

Callback hook; will be triggered every N iterations, depending on the solver.

Useful to monitor the convergence of the solver. Can be connected to a function that takes an unsigned and a Scalar as parameters. The first argument will be the current iteration number, and the second the current residual.

See Also
Signal< unsigned, Scalar >
Scalar bogus::ConstrainedSolverBase< DualAMA< BlockMatrixType > , BlockMatrixType >::eval ( const NSLaw &  law,
const ResT &  y,
const RhsT &  x 
) const
inherited

Eval the current global residual as a function of the local ones.

y should be such that y = m_matrix * x + rhs

Returns
the current residual err defined as follow :
template<typename BlockMatrixType >
void bogus::DualAMA< BlockMatrixType >::setLineSearchOptimisticFactor ( const Scalar  lsOptimisticFactor)

Sets the amount by which the step size will be multiplied at the beginninf of each PG iteration. Should be greater than 1

template<typename BlockMatrixType >
void bogus::DualAMA< BlockMatrixType >::setLineSearchPessimisticFactor ( const Scalar  lsPessimisticFactor)

Sets the amount by which the step size will be multiplied at the end of each line-search iterations. Should be in ]0,1[


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