use crate::dimensionality_reduction::{QuantumDistanceMetric, QuantumEnhancementLevel};
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum ClusteringAlgorithm {
QuantumKMeans,
QuantumHierarchical,
QuantumDBSCAN,
QuantumSpectral,
QuantumFuzzyCMeans,
QuantumGMM,
QuantumMeanShift,
QuantumAffinityPropagation,
}
#[derive(Debug, Clone)]
pub struct QuantumClusteringConfig {
pub algorithm: ClusteringAlgorithm,
pub n_clusters: usize,
pub max_iterations: usize,
pub tolerance: f64,
pub num_qubits: usize,
pub random_state: Option<u64>,
}
impl Default for QuantumClusteringConfig {
fn default() -> Self {
Self {
algorithm: ClusteringAlgorithm::QuantumKMeans,
n_clusters: 3,
max_iterations: 100,
tolerance: 1e-4,
num_qubits: 4,
random_state: None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum AffinityType {
RBF,
Linear,
Polynomial,
QuantumKernel,
NearestNeighbors,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum CovarianceType {
Full,
Diagonal,
Tied,
Spherical,
QuantumEnhanced,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum EnsembleCombinationMethod {
MajorityVoting,
WeightedVoting,
ConsensusClustering,
QuantumConsensus,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum MeasurementStrategy {
Standard,
AdaptiveMeasurements,
OptimalMeasurements,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum StatePreparationMethod {
AngleEncoding,
AmplitudeEncoding,
VariationalStatePreparation,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum EntanglementStructure {
Linear,
Circular,
HardwareEfficient,
AllToAll,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum GraphMethod {
Standard,
QuantumGraph,
KNearestNeighbors,
EpsilonNeighborhood,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum CommunityAlgorithm {
Modularity,
QuantumCommunityDetection,
Louvain,
LabelPropagation,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum TimeSeriesDistanceMetric {
DTW,
Euclidean,
QuantumTemporal,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum DimensionalityReduction {
PCA,
QuantumPCA,
TSNE,
UMAP,
}
#[derive(Debug, Clone)]
pub struct QuantumKMeansConfig {
pub n_clusters: usize,
pub max_iterations: usize,
pub tolerance: f64,
pub distance_metric: QuantumDistanceMetric,
pub quantum_reps: usize,
pub enhancement_level: QuantumEnhancementLevel,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QuantumDBSCANConfig {
pub eps: f64,
pub min_samples: usize,
pub distance_metric: QuantumDistanceMetric,
pub enhancement_level: QuantumEnhancementLevel,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QuantumSpectralConfig {
pub n_clusters: usize,
pub affinity: AffinityType,
pub gamma: f64,
pub enhancement_level: QuantumEnhancementLevel,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QuantumFuzzyCMeansConfig {
pub n_clusters: usize,
pub fuzziness: f64,
pub max_iterations: usize,
pub tolerance: f64,
pub distance_metric: QuantumDistanceMetric,
pub enhancement_level: QuantumEnhancementLevel,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QuantumGMMConfig {
pub n_components: usize,
pub covariance_type: CovarianceType,
pub max_iterations: usize,
pub tolerance: f64,
pub enhancement_level: QuantumEnhancementLevel,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct ClusteringEnsembleConfig {
pub base_algorithms: Vec<ClusteringAlgorithm>,
pub n_members: usize,
pub combination_method: EnsembleCombinationMethod,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct GraphClusteringConfig {
pub graph_method: GraphMethod,
pub community_algorithm: CommunityAlgorithm,
pub n_neighbors: usize,
pub enhancement_level: QuantumEnhancementLevel,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct TimeSeriesClusteringConfig {
pub n_clusters: usize,
pub ts_distance_metric: TimeSeriesDistanceMetric,
pub window_size: usize,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct HighDimClusteringConfig {
pub n_clusters: usize,
pub dim_reduction: DimensionalityReduction,
pub target_dim: usize,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct StreamingClusteringConfig {
pub n_clusters: usize,
pub batch_size: usize,
pub memory_size: usize,
pub forgetting_factor: f64,
pub seed: Option<u64>,
}
#[derive(Debug, Clone)]
pub struct QuantumNativeConfig {
pub num_qubits: usize,
pub circuit_depth: usize,
pub state_preparation: StatePreparationMethod,
pub measurement_strategy: MeasurementStrategy,
pub entanglement_structure: EntanglementStructure,
pub seed: Option<u64>,
}
impl Default for QuantumKMeansConfig {
fn default() -> Self {
Self {
n_clusters: 3,
max_iterations: 100,
tolerance: 1e-4,
distance_metric: QuantumDistanceMetric::QuantumEuclidean,
quantum_reps: 2,
enhancement_level: QuantumEnhancementLevel::Moderate,
seed: None,
}
}
}
impl Default for QuantumDBSCANConfig {
fn default() -> Self {
Self {
eps: 0.5,
min_samples: 5,
distance_metric: QuantumDistanceMetric::QuantumEuclidean,
enhancement_level: QuantumEnhancementLevel::Moderate,
seed: None,
}
}
}
impl Default for QuantumSpectralConfig {
fn default() -> Self {
Self {
n_clusters: 3,
affinity: AffinityType::RBF,
gamma: 1.0,
enhancement_level: QuantumEnhancementLevel::Moderate,
seed: None,
}
}
}
impl Default for QuantumFuzzyCMeansConfig {
fn default() -> Self {
Self {
n_clusters: 3,
fuzziness: 2.0,
max_iterations: 100,
tolerance: 1e-4,
distance_metric: QuantumDistanceMetric::QuantumEuclidean,
enhancement_level: QuantumEnhancementLevel::Moderate,
seed: None,
}
}
}
impl Default for QuantumGMMConfig {
fn default() -> Self {
Self {
n_components: 3,
covariance_type: CovarianceType::Full,
max_iterations: 100,
tolerance: 1e-4,
enhancement_level: QuantumEnhancementLevel::Moderate,
seed: None,
}
}
}