quantum_clustering_simple/
quantum_clustering_simple.rs1#![allow(clippy::pedantic, clippy::unnecessary_wraps)]
2use quantrs2_ml::clustering::{
8 AffinityType, QuantumClusterer, QuantumDBSCANConfig, QuantumKMeansConfig, QuantumSpectralConfig,
9};
10use quantrs2_ml::dimensionality_reduction::{QuantumDistanceMetric, QuantumEnhancementLevel};
11use quantrs2_ml::prelude::*;
12use scirs2_core::ndarray::{array, Array2};
13
14fn main() -> Result<()> {
15 println!("🌀 Simple Quantum Clustering Demo");
16 println!("=================================\n");
17
18 let data = array![
20 [1.0, 1.0],
21 [1.1, 1.1],
22 [0.9, 0.9],
23 [1.2, 0.8],
24 [5.0, 5.0],
25 [5.1, 5.1],
26 [4.9, 4.9],
27 [5.2, 4.8],
28 ];
29
30 println!("Sample data:");
31 for (i, row) in data.rows().into_iter().enumerate() {
32 println!(" Point {}: [{:.1}, {:.1}]", i, row[0], row[1]);
33 }
34
35 demo_quantum_kmeans(&data)?;
37
38 demo_quantum_dbscan(&data)?;
40
41 demo_quantum_spectral(&data)?;
43
44 println!("\n✅ Simple quantum clustering demos completed successfully!");
45
46 Ok(())
47}
48
49fn demo_quantum_kmeans(data: &Array2<f64>) -> Result<()> {
51 println!("\n🎯 Demo 1: Quantum K-means Clustering");
52 println!("-------------------------------------");
53
54 let config = QuantumKMeansConfig {
56 n_clusters: 2,
57 max_iterations: 100,
58 tolerance: 1e-4,
59 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
60 quantum_reps: 2,
61 enhancement_level: QuantumEnhancementLevel::Moderate,
62 seed: Some(42),
63 };
64
65 let mut clusterer = QuantumClusterer::kmeans(config);
67 let result = clusterer.fit(data)?;
68
69 println!(" Clusters found: {}", result.n_clusters);
70 println!(" Labels: {:?}", result.labels);
71 println!(" Inertia: {:.4}", result.inertia.unwrap_or(0.0));
72
73 if let Some(centers) = &result.cluster_centers {
75 println!(" Cluster centers:");
76 for (i, center) in centers.rows().into_iter().enumerate() {
77 println!(" Cluster {}: [{:.3}, {:.3}]", i, center[0], center[1]);
78 }
79 }
80
81 let new_data = array![[1.5, 1.5], [4.5, 4.5]];
83 let predictions = clusterer.predict(&new_data)?;
84 println!(" Predictions for new data: {predictions:?}");
85
86 Ok(())
87}
88
89fn demo_quantum_dbscan(data: &Array2<f64>) -> Result<()> {
91 println!("\n🎯 Demo 2: Quantum DBSCAN Clustering");
92 println!("------------------------------------");
93
94 let config = QuantumDBSCANConfig {
96 eps: 1.0,
97 min_samples: 3,
98 distance_metric: QuantumDistanceMetric::QuantumEuclidean,
99 enhancement_level: QuantumEnhancementLevel::Moderate,
100 seed: None,
101 };
102
103 let mut clusterer = QuantumClusterer::dbscan(config);
105 let result = clusterer.fit(data)?;
106
107 println!(" Clusters found: {}", result.n_clusters);
108 println!(" Labels: {:?}", result.labels);
109
110 let noise_count = result.labels.iter().filter(|&&x| x == usize::MAX).count();
112 println!(" Noise points: {noise_count}");
113
114 Ok(())
115}
116
117fn demo_quantum_spectral(data: &Array2<f64>) -> Result<()> {
119 println!("\n🎯 Demo 3: Quantum Spectral Clustering");
120 println!("--------------------------------------");
121
122 let config = QuantumSpectralConfig {
124 n_clusters: 2,
125 affinity: AffinityType::RBF,
126 gamma: 1.0,
127 enhancement_level: QuantumEnhancementLevel::Light,
128 seed: None,
129 };
130
131 let mut clusterer = QuantumClusterer::spectral(config);
133 let result = clusterer.fit(data)?;
134
135 println!(" Clusters found: {}", result.n_clusters);
136 println!(" Labels: {:?}", result.labels);
137
138 Ok(())
139}