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: Callable[[...], None] | 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], [3], [4]:

\[\begin{split}\mathbf{x}^{k} &= \prox_{\tau g}(\mathbf{y}^k) \\ \mathbf{y}^{k+1} &= \mathbf{y}^{k} + \eta (\prox_{\tau f}(2 \mathbf{x}^{k} - \mathbf{y}^{k}) - \mathbf{x}^{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, pp. 185-212. Algorithm 10.15. 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. Eq.(15). https://doi.org/10.1017/S1446788719000570 https://arxiv.org/abs/1809.07181

[3]

Ryu, E.K., Yin, W., 2022. Large-Scale Convex Optimization: Algorithms & Analyses via Monotone Operators. Cambridge University Press, Cambridge. Eq.(2.18). https://doi.org/10.1017/9781009160865 https://large-scale-book.mathopt.com/

[4]

Combettes, P.L., Pesquet, J.-C., 2008. A proximal decomposition method for solving convex variational inverse problems. Inverse Problems 24, 065014. Proposition 3.2. https://doi.org/10.1088/0266-5611/24/6/065014 https://arxiv.org/abs/0807.2617

Examples using pyproximal.optimization.primal.DouglasRachfordSplittingยถ

Nonlinear inversion with box constraints

Nonlinear inversion with box constraints