use std::collections::HashMap;
use std::time::{Duration, Instant};
#[derive(Debug, Clone)]
pub struct SolutionPoint {
pub solution: Vec<i8>,
pub energy: f64,
pub metrics: HashMap<String, f64>,
pub metadata: SolutionMetadata,
pub features: Option<Vec<f64>>,
}
#[derive(Debug, Clone)]
pub struct SolutionMetadata {
pub id: usize,
pub source: String,
pub timestamp: Instant,
pub iterations: usize,
pub quality_rank: Option<usize>,
pub is_feasible: bool,
}
#[derive(Debug, Clone)]
pub struct SolutionCluster {
pub id: usize,
pub solutions: Vec<SolutionPoint>,
pub centroid: Vec<f64>,
pub representative: Option<SolutionPoint>,
pub statistics: ClusterStatistics,
pub quality_metrics: ClusterQualityMetrics,
}
#[derive(Debug, Clone)]
pub struct ClusterStatistics {
pub size: usize,
pub mean_energy: f64,
pub energy_std: f64,
pub min_energy: f64,
pub max_energy: f64,
pub intra_cluster_distance: f64,
pub diameter: f64,
pub density: f64,
}
#[derive(Debug, Clone)]
pub struct ClusterQualityMetrics {
pub silhouette_coefficient: f64,
pub inertia: f64,
pub calinski_harabasz_index: f64,
pub davies_bouldin_index: f64,
pub stability: f64,
}
#[derive(Debug, Clone)]
pub struct ClusteringResults {
pub clusters: Vec<SolutionCluster>,
pub algorithm: super::algorithms::ClusteringAlgorithm,
pub distance_metric: super::algorithms::DistanceMetric,
pub overall_quality: OverallClusteringQuality,
pub landscape_analysis: LandscapeAnalysis,
pub statistical_summary: StatisticalSummary,
pub performance_metrics: ClusteringPerformanceMetrics,
pub recommendations: Vec<OptimizationRecommendation>,
}
#[derive(Debug, Clone)]
pub struct OverallClusteringQuality {
pub silhouette_score: f64,
pub adjusted_rand_index: Option<f64>,
pub normalized_mutual_information: Option<f64>,
pub inter_cluster_separation: f64,
pub cluster_cohesion: f64,
pub num_clusters: usize,
pub optimal_num_clusters: usize,
}
#[derive(Debug, Clone)]
pub struct LandscapeAnalysis {
pub energy_statistics: EnergyStatistics,
pub basins: Vec<EnergyBasin>,
pub connectivity: ConnectivityAnalysis,
pub multi_modality: MultiModalityAnalysis,
pub ruggedness: RuggednessMetrics,
pub funnel_analysis: FunnelAnalysis,
}
#[derive(Debug, Clone)]
pub struct EnergyStatistics {
pub mean: f64,
pub std_dev: f64,
pub min: f64,
pub max: f64,
pub percentiles: Vec<f64>,
pub skewness: f64,
pub kurtosis: f64,
pub num_distinct_energies: usize,
}
#[derive(Debug, Clone)]
pub struct EnergyBasin {
pub id: usize,
pub solutions: Vec<usize>,
pub min_energy: f64,
pub size: usize,
pub depth: f64,
pub width: f64,
pub escape_barrier: f64,
}
#[derive(Debug, Clone)]
pub struct ConnectivityAnalysis {
pub num_components: usize,
pub largest_component_size: usize,
pub average_path_length: f64,
pub clustering_coefficient: f64,
pub diameter: usize,
}
#[derive(Debug, Clone)]
pub struct MultiModalityAnalysis {
pub num_modes: usize,
pub mode_energies: Vec<f64>,
pub mode_strengths: Vec<f64>,
pub inter_mode_distances: Vec<Vec<f64>>,
pub multi_modality_index: f64,
}
#[derive(Debug, Clone)]
pub struct RuggednessMetrics {
pub autocorrelation: Vec<f64>,
pub ruggedness_coefficient: f64,
pub num_local_optima: usize,
pub epistasis: f64,
pub neutrality: f64,
}
#[derive(Debug, Clone)]
pub struct FunnelAnalysis {
pub num_funnels: usize,
pub funnel_depths: Vec<f64>,
pub funnel_widths: Vec<f64>,
pub global_funnel: Option<usize>,
pub competition_index: f64,
}
#[derive(Debug, Clone)]
pub struct StatisticalSummary {
pub cluster_size_distribution: Vec<usize>,
pub energy_distribution: DistributionAnalysis,
pub convergence_analysis: ConvergenceAnalysis,
pub correlation_analysis: CorrelationAnalysis,
pub outliers: Vec<OutlierInfo>,
}
#[derive(Debug, Clone)]
pub struct DistributionAnalysis {
pub distribution_type: DistributionType,
pub parameters: HashMap<String, f64>,
pub goodness_of_fit: f64,
pub confidence_intervals: Vec<(f64, f64)>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DistributionType {
Normal,
Exponential,
Gamma,
Beta,
Weibull,
LogNormal,
Uniform,
Multimodal,
Unknown,
}
#[derive(Debug, Clone)]
pub struct ConvergenceAnalysis {
pub trajectory_clusters: Vec<TrajectoryCluster>,
pub convergence_rates: Vec<f64>,
pub plateau_analysis: PlateauAnalysis,
pub premature_convergence: bool,
pub diversity_evolution: Vec<f64>,
}
#[derive(Debug, Clone)]
pub struct TrajectoryCluster {
pub id: usize,
pub trajectories: Vec<Vec<f64>>,
pub representative_trajectory: Vec<f64>,
pub convergence_characteristics: ConvergenceCharacteristics,
}
#[derive(Debug, Clone)]
pub struct ConvergenceCharacteristics {
pub speed: f64,
pub final_quality: f64,
pub stability: f64,
pub exploration_exploitation_ratio: f64,
}
#[derive(Debug, Clone)]
pub struct PlateauAnalysis {
pub num_plateaus: usize,
pub plateau_durations: Vec<usize>,
pub plateau_energies: Vec<f64>,
pub escape_probabilities: Vec<f64>,
}
#[derive(Debug, Clone)]
pub struct CorrelationAnalysis {
pub variable_correlations: Vec<Vec<f64>>,
pub energy_correlations: Vec<f64>,
pub significant_correlations: Vec<(usize, usize, f64)>,
pub correlation_patterns: Vec<CorrelationPattern>,
}
#[derive(Debug, Clone)]
pub struct CorrelationPattern {
pub description: String,
pub variables: Vec<usize>,
pub strength: f64,
pub pattern_type: PatternType,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PatternType {
Positive,
Negative,
NonLinear,
Conditional,
ClusterSpecific,
}
#[derive(Debug, Clone)]
pub struct OutlierInfo {
pub solution_id: usize,
pub outlier_score: f64,
pub outlier_type: OutlierType,
pub distance_to_cluster: f64,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum OutlierType {
Energy,
Structural,
Performance,
Global,
}
#[derive(Debug, Clone)]
pub struct ClusteringPerformanceMetrics {
pub clustering_time: Duration,
pub analysis_time: Duration,
pub memory_usage: usize,
pub scalability_metrics: ScalabilityMetrics,
pub efficiency_metrics: EfficiencyMetrics,
}
#[derive(Debug, Clone)]
pub struct ScalabilityMetrics {
pub time_complexity: String,
pub space_complexity: String,
pub scaling_factor: f64,
pub parallelization_efficiency: f64,
}
#[derive(Debug, Clone)]
pub struct EfficiencyMetrics {
pub convergence_efficiency: f64,
pub resource_utilization: f64,
pub quality_time_ratio: f64,
pub robustness: f64,
}
#[derive(Debug, Clone)]
pub struct OptimizationRecommendation {
pub recommendation_type: RecommendationType,
pub description: String,
pub expected_improvement: f64,
pub difficulty: DifficultyLevel,
pub priority: PriorityLevel,
pub evidence: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RecommendationType {
ParameterTuning,
AlgorithmModification,
ProblemReformulation,
InitializationStrategy,
TerminationCriteria,
HybridApproach,
MultiStart,
ConstraintHandling,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum DifficultyLevel {
Easy,
Moderate,
Difficult,
VeryDifficult,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PriorityLevel {
Low,
Medium,
High,
Critical,
}
#[derive(Debug, Clone)]
pub struct AnalysisStatistics {
pub total_solutions: usize,
pub total_time: Duration,
pub cache_hit_rate: f64,
pub peak_memory: usize,
}