1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//! Types for CMA-ES restart strategies (IPOP and BIPOP).
//!
//! This module provides the public API surface for controlling automatic restarts
//! in the CMA-ES engine. Two strategies are supported:
//!
//! - **IPOP** (Increasing POPulation): doubles the population size on each restart
//! when the search stagnates. Simple and effective on multi-modal landscapes.
//!
//! - **BIPOP** (BImodal POPulation): alternates between a large population restart
//! (like IPOP) and a small population restart (to exploit basins quickly).
//!
//! The [`RestartStrategy`] enum is attached to [`CmaConfiguration`](super::configuration::CmaConfiguration)
//! via the `restart_strategy` field; the engine checks it after each generation and triggers
//! a restart when stagnation is detected.
/// Strategy controlling how the CMA-ES engine restarts on stagnation.
///
/// Attach to [`CmaConfiguration`](super::configuration::CmaConfiguration) via
/// [`with_restart_strategy`](super::configuration::CmaConfiguration::with_restart_strategy).
///
/// # Example
/// ```rust,no_run
/// // no_run: RestartStrategy example — illustrative API usage
/// use genetic_algorithms::cma::{CmaConfiguration, RestartStrategy};
///
/// let config = CmaConfiguration::default_for_dim(10)
/// .with_restart_strategy(RestartStrategy::Ipop {
/// population_scale: 2.0,
/// stagnation_threshold: 50,
/// max_restarts: 9,
/// });
/// ```
/// The kind of restart event that was triggered.
///
/// Carried in [`RestartEvent`] to let observers distinguish between IPOP, BIPOP-large,
/// and BIPOP-small restart phases without inspecting engine internals.
/// Payload delivered to [`GaObserver::on_restart`](crate::observer::GaObserver::on_restart)
/// when the CMA-ES engine triggers an automatic restart.
///
/// Stack-allocated and `Copy`-able — zero heap allocation, matching the
/// [`ExtensionEvent`](crate::observer::ExtensionEvent) design.