ADMMTwoBlockCnstrnt

ADMMTwoBlockCnstrnt specialises ADMM for problems of the form

\[\begin{split}\mathrm{argmin}_{\mathbf{x},\mathbf{y}_0,\mathbf{y}_1} \; f(\mathbf{x}) + g_0(\mathbf{y}_0) + g_0(\mathbf{y}_1) \;\text{such that}\; \left( \begin{array}{c} A_0 \\ A_1 \end{array} \right) \mathbf{x} - \left( \begin{array}{c} \mathbf{y}_0 \\ \mathbf{y}_1 \end{array} \right) = \left( \begin{array}{c} \mathbf{c}_0 \\ \mathbf{c}_1 \end{array} \right) \;\;,\end{split}\]

intended to solve problems that have the form

\[\mathrm{argmin}_{\mathbf{x}} \; f(\mathbf{x}) + g_0(A_0 \mathbf{x}) + g_1(A_1 \mathbf{x})\]

prior to variable splitting.

See bpdn.MinL1InL2Ball as an example of a class derived from ADMMTwoBlockCnstrnt.

The methods of ADMMTwoBlockCnstrnt that are relevant to an implementer of a derived class are described in the following sections.

Initialisation

The __init__ method of the derived class should call the ADMMTwoBlockCnstrnt __init__ method to ensure proper initialisation. The interface is similar to that of ADMM __init__ method except for the introduction of parameters blkaxis and blkidx that specify how the blocks of \(\mathbf{y}\) are concatenated into a single array.

Block Access

The following methods provide access to the block components of the arrays representing \(\mathbf{y}\) or \(\mathbf{u}\):

Update Steps

The update steps are as described in Update Steps. The \(\mathbf{y}\) update ADMM.ystep will typically make use of the block access methods described above to apply separate updates to the blocks \(\mathbf{y}_0\) and \(\mathbf{y}_1\).

Constraint Definition

The constraint definition methods ADMMTwoBlockCnstrnt.cnst_A, ADMMTwoBlockCnstrnt.cnst_AT, ADMMTwoBlockCnstrnt.cnst_B, and ADMMTwoBlockCnstrnt.cnst_c are defined to implement the block form constraint

\[\begin{split}\left( \begin{array}{c} A_0 \\ A_1 \end{array} \right) \mathbf{x} - \left( \begin{array}{c} \mathbf{y}_0 \\ \mathbf{y}_1 \end{array} \right) = \left( \begin{array}{c} \mathbf{c}_0 \\ \mathbf{c}_1 \end{array} \right) \;\;.\end{split}\]

A derived class should override the following methods:

The default definitions are \(A_0 = I\), \(A_1 = I\), \(\mathbf{c}_0 = \mathbf{0}\), and \(\mathbf{c}_1 = \mathbf{0}\); the corresponding methods need not be overridden where these are the desired choices.

Residual Evaluation

The residual evaluation methods ADMMTwoBlockCnstrnt.rsdl_r, ADMMTwoBlockCnstrnt.rsdl_s, ADMMTwoBlockCnstrnt.rsdl_rn, ADMMTwoBlockCnstrnt.rsdl_sn are all appropriately defined in terms of the constraint definition methods described above, and will typically not need to be overridden.

Iteration Statistics

The iteration statistics mechanism, as described in Iteration Statistics, is inherited largely unchanged from ADMM. The main exception is that ADMMTwoBlockCnstrnt.obfn_g is defined as the sum of the values returned by ADMMTwoBlockCnstrnt.obfn_g0 and ADMMTwoBlockCnstrnt.obfn_g1. A derived class may either just override these two methods, or override ADMMTwoBlockCnstrnt.obfn_g (or ADMM.eval_objfn) itself.