Skip to main content

quantrs2_sim/qaoa_optimization/
types.rs

1//! Auto-generated module
2//!
3//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
4
5use scirs2_core::ndarray::{Array1, Array2};
6use scirs2_core::random::prelude::*;
7use serde::{Deserialize, Serialize};
8use std::collections::HashMap;
9use std::time::{Duration, Instant};
10
11/// Parameter transfer database
12#[derive(Debug, Clone)]
13pub struct ParameterDatabase {
14    /// Stored parameter sets by problem characteristics
15    pub parameters: HashMap<ProblemCharacteristics, Vec<(Vec<f64>, Vec<f64>, f64)>>,
16}
17/// QAOA problem types
18#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
19pub enum QAOAProblemType {
20    /// Maximum Cut problem
21    MaxCut,
22    /// Maximum Weight Independent Set
23    MaxWeightIndependentSet,
24    /// Minimum Vertex Cover
25    MinVertexCover,
26    /// Graph Coloring
27    GraphColoring,
28    /// Traveling Salesman Problem
29    TSP,
30    /// Portfolio Optimization
31    PortfolioOptimization,
32    /// Job Shop Scheduling
33    JobShopScheduling,
34    /// Boolean 3-SAT
35    Boolean3SAT,
36    /// Quadratic Unconstrained Binary Optimization
37    QUBO,
38    /// Maximum Clique
39    MaxClique,
40    /// Bin Packing
41    BinPacking,
42    /// Custom Problem
43    Custom,
44}
45/// QAOA level configuration
46#[derive(Debug, Clone)]
47pub struct QAOALevel {
48    /// Problem size at this level
49    pub problem_size: usize,
50    /// Number of layers
51    pub num_layers: usize,
52    /// Optimization budget
53    pub optimization_budget: usize,
54    /// Level-specific mixer
55    pub mixer_type: QAOAMixerType,
56}
57/// Solution quality metrics
58#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct SolutionQuality {
60    /// Feasibility (satisfies constraints)
61    pub feasible: bool,
62    /// Gap to optimal solution (if known)
63    pub optimality_gap: Option<f64>,
64    /// Solution variance across multiple runs
65    pub solution_variance: f64,
66    /// Confidence in solution
67    pub confidence: f64,
68    /// Number of constraint violations
69    pub constraint_violations: usize,
70}
71/// QAOA statistics
72#[derive(Debug, Clone, Serialize, Deserialize)]
73pub struct QAOAStats {
74    /// Total optimization time
75    pub total_time: Duration,
76    /// Time per layer evaluation
77    pub layer_times: Vec<Duration>,
78    /// Circuit depth per layer
79    pub circuit_depths: Vec<usize>,
80    /// Parameter sensitivity analysis
81    pub parameter_sensitivity: HashMap<String, f64>,
82    /// Quantum advantage metrics
83    pub quantum_advantage: QuantumAdvantageMetrics,
84}
85/// Multi-level QAOA configuration
86#[derive(Debug, Clone)]
87pub struct MultiLevelQAOAConfig {
88    /// Hierarchical levels
89    pub levels: Vec<QAOALevel>,
90    /// Parameter sharing between levels
91    pub parameter_sharing: bool,
92    /// Level transition criteria
93    pub transition_criteria: LevelTransitionCriteria,
94}
95/// Level transition criteria
96#[derive(Debug, Clone, Copy, PartialEq, Eq)]
97pub enum LevelTransitionCriteria {
98    /// Fixed schedule
99    FixedSchedule,
100    /// Performance based
101    PerformanceBased,
102    /// Convergence based
103    ConvergenceBased,
104    /// Adaptive
105    Adaptive,
106}
107/// QAOA result
108#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct QAOAResult {
110    /// Optimal gamma parameters
111    pub optimal_gammas: Vec<f64>,
112    /// Optimal beta parameters
113    pub optimal_betas: Vec<f64>,
114    /// Best cost value found
115    pub best_cost: f64,
116    /// Approximation ratio
117    pub approximation_ratio: f64,
118    /// Optimization history
119    pub cost_history: Vec<f64>,
120    /// Parameter evolution
121    pub parameter_history: Vec<(Vec<f64>, Vec<f64>)>,
122    /// Final probability distribution
123    pub final_probabilities: HashMap<String, f64>,
124    /// Best solution bitstring
125    pub best_solution: String,
126    /// Solution quality metrics
127    pub solution_quality: SolutionQuality,
128    /// Optimization time
129    pub optimization_time: Duration,
130    /// Number of function evaluations
131    pub function_evaluations: usize,
132    /// Convergence information
133    pub converged: bool,
134}
135/// Problem characteristics for parameter transfer
136#[derive(Debug, Clone, Hash, PartialEq, Eq)]
137pub struct ProblemCharacteristics {
138    pub problem_type: QAOAProblemType,
139    pub num_vertices: usize,
140    pub density: u32,
141    pub regularity: u32,
142}
143/// QAOA optimization strategy
144#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
145pub enum QAOAOptimizationStrategy {
146    /// Classical optimization of angles
147    Classical,
148    /// Quantum optimization using quantum gradients
149    Quantum,
150    /// Hybrid classical-quantum optimization
151    Hybrid,
152    /// Machine learning guided optimization
153    MLGuided,
154    /// Adaptive parameter optimization
155    Adaptive,
156    /// `OptiRS` optimization (Adam, SGD, `RMSprop`, etc.) - requires "optimize" feature
157    #[cfg(feature = "optimize")]
158    OptiRS,
159}
160/// Graph representation for QAOA problems
161#[derive(Debug, Clone, Serialize, Deserialize)]
162pub struct QAOAGraph {
163    /// Number of vertices
164    pub num_vertices: usize,
165    /// Adjacency matrix
166    pub adjacency_matrix: Array2<f64>,
167    /// Vertex weights
168    pub vertex_weights: Vec<f64>,
169    /// Edge weights
170    pub edge_weights: HashMap<(usize, usize), f64>,
171    /// Additional constraints
172    pub constraints: Vec<QAOAConstraint>,
173}
174/// Quantum advantage analysis
175#[derive(Debug, Clone, Serialize, Deserialize)]
176pub struct QuantumAdvantageMetrics {
177    /// Classical algorithm comparison time
178    pub classical_time: Duration,
179    /// Quantum speedup factor
180    pub speedup_factor: f64,
181    /// Success probability
182    pub success_probability: f64,
183    /// Quantum volume required
184    pub quantum_volume: usize,
185}
186/// QAOA mixer types
187#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
188pub enum QAOAMixerType {
189    /// Standard X mixer (unconstrained)
190    Standard,
191    /// XY mixer for number conservation
192    XY,
193    /// Ring mixer for cyclic structures
194    Ring,
195    /// Grover mixer for amplitude amplification
196    Grover,
197    /// Dicke state mixer for cardinality constraints
198    Dicke,
199    /// Custom mixer with specified structure
200    Custom,
201}
202/// QAOA configuration
203#[derive(Debug, Clone)]
204pub struct QAOAConfig {
205    /// Number of QAOA layers (p)
206    pub num_layers: usize,
207    /// Mixer type
208    pub mixer_type: QAOAMixerType,
209    /// Initialization strategy
210    pub initialization: QAOAInitializationStrategy,
211    /// Optimization strategy
212    pub optimization_strategy: QAOAOptimizationStrategy,
213    /// Maximum optimization iterations
214    pub max_iterations: usize,
215    /// Convergence tolerance
216    pub convergence_tolerance: f64,
217    /// Learning rate for optimization
218    pub learning_rate: f64,
219    /// Enable multi-angle QAOA
220    pub multi_angle: bool,
221    /// Enable parameter transfer learning
222    pub parameter_transfer: bool,
223    /// Hardware-specific optimizations
224    pub hardware_aware: bool,
225    /// Shot noise for finite sampling
226    pub shots: Option<usize>,
227    /// Enable adaptive layer growth
228    pub adaptive_layers: bool,
229    /// Maximum adaptive layers
230    pub max_adaptive_layers: usize,
231}
232/// QAOA constraints
233#[derive(Debug, Clone, Serialize, Deserialize)]
234pub enum QAOAConstraint {
235    /// Cardinality constraint (exactly k vertices selected)
236    Cardinality { target: usize },
237    /// Upper bound on selected vertices
238    UpperBound { max_vertices: usize },
239    /// Lower bound on selected vertices
240    LowerBound { min_vertices: usize },
241    /// Parity constraint
242    Parity { even: bool },
243    /// Custom linear constraint
244    LinearConstraint { coefficients: Vec<f64>, bound: f64 },
245}
246/// QAOA initialization strategies
247#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
248pub enum QAOAInitializationStrategy {
249    /// Uniform superposition
250    UniformSuperposition,
251    /// Warm start from classical solution
252    WarmStart,
253    /// Adiabatic initialization
254    AdiabaticStart,
255    /// Random initialization
256    Random,
257    /// Problem-specific initialization
258    ProblemSpecific,
259}