quantrs2_ml/automl/config/
objectives.rs

1//! Optimization Objectives
2//!
3//! This module defines optimization objectives and multi-objective optimization configurations.
4
5/// Optimization objectives
6#[derive(Debug, Clone)]
7pub enum OptimizationObjective {
8    /// Maximize accuracy/performance
9    MaximizeAccuracy { weight: f64 },
10
11    /// Minimize model complexity
12    MinimizeComplexity { weight: f64 },
13
14    /// Minimize quantum resource usage
15    MinimizeQuantumResources { weight: f64 },
16
17    /// Maximize quantum advantage
18    MaximizeQuantumAdvantage { weight: f64 },
19
20    /// Minimize inference time
21    MinimizeInferenceTime { weight: f64 },
22
23    /// Minimize training time
24    MinimizeTrainingTime { weight: f64 },
25
26    /// Maximize robustness
27    MaximizeRobustness { weight: f64 },
28
29    /// Maximize interpretability
30    MaximizeInterpretability { weight: f64 },
31}
32
33impl OptimizationObjective {
34    /// Get the weight of this objective
35    pub fn weight(&self) -> f64 {
36        match self {
37            OptimizationObjective::MaximizeAccuracy { weight } => *weight,
38            OptimizationObjective::MinimizeComplexity { weight } => *weight,
39            OptimizationObjective::MinimizeQuantumResources { weight } => *weight,
40            OptimizationObjective::MaximizeQuantumAdvantage { weight } => *weight,
41            OptimizationObjective::MinimizeInferenceTime { weight } => *weight,
42            OptimizationObjective::MinimizeTrainingTime { weight } => *weight,
43            OptimizationObjective::MaximizeRobustness { weight } => *weight,
44            OptimizationObjective::MaximizeInterpretability { weight } => *weight,
45        }
46    }
47
48    /// Check if this is a maximization objective
49    pub fn is_maximization(&self) -> bool {
50        matches!(
51            self,
52            OptimizationObjective::MaximizeAccuracy { .. }
53                | OptimizationObjective::MaximizeQuantumAdvantage { .. }
54                | OptimizationObjective::MaximizeRobustness { .. }
55                | OptimizationObjective::MaximizeInterpretability { .. }
56        )
57    }
58
59    /// Get the objective name
60    pub fn name(&self) -> &'static str {
61        match self {
62            OptimizationObjective::MaximizeAccuracy { .. } => "accuracy",
63            OptimizationObjective::MinimizeComplexity { .. } => "complexity",
64            OptimizationObjective::MinimizeQuantumResources { .. } => "quantum_resources",
65            OptimizationObjective::MaximizeQuantumAdvantage { .. } => "quantum_advantage",
66            OptimizationObjective::MinimizeInferenceTime { .. } => "inference_time",
67            OptimizationObjective::MinimizeTrainingTime { .. } => "training_time",
68            OptimizationObjective::MaximizeRobustness { .. } => "robustness",
69            OptimizationObjective::MaximizeInterpretability { .. } => "interpretability",
70        }
71    }
72}
73
74/// Common objective configurations
75impl OptimizationObjective {
76    /// Single accuracy objective
77    pub fn accuracy_only() -> Vec<Self> {
78        vec![OptimizationObjective::MaximizeAccuracy { weight: 1.0 }]
79    }
80
81    /// Balanced accuracy and efficiency
82    pub fn balanced() -> Vec<Self> {
83        vec![
84            OptimizationObjective::MaximizeAccuracy { weight: 0.5 },
85            OptimizationObjective::MinimizeInferenceTime { weight: 0.3 },
86            OptimizationObjective::MinimizeComplexity { weight: 0.2 },
87        ]
88    }
89
90    /// Quantum-focused objectives
91    pub fn quantum_focused() -> Vec<Self> {
92        vec![
93            OptimizationObjective::MaximizeQuantumAdvantage { weight: 0.5 },
94            OptimizationObjective::MaximizeAccuracy { weight: 0.3 },
95            OptimizationObjective::MinimizeQuantumResources { weight: 0.2 },
96        ]
97    }
98
99    /// Production-ready objectives
100    pub fn production() -> Vec<Self> {
101        vec![
102            OptimizationObjective::MaximizeAccuracy { weight: 0.4 },
103            OptimizationObjective::MaximizeRobustness { weight: 0.3 },
104            OptimizationObjective::MinimizeInferenceTime { weight: 0.2 },
105            OptimizationObjective::MaximizeInterpretability { weight: 0.1 },
106        ]
107    }
108
109    /// Research objectives
110    pub fn research() -> Vec<Self> {
111        vec![
112            OptimizationObjective::MaximizeQuantumAdvantage { weight: 0.4 },
113            OptimizationObjective::MaximizeAccuracy { weight: 0.3 },
114            OptimizationObjective::MaximizeInterpretability { weight: 0.2 },
115            OptimizationObjective::MinimizeComplexity { weight: 0.1 },
116        ]
117    }
118
119    /// Fast inference objectives
120    pub fn fast_inference() -> Vec<Self> {
121        vec![
122            OptimizationObjective::MinimizeInferenceTime { weight: 0.5 },
123            OptimizationObjective::MaximizeAccuracy { weight: 0.3 },
124            OptimizationObjective::MinimizeComplexity { weight: 0.2 },
125        ]
126    }
127
128    /// Resource-constrained objectives
129    pub fn resource_constrained() -> Vec<Self> {
130        vec![
131            OptimizationObjective::MinimizeQuantumResources { weight: 0.4 },
132            OptimizationObjective::MaximizeAccuracy { weight: 0.3 },
133            OptimizationObjective::MinimizeComplexity { weight: 0.2 },
134            OptimizationObjective::MinimizeTrainingTime { weight: 0.1 },
135        ]
136    }
137}