pub struct TrainingOutput {Show 14 fields
pub convergence_records: Vec<IterationRecord>,
pub final_lower_bound: f64,
pub final_upper_bound: Option<f64>,
pub final_gap_percent: Option<f64>,
pub final_upper_bound_std: Option<f64>,
pub final_upper_bound_kind: String,
pub iterations_completed: u32,
pub converged: bool,
pub termination_reason: String,
pub total_time_ms: u64,
pub cut_stats: RowPoolStatistics,
pub cut_selection_records: Vec<RowSelectionRecord>,
pub worker_timing_records: Vec<WorkerTimingRecord>,
pub training_solve_stats: MetadataTrainingSolveStats,
}Expand description
Aggregate type carrying all training data needed for output writing.
Constructed by the solver after training completes and passed to
write_results. All convergence records and summary statistics are
held here so the writer can read them without contacting the solver.
Fields§
§convergence_records: Vec<IterationRecord>Ordered convergence records — one entry per completed iteration.
final_lower_bound: f64Lower bound value reported after the final iteration.
final_upper_bound: Option<f64>Upper bound value reported after the final iteration, if available.
None when no upper-bound evaluation was performed.
final_gap_percent: Option<f64>Relative gap between final upper and lower bounds as a percentage.
None when the lower bound is zero/negative or final_upper_bound is None.
final_upper_bound_std: Option<f64>Standard deviation of the final upper-bound estimate, if available.
None when no upper-bound evaluation was performed or the bound is exact.
The value is carried separately in
final_upper_bound.
final_upper_bound_kind: StringUpper-bound regime for the whole run: "statistical" (sampled forward) or
"exact" (enumerated forward). Mirrored into training/convergence.parquet
and training/metadata.json.
iterations_completed: u32Number of iterations completed before the stopping condition was triggered.
converged: booltrue when training converged within the configured tolerance.
termination_reason: StringHuman-readable description of the rule that terminated training.
total_time_ms: u64Total elapsed wall-clock time for the entire training run (ms).
cut_stats: RowPoolStatisticsSummary row pool statistics for the run.
cut_selection_records: Vec<RowSelectionRecord>Per-stage row-selection records for Parquet output.
Empty when row selection is disabled. When non-empty, written to
training/cut_selection/iterations.parquet.
worker_timing_records: Vec<WorkerTimingRecord>Per-worker timing records for training/timing/iterations.parquet.
Each entry is either a rank-aggregated row
(worker_id = None) or a per-worker row (worker_id = Some(w)).
Empty when timing data was not collected (e.g. single-threaded runs
without the instrumentation wired). Written in iteration-major order:
rank-aggregated row first, then per-worker rows sorted by
(rank, worker_id).
training_solve_stats: MetadataTrainingSolveStatsAggregate solve statistics for the training run.
Default-constructed (all fields None) by producers that do not yet
record solve statistics; populated downstream and persisted into
training/metadata.json by the metadata writer.
Trait Implementations§
Source§impl Clone for TrainingOutput
impl Clone for TrainingOutput
Source§fn clone(&self) -> TrainingOutput
fn clone(&self) -> TrainingOutput
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for TrainingOutput
impl RefUnwindSafe for TrainingOutput
impl Send for TrainingOutput
impl Sync for TrainingOutput
impl Unpin for TrainingOutput
impl UnsafeUnpin for TrainingOutput
impl UnwindSafe for TrainingOutput
Blanket Implementations§
impl<T> Allocation for T
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,
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