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