So-Bogus
A c++ sparse block matrix library aimed at Second Order cone problems
|
Abstract Gauss-Seidel interface . More...
#include <GaussSeidelBase.hpp>
Public Types | |
typedef ConstrainedSolverBase < GaussSeidelImpl, 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 | |
void | setMaxThreads (unsigned maxThreads=0) |
Sets the maximum number of threads that the solver can use. More... | |
void | setAutoRegularization (Scalar maxRegul) |
Sets the auto-regularization (a.k.a. proximal point) coefficient. More... | |
void | setEvalEvery (unsigned evalEvery) |
Sets the number of iterations that should be performed between successive evaluations of the global error function. More... | |
void | setSkipTol (Scalar skipTol) |
Sets the minimum iteration step size under which local problems are temporarily frozen. | |
void | setSkipIters (unsigned skipIters) |
Sets the number of iterations for temporarily freezing local problems. | |
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 |
GaussSeidelImpl & | setMatrix (const BlockObjectBase< BlockMatrixType > &matrix) |
Sets the system matrix and initializes internal structures. More... | |
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 |
CallBackType & | callback () |
Callback hook; will be triggered every N iterations, depending on the solver. More... | |
const CallBackType & | callback () const |
const BlockObjectBase < BlockMatrixType > & | matrix () const |
Protected Types | |
typedef Base::Index | Index |
typedef Base::BlockProblemTraits::Matrix | DiagonalBlockType |
Protected Member Functions | |
const BlockMatrixBase < BlockMatrixType > & | explicitMatrix () const |
const IterableBlockObject < BlockMatrixType > & | iterableMatrix () const |
void | processLocalMatrices () |
template<typename NSLaw , typename ResT > | |
Scalar | evalAndKeepBest (const NSLaw &law, const ResT &x, const typename GlobalProblemTraits::DynVector &y, typename GlobalProblemTraits::DynVector &x_best, Scalar &err_best) const |
template<typename NSLaw , typename RhsT , typename ResT > | |
bool | tryZero (const NSLaw &law, const RhsT &b, ResT &x, typename GlobalProblemTraits::DynVector &x_best, Scalar &err_best) const |
void | updateScalings () |
Protected Attributes | |
ResizableSequenceContainer < DiagonalBlockType >::Type | m_localMatrices |
GlobalProblemTraits::DynVector | m_regularization |
unsigned | m_maxThreads |
See setMaxThreads(). Defaults to 0 . | |
unsigned | m_evalEvery |
See setEvalEvery(). Defaults to 25. | |
Scalar | m_skipTol |
See setSkipTol(). Defaults to 1.e-6. | |
unsigned | m_skipIters |
See setSkipIters() Defaults to 10. | |
Scalar | m_autoRegularization |
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 |
Abstract Gauss-Seidel interface .
|
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.
|
inherited |
Eval the current global residual as a function of the local ones.
y
should be such that y
= m_matrix * x
+ rhs
err
defined as follow :err
err
:= void bogus::GaussSeidelBase< GaussSeidelImpl, BlockMatrixType >::setAutoRegularization | ( | Scalar | maxRegul | ) |
Sets the auto-regularization (a.k.a. proximal point) coefficient.
The regularization works by slightly altering the local problems, so at each iteration we try to solve
where is the regularization coefficient.
Note that as when the algorithm converges, we are still trying to find a solution of the same global problem.
For under-determined problems, regularization might helps preventing x reaching problematically high values. Setting to a too big value will however degrade the convergence of the global algorithm.
maxRegul | If greater than zero, then positive terms will be added to the diagonal of the local matrices so that their minimal eigenvalue become greater than maxRegul . |
void bogus::GaussSeidelBase< GaussSeidelImpl, BlockMatrixType >::setEvalEvery | ( | unsigned | evalEvery | ) |
Sets the number of iterations that should be performed between successive evaluations of the global error function.
( Those evaluations require a full matrix/vector product, and are therfore quite costly )
|
inherited |
Sets the system matrix and initializes internal structures.
void bogus::GaussSeidelBase< GaussSeidelImpl, BlockMatrixType >::setMaxThreads | ( | unsigned | maxThreads = 0 | ) |
Sets the maximum number of threads that the solver can use.
If \p maxThreads is zero, then it will use the current OpenMP setting.
On the other hand, the algorithm will run much faster.
|
protected |