use std::collections::HashMap;
use std::time::Duration;
use super::{DecompositionStrategy, EvaluationMetric, PerformanceRecord};
#[derive(Debug, Clone)]
pub struct PerformanceEvaluator {
pub evaluation_metrics: Vec<EvaluationMetric>,
pub baseline_comparisons: Vec<BaselineComparison>,
pub performance_history: Vec<PerformanceRecord>,
pub evaluation_cache: HashMap<String, EvaluationResult>,
}
impl PerformanceEvaluator {
pub fn new() -> Result<Self, String> {
Ok(Self {
evaluation_metrics: vec![
EvaluationMetric::SolutionQuality,
EvaluationMetric::ComputationTime,
EvaluationMetric::MemoryUsage,
],
baseline_comparisons: Vec::new(),
performance_history: Vec::new(),
evaluation_cache: HashMap::new(),
})
}
}
#[derive(Debug, Clone)]
pub struct BaselineComparison {
pub baseline_name: String,
pub baseline_strategy: DecompositionStrategy,
pub performance_comparison: PerformanceComparison,
}
#[derive(Debug, Clone)]
pub struct PerformanceComparison {
pub improvement_factor: f64,
pub statistical_significance: f64,
pub confidence_interval: (f64, f64),
}
#[derive(Debug, Clone)]
pub struct EvaluationResult {
pub metric_scores: HashMap<EvaluationMetric, f64>,
pub overall_score: f64,
pub improvement_over_baseline: f64,
pub confidence: f64,
}