pyproximal.optimization.cls_primal.HQS¶
- class pyproximal.optimization.cls_primal.HQS(callbacks: Callbacks = None)[source]¶
Half Quadratic splitting
Solves the following minimization problem using Half Quadratic splitting algorithm:
\[\begin{split}\mathbf{x},\mathbf{z} = \argmin_{\mathbf{x},\mathbf{z}} f(\mathbf{x}) + g(\mathbf{z}) \\ s.t. \; \mathbf{x}=\mathbf{z}\end{split}\]where \(f(\mathbf{x})\) and \(g(\mathbf{z})\) are any convex function that has a known proximal operator.
Notes
The HQS algorithm can be expressed by the following recursion [1]:
\[\begin{split}\mathbf{z}^{k+1} = \prox_{\tau g}(\mathbf{x}^{k}) \\ \mathbf{x}^{k+1} = \prox_{\tau f}(\mathbf{z}^{k+1})\end{split}\]for
gfirst=False, or\[\begin{split}\mathbf{x}^{k+1} = \prox_{\tau f}(\mathbf{z}^{k}) \\ \mathbf{z}^{k+1} = \prox_{\tau g}(\mathbf{x}^{k+1})\end{split}\]for
gfirst=False. Note thatxandzconverge to each other, however if iterations are stopped too earlyxis guaranteed to belong to the domain offwhilezis guaranteed to belong to the domain ofg. Depending on the problem either of the two may be the best solution.[1]D., Geman, and C., Yang, “Nonlinear image recovery with halfquadratic regularization”, IEEE Transactions on Image Processing, 4, 7, pp. 932-946, 1995.
Methods
__init__([callbacks])callback(x, *args, **kwargs)Callback routine
finalize([nbar, show])Finalize solver
memory_usage()Compute memory usage of the solver
run(x, z[, niter, show, itershow])Run solver
setup(proxf, proxg, x0, tau[, z0, gfirst, ...])Setup solver
solve(proxf, proxg, x0, tau[, z0, gfirst, ...])Run entire solver
step(x, z[, show])Run one step of solver