ADMMTwoBlockCnstrnt¶
ADMMTwoBlockCnstrnt
specialises ADMM
for problems
of the form
intended to solve problems that have the form
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}\):
ADMMTwoBlockCnstrnt.block_sep0
Return a slice of the argument array that corresponds to block 0.ADMMTwoBlockCnstrnt.block_sep1
Return a slice of the argument array that corresponds to block 1.ADMMTwoBlockCnstrnt.block_sep
Return a tuple containing block 0 and block 1 of the argument array.ADMMTwoBlockCnstrnt.block_cat
Return a single array constructed by appropriately concatenating the two argument arrays representing blocks 0 and 1.ADMMTwoBlockCnstrnt.var_y0
Return a slice ofself.Y
corresponding to block \(\mathbf{y}_0\).ADMMTwoBlockCnstrnt.var_y1
Return a slice ofself.Y
corresponding to block \(\mathbf{y}_1\).
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
A derived class should override the following methods:
-
Compute and return \(A_0 \mathbf{x}\)
-
Compute and return \(A_0^T \mathbf{u}\)
-
Compute and return \(A_1 \mathbf{x}\)
-
Compute and return \(A_1^T \mathbf{u}\)
-
Return constant \(\mathbf{c}_0\)
-
Return constant \(\mathbf{c}_1\)
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.