![]() |
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 |