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
- proxg
pyproximal.ProxOperator
Proximal operator of g function
- Op
pylops.LinearOperator
Linear operator of data misfit term
- b
numpy.ndarray
Data
- A
pylops.LinearOperator
Linear operator of regularization term
- x0
numpy.ndarray
Initial vector
- tau
float
, optional Positive scalar weight, which should satisfy the following condition to guarantees convergence: \(\tau \in (0, 1/\lambda_{max}(\mathbf{A}^H\mathbf{A})]\).
- niter
int
, optional Number of iterations of iterative scheme
- callback
callable
, optional Function with signature (
callback(x)
) to call after each iteration wherex
is the current model vector- show
bool
, optional Display iterations log
- **kwargs_solver
Arbitrary keyword arguments for
scipy.sparse.linalg.lsqr
used to solve the x-update
- proxg
- Returns
- x
numpy.ndarray
Inverted model
- z
numpy.ndarray
Inverted second model
- x
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}\]