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