## 3 Tabu Search Algorithms  
The Tabu Search (TS) method is a metaheuristic method proposed by [PERSON] in 1989 [29] and 1993 [30]. It is an iterative procedure which explores a set of problem solutions, making moves from one solution \(x\) to another solution \(x^{\prime}\) inside a neighborhood \(V(x)\). Moves aim to find optimal or near-optimal solutions, evaluating some objective function that is to be minimized. \begin{table}
\begin{tabular}{l l} \hline \hline
**Symbol** & **Description** \\ \hline \(i\) & Index set of products (includes product, packaging, and site) \\ \(t\) & Index set of planning periods \\ \(r\) & Index set of resources \\ \(k\) & Index set of strokes \\ \(D_{i,t}\) & Demand of product \(i\) for period \(t\) \\ \(hi,t\) & Cost of storing a unit of product \(i\) in period \(t\) \\ \(CO_{k,t}\) & Cost of stroke \(k\) in period \(t\) \\ \(CS_{k,t}\) & Cost of the setup of stroke \(k\) in period \(t\) \\ \(CB_{i,t}\) & Cost of purchasing product \(i\) in period \(t\) \\ \(SO_{i,k}\) & Number of units \(i\) that generates a stroke \(k\) \\ \(SI_{i,k}\) & Number of units \(i\) that stroke k consumes \\ \(LT_{k}\) & Lead time of stroke \(k\) \\ \(KAP_{r,t}\) & Capacity availability of resource \(r\) in period \(t\) (in time units) \\ \(M\) & A sufficiently large number \\ \(TO_{k,r}\) & Capacity of the resource \(r\) required for performing one unit of stroke \(k\) (in time units) \\ \(TS_{k,r}\) & Capacity required of resource \(r\) for setup of stroke \(k\) (in time units) \\ \(z_{k,t}\) & Amount of strokes \(k\) to be performed in period \(t\) \\ \(\delta_{k,t}\) & =1 if stroke \(k\) is performed in period \(t\) (and 0 otherwise) \\ \(w_{i,t}\) & Purchase quantity for product \(i\) in period \(t\) \\ \(X_{i,t}\) & Stock level of product \(i\) on hand at the end of period \(t\) \\ \(Z\) & Total Planning Cost \\ \hline \hline \end{tabular}
\end{table} 
Table 3: Parameters and decision variables for the GMOP model [19]. TS involves adaptive memory principles, the creation of constrained search spaces, and the utilization of short-term and long-term learning mechanisms [31]. The Tabu list is the main short-term memory mechanism and keeps a record of the most recently adopted moves, keeping the algorithm from re-evaluating previously-considered solutions and getting stuck in local optima. The algorithm starts with an initial solution \(Z_{0}\) as the current solution \(S\). Moves allow the algorithm to make changes to the solution array, generating candidate solutions \(S_{c}\). These changes can be done using an insertion, mutation, combination, or by crossing strategies. A set \(V\) is generated with \(N_{s}\) candidate solutions. After evaluation, only the best solution per iteration is adopted (\(S\gets S_{c}\)) and the moves (\(S_{k}\) to \(S_{c}\)) and (\(S_{c}\) to \(S_{k}\)) are registered in the Tabu list, being forbidden for a specific number of iterations (the so-called Tabu tenure). The algorithm stops when a completion criterion is fulfilled. The most frequent finalization conditions include a maximum number of iterations, a minimum value for the objective function, or a specific number of iterations without substantial improvements. TS also allows for the implementation of aspiration, diversification, and intensification mechanisms. Aspiration criteria allow the algorithm to improve the solution by considering moves included in the Tabu list. Intensification mechanisms are short-term or long-term memory structures that allow a deep exploration of promising search spaces. Finally, diversification strategies guide the search towards poorly-explored search spaces [32]. TS algorithms have been implemented in a variety of lot-sizing and scheduling problems. This approach frequently offers high-quality solutions and has been able to outperform other heuristics and relaxation methods [12; 33; 34; 35]. One of the main motivations for adopting a TS approach lies in the advantages of local search, especially its efficiency for managing hard constraints in large scale problems [36].