Three Operator Splitting
wc_three_operator_splitting(L, mu, beta, alpha, theta; solver=Clarabel.Optimizer, verbose=true)Problem statement
Compute a PEPit worst-case guarantee for wc_three_operator_splitting.
Consider the monotone inclusion problem
\[\mathrm{Find}\, x:\, 0\in Ax + Bx + Cx,\]
where $A$ is maximally monotone, $B$ is $\beta$-cocoercive and C is the gradient of some $L$-smooth $\mu$-strongly convex function. We denote by $J_{\alpha A}$ and $J_{\alpha B}$ the resolvents of respectively $\alpha A$ and $\alpha B$.
Performance metric
This code computes a worst-case guarantee for the three operator splitting (TOS). That is, given two initial points $w^{(0)}_t$ and $w^{(1)}_t$, this code computes the smallest possible $\tau(L, \mu, \beta, \alpha, \theta)$ (a.k.a. "contraction factor") such that the guarantee
\[\|w^{(0)}_{t+1} - w^{(1)}_{t+1}\|^2 \leqslant \tau(L, \mu, \beta, \alpha, \theta) \|w^{(0)}_{t} - w^{(1)}_{t}\|^2,\]
is valid, where $w^{(0)}_{t+1}$ and $w^{(1)}_{t+1}$ are obtained after one iteration of TOS from respectively $w^{(0)}_{t}$ and $w^{(1)}_{t}$.
In short, for given values of $L$, $\mu$, $\beta$, $\alpha$ and $\theta$, the contraction factor $\tau(L, \mu, \beta, \alpha, \theta)$ is computed as the worst-case value of $\|w^{(0)}_{t+1} - w^{(1)}_{t+1}\|^2$ when $\|w^{(0)}_{t} - w^{(1)}_{t}\|^2 \leqslant 1$.
Algorithm
One iteration of the algorithm is described in [1]. For $t \in \{ 0, \dots, n-1\}$,
\[ \begin{aligned} x_{t+1} & = & J_{\alpha B} (w_t),\\ y_{t+1} & = & J_{\alpha A} (2x_{t+1} - w_t - C x_{t+1}),\\ w_{t+1} & = & w_t - \theta (x_{t+1} - y_{t+1}). \end{aligned}\]
References
The TOS was proposed in [1], the analysis of such operator splitting methods using PEPs was proposed in [2].
Arguments
L: smoothness or Lipschitz parameter, as used by the modeled class.mu: strong convexity or monotonicity parameter, as used by the modeled class.beta: operator or algorithm parameter used in the model.alpha: algorithm parameter used in the update rule.theta: relaxation or averaging parameter used in the update rule.solver: JuMP optimizer constructor used to solve the generated SDP.verbose: print example and solver progress information when true.
Returns
pepit_tau: worst-case value.theoretical_tau: no theoretical value.
Julia usage
pepit_tau, theoretical_tau = wc_three_operator_splitting(1.0, 0.1, 1.0, 0.9, 1.3; verbose=true)
## Returns approximately: (pepit_tau, theoretical_tau) = (0.779689, nothing)