quantrs2_ml/clustering/
config.rs

1//! Configuration types for quantum clustering
2
3use crate::dimensionality_reduction::{QuantumDistanceMetric, QuantumEnhancementLevel};
4
5/// Quantum clustering algorithms
6#[derive(Debug, Clone, Copy, PartialEq)]
7pub enum ClusteringAlgorithm {
8    /// Quantum K-Means
9    QuantumKMeans,
10    /// Quantum Hierarchical Clustering
11    QuantumHierarchical,
12    /// Quantum DBSCAN
13    QuantumDBSCAN,
14    /// Quantum Spectral Clustering
15    QuantumSpectral,
16    /// Quantum Fuzzy C-Means
17    QuantumFuzzyCMeans,
18    /// Quantum Gaussian Mixture Models
19    QuantumGMM,
20    /// Quantum Mean-Shift
21    QuantumMeanShift,
22    /// Quantum Affinity Propagation
23    QuantumAffinityPropagation,
24}
25
26/// Quantum clustering configuration
27#[derive(Debug, Clone)]
28pub struct QuantumClusteringConfig {
29    /// Algorithm to use
30    pub algorithm: ClusteringAlgorithm,
31    /// Number of clusters
32    pub n_clusters: usize,
33    /// Maximum iterations
34    pub max_iterations: usize,
35    /// Convergence tolerance
36    pub tolerance: f64,
37    /// Number of qubits for quantum operations
38    pub num_qubits: usize,
39    /// Random state for reproducibility
40    pub random_state: Option<u64>,
41}
42
43impl Default for QuantumClusteringConfig {
44    fn default() -> Self {
45        Self {
46            algorithm: ClusteringAlgorithm::QuantumKMeans,
47            n_clusters: 3,
48            max_iterations: 100,
49            tolerance: 1e-4,
50            num_qubits: 4,
51            random_state: None,
52        }
53    }
54}
55
56/// Affinity types for spectral clustering
57#[derive(Debug, Clone, Copy, PartialEq)]
58pub enum AffinityType {
59    /// RBF (Gaussian) kernel
60    RBF,
61    /// Linear kernel
62    Linear,
63    /// Polynomial kernel
64    Polynomial,
65    /// Quantum kernel
66    QuantumKernel,
67    /// Nearest neighbors
68    NearestNeighbors,
69}
70
71/// Covariance types for Gaussian Mixture Models
72#[derive(Debug, Clone, Copy, PartialEq)]
73pub enum CovarianceType {
74    /// Full covariance matrices
75    Full,
76    /// Diagonal covariance matrices
77    Diagonal,
78    /// Tied covariance matrix
79    Tied,
80    /// Spherical covariance
81    Spherical,
82    /// Quantum-enhanced covariance
83    QuantumEnhanced,
84}
85
86/// Ensemble combination methods
87#[derive(Debug, Clone, Copy, PartialEq)]
88pub enum EnsembleCombinationMethod {
89    /// Majority voting
90    MajorityVoting,
91    /// Weighted voting
92    WeightedVoting,
93    /// Consensus clustering
94    ConsensusClustering,
95    /// Quantum consensus
96    QuantumConsensus,
97}
98
99/// Measurement strategies for quantum operations
100#[derive(Debug, Clone, Copy, PartialEq)]
101pub enum MeasurementStrategy {
102    /// Standard quantum measurements
103    Standard,
104    /// Adaptive measurements
105    AdaptiveMeasurements,
106    /// Optimal measurements
107    OptimalMeasurements,
108}
109
110/// State preparation methods
111#[derive(Debug, Clone, Copy, PartialEq)]
112pub enum StatePreparationMethod {
113    /// Angle encoding
114    AngleEncoding,
115    /// Amplitude encoding
116    AmplitudeEncoding,
117    /// Variational state preparation
118    VariationalStatePreparation,
119}
120
121/// Entanglement structures
122#[derive(Debug, Clone, Copy, PartialEq)]
123pub enum EntanglementStructure {
124    /// Linear entanglement
125    Linear,
126    /// Circular entanglement
127    Circular,
128    /// Hardware efficient entanglement
129    HardwareEfficient,
130    /// All-to-all entanglement
131    AllToAll,
132}
133
134/// Graph methods for graph clustering
135#[derive(Debug, Clone, Copy, PartialEq)]
136pub enum GraphMethod {
137    /// Standard graph construction
138    Standard,
139    /// Quantum graph construction
140    QuantumGraph,
141    /// k-nearest neighbors graph
142    KNearestNeighbors,
143    /// Epsilon neighborhood graph
144    EpsilonNeighborhood,
145}
146
147/// Community detection algorithms
148#[derive(Debug, Clone, Copy, PartialEq)]
149pub enum CommunityAlgorithm {
150    /// Modularity-based detection
151    Modularity,
152    /// Quantum community detection
153    QuantumCommunityDetection,
154    /// Louvain algorithm
155    Louvain,
156    /// Label propagation
157    LabelPropagation,
158}
159
160/// Time series distance metrics
161#[derive(Debug, Clone, Copy, PartialEq)]
162pub enum TimeSeriesDistanceMetric {
163    /// Dynamic time warping
164    DTW,
165    /// Euclidean distance
166    Euclidean,
167    /// Quantum temporal distance
168    QuantumTemporal,
169}
170
171/// Dimensionality reduction methods for high-dimensional clustering
172#[derive(Debug, Clone, Copy, PartialEq)]
173pub enum DimensionalityReduction {
174    /// Principal Component Analysis
175    PCA,
176    /// Quantum PCA
177    QuantumPCA,
178    /// t-SNE
179    TSNE,
180    /// UMAP
181    UMAP,
182}
183
184/// Configuration for Quantum K-Means clustering
185#[derive(Debug, Clone)]
186pub struct QuantumKMeansConfig {
187    /// Number of clusters
188    pub n_clusters: usize,
189    /// Maximum iterations
190    pub max_iterations: usize,
191    /// Convergence tolerance
192    pub tolerance: f64,
193    /// Distance metric to use
194    pub distance_metric: QuantumDistanceMetric,
195    /// Number of quantum repetitions
196    pub quantum_reps: usize,
197    /// Quantum enhancement level
198    pub enhancement_level: QuantumEnhancementLevel,
199    /// Random seed
200    pub seed: Option<u64>,
201}
202
203/// Configuration for Quantum DBSCAN clustering
204#[derive(Debug, Clone)]
205pub struct QuantumDBSCANConfig {
206    /// Epsilon neighborhood radius
207    pub eps: f64,
208    /// Minimum samples in neighborhood
209    pub min_samples: usize,
210    /// Distance metric to use
211    pub distance_metric: QuantumDistanceMetric,
212    /// Quantum enhancement level
213    pub enhancement_level: QuantumEnhancementLevel,
214    /// Random seed
215    pub seed: Option<u64>,
216}
217
218/// Configuration for Quantum Spectral clustering
219#[derive(Debug, Clone)]
220pub struct QuantumSpectralConfig {
221    /// Number of clusters
222    pub n_clusters: usize,
223    /// Affinity type
224    pub affinity: AffinityType,
225    /// Gamma parameter for RBF kernel
226    pub gamma: f64,
227    /// Quantum enhancement level
228    pub enhancement_level: QuantumEnhancementLevel,
229    /// Random seed
230    pub seed: Option<u64>,
231}
232
233/// Configuration for Quantum Fuzzy C-Means clustering
234#[derive(Debug, Clone)]
235pub struct QuantumFuzzyCMeansConfig {
236    /// Number of clusters
237    pub n_clusters: usize,
238    /// Fuzziness parameter
239    pub fuzziness: f64,
240    /// Maximum iterations
241    pub max_iterations: usize,
242    /// Convergence tolerance
243    pub tolerance: f64,
244    /// Distance metric to use
245    pub distance_metric: QuantumDistanceMetric,
246    /// Quantum enhancement level
247    pub enhancement_level: QuantumEnhancementLevel,
248    /// Random seed
249    pub seed: Option<u64>,
250}
251
252/// Configuration for Quantum Gaussian Mixture Models
253#[derive(Debug, Clone)]
254pub struct QuantumGMMConfig {
255    /// Number of components
256    pub n_components: usize,
257    /// Covariance type
258    pub covariance_type: CovarianceType,
259    /// Maximum iterations
260    pub max_iterations: usize,
261    /// Convergence tolerance
262    pub tolerance: f64,
263    /// Quantum enhancement level
264    pub enhancement_level: QuantumEnhancementLevel,
265    /// Random seed
266    pub seed: Option<u64>,
267}
268
269/// Configuration for clustering ensembles
270#[derive(Debug, Clone)]
271pub struct ClusteringEnsembleConfig {
272    /// Base clustering algorithms
273    pub base_algorithms: Vec<ClusteringAlgorithm>,
274    /// Number of ensemble members
275    pub n_members: usize,
276    /// Combination method
277    pub combination_method: EnsembleCombinationMethod,
278    /// Random seed
279    pub seed: Option<u64>,
280}
281
282/// Configuration for graph clustering
283#[derive(Debug, Clone)]
284pub struct GraphClusteringConfig {
285    /// Graph construction method
286    pub graph_method: GraphMethod,
287    /// Community detection algorithm
288    pub community_algorithm: CommunityAlgorithm,
289    /// Number of neighbors for graph construction
290    pub n_neighbors: usize,
291    /// Quantum enhancement level
292    pub enhancement_level: QuantumEnhancementLevel,
293    /// Random seed
294    pub seed: Option<u64>,
295}
296
297/// Configuration for time series clustering
298#[derive(Debug, Clone)]
299pub struct TimeSeriesClusteringConfig {
300    /// Number of clusters
301    pub n_clusters: usize,
302    /// Time series distance metric
303    pub ts_distance_metric: TimeSeriesDistanceMetric,
304    /// Window size for analysis
305    pub window_size: usize,
306    /// Random seed
307    pub seed: Option<u64>,
308}
309
310/// Configuration for high-dimensional clustering
311#[derive(Debug, Clone)]
312pub struct HighDimClusteringConfig {
313    /// Number of clusters
314    pub n_clusters: usize,
315    /// Dimensionality reduction method
316    pub dim_reduction: DimensionalityReduction,
317    /// Target dimensionality after reduction
318    pub target_dim: usize,
319    /// Random seed
320    pub seed: Option<u64>,
321}
322
323/// Configuration for streaming clustering
324#[derive(Debug, Clone)]
325pub struct StreamingClusteringConfig {
326    /// Number of clusters
327    pub n_clusters: usize,
328    /// Batch size for processing
329    pub batch_size: usize,
330    /// Memory size for streaming
331    pub memory_size: usize,
332    /// Forgetting factor
333    pub forgetting_factor: f64,
334    /// Random seed
335    pub seed: Option<u64>,
336}
337
338/// Configuration for quantum-native clustering
339#[derive(Debug, Clone)]
340pub struct QuantumNativeConfig {
341    /// Number of qubits
342    pub num_qubits: usize,
343    /// Circuit depth
344    pub circuit_depth: usize,
345    /// State preparation method
346    pub state_preparation: StatePreparationMethod,
347    /// Measurement strategy
348    pub measurement_strategy: MeasurementStrategy,
349    /// Entanglement structure
350    pub entanglement_structure: EntanglementStructure,
351    /// Random seed
352    pub seed: Option<u64>,
353}
354
355// Default implementations
356impl Default for QuantumKMeansConfig {
357    fn default() -> Self {
358        Self {
359            n_clusters: 3,
360            max_iterations: 100,
361            tolerance: 1e-4,
362            distance_metric: QuantumDistanceMetric::QuantumEuclidean,
363            quantum_reps: 2,
364            enhancement_level: QuantumEnhancementLevel::Moderate,
365            seed: None,
366        }
367    }
368}
369
370impl Default for QuantumDBSCANConfig {
371    fn default() -> Self {
372        Self {
373            eps: 0.5,
374            min_samples: 5,
375            distance_metric: QuantumDistanceMetric::QuantumEuclidean,
376            enhancement_level: QuantumEnhancementLevel::Moderate,
377            seed: None,
378        }
379    }
380}
381
382impl Default for QuantumSpectralConfig {
383    fn default() -> Self {
384        Self {
385            n_clusters: 3,
386            affinity: AffinityType::RBF,
387            gamma: 1.0,
388            enhancement_level: QuantumEnhancementLevel::Moderate,
389            seed: None,
390        }
391    }
392}
393
394impl Default for QuantumFuzzyCMeansConfig {
395    fn default() -> Self {
396        Self {
397            n_clusters: 3,
398            fuzziness: 2.0,
399            max_iterations: 100,
400            tolerance: 1e-4,
401            distance_metric: QuantumDistanceMetric::QuantumEuclidean,
402            enhancement_level: QuantumEnhancementLevel::Moderate,
403            seed: None,
404        }
405    }
406}
407
408impl Default for QuantumGMMConfig {
409    fn default() -> Self {
410        Self {
411            n_components: 3,
412            covariance_type: CovarianceType::Full,
413            max_iterations: 100,
414            tolerance: 1e-4,
415            enhancement_level: QuantumEnhancementLevel::Moderate,
416            seed: None,
417        }
418    }
419}