## 2 Theoretical Foundations
### Heuristics
#### 2.2.1 Simple Heuristics  
Simple Heuristics (SHs) are the cornerstone of search techniques. They tackle the problem domain directly and can be of a _constructive_ or _perturbative_ nature. The former builds a solution from the ground up. The latter alters current ones [25]. Nonetheless, we also require a SH that validates if the process must continue. In simple words, this new category analyses the ongoing situation and selects the next SH to use. Perhaps it has no relevance as a standalone heuristic. Still, in the context of metaheuristics, the finaliser is the \"master strategy\" controlling the search procedure that many authors use to define the metaheuristics [26]. Bearing this in mind, we briefly define the simple heuristics andtheir three categories. Consider that these concepts are applicable to an arbitrary problem domain \(\mathfrak{S}\). **Definition 4** (Simple Heuristic). : _Let \(\mathfrak{H}\) be a set of simple heuristics, or heuristic space, with a composition operation \(\circ:\mathfrak{H}\times\mathfrak{H}\mapsto\mathfrak{H}\). Let \(\mathfrak{H}_{i},\mathfrak{H}_{0},\mathfrak{H}_{f}\subset\mathfrak{H}\) be subsets of heuristics that produces, modifies, and chooses between two operators, respectively._  
**Definition 5** (Initialiser). : _Let \(h_{i}:\mathfrak{S}\mapsto\mathfrak{X}\subseteq\mathfrak{S}\) be a simple heuristic that generates a candidate solution \(\vec{x}\in\mathfrak{X}\) within the feasible domain from scratch, i.e., \(\vec{x}=h_{i}\{\vec{x}\}\)._  
**Definition 6** (Search Operator). : _Let \(h_{0}:\mathfrak{X}\mapsto\mathfrak{X}\) be a simple heuristic that obtains a new position \(\vec{x}(t+1)\in\mathfrak{X}\) from the current position \(\vec{x}(t)\in\mathfrak{X}\), since \(t\) indicates the current iteration, i.e., \(\vec{x}(t)=h_{o}\{\vec{x}\}\). A search operator mostly comprises two basic operations: perturbation and selection. Hence, let \(h_{p},h_{s}\in\mathfrak{H}_{0}\) be also simple heuristics that modify and update the current solution \(\vec{x}(t)\), respectively; then \(\vec{y}=h_{p}\{\vec{x}\}\) and \(\vec{x}(t+1)=h_{s}\{\vec{y}\}\). These are called perturbator and selector. A perturbator always precedes a selector, so a search operator corresponds to \(h_{o}=h_{s}\circ h_{p}\). In many implementations, selectors may require additional information to operate._  
**Definition 7** (Finaliser). : _Let \(h_{f}:\mathfrak{X}\times\mathbb{Z}_{2}\mapsto\mathfrak{H}\) be a simple heuristic that evaluates the current solution quality and chooses which search operator to apply. To do so, it uses information about the iterative procedure (e.g., the current solution, its fitness value, the current iteration, the previous candidate solutions, and other measurements) in a criteria function \(c_{f}:(\mathbb{Z}_{+},\mathbb{R},\mathfrak{X},\dots)\mapsto\mathbb{Z}_{2}\). Then, \(h_{f}\in\mathfrak{H}_{f}\) is called a finaliser and is defined as_  
\[h_{f}(h_{0})\{\vec{x}\}\triangleq \begin{cases}h_{e}\{\vec{x}\},&\text{if }c_{f}(t,f,X,\dots)=1,\\ h_{f}\circ h_{0}\{\vec{x}\},&\text{otherwise},\end{cases}  \tag{2}\]  
_since \(h_{0}\) and \(h_{e}\) are two search operators selected according to \(c_{f}\); \(h_{e}\) is the identity operator, so \(\vec{x}=h_{e}\{\vec{x}\}\)._  
**Remark 3** (Criteria function). : _This function \(c_{f}\) 'decides' whether an additional iteration is required in the searching procedure. Hence, \(c_{f}\) checks one or many custom stopping (or convergence) criteria using information from the iterative process to make such a decision. Several criteria have been proposed in the literature for numerical methods in general, so their selection primarily depends on the problem application. The simplest one corresponds to a limited number of iterations \(t_{\text{max}}\), such as \(c_{f}(t)\triangleq H(t-t_{\text{max}})\), where \(H\) is the standard Heaviside function. Other complexes include a measure of computing budget, fitness improvement threshold, restricted stagnation counts, and so forth.