solverforge_config/
phase.rs1use serde::{Deserialize, Serialize};
2
3use crate::acceptor::AcceptorConfig;
4use crate::forager::ForagerConfig;
5use crate::move_selector::MoveSelectorConfig;
6use crate::termination::TerminationConfig;
7
8#[derive(Debug, Clone, Deserialize, Serialize)]
10#[serde(tag = "type", rename_all = "snake_case")]
11pub enum PhaseConfig {
12 ConstructionHeuristic(ConstructionHeuristicConfig),
14
15 LocalSearch(LocalSearchConfig),
17
18 ExhaustiveSearch(ExhaustiveSearchConfig),
20
21 PartitionedSearch(PartitionedSearchConfig),
23
24 Custom(CustomPhaseConfig),
26}
27
28#[derive(Debug, Clone, Default, Deserialize, Serialize)]
30#[serde(rename_all = "snake_case")]
31pub struct ConstructionHeuristicConfig {
32 #[serde(default)]
34 pub construction_heuristic_type: ConstructionHeuristicType,
35
36 pub termination: Option<TerminationConfig>,
38}
39
40#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Deserialize, Serialize)]
42#[serde(rename_all = "snake_case")]
43pub enum ConstructionHeuristicType {
44 #[default]
46 FirstFit,
47
48 FirstFitDecreasing,
50
51 WeakestFit,
53
54 WeakestFitDecreasing,
56
57 StrongestFit,
59
60 StrongestFitDecreasing,
62
63 CheapestInsertion,
65
66 AllocateEntityFromQueue,
68
69 AllocateToValueFromQueue,
71
72 ListRoundRobin,
74
75 ListCheapestInsertion,
77
78 ListRegretInsertion,
80}
81
82#[derive(Debug, Clone, Default, Deserialize, Serialize)]
84#[serde(rename_all = "snake_case")]
85pub struct LocalSearchConfig {
86 pub acceptor: Option<AcceptorConfig>,
88
89 pub forager: Option<ForagerConfig>,
91
92 pub move_selector: Option<MoveSelectorConfig>,
94
95 pub termination: Option<TerminationConfig>,
97}
98
99#[derive(Debug, Clone, Default, Deserialize, Serialize)]
101#[serde(rename_all = "snake_case")]
102pub struct ExhaustiveSearchConfig {
103 #[serde(default)]
105 pub exhaustive_search_type: ExhaustiveSearchType,
106
107 pub termination: Option<TerminationConfig>,
109}
110
111#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Deserialize, Serialize)]
113#[serde(rename_all = "snake_case")]
114pub enum ExhaustiveSearchType {
115 #[default]
117 BranchAndBound,
118
119 BruteForce,
121}
122
123#[derive(Debug, Clone, Default, Deserialize, Serialize)]
125#[serde(rename_all = "snake_case")]
126pub struct PartitionedSearchConfig {
127 pub partition_count: Option<usize>,
129
130 pub termination: Option<TerminationConfig>,
132}
133
134#[derive(Debug, Clone, Default, Deserialize, Serialize)]
136#[serde(rename_all = "snake_case")]
137pub struct CustomPhaseConfig {
138 pub custom_phase_class: Option<String>,
140}