quantrs2_device/quantum_ml_integration/
simplemlanomalydetector_traits.rs1use super::types::*;
13use super::functions::AnomalyDetector;
17
18use std::time::Instant;
19
20impl AnomalyDetector for SimpleMLAnomalyDetector {
21 fn detect(&self, data: &[(Instant, f64)]) -> Vec<DetectedAnomaly> {
22 if data.len() < 3 {
23 return Vec::new();
24 }
25 let values: Vec<f64> = data.iter().map(|(_, v)| *v).collect();
26 let mean = values.iter().sum::<f64>() / values.len() as f64;
27 let variance =
28 values.iter().map(|x| (x - mean).powi(2)).sum::<f64>() / (values.len() - 1) as f64;
29 let std_dev = variance.sqrt();
30 data.iter()
31 .enumerate()
32 .filter_map(|(i, &(timestamp, value))| {
33 if (value - mean).abs() > self.threshold * std_dev {
34 Some(DetectedAnomaly {
35 anomaly_type: AnomalyType::PerformanceDegradation,
36 severity: (value - mean).abs() / std_dev,
37 description: format!(
38 "Value {value} deviates significantly from mean {mean}"
39 ),
40 timestamp,
41 affected_metrics: vec!["performance".to_string()],
42 })
43 } else {
44 None
45 }
46 })
47 .collect()
48 }
49 fn update(&mut self, _data: &[(Instant, f64)]) {}
50 fn threshold(&self) -> f64 {
51 self.threshold
52 }
53 fn set_threshold(&mut self, threshold: f64) {
54 self.threshold = threshold;
55 }
56}