pylops_mpi.proximal.optimization.primal.ADMML2#
- pylops_mpi.proximal.optimization.primal.ADMML2(proxg, Op, b, A, x0, tau, niter=10, z0=None, gfirst=False, 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} = \arg\,min_{\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
pylops_mpi.proximal.MPIProxOperator Proximal operator of g function
- Op
pylops_mpi.MPILinearOperatororpylops_mpi.MPIStackedLinearOperator Linear operator of data misfit term
- b
pylops_mpi.DistributedArrayorpylops_mpi.StackedDistributedArray Data
- A
pylops_mpi.MPILinearOperatororpylops_mpi.MPIStackedLinearOperator Linear operator of regularization term
- x0
pylops_mpi.DistributedArrayorpylops_mpi.StackedDistributedArray 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
pylops_mpi.DistributedArrayorpylops_mpi.StackedDistributedArray Initial auxiliary vector. If
None, initialized toA @ x0.- gfirst
bool, optional Apply Proximal of operator
gfirst (True) or Proximal of operatorffirst (False)- tol
float, optional Tolerance on change of objective function (used as stopping criterion). If
tol=None, run untilniteris reached- 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
pylops_mpi.optimization.basic.cglsused to solve the x-update
- proxg
- Returns:
- x
pylops_mpi.DistributedArrayorpylops_mpi.StackedDistributedArray Inverted model
- z
pylops_mpi.DistributedArrayorpylops_mpi.StackedDistributedArray Inverted second model
- x
- Raises:
- ValueError
If both
x0andz0are set toNoneorx0is set to None
Notes
See
pyproximal.optimization.primal.ADMML2