use super::*;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdvancedOptimizationConfig {
pub enable_advanced: bool,
pub multi_objective: MultiObjectiveConfig,
pub constraint_handling: ConstraintHandlingConfig,
pub search_strategy: SearchStrategyConfig,
pub parallel_optimization: ParallelOptimizationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MultiObjectiveConfig {
pub enable_multi_objective: bool,
pub objectives: Vec<OptimizationObjective>,
pub pareto_config: ParetoConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParetoConfig {
pub population_size: usize,
pub generations: usize,
pub crossover_rate: f64,
pub mutation_rate: f64,
pub selection_method: SelectionMethod,
pub scalarization: ScalarizationMethod,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConstraintHandlingConfig {
pub enable_constraints: bool,
pub constraint_types: Vec<ConstraintType>,
pub penalty_method: PenaltyMethod,
pub tolerance: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchStrategyConfig {
pub strategy: SearchStrategy,
pub hybrid_config: HybridSearchConfig,
pub budget: SearchBudgetConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HybridSearchConfig {
pub strategies: Vec<SearchStrategy>,
pub switching_criteria: SwitchingCriteria,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SwitchingCriteria {
pub performance_threshold: f64,
pub stagnation_limit: usize,
pub time_limit: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchBudgetConfig {
pub max_evaluations: usize,
pub max_time: Duration,
pub target_quality: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParallelOptimizationConfig {
pub enable_parallel: bool,
pub num_workers: usize,
pub load_balancing: LoadBalancingStrategy,
pub synchronization: SynchronizationMethod,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptimizationMetrics {
pub optimization_time: Duration,
pub iterations: usize,
pub converged: bool,
pub final_objective: f64,
pub best_objective: f64,
pub improvement_ratio: f64,
pub constraint_violations: f64,
pub algorithm_metrics: HashMap<String, f64>,
pub resource_usage: ResourceUsageMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceUsageMetrics {
pub peak_memory: usize,
pub average_cpu: f64,
pub energy_consumption: Option<f64>,
pub network_overhead: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResultAnalysis {
pub analysis_type: ResultAnalysisType,
pub statistical_summary: StatisticalSummary,
pub trend_analysis: TrendAnalysis,
pub comparative_analysis: ComparativeAnalysis,
pub sensitivity_analysis: SensitivityAnalysis,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatisticalSummary {
pub mean: f64,
pub std_dev: f64,
pub min: f64,
pub max: f64,
pub median: f64,
pub confidence_interval_95: (f64, f64),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrendAnalysis {
pub trend_direction: TrendDirection,
pub improvement_rate: f64,
pub convergence_pattern: String,
pub plateau_analysis: Vec<PlateauInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PlateauInfo {
pub start_iteration: usize,
pub end_iteration: usize,
pub duration: usize,
pub plateau_value: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComparativeAnalysis {
pub baseline_comparisons: Vec<BaselineComparison>,
pub performance_ranking: usize,
pub significance_tests: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BaselineComparison {
pub baseline_name: String,
pub improvement_factor: f64,
pub p_value: f64,
pub effect_size: f64,
pub confidence: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SensitivityAnalysis {
pub parameter_sensitivity: HashMap<String, f64>,
pub robust_ranges: HashMap<String, (f64, f64)>,
pub critical_parameters: Vec<String>,
pub interaction_effects: HashMap<String, f64>,
}