quantrs2_ml/automl/config/
objectives.rs1#[derive(Debug, Clone)]
7pub enum OptimizationObjective {
8 MaximizeAccuracy { weight: f64 },
10
11 MinimizeComplexity { weight: f64 },
13
14 MinimizeQuantumResources { weight: f64 },
16
17 MaximizeQuantumAdvantage { weight: f64 },
19
20 MinimizeInferenceTime { weight: f64 },
22
23 MinimizeTrainingTime { weight: f64 },
25
26 MaximizeRobustness { weight: f64 },
28
29 MaximizeInterpretability { weight: f64 },
31}
32
33impl OptimizationObjective {
34 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 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 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
74impl OptimizationObjective {
76 pub fn accuracy_only() -> Vec<Self> {
78 vec![OptimizationObjective::MaximizeAccuracy { weight: 1.0 }]
79 }
80
81 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 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 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 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 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 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}