quantrs2_anneal/solution_clustering/algorithms.rs
1//! Clustering algorithms and distance metrics
2
3use std::collections::HashMap;
4
5/// Solution clustering algorithms
6#[derive(Debug, Clone, PartialEq)]
7pub enum ClusteringAlgorithm {
8 /// K-means clustering
9 KMeans { k: usize, max_iterations: usize },
10
11 /// Hierarchical clustering
12 Hierarchical {
13 linkage: LinkageType,
14 distance_threshold: f64,
15 },
16
17 /// DBSCAN density-based clustering
18 DBSCAN { eps: f64, min_samples: usize },
19
20 /// Spectral clustering
21 Spectral { k: usize, sigma: f64 },
22
23 /// Gaussian Mixture Models
24 GaussianMixture {
25 components: usize,
26 max_iterations: usize,
27 },
28
29 /// Mean-shift clustering
30 MeanShift { bandwidth: f64 },
31
32 /// Affinity propagation
33 AffinityPropagation { damping: f64, max_iterations: usize },
34
35 /// Custom clustering algorithm
36 Custom {
37 name: String,
38 parameters: HashMap<String, f64>,
39 },
40}
41
42/// Linkage types for hierarchical clustering
43#[derive(Debug, Clone, PartialEq, Eq)]
44pub enum LinkageType {
45 /// Single linkage (minimum distance)
46 Single,
47 /// Complete linkage (maximum distance)
48 Complete,
49 /// Average linkage
50 Average,
51 /// Ward linkage (minimize variance)
52 Ward,
53}
54
55/// Distance metrics for clustering
56#[derive(Debug, Clone, PartialEq, Eq)]
57pub enum DistanceMetric {
58 /// Euclidean distance
59 Euclidean,
60 /// Manhattan distance
61 Manhattan,
62 /// Hamming distance for binary vectors
63 Hamming,
64 /// Cosine distance
65 Cosine,
66 /// Jaccard distance
67 Jaccard,
68 /// Custom distance function
69 Custom { name: String },
70}