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.