# pyproximal.optimization.palm.iPALM#

pyproximal.optimization.palm.iPALM(H, proxf, proxg, x0, y0, gammaf=1.0, gammag=1.0, a=[1.0, 1.0], b=None, beta=0.5, niter=10, niterback=100, callback=None, show=False)[source]#

Inertial Proximal Alternating Linearized Minimization

Solves the following minimization problem using the Inertial Proximal Alternating Linearized Minimization (iPALM) algorithm:

$\mathbf{x}\mathbf{,y} = \argmin_{\mathbf{x}, \mathbf{y}} f(\mathbf{x}) + g(\mathbf{y}) + H(\mathbf{x}, \mathbf{y})$

where $$f(\mathbf{x})$$ and $$g(\mathbf{y})$$ are any pair of convex functions that have known proximal operators, and $$H(\mathbf{x}, \mathbf{y})$$ is a smooth function.

Parameters
Hpyproximal.utils.bilinear.Bilinear

Bilinear function

proxfpyproximal.ProxOperator

Proximal operator of f function

proxgpyproximal.ProxOperator

Proximal operator of g function

x0numpy.ndarray

Initial x vector

y0numpy.ndarray

Initial y vector

gammaffloat, optional

Positive scalar weight for f function update. If None, use backtracking

gammagfloat, optional

Positive scalar weight for g function update. If None, use backtracking

alist, optional

Inertial parameters ($$a \in [0, 1]$$)

betafloat, optional

Backtracking parameter (must be between 0 and 1)

niterint, optional

Number of iterations of iterative scheme

niterbackint, optional

Max number of iterations of backtracking

callbackcallable, optional

Function with signature (callback(x)) to call after each iteration where x and y are the current model vectors

showbool, optional

Display iterations log

Returns
xnumpy.ndarray

Inverted x vector

ynumpy.ndarray

Inverted y vector

Notes

iPALM [1] can be expressed by the following recursion:

$\begin{split}\mathbf{x}_z^k = \mathbf{x}^k + \alpha_x (\mathbf{x}^k - \mathbf{x}^{k-1})\\ \mathbf{x}^{k+1} = \prox_{c_k f}(\mathbf{x}_z^k - \frac{1}{c_k}\nabla_x H(\mathbf{x}_z^k, \mathbf{y}^{k}))\\ \mathbf{y}_z^k = \mathbf{y}^k + \alpha_y (\mathbf{y}^k - \mathbf{y}^{k-1})\\ \mathbf{y}^{k+1} = \prox_{d_k g}(\mathbf{y}_z^k - \frac{1}{d_k}\nabla_y H(\mathbf{x}^{k+1}, \mathbf{y}_z^k))\end{split}$

Here $$c_k=\gamma_f L_x$$ and $$d_k=\gamma_g L_y$$, where $$L_x$$ and $$L_y$$ are the Lipschitz constant of $$\nabla_x H$$ and $$\nabla_y H$$, respectively. When such constants cannot be easily computed, a back-tracking algorithm can be instead employed to find suitable $$c_k$$ and $$d_k$$ parameters.

Finally, note that we have implemented the version of iPALM where $$\beta_x=\alpha_x$$ and $$\beta_y=\alpha_y$$.

1

Pock, T., and Sabach, S. “Inertial Proximal Alternating Linearized Minimization (iPALM) for Nonconvex and Nonsmooth Problems”, SIAM Journal on Imaging Sciences, vol. 9. 2016.

## Examples using pyproximal.optimization.palm.iPALM#

Low-Rank completion via Matrix factorization

Low-Rank completion via Matrix factorization