![]() |
SOPT
Sparse OPTimisation
|
Simultaneous-direction method of the multipliers. More...
#include <sdmm.h>
Classes | |
| struct | Diagnostic |
| Values indicating how the algorithm ran. More... | |
| struct | DiagnosticAndResult |
Public Types | |
| using | value_type = SCALAR |
| Scalar type. More... | |
| using | Scalar = value_type |
| Scalar type. More... | |
| using | Real = typename real_type< Scalar >::type |
| Real type. More... | |
| using | t_Vector = Vector< SCALAR > |
| Type of then underlying vectors. More... | |
| using | t_LinearTransform = LinearTransform< t_Vector > |
| Type of the A and A^H operations. More... | |
| using | t_Proximal = ProximalFunction< SCALAR > |
| Type of the proximal functions. More... | |
| using | t_IsConverged = ConvergenceFunction< SCALAR > |
| Type of the convergence function. More... | |
Public Member Functions | |
| SDMM () | |
| virtual | ~SDMM () |
| SOPT_MACRO (itermax, t_uint) | |
| Maximum number of iterations. More... | |
| SOPT_MACRO (gamma, Real) | |
| Gamma. More... | |
| SOPT_MACRO (conjugate_gradient, ConjugateGradient) | |
| Conjugate gradient. More... | |
| SOPT_MACRO (is_converged, t_IsConverged) | |
| A function verifying convergence. More... | |
| SDMM< SCALAR > & | conjugate_gradient (t_uint itermax, t_real tolerance) |
| Helps setup conjugate gradient. More... | |
| template<typename PROXIMAL , typename T > | |
| SDMM< SCALAR > & | append (PROXIMAL proximal, T args) |
| Appends a proximal and linear transform. More... | |
| template<typename PROXIMAL > | |
| SDMM< SCALAR > & | append (PROXIMAL proximal) |
| Appends a proximal with identity as the linear transform. More... | |
| template<typename PROXIMAL , typename L , typename LADJOINT > | |
| SDMM< SCALAR > & | append (PROXIMAL proximal, L l, LADJOINT ladjoint) |
| Appends a proximal with the linear transform as pair of functions. More... | |
| template<typename PROXIMAL , typename L , typename LADJOINT > | |
| SDMM< SCALAR > & | append (PROXIMAL proximal, L l, LADJOINT ladjoint, std::array< t_int, 3 > sizes) |
| Appends a proximal with the linear transform as pair of functions. More... | |
| template<typename PROXIMAL , typename L , typename LADJOINT > | |
| SDMM< SCALAR > & | append (PROXIMAL proximal, L l, std::array< t_int, 3 > dsizes, LADJOINT ladjoint, std::array< t_int, 3 > isizes) |
| Appends a proximal with the linear transform as pair of functions. More... | |
| Diagnostic | operator() (t_Vector &out, t_Vector const &input) const |
| Implements SDMM. More... | |
| DiagnosticAndResult | operator() (t_Vector const &input) const |
| DiagnosticAndResult | operator() (DiagnosticAndResult const &warmstart) const |
| Makes it simple to chain different calls to SDMM. More... | |
| std::vector< t_LinearTransform > const & | transforms () const |
| Linear transforms associated with each objective function. More... | |
| std::vector< t_LinearTransform > & | transforms () |
| Linear transforms associated with each objective function. More... | |
| t_LinearTransform const & | transforms (t_uint i) const |
| Linear transform associated with a given objective function. More... | |
| t_LinearTransform & | transforms (t_uint i) |
| Linear transform associated with a given objective function. More... | |
| std::vector< t_Proximal > const & | proximals () const |
| Proximal of each objective function. More... | |
| std::vector< t_Proximal > & | proximals () |
| Linear transforms associated with each objective function. More... | |
| t_Proximal const & | proximals (t_uint i) const |
| Proximal associated with a given objective function. More... | |
| t_Proximal & | proximals (t_uint i) |
| Proximal associated with a given objective function. More... | |
| template<typename T0 > | |
| proximal::ProximalExpression< t_Proximal const &, T0 > | proximals (t_uint i, Eigen::MatrixBase< T0 > const &x) const |
| Lazy call to specific proximal function. More... | |
| t_uint | size () const |
| Number of terms. More... | |
| template<typename T0 , typename... T> | |
| auto | conjugate_gradient (T0 &&t0, T &&... args) const -> decltype(this->conjugate_gradient()(std::forward< T0 >(t0), std::forward< T >(args)...)) |
| Forwards to internal conjugage gradient object. More... | |
| bool | is_converged (t_Vector const &x) const |
| Forwards to convergence function parameter. More... | |
Simultaneous-direction method of the multipliers.
The algorithm is detailed in (doi) 10.1093/mnras/stu202.
| using sopt::algorithm::SDMM< SCALAR >::Real = typename real_type<Scalar>::type |
| using sopt::algorithm::SDMM< SCALAR >::Scalar = value_type |
| using sopt::algorithm::SDMM< SCALAR >::t_IsConverged = ConvergenceFunction<SCALAR> |
| using sopt::algorithm::SDMM< SCALAR >::t_LinearTransform = LinearTransform<t_Vector> |
| using sopt::algorithm::SDMM< SCALAR >::t_Proximal = ProximalFunction<SCALAR> |
| using sopt::algorithm::SDMM< SCALAR >::t_Vector = Vector<SCALAR> |
| using sopt::algorithm::SDMM< SCALAR >::value_type = SCALAR |
|
inline |
|
inlinevirtual |
|
inline |
Appends a proximal with identity as the linear transform.
Definition at line 97 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::append().
|
inline |
Appends a proximal with the linear transform as pair of functions.
Definition at line 102 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::append().
|
inline |
Appends a proximal with the linear transform as pair of functions.
Definition at line 107 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::append().
|
inline |
Appends a proximal with the linear transform as pair of functions.
Definition at line 112 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::append().
|
inline |
Appends a proximal and linear transform.
Definition at line 90 of file sdmm.h.
References sopt::linear_transform(), sopt::algorithm::SDMM< SCALAR >::proximals(), and sopt::algorithm::SDMM< SCALAR >::transforms().
Referenced by sopt::algorithm::SDMM< SCALAR >::append(), and TEST_CASE().
|
inline |
Forwards to internal conjugage gradient object.
Removes the need for ugly extra brackets.
Definition at line 166 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::conjugate_gradient().
|
inline |
Helps setup conjugate gradient.
Definition at line 83 of file sdmm.h.
Referenced by sopt::algorithm::SDMM< SCALAR >::conjugate_gradient(), main(), and TEST_CASE().
|
inline |
Forwards to convergence function parameter.
Definition at line 172 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::is_converged().
Referenced by sopt::algorithm::SDMM< SCALAR >::is_converged(), main(), and SCENARIO().
|
inline |
Makes it simple to chain different calls to SDMM.
Definition at line 128 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::DiagnosticAndResult::x.
| SDMM< SCALAR >::Diagnostic sopt::algorithm::SDMM< SCALAR >::operator() | ( | t_Vector & | out, |
| t_Vector const & | input | ||
| ) | const |
Implements SDMM.
Follows Combettes and Pesquet "Proximal Splitting Methods in Signal Processing", arXiv:0912.3522v4 [math.OC] (2010), equation 65. See therein for notation
Definition at line 196 of file sdmm.h.
References a, SOPT_HIGH_LOG, and SOPT_LOW_LOG.
|
inline |
Definition at line 122 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::DiagnosticAndResult::x.
|
inline |
|
inline |
Proximal of each objective function.
Definition at line 144 of file sdmm.h.
Referenced by sopt::algorithm::SDMM< SCALAR >::append(), sopt::algorithm::SDMM< SCALAR >::proximals(), and sopt::algorithm::SDMM< SCALAR >::size().
|
inline |
|
inline |
|
inline |
Lazy call to specific proximal function.
Definition at line 153 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::proximals().
|
inline |
Number of terms.
Definition at line 159 of file sdmm.h.
References sopt::algorithm::SDMM< SCALAR >::proximals().
| sopt::algorithm::SDMM< SCALAR >::SOPT_MACRO | ( | conjugate_gradient | , |
| ConjugateGradient | |||
| ) |
Conjugate gradient.
| sopt::algorithm::SDMM< SCALAR >::SOPT_MACRO | ( | gamma | , |
| Real | |||
| ) |
Gamma.
| sopt::algorithm::SDMM< SCALAR >::SOPT_MACRO | ( | is_converged | , |
| t_IsConverged | |||
| ) |
A function verifying convergence.
| sopt::algorithm::SDMM< SCALAR >::SOPT_MACRO | ( | itermax | , |
| t_uint | |||
| ) |
Maximum number of iterations.
|
inline |
|
inline |
Linear transforms associated with each objective function.
Definition at line 135 of file sdmm.h.
Referenced by sopt::algorithm::SDMM< SCALAR >::append(), and TEST_CASE().
|
inline |
|
inline |