use scirs2_core::ndarray::{Array1, Array2};
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct QuantumAnomalyConfig {
pub num_qubits: usize,
pub primary_method: AnomalyDetectionMethod,
pub ensemble_methods: Vec<AnomalyDetectionMethod>,
pub contamination: f64,
pub threshold: f64,
pub preprocessing: PreprocessingConfig,
pub quantum_enhancement: QuantumEnhancementConfig,
pub realtime_config: Option<RealtimeConfig>,
pub performance_config: PerformanceConfig,
pub specialized_detectors: Vec<SpecializedDetectorConfig>,
}
#[derive(Debug, Clone)]
pub enum AnomalyDetectionMethod {
QuantumIsolationForest {
n_estimators: usize,
max_samples: usize,
max_depth: Option<usize>,
quantum_splitting: bool,
},
QuantumAutoencoder {
encoder_layers: Vec<usize>,
latent_dim: usize,
decoder_layers: Vec<usize>,
reconstruction_threshold: f64,
},
QuantumOneClassSVM {
kernel_type: QuantumKernelType,
nu: f64,
gamma: f64,
},
QuantumKMeansDetection {
n_clusters: usize,
distance_metric: DistanceMetric,
cluster_threshold: f64,
},
QuantumLOF {
n_neighbors: usize,
contamination: f64,
quantum_distance: bool,
},
QuantumDBSCAN {
eps: f64,
min_samples: usize,
quantum_density: bool,
},
QuantumNoveltyDetection {
reference_dataset_size: usize,
novelty_threshold: f64,
adaptation_rate: f64,
},
QuantumEnsemble {
base_methods: Vec<AnomalyDetectionMethod>,
voting_strategy: VotingStrategy,
weight_adaptation: bool,
},
}
#[derive(Debug, Clone)]
pub enum SpecializedDetectorConfig {
TimeSeries {
window_size: usize,
seasonal_period: Option<usize>,
trend_detection: bool,
quantum_temporal_encoding: bool,
},
Multivariate {
correlation_analysis: bool,
causal_inference: bool,
quantum_feature_entanglement: bool,
},
NetworkGraph {
node_features: bool,
edge_features: bool,
structural_anomalies: bool,
quantum_graph_embedding: bool,
},
QuantumState {
fidelity_threshold: f64,
entanglement_entropy_analysis: bool,
quantum_tomography: bool,
},
QuantumCircuit {
gate_sequence_analysis: bool,
parameter_drift_detection: bool,
noise_characterization: bool,
},
}
#[derive(Debug, Clone)]
pub struct QuantumEnhancementConfig {
pub quantum_feature_maps: bool,
pub entanglement_features: bool,
pub superposition_ensemble: bool,
pub interference_patterns: bool,
pub vqe_scoring: bool,
pub qaoa_optimization: bool,
}
#[derive(Debug, Clone)]
pub struct PreprocessingConfig {
pub normalization: NormalizationType,
pub dimensionality_reduction: Option<DimensionalityReduction>,
pub feature_selection: Option<FeatureSelection>,
pub noise_filtering: Option<NoiseFiltering>,
pub missing_value_strategy: MissingValueStrategy,
}
#[derive(Debug, Clone)]
pub struct RealtimeConfig {
pub buffer_size: usize,
pub update_frequency: usize,
pub drift_detection: bool,
pub online_learning: bool,
pub max_latency_ms: usize,
}
#[derive(Debug, Clone)]
pub struct PerformanceConfig {
pub parallel_processing: bool,
pub batch_size: usize,
pub memory_optimization: bool,
pub gpu_acceleration: bool,
pub circuit_optimization: bool,
}
#[derive(Debug, Clone)]
pub enum QuantumKernelType {
RBF,
Linear,
Polynomial,
QuantumFeatureMap,
QuantumKernel,
}
#[derive(Debug, Clone)]
pub enum DistanceMetric {
Euclidean,
Manhattan,
Cosine,
Quantum,
QuantumFidelity,
}
#[derive(Debug, Clone)]
pub enum VotingStrategy {
Majority,
Weighted,
Quantum,
Consensus,
}
#[derive(Debug, Clone)]
pub enum NormalizationType {
MinMax,
ZScore,
Robust,
Quantum,
}
#[derive(Debug, Clone)]
pub enum DimensionalityReduction {
PCA,
ICA,
UMAP,
QuantumPCA,
QuantumManifold,
}
#[derive(Debug, Clone)]
pub enum FeatureSelection {
Variance,
Correlation,
MutualInformation,
QuantumInformation,
}
#[derive(Debug, Clone)]
pub enum NoiseFiltering {
GaussianFilter,
MedianFilter,
WaveletDenoising,
QuantumDenoising,
}
#[derive(Debug, Clone)]
pub enum MissingValueStrategy {
Remove,
Mean,
Median,
Interpolation,
QuantumImputation,
}
#[derive(Debug, Clone)]
pub enum TimeSeriesAnomalyType {
Point,
Contextual,
Collective,
Seasonal,
Trend,
ChangePoint,
}
#[derive(Debug, Clone)]
pub struct SeasonalContext {
pub seasonal_value: f64,
pub expected_pattern: Array1<f64>,
pub seasonal_deviation: f64,
}
#[derive(Debug, Clone)]
pub struct TrendContext {
pub trend_value: f64,
pub trend_direction: i32,
pub trend_strength: f64,
}
impl Default for QuantumAnomalyConfig {
fn default() -> Self {
Self {
num_qubits: 4,
primary_method: AnomalyDetectionMethod::QuantumIsolationForest {
n_estimators: 100,
max_samples: 256,
max_depth: None,
quantum_splitting: true,
},
ensemble_methods: Vec::new(),
contamination: 0.1,
threshold: 0.5,
preprocessing: PreprocessingConfig {
normalization: NormalizationType::ZScore,
dimensionality_reduction: None,
feature_selection: None,
noise_filtering: None,
missing_value_strategy: MissingValueStrategy::Mean,
},
quantum_enhancement: QuantumEnhancementConfig {
quantum_feature_maps: true,
entanglement_features: true,
superposition_ensemble: false,
interference_patterns: false,
vqe_scoring: false,
qaoa_optimization: false,
},
realtime_config: None,
performance_config: PerformanceConfig {
parallel_processing: true,
batch_size: 32,
memory_optimization: true,
gpu_acceleration: false,
circuit_optimization: true,
},
specialized_detectors: Vec::new(),
}
}
}