pylops_mpi.optimization.cls_sparsity.FISTA#

class pylops_mpi.optimization.cls_sparsity.FISTA(Op, callbacks=None)[source]#

Fast Iterative Shrinkage-Thresholding Algorithm (FISTA).

Solve an optimization problem with \(L_p, \; p=0, 0.5, 1\) regularization, given the operator Op and data y. The operator can be real or complex, and should ideally be either square \(N=M\) or underdetermined \(N<M\).

Parameters:
Oppylops_mpi.MPILinearOperator or pylops_mpi.MPIStackedLinearOperator

Operator to invert

Attributes:
ncpmodule

Array module used by the solver (obtained via pylops.utils.backend.get_array_module) ). Available only after setup is called.

Opmatveccallable

Function handle to Op.matvec or Op.matmat depending on the number of dimensions of y.

Oprmatveccallable

Function handle to Op.rmatvec or Op.rmatmat depending on the number of dimensions of y.

SOpmatveccallable

Function handle to SOp.matvec or SOp.matmat depending on the number of dimensions of y.

SOprmatveccallable

Function handle to SOp.rmatvec or SOp.rmatmat depending on the number of dimensions of y.

threshfcallable

Function handle to the chosen thresholding method.

threshfloat

Threshold.

normresoldfloat

Old norm of the residual.

tfloat

FISTA auxiliary coefficient (not used in ISTA).

costlist

History of the L2 norm of the total objectiv function. Available only after setup is called and updated at each call to step.

iiterint

Current iteration number. Available only after setup is called and updated at each call to step.

Raises:
NotImplementedError

If threshkind is different from hard, soft, half.

See also

ISTA

Iterative Shrinkage-Thresholding Algorithm (ISTA).

Notes

Solves the following synthesis problem for the operator \(\mathbf{Op}\) and the data \(\mathbf{y}\):

\[J = \|\mathbf{y} - \mathbf{Op}\,\mathbf{x}\|_2^2 + \epsilon \|\mathbf{x}\|_p\]

or the analysis problem:

\[J = \|\mathbf{y} - \mathbf{Op}\,\mathbf{x}\|_2^2 + \epsilon \|\mathbf{SOp}^H\,\mathbf{x}\|_p\]

if SOp is provided.

The Fast Iterative Shrinkage-Thresholding Algorithm (FISTA) [1] is used, where \(p=0, 0.5, 1\). This is a modified version of ISTA solver with improved convergence properties and limited additional computational cost. Similarly to the ISTA solver, the choice of the thresholding algorithm to apply at every iteration is based on the choice of \(p\).

[1]

Beck, A., and Teboulle, M., “A Fast Iterative Shrinkage-Thresholding Algorithm for Linear Inverse Problems”, SIAM Journal on Imaging Sciences, vol. 2, pp. 183-202. 2009.

Methods

__init__(Op[, callbacks])

callback(x, *args, **kwargs)

Callback routine

finalize([show])

Finalize solver

memory_usage([show, unit])

Compute memory usage of the solver

run(x[, niter, show, itershow])

Run solver

setup(y, x0[, niter, SOp, eps, alpha, ...])

Setup solver

solve(y, x0[, niter, SOp, eps, alpha, ...])

step(x, z[, show])

Run one step of solver