pyproximal.optimization.cls_primal.DouglasRachfordSplittingΒΆ

class pyproximal.optimization.cls_primal.DouglasRachfordSplitting(callbacks: Callbacks = None)[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.

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

Methods

__init__([callbacks])

callback(x, *args, **kwargs)

Callback routine

finalize([nbar, show])

Finalize solver

memory_usage()

Compute memory usage of the solver

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

Run solver

setup(proxf, proxg, x0, tau[, eta, gfirst, ...])

Setup solver

solve(proxf, proxg, x0, tau[, eta, gfirst, ...])

Run entire solver

step(x, y[, show])

Run one step of solver