pyproximal.optimization.primal.ADMML2#

pyproximal.optimization.primal.ADMML2(proxg, Op, b, A, x0, tau, niter=10, callback=None, show=False, **kwargs_solver)[source]#

Alternating Direction Method of Multipliers for L2 misfit term

Solves the following minimization problem using Alternating Direction Method of Multipliers:

\[\begin{split}\mathbf{x},\mathbf{z} = \argmin_{\mathbf{x},\mathbf{z}} \frac{1}{2}||\mathbf{Op}\mathbf{x} - \mathbf{b}||_2^2 + g(\mathbf{z}) \\ s.t. \; \mathbf{Ax}=\mathbf{z}\end{split}\]

where \(g(\mathbf{z})\) is any convex function that has a known proximal operator.

Parameters
proxgpyproximal.ProxOperator

Proximal operator of g function

Oppylops.LinearOperator

Linear operator of data misfit term

bnumpy.ndarray

Data

Apylops.LinearOperator

Linear operator of regularization term

x0numpy.ndarray

Initial vector

taufloat, optional

Positive scalar weight, which should satisfy the following condition to guarantees convergence: \(\tau \in (0, 1/\lambda_{max}(\mathbf{A}^H\mathbf{A})]\).

niterint, optional

Number of iterations of iterative scheme

callbackcallable, optional

Function with signature (callback(x)) to call after each iteration where x is the current model vector

showbool, optional

Display iterations log

**kwargs_solver

Arbitrary keyword arguments for scipy.sparse.linalg.lsqr used to solve the x-update

Returns
xnumpy.ndarray

Inverted model

znumpy.ndarray

Inverted second model

See also

ADMM

ADMM

LinearizedADMM

Linearized ADMM

Notes

The ADMM algorithm can be expressed by the following recursion:

\[\begin{split}\mathbf{x}^{k+1} = \argmin_{\mathbf{x}} \frac{1}{2}||\mathbf{Op}\mathbf{x} - \mathbf{b}||_2^2 + \frac{1}{2\tau} ||\mathbf{Ax} - \mathbf{z}^k + \mathbf{u}^k||_2^2\\ \mathbf{z}^{k+1} = \prox_{\tau g}(\mathbf{Ax}^{k+1} + \mathbf{u}^{k})\\ \mathbf{u}^{k+1} = \mathbf{u}^{k} + \mathbf{Ax}^{k+1} - \mathbf{z}^{k+1}\end{split}\]