Skip to main content

StatisticsInfo

Struct StatisticsInfo 

Source
pub struct StatisticsInfo {
Show 23 fields pub iteration_count: i32, pub final_objective: f64, pub final_scaled_objective: f64, pub final_dual_inf: f64, pub final_constr_viol: f64, pub final_declared_constr_viol: f64, pub final_declared_box_viol: f64, pub final_compl: f64, pub final_kkt_error: f64, pub final_kkt_error_above_noise: f64, pub num_obj_evals: i32, pub num_constr_evals: i32, pub num_obj_grad_evals: i32, pub num_constr_jac_evals: i32, pub num_hess_evals: i32, pub total_wallclock_time_secs: f64, pub restoration_calls: i32, pub restoration_inner_iters: i32, pub restoration_outer_iters: i32, pub restoration_wall_secs: f64, pub quality_escalations: i32, pub dual_divergence_signature: bool, pub dual_divergence_retry_promoted: bool,
}
Expand description

Subset of SolveStatistics projected for the report. Mirrors the fields the existing console summary prints.

Fields§

§iteration_count: i32§final_objective: f64§final_scaled_objective: f64§final_dual_inf: f64§final_constr_viol: f64§final_declared_constr_viol: f64

Primal violation against the model as declared, before the convex arm’s bound_relax_factor widening (qp_extract::BoundRelax, gh #744/#745).

final_constr_viol measures the model the solver was HANDED, whose inequality rows and variable box are widened by min(factor,cap)·|b|. That is the model its convergence test is about and every acceptance gate reads — and it is not how far the returned point sits outside the model the caller wrote. On netlib afiro the point is 4.99e-06 outside a declared row b = 500 (exactly 1e-8·500) while final_constr_viol reads 8.68e-13; 25fv47 reports 2.19e-11 against 1.97e-05.

NaN when the solve applied no widening (the two coincide by construction) or on a path that does not compute it — every NLP-arm solve today. Additive to pounce.solve-report/v1: readers predating it are unaffected.

§final_declared_box_viol: f64

How far the returned point sits outside the declared variable box — the box the caller wrote, before the bound_relax_factor widening. Ipopt’s Variable bound violation, and the box half of final_declared_constr_viol reported on its own: maxed together, a box violation and a row violation cannot be told apart.

Variable bounds carry no scaling, so there is one number rather than a scaled/unscaled pair. NaN on a path that does not compute it. Additive to pounce.solve-report/v1: readers predating it are unaffected.

§final_compl: f64§final_kkt_error: f64§final_kkt_error_above_noise: f64

The aggregate the strict convergence gate tested (gh #528): as final_kkt_error, but counting each constraint row’s residual only where it exceeds what that row can represent in floating point. Equal to final_kkt_error unless a row is at its own resolution limit.

§num_obj_evals: i32§num_constr_evals: i32§num_obj_grad_evals: i32§num_constr_jac_evals: i32§num_hess_evals: i32§total_wallclock_time_secs: f64§restoration_calls: i32§restoration_inner_iters: i32§restoration_outer_iters: i32§restoration_wall_secs: f64§quality_escalations: i32

Successful linear-solver quality escalations over the whole solve, restoration sub-solves included (gh#857). 0 on paths that never escalate. serde(default) so a report written before this field existed still deserializes — it reads as “no escalations”, which is wrong-but-harmless for an old file and correct for every new one.

§dual_divergence_signature: bool

The solve saw the gh#884 biactive dual-divergence signature: at one and the same iterate a converged primal, a scale-relative step at zero, and an unscaled dual infeasibility far above dual_inf_tol. Reported whether or not a retry ran or promoted, because the distinction it draws — the multipliers ran away on a settled iterate, as against the iterate itself never settling — is not visible in any other field. serde(default) for the same reason as quality_escalations.

§dual_divergence_retry_promoted: bool

A gh#884 dual-divergence retry ran and its answer was returned. false both when no retry ran and when one ran and lost — in the latter case every other field here describes the base attempt.

Trait Implementations§

Source§

impl Clone for StatisticsInfo

Source§

fn clone(&self) -> StatisticsInfo

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StatisticsInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for StatisticsInfo

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<StatisticsInfo, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for StatisticsInfo

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more