1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Deserialize, Serialize)]
5#[serde(tag = "type", rename_all = "snake_case")]
6pub enum MoveSelectorConfig {
7 ChangeMoveSelector(ChangeMoveConfig),
9
10 SwapMoveSelector(SwapMoveConfig),
12
13 ListChangeMoveSelector(ListChangeMoveConfig),
15
16 NearbyListChangeMoveSelector(NearbyListChangeMoveConfig),
18
19 ListSwapMoveSelector(ListSwapMoveConfig),
21
22 NearbyListSwapMoveSelector(NearbyListSwapMoveConfig),
24
25 SubListChangeMoveSelector(SubListChangeMoveConfig),
27
28 SubListSwapMoveSelector(SubListSwapMoveConfig),
30
31 ListReverseMoveSelector(ListReverseMoveConfig),
33
34 KOptMoveSelector(KOptMoveSelectorConfig),
36
37 ListRuinMoveSelector(ListRuinMoveSelectorConfig),
39
40 UnionMoveSelector(UnionMoveSelectorConfig),
42
43 CartesianProductMoveSelector(CartesianProductConfig),
45}
46
47#[derive(Debug, Clone, Default, Deserialize, Serialize)]
49#[serde(rename_all = "snake_case")]
50pub struct ChangeMoveConfig {
51 pub entity_class: Option<String>,
53}
54
55#[derive(Debug, Clone, Default, Deserialize, Serialize)]
57#[serde(rename_all = "snake_case")]
58pub struct SwapMoveConfig {
59 pub entity_class: Option<String>,
61}
62
63#[derive(Debug, Clone, Default, Deserialize, Serialize)]
65#[serde(rename_all = "snake_case")]
66pub struct ListChangeMoveConfig {
67 pub variable_name: Option<String>,
69}
70
71#[derive(Debug, Clone, Deserialize, Serialize)]
73#[serde(rename_all = "snake_case")]
74pub struct NearbyListChangeMoveConfig {
75 pub max_nearby: usize,
77 pub variable_name: Option<String>,
79}
80
81impl Default for NearbyListChangeMoveConfig {
82 fn default() -> Self {
83 Self {
84 max_nearby: 10,
85 variable_name: None,
86 }
87 }
88}
89
90#[derive(Debug, Clone, Default, Deserialize, Serialize)]
92#[serde(rename_all = "snake_case")]
93pub struct ListSwapMoveConfig {
94 pub variable_name: Option<String>,
96}
97
98#[derive(Debug, Clone, Deserialize, Serialize)]
100#[serde(rename_all = "snake_case")]
101pub struct NearbyListSwapMoveConfig {
102 pub max_nearby: usize,
104 pub variable_name: Option<String>,
106}
107
108impl Default for NearbyListSwapMoveConfig {
109 fn default() -> Self {
110 Self {
111 max_nearby: 10,
112 variable_name: None,
113 }
114 }
115}
116
117#[derive(Debug, Clone, Deserialize, Serialize)]
119#[serde(rename_all = "snake_case")]
120pub struct SubListChangeMoveConfig {
121 pub min_sublist_size: usize,
123 pub max_sublist_size: usize,
125 pub variable_name: Option<String>,
127}
128
129impl Default for SubListChangeMoveConfig {
130 fn default() -> Self {
131 Self {
132 min_sublist_size: 1,
133 max_sublist_size: 3,
134 variable_name: None,
135 }
136 }
137}
138
139#[derive(Debug, Clone, Deserialize, Serialize)]
141#[serde(rename_all = "snake_case")]
142pub struct SubListSwapMoveConfig {
143 pub min_sublist_size: usize,
145 pub max_sublist_size: usize,
147 pub variable_name: Option<String>,
149}
150
151impl Default for SubListSwapMoveConfig {
152 fn default() -> Self {
153 Self {
154 min_sublist_size: 1,
155 max_sublist_size: 3,
156 variable_name: None,
157 }
158 }
159}
160
161#[derive(Debug, Clone, Default, Deserialize, Serialize)]
163#[serde(rename_all = "snake_case")]
164pub struct ListReverseMoveConfig {
165 pub variable_name: Option<String>,
167}
168
169#[derive(Debug, Clone, Deserialize, Serialize)]
171#[serde(rename_all = "snake_case")]
172pub struct KOptMoveSelectorConfig {
173 pub k: usize,
175 pub min_segment_len: usize,
177 pub variable_name: Option<String>,
179}
180
181impl Default for KOptMoveSelectorConfig {
182 fn default() -> Self {
183 Self {
184 k: 3,
185 min_segment_len: 1,
186 variable_name: None,
187 }
188 }
189}
190
191#[derive(Debug, Clone, Deserialize, Serialize)]
193#[serde(rename_all = "snake_case")]
194pub struct ListRuinMoveSelectorConfig {
195 pub min_ruin_count: usize,
197 pub max_ruin_count: usize,
199 pub moves_per_step: Option<usize>,
201 pub variable_name: Option<String>,
203}
204
205impl Default for ListRuinMoveSelectorConfig {
206 fn default() -> Self {
207 Self {
208 min_ruin_count: 2,
209 max_ruin_count: 5,
210 moves_per_step: None,
211 variable_name: None,
212 }
213 }
214}
215
216#[derive(Debug, Clone, Default, Deserialize, Serialize)]
218#[serde(rename_all = "snake_case")]
219pub struct UnionMoveSelectorConfig {
220 pub selectors: Vec<MoveSelectorConfig>,
222}
223
224#[derive(Debug, Clone, Default, Deserialize, Serialize)]
226#[serde(rename_all = "snake_case")]
227pub struct CartesianProductConfig {
228 pub selectors: Vec<MoveSelectorConfig>,
230}