pyproximal.optimization.primal.DouglasRachfordSplitting#

pyproximal.optimization.primal.DouglasRachfordSplitting(proxf: ProxOperator, proxg: ProxOperator, x0: ndarray[tuple[Any, ...], dtype[_ScalarT]], tau: float, eta: float = 1.0, niter: int = 10, gfirst: bool = True, callback: Optional[Callable[[...], None]] = None, callbacky: bool = False, show: bool = False) Tuple[ndarray[tuple[Any, ...], dtype[_ScalarT]], ndarray[tuple[Any, ...], dtype[_ScalarT]]][source]#

Douglas-Rachford Splitting

Solves the following minimization problem using Douglas-Rachford Splitting algorithm:

\[\mathbf{x} = \argmin_\mathbf{x} f(\mathbf{x}) + g(\mathbf{x})\]

where \(f(\mathbf{x})\) and \(g(\mathbf{x})\) are any convex functions that has known proximal operators.

Parameters
proxfpyproximal.ProxOperator

Proximal operator of f function

proxgpyproximal.ProxOperator

Proximal operator of g function

x0numpy.ndarray

Initial vector

taufloat

Positive scalar weight

etafloat, optional

Relaxation parameter (must be between 0 and 2, 0 excluded).

niterint, optional

Number of iterations of iterative scheme

gfirstbool, optional

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

callbackcallable, optional

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

callbackybool, optional

Modify callback signature to (callback(x, y)) when callbacky=True

showbool, optional

Display iterations log

Returns
xnumpy.ndarray

Inverted model

ynumpy.ndarray

Inverted second model

Notes

The Douglas-Rachford Splitting algorithm can be expressed by the following recursion [1], [2]:

\[\begin{split}\mathbf{y}^{k} &= \prox_{\tau g}(\mathbf{x}^k) \\ \mathbf{x}^{k+1} &= \mathbf{x}^{k} + \eta (\prox_{\tau f}(2 \mathbf{y}^{k} - \mathbf{x}^{k}) - \mathbf{y}^{k})\end{split}\]
1

Patrick L. Combettes and Jean-Christophe Pesquet. 2011. Proximal Splitting Methods in Signal Processing. In Fixed-Point Algorithms for Inverse Problems in Science and Engineering, Springer, 185-212. https://doi.org/10.1007/978-1-4419-9569-8_10

2

Scott B. Lindstrom and Brailey Sims. 2021. Survey: Sixty Years of Douglas-Rachford. Journal of the Australian Mathematical Society, 110, 3, 333-370. https://doi.org/10.1017/S1446788719000570 https://arxiv.org/abs/1809.07181

Examples using pyproximal.optimization.primal.DouglasRachfordSplitting#

Nonlinear inversion with box constraints

Nonlinear inversion with box constraints