pyproximal.projection.HyperPlaneBoxProj#

class pyproximal.projection.HyperPlaneBoxProj(coeffs, scalar, lower=-inf, upper=inf, maxiter=100, xtol=1e-05)[source]#

Orthogonal projection of the intersection between a Hyperplane and a Box.

Parameters
coeffsnp.ndarray

Vector of coefficients used in the definition of the hyperplane

scalarfloat

Scalar used in the definition of the hyperplane

lowerfloat or np.ndarray, optional

Lower bound of Box

upperfloat or np.ndarray, optional

Upper bound of Box

maxiterint, optional

Maximum number of iterations used by scipy.optimize.bisect

xtolfloat, optional

Absolute tolerance of scipy.optimize.bisect

Notes

Given the definition of an Hyperplane:

\[H_{c,b} = \{ \mathbf{x}: \mathbf{c}^T \mathbf{x} = b\}\]

that of a Box (see pyproximal.projection.Box.BoxProj), the intersection between the two can be written as:

\[C = Box_{[l, u]} \cap H_{c,b} = \{ \mathbf{x}: \mathbf{c}^T \mathbf{x} = b , \; l \leq x_i \leq u \}\]

The orthogonal projection of such intersection is given by:

\[P_C = P_{Box_{[l, u]}} (\mathbf{x} - \mu^* \mathbf{c})\]

where \(\mu\) is obtained by solving the following equation by bisection

\[f(\mu) = \mathbf{c}^T P_{Box_{[l, u]}} (\mathbf{x} - \mu \mathbf{c}) - b\]

Methods

__init__(coeffs, scalar[, lower, upper, ...])