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, tol: float | None = None, rtol: float | None = None, callback: Callable[[ndarray[tuple[Any, ...], dtype[_ScalarT]]], None] | None = None, callbackz: bool = False, show: bool = False, itershow: tuple[int, int, int] = (10, 10, 10), **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:
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

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

z0numpy.ndarray

Initial auxiliary vector. If None, initialized to A @ x0.

gfirstbool, optional

Apply Proximal of operator g first (True) or Proximal of operator f first (False)

tolfloat, optional

Tolerance on change of objective function (used as stopping criterion). If tol=None, run until niter is reached

rtolfloat, optional

Relative tolerance on objective function wrt initial value. Stops the solver when the ratio of the current objective function to the initial objective function is below this value. If rtol=None, run until niter is reached or the other tolerance criterion is met

callbackcallable, optional

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

showbool, optional

Display iterations log

itershowtuple, optional

Display set log for the first N1 steps, last N2 steps, and every N3 steps in between where N1, N2, N3 are the three element of the list.

**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

Raises:
ValueError

If both x0 and z0 are set to None or x0 is set to None

See also

ADMM

ADMM

LinearizedADMM

Linearized ADMM

Notes

See pyproximal.optimization.cls_primal.ADMML2