pyproximal.optimization.primal.ADMML2ยถ
- pyproximal.optimization.primal.ADMML2(proxg: ProxOperator, Op: LinearOperator, b: ndarray[tuple[Any, ...], dtype[_ScalarT]], A: LinearOperator, x0: ndarray[tuple[Any, ...], dtype[_ScalarT]], tau: float, niter: int = 10, z0: ndarray[tuple[Any, ...], dtype[_ScalarT]] | None = None, gfirst: bool = False, callback: Callable[[ndarray[tuple[Any, ...], dtype[_ScalarT]]], None] | None = None, show: bool = False, **kwargs_solver: dict[str, Any]) tuple[ndarray[tuple[Any, ...], dtype[_ScalarT]], ndarray[tuple[Any, ...], dtype[_ScalarT]]][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 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
- z0
numpy.ndarray Initial auxiliary vector. If
None, initialized toA @ x0.- gfirst
bool, optional Apply Proximal of operator
gfirst (True) or Proximal of operatorffirst (False)- callback
callable, optional Function with signature (
callback(x)) to call after each iteration wherexis the current model vector- show
bool, optional Display iterations log
- **kwargs_solver
Arbitrary keyword arguments for
scipy.sparse.linalg.lsqrused to solve the x-update
- proxg
- Returns:
- x
numpy.ndarray Inverted model
- z
numpy.ndarray Inverted second model
- x
- Raises:
- ValueError
If both
x0andz0are set toNoneorx0is set to None
See also
ADMMADMM
LinearizedADMMLinearized 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}\]