skprox.operators._composite

Dykstra’s composite algorithm for combining proximal operators.

This is a simple implementation of Dykstra’s algorithm for combining proximal operators. It is not optimized for speed, but rather for readability. It is intended to be used as a building block for more complex algorithms.

References

[1] Boyle, J. P.; Dykstra, R. L. (1986). A method for finding projections onto the intersection of convex sets in Hilbert spaces. Lecture Notes in Statistics. Vol. 37. pp. 28–47

[2] https://en.wikipedia.org/wiki/Dykstra%27s_projection_algorithm

[3] https://github.com/neurospin/pylearn-parsimony/blob/734437565cc3bdd0785786a433ad852421556668/parsimony/algorithms/proximal.py

@author: James Chapman @email: james.chapman.19@ucl.ac.uk

Module Contents

Classes

Composite

Common interface for proximal operators of a function.

class skprox.operators._composite.Composite(prox_ops, max_iter=5000, weights=None)

Bases: pyproximal.ProxOperator

Common interface for proximal operators of a function.

This class defines the overarching structure of any proximal operator. It contains two main methods, prox and dualprox which are both implemented by means of the Moreau decomposition assuming explicit knowledge of the other method. For this reason any proximal operators that subclasses the ProxOperator class needs at least one of these two methods to be implemented directly.

Note

End users of PyProx should not use this class directly but simply use operators that are already implemented. This class is meant for developers and it has to be used as the parent class of any new operator developed within PyProx. Find more details regarding implementation of new operators at addingoperator.

Parameters

Oppylops.LinearOperator, optional

Linear operator used by the Proximal operator

hasgradbool, optional

Flag to indicate if the function is differentiable, i.e., has a uniquely defined gradient (True) or not (False).

Notes

The proximal operator of a function f is defined as:

\[prox_{\tau f} (\mathbf{x}) = \argmin_{\mathbf{y}} f(\mathbf{y}) + \frac{1}{2 \tau}||\mathbf{y} - \mathbf{x}||^2_2\]
prox(x, tau, **kwargs)

Proximal operator applied to a vector

The proximal operator can always be computed given its dual proximal operator using the Moreau decomposition as defined in pyprox.moreau(). For this reason we can easily create a common method for all proximal operators that can be evaluated provided the dual proximal is implemented.

However, direct implementations are generally available. This can be done by simply implementing prox for a specific proximal operator, which will overwrite the general method.

Parameters
xnp.ndarray

Vector

taufloat

Positive scalar weight

__call__(x)
Parameters
xnp.ndarray

The point at which to evaluate the composite proximal operator.

Returns
valfloat

The value of the composite proximal operator at x.

constraints_satisfiedbool

True if all constraints are satisfied, False otherwise.