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}