#[derive(Debug, Clone)]
pub enum OptimizationObjective {
MaximizeAccuracy { weight: f64 },
MinimizeComplexity { weight: f64 },
MinimizeQuantumResources { weight: f64 },
MaximizeQuantumAdvantage { weight: f64 },
MinimizeInferenceTime { weight: f64 },
MinimizeTrainingTime { weight: f64 },
MaximizeRobustness { weight: f64 },
MaximizeInterpretability { weight: f64 },
}
impl OptimizationObjective {
pub fn weight(&self) -> f64 {
match self {
OptimizationObjective::MaximizeAccuracy { weight } => *weight,
OptimizationObjective::MinimizeComplexity { weight } => *weight,
OptimizationObjective::MinimizeQuantumResources { weight } => *weight,
OptimizationObjective::MaximizeQuantumAdvantage { weight } => *weight,
OptimizationObjective::MinimizeInferenceTime { weight } => *weight,
OptimizationObjective::MinimizeTrainingTime { weight } => *weight,
OptimizationObjective::MaximizeRobustness { weight } => *weight,
OptimizationObjective::MaximizeInterpretability { weight } => *weight,
}
}
pub fn is_maximization(&self) -> bool {
matches!(
self,
OptimizationObjective::MaximizeAccuracy { .. }
| OptimizationObjective::MaximizeQuantumAdvantage { .. }
| OptimizationObjective::MaximizeRobustness { .. }
| OptimizationObjective::MaximizeInterpretability { .. }
)
}
pub fn name(&self) -> &'static str {
match self {
OptimizationObjective::MaximizeAccuracy { .. } => "accuracy",
OptimizationObjective::MinimizeComplexity { .. } => "complexity",
OptimizationObjective::MinimizeQuantumResources { .. } => "quantum_resources",
OptimizationObjective::MaximizeQuantumAdvantage { .. } => "quantum_advantage",
OptimizationObjective::MinimizeInferenceTime { .. } => "inference_time",
OptimizationObjective::MinimizeTrainingTime { .. } => "training_time",
OptimizationObjective::MaximizeRobustness { .. } => "robustness",
OptimizationObjective::MaximizeInterpretability { .. } => "interpretability",
}
}
}
impl OptimizationObjective {
pub fn accuracy_only() -> Vec<Self> {
vec![OptimizationObjective::MaximizeAccuracy { weight: 1.0 }]
}
pub fn balanced() -> Vec<Self> {
vec![
OptimizationObjective::MaximizeAccuracy { weight: 0.5 },
OptimizationObjective::MinimizeInferenceTime { weight: 0.3 },
OptimizationObjective::MinimizeComplexity { weight: 0.2 },
]
}
pub fn quantum_focused() -> Vec<Self> {
vec![
OptimizationObjective::MaximizeQuantumAdvantage { weight: 0.5 },
OptimizationObjective::MaximizeAccuracy { weight: 0.3 },
OptimizationObjective::MinimizeQuantumResources { weight: 0.2 },
]
}
pub fn production() -> Vec<Self> {
vec![
OptimizationObjective::MaximizeAccuracy { weight: 0.4 },
OptimizationObjective::MaximizeRobustness { weight: 0.3 },
OptimizationObjective::MinimizeInferenceTime { weight: 0.2 },
OptimizationObjective::MaximizeInterpretability { weight: 0.1 },
]
}
pub fn research() -> Vec<Self> {
vec![
OptimizationObjective::MaximizeQuantumAdvantage { weight: 0.4 },
OptimizationObjective::MaximizeAccuracy { weight: 0.3 },
OptimizationObjective::MaximizeInterpretability { weight: 0.2 },
OptimizationObjective::MinimizeComplexity { weight: 0.1 },
]
}
pub fn fast_inference() -> Vec<Self> {
vec![
OptimizationObjective::MinimizeInferenceTime { weight: 0.5 },
OptimizationObjective::MaximizeAccuracy { weight: 0.3 },
OptimizationObjective::MinimizeComplexity { weight: 0.2 },
]
}
pub fn resource_constrained() -> Vec<Self> {
vec![
OptimizationObjective::MinimizeQuantumResources { weight: 0.4 },
OptimizationObjective::MaximizeAccuracy { weight: 0.3 },
OptimizationObjective::MinimizeComplexity { weight: 0.2 },
OptimizationObjective::MinimizeTrainingTime { weight: 0.1 },
]
}
}