pyproximal.optimization.cls_primal.ConsensusADMMΒΆ

class pyproximal.optimization.cls_primal.ConsensusADMM(callbacks: Callbacks = None)[source]ΒΆ

Consensus ADMM

Solves the following global consensus problem using ADMM:

\[\argmin_{\mathbf{x_1}, \mathbf{x_2}, \ldots, \mathbf{x_m}} \sum_{i=1}^m f_i(\mathbf{x}_i) \quad \text{s.t.} \quad \mathbf{x_1} = \mathbf{x_2} = \cdots = \mathbf{x_m}\]

where \(f_i(\mathbf{x})\) are any convex functions that has known proximal operators.

See also

ADMM

Alternating Direction Method of Multipliers

PPXA

Parallel Proximal Algorithm

Notes

The ADMM for the consensus problem can be expressed by the following recursion [1], [2]:

  • \(\bar{\mathbf{x}}^{0} = \mathbf{x}\)

  • for \(k = 1, \ldots\)

    • for \(i = 1, \ldots, m\)

      • \(\mathbf{x}_i^{k+1} = \mathrm{prox}_{\tau f_i} \left(\bar{\mathbf{x}}^{k} - \mathbf{y}_i^{k}\right)\)

    • \(\bar{\mathbf{x}}^{k+1} = \frac{1}{m} \sum_{i=1}^m \mathbf{x}_i^{k}\)

    • for \(i = 1, \ldots, m\)

      • \(\mathbf{y}_i^{k+1} = \mathbf{y}_i^{k} + \mathbf{x}_i^{k+1} - \bar{\mathbf{x}}^{k+1}\)

The current implementation returns \(\bar{\mathbf{x}}\).

References

[1]

Boyd, S., Parikh, N., Chu, E., Peleato, B., Eckstein, J., 2011. Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers. Foundations and Trends in Machine Learning, Vol. 3, No. 1, pp 1-122. Section 7.1. https://doi.org/10.1561/2200000016 https://stanford.edu/~boyd/papers/pdf/admm_distr_stats.pdf

[2]

Parikh, N., Boyd, S., 2014. Proximal Algorithms. Foundations and Trends in Optimization, Vol. 1, No. 3, pp 127-239. Section 5.2.1. https://doi.org/10.1561/2400000003 https://web.stanford.edu/~boyd/papers/pdf/prox_algs.pdf

Methods

__init__([callbacks])

callback(x, *args, **kwargs)

Callback routine

finalize([nbar, show])

Finalize solver

memory_usage()

Compute memory usage of the solver

run(x, x_bar, y[, niter, show, itershow])

Run solver

setup(proxfs, x0, tau[, niter, tol, show])

Setup solver

solve(proxfs, x0, tau[, niter, tol, show, ...])

Run entire solver

step(x, x_bar, y[, show])

Run one step of solver