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}