pyproximal.optimization.cls_primal.AndersonProximalGradient

class pyproximal.optimization.cls_primal.AndersonProximalGradient(callbacks: Callbacks = None)[source]

Proximal gradient with Anderson acceleration

Solves the following minimization problem using the Proximal gradient algorithm with Anderson acceleration:

\[\mathbf{x} = \argmin_\mathbf{x} f(\mathbf{x}) + \epsilon g(\mathbf{x})\]

where \(f(\mathbf{x})\) is a smooth convex function with a uniquely defined gradient and \(g(\mathbf{x})\) is any convex function that has a known proximal operator.

Notes

The Proximal gradient algorithm with Anderson acceleration can be expressed by the following recursion [1]:

\[\begin{split}m_k = min(m, k)\\ \mathbf{g}^{k} = \mathbf{x}^{k} - \tau^k \nabla f(\mathbf{x}^k)\\ \mathbf{r}^{k} = \mathbf{g}^{k} - \mathbf{g}^{k}\\ \mathbf{G}^{k} = [\mathbf{g}^{k},..., \mathbf{g}^{k-m_k}]\\ \mathbf{R}^{k} = [\mathbf{r}^{k},..., \mathbf{r}^{k-m_k}]\\ \alpha_k = (\mathbf{R}^{kT} \mathbf{R}^{k})^{-1} \mathbf{1} / \mathbf{1}^T (\mathbf{R}^{kT} \mathbf{R}^{k})^{-1} \mathbf{1}\\ \mathbf{y}^{k+1} = \mathbf{G}^{k} \alpha_k\\ \mathbf{x}^{k+1} = \prox_{\tau^{k+1} g}(\mathbf{y}^{k+1})\end{split}\]

where \(m\) equals nhistory, \(k=1,2,...,n_{iter}\), \(\mathbf{y}^{0}=\mathbf{x}^{0}\), \(\mathbf{y}^{1}=\mathbf{x}^{0} - \tau^0 \nabla f(\mathbf{x}^0)\), \(\mathbf{x}^{1}=\prox_{\tau^k g}(\mathbf{y}^{1})\), and \(\mathbf{g}^{0}=\mathbf{y}^{1}\).

Refer to [1] for the guarded version of the algorithm (when safeguard=True).

[1] (1,2)

Mai, V., and Johansson, M. “Anderson Acceleration of Proximal Gradient Methods”, 2020.

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[, epsg, tau, epsr, ...])

Setup solver

solve(proxf, proxg, x0[, epsg, tau, epsr, ...])

Run entire solver

step(x, y[, show])

Run one step of solver