quantrs2_anneal/solution_clustering/
config.rs

1//! Configuration structures for clustering analysis
2
3use super::algorithms::{ClusteringAlgorithm, DistanceMetric};
4
5/// Configuration for clustering analysis
6#[derive(Debug, Clone)]
7pub struct ClusteringConfig {
8    /// Clustering algorithm to use
9    pub algorithm: ClusteringAlgorithm,
10    /// Distance metric
11    pub distance_metric: DistanceMetric,
12    /// Feature extraction method
13    pub feature_extraction: FeatureExtractionMethod,
14    /// Enable parallel processing
15    pub parallel_processing: bool,
16    /// Cache distance matrices
17    pub cache_distances: bool,
18    /// Analysis depth level
19    pub analysis_depth: AnalysisDepth,
20    /// Random seed for reproducibility
21    pub seed: Option<u64>,
22    /// Visualization settings
23    pub visualization: VisualizationConfig,
24}
25
26/// Feature extraction methods
27#[derive(Debug, Clone, PartialEq, Eq)]
28pub enum FeatureExtractionMethod {
29    /// Use raw solution vectors
30    Raw,
31    /// Use energy and basic statistics
32    EnergyBased,
33    /// Use structural features
34    Structural,
35    /// Use locality-sensitive hashing
36    LSH { num_hashes: usize, num_bits: usize },
37    /// Principal component analysis
38    PCA { num_components: usize },
39    /// Auto-encoder features
40    AutoEncoder { hidden_layers: Vec<usize> },
41    /// Custom feature extraction
42    Custom { name: String },
43}
44
45/// Analysis depth levels
46#[derive(Debug, Clone, PartialEq, Eq)]
47pub enum AnalysisDepth {
48    /// Basic clustering only
49    Basic,
50    /// Standard analysis with key metrics
51    Standard,
52    /// Comprehensive analysis with all features
53    Comprehensive,
54    /// Deep analysis with advanced techniques
55    Deep,
56}
57
58/// Visualization configuration
59#[derive(Debug, Clone)]
60pub struct VisualizationConfig {
61    /// Enable visualization output
62    pub enabled: bool,
63    /// Dimensionality reduction for visualization
64    pub dimensionality_reduction: DimensionalityReduction,
65    /// Plot types to generate
66    pub plot_types: Vec<PlotType>,
67    /// Color scheme
68    pub color_scheme: ColorScheme,
69    /// Output format
70    pub output_format: OutputFormat,
71}
72
73/// Dimensionality reduction methods for visualization
74#[derive(Debug, Clone, PartialEq)]
75pub enum DimensionalityReduction {
76    /// Principal Component Analysis
77    PCA,
78    /// t-Distributed Stochastic Neighbor Embedding
79    TSNE { perplexity: f64 },
80    /// Uniform Manifold Approximation and Projection
81    UMAP { n_neighbors: usize, min_dist: f64 },
82    /// Multi-dimensional Scaling
83    MDS,
84    /// Linear Discriminant Analysis
85    LDA,
86}
87
88/// Plot types for visualization
89#[derive(Debug, Clone, PartialEq, Eq)]
90pub enum PlotType {
91    /// Scatter plot of solutions
92    ScatterPlot,
93    /// Energy histogram
94    EnergyHistogram,
95    /// Cluster silhouette plot
96    SilhouettePlot,
97    /// Dendrogram for hierarchical clustering
98    Dendrogram,
99    /// Landscape heat map
100    LandscapeHeatMap,
101    /// Convergence trajectories
102    ConvergenceTrajectories,
103    /// Correlation matrix
104    CorrelationMatrix,
105}
106
107/// Color schemes for visualization
108#[derive(Debug, Clone, PartialEq, Eq)]
109pub enum ColorScheme {
110    /// Default color scheme
111    Default,
112    /// Viridis color scheme
113    Viridis,
114    /// Plasma color scheme
115    Plasma,
116    /// Spectral color scheme
117    Spectral,
118    /// Custom color scheme
119    Custom(Vec<String>),
120}
121
122/// Output formats for visualization
123#[derive(Debug, Clone, PartialEq, Eq)]
124pub enum OutputFormat {
125    /// PNG image
126    PNG,
127    /// SVG vector graphics
128    SVG,
129    /// PDF document
130    PDF,
131    /// HTML interactive plot
132    HTML,
133}
134
135impl Default for ClusteringConfig {
136    fn default() -> Self {
137        Self {
138            algorithm: ClusteringAlgorithm::KMeans {
139                k: 5,
140                max_iterations: 100,
141            },
142            distance_metric: DistanceMetric::Euclidean,
143            feature_extraction: FeatureExtractionMethod::Raw,
144            parallel_processing: true,
145            cache_distances: true,
146            analysis_depth: AnalysisDepth::Standard,
147            seed: None,
148            visualization: VisualizationConfig {
149                enabled: true,
150                dimensionality_reduction: DimensionalityReduction::PCA,
151                plot_types: vec![PlotType::ScatterPlot, PlotType::EnergyHistogram],
152                color_scheme: ColorScheme::Default,
153                output_format: OutputFormat::PNG,
154            },
155        }
156    }
157}
158
159/// Create a basic clustering configuration
160#[must_use]
161pub fn create_basic_clustering_config() -> ClusteringConfig {
162    ClusteringConfig {
163        algorithm: ClusteringAlgorithm::KMeans {
164            k: 5,
165            max_iterations: 100,
166        },
167        distance_metric: DistanceMetric::Euclidean,
168        feature_extraction: FeatureExtractionMethod::Raw,
169        analysis_depth: AnalysisDepth::Basic,
170        ..Default::default()
171    }
172}
173
174/// Create a comprehensive clustering configuration
175#[must_use]
176pub fn create_comprehensive_clustering_config() -> ClusteringConfig {
177    ClusteringConfig {
178        algorithm: ClusteringAlgorithm::DBSCAN {
179            eps: 0.5,
180            min_samples: 5,
181        },
182        distance_metric: DistanceMetric::Euclidean,
183        feature_extraction: FeatureExtractionMethod::Structural,
184        analysis_depth: AnalysisDepth::Comprehensive,
185        parallel_processing: true,
186        cache_distances: true,
187        visualization: VisualizationConfig {
188            enabled: true,
189            dimensionality_reduction: DimensionalityReduction::TSNE { perplexity: 30.0 },
190            plot_types: vec![
191                PlotType::ScatterPlot,
192                PlotType::EnergyHistogram,
193                PlotType::SilhouettePlot,
194                PlotType::LandscapeHeatMap,
195            ],
196            color_scheme: ColorScheme::Viridis,
197            output_format: OutputFormat::SVG,
198        },
199        ..Default::default()
200    }
201}