quantrs2_ml/anomaly_detection/
config.rs

1//! Configuration types for quantum anomaly detection
2
3use scirs2_core::ndarray::{Array1, Array2};
4use std::collections::HashMap;
5
6/// Configuration for quantum anomaly detection
7#[derive(Debug, Clone)]
8pub struct QuantumAnomalyConfig {
9    /// Number of qubits for quantum processing
10    pub num_qubits: usize,
11
12    /// Primary detection method
13    pub primary_method: AnomalyDetectionMethod,
14
15    /// Ensemble methods for improved detection
16    pub ensemble_methods: Vec<AnomalyDetectionMethod>,
17
18    /// Contamination level (expected fraction of anomalies)
19    pub contamination: f64,
20
21    /// Detection threshold
22    pub threshold: f64,
23
24    /// Preprocessing configuration
25    pub preprocessing: PreprocessingConfig,
26
27    /// Quantum enhancement configuration
28    pub quantum_enhancement: QuantumEnhancementConfig,
29
30    /// Real-time processing configuration
31    pub realtime_config: Option<RealtimeConfig>,
32
33    /// Performance configuration
34    pub performance_config: PerformanceConfig,
35
36    /// Specialized detector configurations
37    pub specialized_detectors: Vec<SpecializedDetectorConfig>,
38}
39
40/// Anomaly detection methods
41#[derive(Debug, Clone)]
42pub enum AnomalyDetectionMethod {
43    /// Quantum Isolation Forest
44    QuantumIsolationForest {
45        n_estimators: usize,
46        max_samples: usize,
47        max_depth: Option<usize>,
48        quantum_splitting: bool,
49    },
50
51    /// Quantum Autoencoder
52    QuantumAutoencoder {
53        encoder_layers: Vec<usize>,
54        latent_dim: usize,
55        decoder_layers: Vec<usize>,
56        reconstruction_threshold: f64,
57    },
58
59    /// Quantum One-Class SVM
60    QuantumOneClassSVM {
61        kernel_type: QuantumKernelType,
62        nu: f64,
63        gamma: f64,
64    },
65
66    /// Quantum K-Means Based Detection
67    QuantumKMeansDetection {
68        n_clusters: usize,
69        distance_metric: DistanceMetric,
70        cluster_threshold: f64,
71    },
72
73    /// Quantum Local Outlier Factor
74    QuantumLOF {
75        n_neighbors: usize,
76        contamination: f64,
77        quantum_distance: bool,
78    },
79
80    /// Quantum DBSCAN
81    QuantumDBSCAN {
82        eps: f64,
83        min_samples: usize,
84        quantum_density: bool,
85    },
86
87    /// Quantum Novelty Detection
88    QuantumNoveltyDetection {
89        reference_dataset_size: usize,
90        novelty_threshold: f64,
91        adaptation_rate: f64,
92    },
93
94    /// Quantum Ensemble Method
95    QuantumEnsemble {
96        base_methods: Vec<AnomalyDetectionMethod>,
97        voting_strategy: VotingStrategy,
98        weight_adaptation: bool,
99    },
100}
101
102/// Specialized detector configurations
103#[derive(Debug, Clone)]
104pub enum SpecializedDetectorConfig {
105    /// Time series anomaly detection
106    TimeSeries {
107        window_size: usize,
108        seasonal_period: Option<usize>,
109        trend_detection: bool,
110        quantum_temporal_encoding: bool,
111    },
112
113    /// Multivariate anomaly detection
114    Multivariate {
115        correlation_analysis: bool,
116        causal_inference: bool,
117        quantum_feature_entanglement: bool,
118    },
119
120    /// Network/Graph anomaly detection
121    NetworkGraph {
122        node_features: bool,
123        edge_features: bool,
124        structural_anomalies: bool,
125        quantum_graph_embedding: bool,
126    },
127
128    /// Quantum state anomaly detection
129    QuantumState {
130        fidelity_threshold: f64,
131        entanglement_entropy_analysis: bool,
132        quantum_tomography: bool,
133    },
134
135    /// Quantum circuit anomaly detection
136    QuantumCircuit {
137        gate_sequence_analysis: bool,
138        parameter_drift_detection: bool,
139        noise_characterization: bool,
140    },
141}
142
143/// Quantum enhancement configuration
144#[derive(Debug, Clone)]
145pub struct QuantumEnhancementConfig {
146    /// Use quantum feature maps
147    pub quantum_feature_maps: bool,
148
149    /// Quantum entanglement for feature correlation
150    pub entanglement_features: bool,
151
152    /// Quantum superposition for ensemble methods
153    pub superposition_ensemble: bool,
154
155    /// Quantum interference for pattern detection
156    pub interference_patterns: bool,
157
158    /// Variational quantum eigensolvers for outlier scoring
159    pub vqe_scoring: bool,
160
161    /// Quantum approximate optimization for threshold learning
162    pub qaoa_optimization: bool,
163}
164
165/// Preprocessing configuration
166#[derive(Debug, Clone)]
167pub struct PreprocessingConfig {
168    /// Normalization method
169    pub normalization: NormalizationType,
170
171    /// Dimensionality reduction
172    pub dimensionality_reduction: Option<DimensionalityReduction>,
173
174    /// Feature selection
175    pub feature_selection: Option<FeatureSelection>,
176
177    /// Noise filtering
178    pub noise_filtering: Option<NoiseFiltering>,
179
180    /// Missing value handling
181    pub missing_value_strategy: MissingValueStrategy,
182}
183
184/// Real-time processing configuration
185#[derive(Debug, Clone)]
186pub struct RealtimeConfig {
187    /// Buffer size for streaming data
188    pub buffer_size: usize,
189
190    /// Update frequency
191    pub update_frequency: usize,
192
193    /// Drift detection
194    pub drift_detection: bool,
195
196    /// Online learning
197    pub online_learning: bool,
198
199    /// Latency requirements (milliseconds)
200    pub max_latency_ms: usize,
201}
202
203/// Performance configuration
204#[derive(Debug, Clone)]
205pub struct PerformanceConfig {
206    /// Parallel processing
207    pub parallel_processing: bool,
208
209    /// Batch size for processing
210    pub batch_size: usize,
211
212    /// Memory optimization
213    pub memory_optimization: bool,
214
215    /// GPU acceleration
216    pub gpu_acceleration: bool,
217
218    /// Quantum circuit optimization
219    pub circuit_optimization: bool,
220}
221
222/// Supporting enums and types
223#[derive(Debug, Clone)]
224pub enum QuantumKernelType {
225    RBF,
226    Linear,
227    Polynomial,
228    QuantumFeatureMap,
229    QuantumKernel,
230}
231
232#[derive(Debug, Clone)]
233pub enum DistanceMetric {
234    Euclidean,
235    Manhattan,
236    Cosine,
237    Quantum,
238    QuantumFidelity,
239}
240
241#[derive(Debug, Clone)]
242pub enum VotingStrategy {
243    Majority,
244    Weighted,
245    Quantum,
246    Consensus,
247}
248
249#[derive(Debug, Clone)]
250pub enum NormalizationType {
251    MinMax,
252    ZScore,
253    Robust,
254    Quantum,
255}
256
257#[derive(Debug, Clone)]
258pub enum DimensionalityReduction {
259    PCA,
260    ICA,
261    UMAP,
262    QuantumPCA,
263    QuantumManifold,
264}
265
266#[derive(Debug, Clone)]
267pub enum FeatureSelection {
268    Variance,
269    Correlation,
270    MutualInformation,
271    QuantumInformation,
272}
273
274#[derive(Debug, Clone)]
275pub enum NoiseFiltering {
276    GaussianFilter,
277    MedianFilter,
278    WaveletDenoising,
279    QuantumDenoising,
280}
281
282#[derive(Debug, Clone)]
283pub enum MissingValueStrategy {
284    Remove,
285    Mean,
286    Median,
287    Interpolation,
288    QuantumImputation,
289}
290
291/// Time series anomaly types
292#[derive(Debug, Clone)]
293pub enum TimeSeriesAnomalyType {
294    /// Point anomaly (single outlier)
295    Point,
296
297    /// Contextual anomaly (normal value in wrong context)
298    Contextual,
299
300    /// Collective anomaly (sequence of points)
301    Collective,
302
303    /// Seasonal anomaly
304    Seasonal,
305
306    /// Trend anomaly
307    Trend,
308
309    /// Change point
310    ChangePoint,
311}
312
313/// Seasonal context for time series anomalies
314#[derive(Debug, Clone)]
315pub struct SeasonalContext {
316    /// Seasonal component value
317    pub seasonal_value: f64,
318
319    /// Expected seasonal pattern
320    pub expected_pattern: Array1<f64>,
321
322    /// Seasonal deviation
323    pub seasonal_deviation: f64,
324}
325
326/// Trend context for time series anomalies
327#[derive(Debug, Clone)]
328pub struct TrendContext {
329    /// Trend component value
330    pub trend_value: f64,
331
332    /// Trend direction
333    pub trend_direction: i32, // -1: decreasing, 0: stable, 1: increasing
334
335    /// Trend strength
336    pub trend_strength: f64,
337}
338
339impl Default for QuantumAnomalyConfig {
340    fn default() -> Self {
341        Self {
342            num_qubits: 4,
343            primary_method: AnomalyDetectionMethod::QuantumIsolationForest {
344                n_estimators: 100,
345                max_samples: 256,
346                max_depth: None,
347                quantum_splitting: true,
348            },
349            ensemble_methods: Vec::new(),
350            contamination: 0.1,
351            threshold: 0.5,
352            preprocessing: PreprocessingConfig {
353                normalization: NormalizationType::ZScore,
354                dimensionality_reduction: None,
355                feature_selection: None,
356                noise_filtering: None,
357                missing_value_strategy: MissingValueStrategy::Mean,
358            },
359            quantum_enhancement: QuantumEnhancementConfig {
360                quantum_feature_maps: true,
361                entanglement_features: true,
362                superposition_ensemble: false,
363                interference_patterns: false,
364                vqe_scoring: false,
365                qaoa_optimization: false,
366            },
367            realtime_config: None,
368            performance_config: PerformanceConfig {
369                parallel_processing: true,
370                batch_size: 32,
371                memory_optimization: true,
372                gpu_acceleration: false,
373                circuit_optimization: true,
374            },
375            specialized_detectors: Vec::new(),
376        }
377    }
378}