pub struct WarmStartDiagnostics {Show 14 fields
pub primal_residual: Number,
pub dual_residual: Number,
pub complementarity: Number,
pub mu_in: Number,
pub mu_out: Number,
pub bound_duals: BlockVerdict,
pub eq_duals: BlockVerdict,
pub bound_duals_reconstructed: usize,
pub bound_duals_rejected: usize,
pub eq_duals_rejected: bool,
pub stationarity_split: bool,
pub recentering_disabled: bool,
pub slacks_closed: usize,
pub slack_close_reverted: bool,
}Expand description
What the warm-start initializer accepted, reconstructed, or discarded, and the residuals it based those calls on (gh#606).
Written once per solve, at initialization. mu_in is what
mu_init / warm_start_target_mu asked for; mu_out is what the
iterate actually starts at.
Fields§
§primal_residual: NumberPrimal infeasibility of the point the solve starts from. Measured on
the supplied point before any dual reconstruction (it does not depend
on the duals), and re-measured after the gh#988 slack-closing move
when that move ran, since it changes the slacks (gh#988 review: it
used to report the pre-move 0 beside a start 86 infeasible).
dual_residual: Number‖∇_x L‖_∞ after reconstruction.
complementarity: NumberAverage complementarity after reconstruction.
mu_in: Number§mu_out: Number§bound_duals: BlockVerdict§eq_duals: BlockVerdict§bound_duals_reconstructed: usizeBound-multiplier entries that arrived unseeded and were filled
from μ̂ / slack rather than from the constant floor.
bound_duals_rejected: usizeBound-multiplier entries that arrived seeded and were refused as incoherent with the primal point, taking the pre-gh#606 constant fill instead (gh#617).
eq_duals_rejected: booltrue when the seeded equality multipliers were refused as
incoherent with the primal point, so the stationarity split was
not run off them (gh#617). The y block itself is left where
the caller put it — that is what the pre-gh#606 path does with a
supplied y — but it stops being an input to anything.
stationarity_split: booltrue when the unseeded bound multipliers were re-derived from
the stationarity identity rather than left at μ̂ / slack. That
needs a caller-supplied y; see
[refine_bound_duals_from_stationarity].
recentering_disabled: booltrue when warm_start_recentering=none turned all of the
above off and the fields are the legacy constants.
slacks_closed: usizeInequality slacks closed onto their bound because the seeded
multiplier said the row is still active (gh#988), within the
[SLACK_CLOSE_CAP] move limit.
slack_close_reverted: booltrue when that move was undone because the re-measured start was
more infeasible than the move itself accounts for (gh#988 review).
Trait Implementations§
Source§impl Clone for WarmStartDiagnostics
impl Clone for WarmStartDiagnostics
Source§impl Debug for WarmStartDiagnostics
impl Debug for WarmStartDiagnostics
Auto Trait Implementations§
impl Freeze for WarmStartDiagnostics
impl RefUnwindSafe for WarmStartDiagnostics
impl Send for WarmStartDiagnostics
impl Sync for WarmStartDiagnostics
impl Unpin for WarmStartDiagnostics
impl UnsafeUnpin for WarmStartDiagnostics
impl UnwindSafe for WarmStartDiagnostics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T, U> Imply<T> for U
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more