Skip to main content

split_bound_multipliers

Function split_bound_multipliers 

Source
pub fn split_bound_multipliers(
    nlp: &Rc<RefCell<dyn IpoptNlp>>,
    lambda_x: &[Number],
) -> (Vec<Number>, Vec<Number>)
Expand description

Inverse of pack_bound_multipliers: split a packed per-variable λ_x back into the IPM’s compressed (z_l, z_u).

The split is by sign — positive mass to the lower bound, negative to the upper — which is the only choice consistent with the sign restrictions z_l ≥ 0, z_u ≥ 0 and with complementarity: away from a degenerate fixed variable at most one of the two can be nonzero, so the packing loses nothing to recover. A variable fixed by equal bounds is the one case where λ_x genuinely does not determine the pair; sign choice is the established convention there and the two are interchangeable in every downstream identity, since only their difference is ever used.

Mass that lands on a variable with no bound on the corresponding side has nowhere to go and is dropped — that can only happen if a caller hands in a multiplier violating the sign restrictions, and silently keeping it would corrupt the stationarity residual the user is shown.