Skip to main content

entrenar/optim/hpo/types/
trial.rs

1//! Trial types for HPO
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6use super::parameter::ParameterValue;
7
8/// A single trial (configuration + score)
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct Trial {
11    /// Trial ID
12    pub id: usize,
13    /// Parameter configuration
14    pub config: HashMap<String, ParameterValue>,
15    /// Objective score (lower is better by default)
16    pub score: f64,
17    /// Number of epochs/iterations used
18    pub iterations: usize,
19    /// Trial status
20    pub status: TrialStatus,
21}
22
23impl Trial {
24    /// Create a new trial
25    pub fn new(id: usize, config: HashMap<String, ParameterValue>) -> Self {
26        Self { id, config, score: f64::INFINITY, iterations: 0, status: TrialStatus::Pending }
27    }
28
29    /// Mark trial as complete with score
30    pub fn complete(&mut self, score: f64, iterations: usize) {
31        self.score = score;
32        self.iterations = iterations;
33        self.status = TrialStatus::Completed;
34    }
35
36    /// Mark trial as failed
37    pub fn fail(&mut self) {
38        self.status = TrialStatus::Failed;
39    }
40}
41
42/// Trial status
43#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
44pub enum TrialStatus {
45    Pending,
46    Running,
47    Completed,
48    Failed,
49    Pruned,
50}