quantrs2_anneal/bayesian_hyperopt/
multi_objective.rs

1//! Multi-Objective Optimization Configuration Types
2
3/// Multi-objective optimization configuration
4#[derive(Debug, Clone)]
5pub struct MultiObjectiveConfig {
6    /// Scalarization method
7    pub scalarization_method: ScalarizationMethod,
8    /// Reference point for hypervolume calculation
9    pub reference_point: Option<Vec<f64>>,
10    /// Objective weights
11    pub objective_weights: Vec<f64>,
12    /// Pareto front approximation method
13    pub pareto_method: ParetoApproximationMethod,
14    /// Number of objectives
15    pub num_objectives: usize,
16}
17
18impl Default for MultiObjectiveConfig {
19    fn default() -> Self {
20        Self {
21            scalarization_method: ScalarizationMethod::WeightedSum,
22            reference_point: None,
23            objective_weights: vec![1.0],
24            pareto_method: ParetoApproximationMethod::NonDominatedSorting,
25            num_objectives: 1,
26        }
27    }
28}
29
30/// Scalarization methods for multi-objective optimization
31#[derive(Debug, Clone, PartialEq, Eq)]
32pub enum ScalarizationMethod {
33    /// Weighted sum approach
34    WeightedSum,
35    /// Tchebycheff method
36    Tchebycheff,
37    /// Achievement scalarizing function
38    Achievement,
39    /// Hypervolume indicator
40    Hypervolume,
41    /// Expected hypervolume improvement
42    ExpectedHypervolumeImprovement,
43}
44
45/// Pareto front approximation methods
46#[derive(Debug, Clone, PartialEq, Eq)]
47pub enum ParetoApproximationMethod {
48    /// Non-dominated sorting
49    NonDominatedSorting,
50    /// NSGA-II approach
51    NSGAII,
52    /// SPEA2 method
53    SPEA2,
54    /// Hypervolume-based selection
55    HypervolumeSelection,
56}