scirs2_cluster/advanced/
mod.rs

1//! Cutting-edge clustering algorithms including quantum-inspired methods and advanced online learning
2//!
3//! This module provides implementations of state-of-the-art clustering algorithms that push
4//! the boundaries of traditional clustering methods. It includes quantum-inspired algorithms
5//! that leverage quantum computing principles, advanced online learning variants, reinforcement
6//! learning approaches, transfer learning methods, and deep clustering techniques.
7//!
8//! # Examples
9//!
10//! ## Quantum-Inspired Clustering
11//!
12//! ```rust
13//! use scirs2_cluster::advanced::quantum::{quantum_kmeans, QuantumConfig};
14//! use scirs2_core::ndarray::Array2;
15//!
16//! let data = Array2::from_shape_vec((10, 2), (0..20).map(|x| x as f64).collect()).unwrap();
17//! let config = QuantumConfig::default();
18//! let (centroids, labels) = quantum_kmeans(data.view(), 3, Some(config)).unwrap();
19//! ```
20//!
21//! ## Adaptive Online Clustering
22//!
23//! ```rust
24//! use scirs2_cluster::advanced::online::{adaptive_online_clustering, AdaptiveOnlineConfig};
25//! use scirs2_core::ndarray::Array2;
26//!
27//! let data = Array2::from_shape_vec((20, 3), (0..60).map(|x| x as f64).collect()).unwrap();
28//! let config = AdaptiveOnlineConfig::default();
29//! let (centers, labels) = adaptive_online_clustering(data.view(), Some(config)).unwrap();
30//! ```
31
32pub mod online;
33pub mod quantum;
34
35// For now, we'll include placeholder modules for the remaining sections
36// These would be fully implemented in a complete refactoring
37pub mod deep;
38pub mod quantum_algorithms;
39pub mod reinforcement;
40pub mod transfer;
41
42// Re-export main types for convenience
43pub use online::{adaptive_online_clustering, AdaptiveOnlineClustering, AdaptiveOnlineConfig};
44pub use quantum::{quantum_kmeans, QuantumConfig, QuantumKMeans, QuantumState};
45
46// Re-export types from placeholder modules
47pub use deep::*;
48pub use quantum_algorithms::*;
49pub use reinforcement::*;
50pub use transfer::*;
51
52/// Convenience function to create a default quantum configuration
53pub fn default_quantum_config() -> QuantumConfig {
54    QuantumConfig::default()
55}
56
57/// Convenience function to create a default adaptive online configuration
58pub fn default_adaptive_online_config() -> AdaptiveOnlineConfig {
59    AdaptiveOnlineConfig::default()
60}
61
62/// Convenience function for quick quantum clustering with default parameters
63pub fn quick_quantum_clustering<F>(
64    data: scirs2_core::ndarray::ArrayView2<F>,
65    n_clusters: usize,
66) -> crate::error::Result<(
67    scirs2_core::ndarray::Array2<F>,
68    scirs2_core::ndarray::Array1<usize>,
69)>
70where
71    F: scirs2_core::numeric::Float + scirs2_core::numeric::FromPrimitive + std::fmt::Debug,
72{
73    quantum_kmeans(data, n_clusters, None)
74}
75
76/// Convenience function for quick online clustering with default parameters
77pub fn quick_online_clustering<F>(
78    data: scirs2_core::ndarray::ArrayView2<F>,
79) -> crate::error::Result<(
80    scirs2_core::ndarray::Array2<F>,
81    scirs2_core::ndarray::Array1<usize>,
82)>
83where
84    F: scirs2_core::numeric::Float + scirs2_core::numeric::FromPrimitive + std::fmt::Debug,
85{
86    adaptive_online_clustering(data, None)
87}
88
89#[cfg(test)]
90mod tests {
91    use super::*;
92    use scirs2_core::ndarray::Array2;
93
94    #[test]
95    fn test_default_quantum_config() {
96        let config = default_quantum_config();
97        assert_eq!(config.n_quantum_states, 8);
98        assert_eq!(config.quantum_iterations, 50);
99    }
100
101    #[test]
102    fn test_default_adaptive_online_config() {
103        let config = default_adaptive_online_config();
104        assert_eq!(config.initial_learning_rate, 0.1);
105        assert_eq!(config.max_clusters, 50);
106    }
107
108    #[test]
109    fn test_quick_quantum_clustering() {
110        let data = Array2::from_shape_vec((8, 2), (0..16).map(|x| x as f64).collect()).unwrap();
111        let result = quick_quantum_clustering(data.view(), 2);
112        assert!(result.is_ok());
113
114        let (centroids, labels) = result.unwrap();
115        assert_eq!(centroids.nrows(), 2);
116        assert_eq!(labels.len(), 8);
117    }
118
119    #[test]
120    fn test_quick_online_clustering() {
121        let data = Array2::from_shape_vec((6, 2), (0..12).map(|x| x as f64).collect()).unwrap();
122        let result = quick_online_clustering(data.view());
123        assert!(result.is_ok());
124
125        let (centers, labels) = result.unwrap();
126        assert_eq!(labels.len(), 6);
127    }
128}