sigpy.alg.SDMM¶
-
class
sigpy.alg.
SDMM
(A, d, lam, L, c, mu, rho, rho_max, rho_norm, eps_pri=1e-05, eps_dual=0.01, c_max=None, c_norm=None, max_cg_iter=30, max_iter=1000)[source]¶ Simultaneous Direction Method of Multipliers. Can be used for unconstrained or constrained optimization with several constraints.
Solves the problem of form:
\[ \begin{align}\begin{aligned}\min_{x} \frac{1}{2}\left\|Ax-d\right\|_2^2 + \frac{\lambda}{2}\left\|x\right\|_2^2\\s.t. \left\|L_{i}x\right\|_2^2 < c_{i}\end{aligned}\end{align} \]In SDMM, constraints are typically specified as a list of L linear operators and c constraints. This algorithm gives the user the option to provide either a list of L’s and c’s or a single maximum (c_max) and/or norm constraint (c_norm) with implicit L.
Solution variable x can be found in alg_method.x.
Parameters: - A (Linop) – a system matrix Linop.
- d (array) – observation.
- lam (float) – scaling parameter.
- L (list of arrays) – list of constraint linear operator arrays. If not used, provide empty list {}.
- c (list of floats) – list of constraints, constraining the L2 norm of \(L_{i}x\)
- mu (float) – proximal scaling factor.
- rho (list of floats) – list of L scaling parameters, which each one corresponding to one L constraint linear array.
- rho_max (float) – max constraint scaling parameter (if c_max provided).
- rho_norm (float) – norm constraint scaling parameter (if c_norm provided).
- eps_pri (float) – primal variable error tolerance.
- eps_dual (float) – dual variable error tolerance.
- c_max (float) – maximum value constraint.
- c_norm (float) – norm constraint.
- max_cg_iter (int) – maximum number of unconstrained CG iterations per SDMM iteration.
- max_iter (int) – maximum number of SDMM iterations.
References
Moolekamp, F. and Melchior, P. (2017). ‘Block-Simultaneous Direction Method of Multipliers: A proximal primal-dual splitting algorithm for nonconvex problems with multiple constraints.’ arXiv.
-
__init__
(A, d, lam, L, c, mu, rho, rho_max, rho_norm, eps_pri=1e-05, eps_dual=0.01, c_max=None, c_norm=None, max_cg_iter=30, max_iter=1000)[source]¶ Initialize self. See help(type(self)) for accurate signature.
Methods
Amult
(x, A, mu, lam)__init__
(A, d, lam, L, c, mu, rho, rho_max, …)Initialize self. done
()Return whether the algorithm is done. prox_muf
(v, mu, A, x, d, lam, nCGiters)prox_rhog
(v, c)prox_rhog_max
(v, c)update
()Perform one update step.