quantum_clustering_simple/
quantum_clustering_simple.rs

1//! Simple Quantum Clustering Example
2//!
3//! This example demonstrates basic quantum clustering functionality
4//! with the working APIs in the quantum ML module.
5
6use 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    // Create simple sample data
16    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 1: Quantum K-means Clustering
33    demo_quantum_kmeans(&data)?;
34
35    // Demo 2: Quantum DBSCAN
36    demo_quantum_dbscan(&data)?;
37
38    // Demo 3: Quantum Spectral Clustering
39    demo_quantum_spectral(&data)?;
40
41    println!("\n✅ Simple quantum clustering demos completed successfully!");
42
43    Ok(())
44}
45
46/// Demo quantum K-means clustering
47fn demo_quantum_kmeans(data: &Array2<f64>) -> Result<()> {
48    println!("\n🎯 Demo 1: Quantum K-means Clustering");
49    println!("-------------------------------------");
50
51    // Create K-means configuration
52    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    // Create and train clusterer
63    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    // Show cluster centers if available
71    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    // Test prediction on new data
79    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
86/// Demo quantum DBSCAN clustering
87fn demo_quantum_dbscan(data: &Array2<f64>) -> Result<()> {
88    println!("\n🎯 Demo 2: Quantum DBSCAN Clustering");
89    println!("------------------------------------");
90
91    // Create DBSCAN configuration
92    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    // Create and train clusterer
101    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    // Count noise points (using MAX as noise label)
108    let noise_count = result.labels.iter().filter(|&&x| x == usize::MAX).count();
109    println!("   Noise points: {}", noise_count);
110
111    Ok(())
112}
113
114/// Demo quantum spectral clustering
115fn demo_quantum_spectral(data: &Array2<f64>) -> Result<()> {
116    println!("\n🎯 Demo 3: Quantum Spectral Clustering");
117    println!("--------------------------------------");
118
119    // Create spectral configuration
120    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    // Create and train clusterer
129    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}