quantrs2_anneal/solution_clustering/
config.rs1use super::algorithms::{ClusteringAlgorithm, DistanceMetric};
4
5#[derive(Debug, Clone)]
7pub struct ClusteringConfig {
8 pub algorithm: ClusteringAlgorithm,
10 pub distance_metric: DistanceMetric,
12 pub feature_extraction: FeatureExtractionMethod,
14 pub parallel_processing: bool,
16 pub cache_distances: bool,
18 pub analysis_depth: AnalysisDepth,
20 pub seed: Option<u64>,
22 pub visualization: VisualizationConfig,
24}
25
26#[derive(Debug, Clone, PartialEq, Eq)]
28pub enum FeatureExtractionMethod {
29 Raw,
31 EnergyBased,
33 Structural,
35 LSH { num_hashes: usize, num_bits: usize },
37 PCA { num_components: usize },
39 AutoEncoder { hidden_layers: Vec<usize> },
41 Custom { name: String },
43}
44
45#[derive(Debug, Clone, PartialEq, Eq)]
47pub enum AnalysisDepth {
48 Basic,
50 Standard,
52 Comprehensive,
54 Deep,
56}
57
58#[derive(Debug, Clone)]
60pub struct VisualizationConfig {
61 pub enabled: bool,
63 pub dimensionality_reduction: DimensionalityReduction,
65 pub plot_types: Vec<PlotType>,
67 pub color_scheme: ColorScheme,
69 pub output_format: OutputFormat,
71}
72
73#[derive(Debug, Clone, PartialEq)]
75pub enum DimensionalityReduction {
76 PCA,
78 TSNE { perplexity: f64 },
80 UMAP { n_neighbors: usize, min_dist: f64 },
82 MDS,
84 LDA,
86}
87
88#[derive(Debug, Clone, PartialEq, Eq)]
90pub enum PlotType {
91 ScatterPlot,
93 EnergyHistogram,
95 SilhouettePlot,
97 Dendrogram,
99 LandscapeHeatMap,
101 ConvergenceTrajectories,
103 CorrelationMatrix,
105}
106
107#[derive(Debug, Clone, PartialEq, Eq)]
109pub enum ColorScheme {
110 Default,
112 Viridis,
114 Plasma,
116 Spectral,
118 Custom(Vec<String>),
120}
121
122#[derive(Debug, Clone, PartialEq, Eq)]
124pub enum OutputFormat {
125 PNG,
127 SVG,
129 PDF,
131 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#[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#[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}