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: f64Primal 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: f64How 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: f64The 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: i32Successful 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: boolThe 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: boolA 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
impl Clone for StatisticsInfo
Source§fn clone(&self) -> StatisticsInfo
fn clone(&self) -> StatisticsInfo
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for StatisticsInfo
impl Debug for StatisticsInfo
Source§impl<'de> Deserialize<'de> for StatisticsInfo
impl<'de> Deserialize<'de> for StatisticsInfo
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<StatisticsInfo, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<StatisticsInfo, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Serialize for StatisticsInfo
impl Serialize for StatisticsInfo
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for StatisticsInfo
impl RefUnwindSafe for StatisticsInfo
impl Send for StatisticsInfo
impl Sync for StatisticsInfo
impl Unpin for StatisticsInfo
impl UnsafeUnpin for StatisticsInfo
impl UnwindSafe for StatisticsInfo
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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