Skip to content

Commit e998090

Browse files
authored
Merge pull request #158 from mrava87/patch-pg
fix: allow ProximalGradient to have iteration-dependant epsg
2 parents 0e8caf7 + 03556ed commit e998090

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

pyproximal/optimization/primal.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ def ProximalGradient(proxf, proxg, x0, epsg=1.,
201201
"""
202202
# check if epgs is a vector
203203
if np.asarray(epsg).size == 1.:
204+
epsg = epsg * np.ones(niter)
204205
epsg_print = str(epsg)
205206
else:
206207
epsg_print = 'Multi'
@@ -240,14 +241,14 @@ def ProximalGradient(proxf, proxg, x0, epsg=1.,
240241
# proximal step
241242
if not backtracking:
242243
if eta == 1.:
243-
x = proxg.prox(y - tau * proxf.grad(y), epsg * tau)
244+
x = proxg.prox(y - tau * proxf.grad(y), epsg[iiter] * tau)
244245
else:
245-
x = x + eta * (proxg.prox(x - tau * proxf.grad(x), epsg * tau) - x)
246+
x = x + eta * (proxg.prox(x - tau * proxf.grad(x), epsg[iiter] * tau) - x)
246247
else:
247-
x, tau = _backtracking(y, tau, proxf, proxg, epsg,
248+
x, tau = _backtracking(y, tau, proxf, proxg, epsg[iiter],
248249
beta=beta, niterback=niterback)
249250
if eta != 1.:
250-
x = x + eta * (proxg.prox(x - tau * proxf.grad(x), epsg * tau) - x)
251+
x = x + eta * (proxg.prox(x - tau * proxf.grad(x), epsg[iiter] * tau) - x)
251252

252253
# update internal parameters for bilinear operator
253254
if isinstance(proxf, BilinearOperator):
@@ -273,8 +274,8 @@ def ProximalGradient(proxf, proxg, x0, epsg=1.,
273274
pf, pg = proxf(x), proxg(x)
274275
msg = '%6g %12.5e %10.3e %10.3e %10.3e %10.3e' % \
275276
(iiter + 1, np.real(to_numpy(x[0])) if x.ndim == 1 else np.real(to_numpy(x[0, 0])),
276-
pf, pg[0] if epsg_print == 'Multi' else pg,
277-
pf + np.sum(epsg * pg),
277+
pf, pg,
278+
pf + np.sum(epsg[iiter] * pg),
278279
tau)
279280
print(msg)
280281
if show:

0 commit comments

Comments
 (0)