quantrs2_anneal/active_learning_decomposition/
subproblem_generation.rs1use std::collections::HashMap;
4
5use super::{
6 GenerationStrategyType, OverlapResolutionMethod, OverlapStrategy, SizeBalancingStrategy,
7 SizeConstraints, ValidationCriterionType,
8};
9
10#[derive(Debug, Clone)]
12pub struct SubproblemGenerator {
13 pub generation_strategies: Vec<GenerationStrategy>,
15 pub overlap_manager: OverlapManager,
17 pub size_controller: SizeController,
19 pub quality_validator: QualityValidator,
21}
22
23impl SubproblemGenerator {
24 pub fn new() -> Result<Self, String> {
25 Ok(Self {
26 generation_strategies: Vec::new(),
27 overlap_manager: OverlapManager::new(),
28 size_controller: SizeController::new(),
29 quality_validator: QualityValidator::new(),
30 })
31 }
32}
33
34#[derive(Debug, Clone)]
36pub struct GenerationStrategy {
37 pub strategy_type: GenerationStrategyType,
39 pub parameters: GenerationParameters,
41 pub success_rate: f64,
43 pub average_quality: f64,
45}
46
47#[derive(Debug, Clone)]
49pub struct GenerationParameters {
50 pub target_num_subproblems: usize,
52 pub size_balance_tolerance: f64,
54 pub quality_threshold: f64,
56 pub max_iterations: usize,
58}
59
60#[derive(Debug, Clone)]
62pub struct OverlapManager {
63 pub overlap_strategy: OverlapStrategy,
65 pub overlap_size: usize,
67 pub resolution_method: OverlapResolutionMethod,
69}
70
71impl OverlapManager {
72 #[must_use]
73 pub const fn new() -> Self {
74 Self {
75 overlap_strategy: OverlapStrategy::NoOverlap,
76 overlap_size: 0,
77 resolution_method: OverlapResolutionMethod::Voting,
78 }
79 }
80}
81
82#[derive(Debug, Clone)]
84pub struct SizeController {
85 pub size_constraints: SizeConstraints,
87 pub balancing_strategy: SizeBalancingStrategy,
89 pub adaptive_sizing: bool,
91}
92
93impl SizeController {
94 #[must_use]
95 pub fn new() -> Self {
96 Self {
97 size_constraints: SizeConstraints::default(),
98 balancing_strategy: SizeBalancingStrategy::Flexible,
99 adaptive_sizing: true,
100 }
101 }
102}
103
104#[derive(Debug, Clone)]
106pub struct QualityValidator {
107 pub validation_criteria: Vec<ValidationCriterion>,
109 pub validation_threshold: f64,
111 pub strict_validation: bool,
113}
114
115impl QualityValidator {
116 #[must_use]
117 pub fn new() -> Self {
118 Self {
119 validation_criteria: vec![
120 ValidationCriterion {
121 criterion_type: ValidationCriterionType::ConnectivityPreservation,
122 weight: 0.3,
123 threshold: 0.8,
124 },
125 ValidationCriterion {
126 criterion_type: ValidationCriterionType::SizeBalance,
127 weight: 0.2,
128 threshold: 0.7,
129 },
130 ValidationCriterion {
131 criterion_type: ValidationCriterionType::CutQuality,
132 weight: 0.5,
133 threshold: 0.6,
134 },
135 ],
136 validation_threshold: 0.7,
137 strict_validation: false,
138 }
139 }
140}
141
142#[derive(Debug, Clone)]
144pub struct ValidationCriterion {
145 pub criterion_type: ValidationCriterionType,
147 pub weight: f64,
149 pub threshold: f64,
151}