Skip to content

Commit 5fd44f2

Browse files
committed
MAINT: Skip the check for theta <= 1 in the PDHG
DOC: Update the PDHG docstring to latest research.
1 parent d4a5ed6 commit 5fd44f2

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

odl/solvers/nonsmooth/primal_dual_hybrid_gradient.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
7070
callback : callable, optional
7171
Function called with the current iterate after each iteration.
7272
theta : float, optional
73-
Relaxation parameter, required to fulfill ``0 <= theta <= 1``.
73+
Relaxation parameter, required to fulfill ``theta >= 0``.
7474
Default: 1
7575
gamma_primal : non-negative float, optional
7676
Acceleration parameter. If not ``None``, it overrides ``theta`` and
@@ -105,16 +105,16 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
105105
106106
where the formal conditions are that :math:`L` is an operator
107107
between Hilbert spaces :math:`X` and :math:`Y`.
108-
Further, :math:`f : X \rightarrow [0, +\infty]` and
109-
:math:`g : Y \rightarrow [0, +\infty]` are proper, convex,
108+
Further, :math:`f : X \rightarrow (-\infty, +\infty]` and
109+
:math:`g : Y \rightarrow (-\infty, +\infty]` are proper, convex,
110110
lower-semicontinuous functionals.
111111
112-
Convergence is only guaranteed if :math:`L` is linear, :math:`X, Y`
113-
are finite dimensional and the step lengths :math:`\sigma` and
114-
:math:`\tau` satisfy
112+
Convergence is only guaranteed if :math:`L` is linear,
113+
:math:`\theta > 1/2`, and the step lengths :math:`\sigma` and :math:`\tau`
114+
satisfy
115115
116116
.. math::
117-
\tau \sigma \|L\|^2 < 1
117+
\tau \sigma \|L\|^2 < \frac{4}{1 + 2 \theta}
118118
119119
where :math:`\|L\|` is the operator norm of :math:`L`.
120120
@@ -147,6 +147,9 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
147147
The non-linear case is analyzed in `[Val2014]
148148
<https://doi.org/10.1088/0266-5611/30/5/055012>`_.
149149
150+
The conditions on :math:`\tau` and :math:`sigma` are according to
151+
`[BUG2023] <https://arxiv.org/abs/2309.03998v1>`_.
152+
150153
See Also
151154
--------
152155
odl.solvers.nonsmooth.douglas_rachford.douglas_rachford_pd :
@@ -158,6 +161,11 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
158161
159162
References
160163
----------
164+
[BUG2023] Banert, S, Upadhyaya M, and Giselsson, P.
165+
*The Chambolle--Pock method converges weakly with :math:`\theta > 1/2`
166+
and :math:`\tau \sigma \|L\|^2 < 4/(1+2\theta)`*. arXiv preprint
167+
2309.03998v1 [math.OC] (2023).
168+
161169
[CP2011a] Chambolle, A and Pock, T. *A First-Order
162170
Primal-Dual Algorithm for Convex Problems with Applications to
163171
Imaging*. Journal of Mathematical Imaging and Vision, 40 (2011),
@@ -203,8 +211,8 @@ def pdhg(x, f, g, L, niter, tau=None, sigma=None, **kwargs):
203211
# Relaxation parameter
204212
theta = kwargs.pop('theta', 1)
205213
theta, theta_in = float(theta), theta
206-
if not 0 <= theta <= 1:
207-
raise ValueError('`theta` {} not in [0, 1]'
214+
if not theta >= 0:
215+
raise ValueError('`theta` must be non-negative, got {}'
208216
''.format(theta_in))
209217

210218
# Acceleration parameters

0 commit comments

Comments
 (0)