Douglas Rachford Splitting Contraction
wc_douglas_rachford_splitting_contraction(mu, L, alpha, theta, n; verbose=true)Problem statement
Compute a PEPit worst-case guarantee for wc_douglas_rachford_splitting_contraction.
Consider the composite convex minimization problem
\[F_\star \triangleq \min_x \{F(x) \equiv f_1(x) + f_2(x) \}\]
where $f_1(x)$ is $L$-smooth and $\mu$-strongly convex, and $f_2$ is convex, closed and proper. Both proximal operators are assumed to be available.
Performance metric
This code computes a worst-case guarantee for the Douglas Rachford Splitting (DRS) method. That is, it computes the smallest possible $\tau(\mu,L,\alpha,\theta,n)$ such that the guarantee
\[\|w_1 - w_1'\|^2 \leqslant \tau(\mu,L,\alpha,\theta,n) \|w_0 - w_0'\|^2.\]
is valid, where $x_n$ is the output of the Douglas Rachford Splitting method. It is a contraction factor computed when the algorithm is started from two different points $w_0$ and $w_0$.
Algorithm
Our notations for the DRS method are as follows [3, Section 7.3], for $t \in \{0, \dots, n-1\}$,
\[ \begin{aligned} x_t & = & \mathrm{prox}_{\alpha f_2}(w_t), \\ y_t & = & \mathrm{prox}_{\alpha f_1}(2x_t - w_t), \\ w_{t+1} & = & w_t + \theta (y_t - x_t). \end{aligned}\]
Theoretical guarantee
The tight theoretial guarantee is obtained in [2, Theorem 2]:
\[\|w_1 - w_1'\|^2 \leqslant \max\left(\frac{1}{1 + \mu \alpha}, \frac{\alpha L }{1 + L \alpha}\right)^{2n} \|w_0 - w_0'\|^2\]
for when $\theta=1$.
References
Details on the SDP formulations can be found in
When $\theta = 1$, the bound can be compared with that of [2, Theorem 2]
A description for the DRS method can be found in [3, 7.3]
Arguments
mu: strong convexity or monotonicity parameter, as used by the modeled class.L: smoothness or Lipschitz parameter, as used by the modeled class.alpha: algorithm parameter used in the update rule.theta: relaxation or averaging parameter used in the update rule.n: number of iterations.verbose: print example and solver progress information when true.
Returns
pepit_tau: worst-case valuetheoretical_tau: theoretical value
Julia usage
PEPit_tau, theoretical_tau = wc_douglas_rachford_splitting_contraction(0.1, 1.0, 3.0, 1.0, 2; verbose=true)
## Returns approximately: (PEPit_tau, theoretical_tau) = (0.350128, 0.350128)