pub fn check_b_stationarity(inp: &CertificateInput<'_>) -> BCheckExpand description
Whether x is B-stationary: no direction d feasible for the linearized
constraints along any branch of the biactive pairs has ∇f·d < 0.
Each branch is an LP: min ∇f·d over the linearized active rows and
bounds, with each pair’s active side held (∇G·d = 0 or ∇H·d = 0) and,
on a biactive pair, the side the branch releases kept non-negative, in the
box -1 <= d <= 1. d = 0 is always feasible, so every LP has optimum
<= 0; the point is B-stationary exactly when all of them are 0. Up to
MAX_ENUMERATED_BIACTIVE biactive pairs all 2^b branches are solved
(the LPEC by enumeration, no MILP); above it, the relaxed LP — both sides
of every biactive pair only non-negative — picks one branch (hold the side
its direction moves less), which is solved.
A decrease counts only below -sqrt(solver_tol)·max(1, ‖∇f‖∞), the
certificate’s sign band: near a biactive pair the point itself is only
sqrt(tol)-accurate. S implies B, so a caller checks only points the
certificate did not call S. The point must be feasible and every pair
complementary.