use std::collections::HashMap;
use super::architecture::{ArchitectureCandidate, PerformanceMetrics, ResourceUsage};
pub struct ArchitectureEvaluator {
pub config: EvaluationConfig,
pub predictor: Option<PerformancePredictor>,
pub evaluation_history: Vec<EvaluationRecord>,
}
#[derive(Debug, Clone)]
pub struct EvaluationConfig {
pub budget: usize,
pub use_prediction: bool,
pub early_stopping: EarlyStoppingConfig,
pub validation: ValidationConfig,
}
pub struct PerformancePredictor {
pub predictor_type: PredictorType,
pub training_data: Vec<(ArchitectureCandidate, PerformanceMetrics)>,
pub accuracy: f64,
}
#[derive(Debug, Clone, Copy)]
pub enum PredictorType {
NeuralNetwork,
GradientBoosting,
RandomForest,
GaussianProcess,
}
#[derive(Debug, Clone)]
pub struct EarlyStoppingConfig {
pub enabled: bool,
pub patience: usize,
pub min_delta: f64,
pub monitor: String,
}
#[derive(Debug, Clone)]
pub struct ValidationConfig {
pub strategy: ValidationStrategy,
pub cv_folds: usize,
pub val_split: f64,
}
#[derive(Debug, Clone, Copy)]
pub enum ValidationStrategy {
HoldOut,
CrossValidation,
TimeSeriesSplit,
StratifiedKFold,
}
#[derive(Debug, Clone)]
pub struct EvaluationRecord {
pub architecture_id: String,
pub performance: PerformanceMetrics,
pub resource_usage: ResourceUsage,
pub evaluation_time: std::time::Duration,
pub evaluation_type: EvaluationType,
}
#[derive(Debug, Clone, Copy)]
pub enum EvaluationType {
Full,
Predicted,
EarlyStopped,
Cached,
}
impl Default for EvaluationConfig {
fn default() -> Self {
Self {
budget: 1000,
use_prediction: true,
early_stopping: EarlyStoppingConfig {
enabled: true,
patience: 10,
min_delta: 0.001,
monitor: "loss".to_string(),
},
validation: ValidationConfig {
strategy: ValidationStrategy::HoldOut,
cv_folds: 5,
val_split: 0.2,
},
}
}
}