pyproximal.projection.HyperPlaneBoxProjยถ

class pyproximal.projection.HyperPlaneBoxProj(coeffs: ndarray[tuple[Any, ...], dtype[_ScalarT]], scalar: float, lower: float | ndarray[tuple[Any, ...], dtype[_ScalarT]] = -inf, upper: float | ndarray[tuple[Any, ...], dtype[_ScalarT]] = inf, maxiter: int = 100, xtol: float = 1e-05)[source]ยถ

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

Parameters:
coeffsnumpy.ndarray

Vector of coefficients used in the definition of the hyperplane

scalarfloat

Scalar used in the definition of the hyperplane

lowerfloat or numpy.ndarray, optional

Lower bound of Box

upperfloat or numpy.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, ...])