## 4 Detailed Problem Description
### Mathematical Formalization and Scope of the Algorithm  
The primary objective of the proposed approach is to minimize the makespan, denoted as the time required to complete a given set of operations. Here, \(j\in J=\{1,2,\ldots,N\}\) represents the operations to fulfil requests, \(m\in M\) denotes the set of machines (suchas shuttles, lifts, and cranes), and \(END_{m}(j)\) signifies the time at which machine \(m\in M\) finishes operation \(j\). The objective function can be formally defined as:  
\[\min\ \ A \tag{1}\]  
where \(A\) is a newly introduced variable subject to the following constraints:  
\[A\geq END_{m}(j),\ \ \forall j\in J,\ \forall m\in M \tag{2}\]  
For each storage request, represented by \(k\in R^{\text{in}}\), we define an input operation. Similarly, for each customer order \(k\in R^{\text{out}}\), one or more retrieval operations are defined based on the required quantity and stock availability. The algorithm does not handle the assignment of input/output points to requests, as this decision relies on external factors. Specifically, the input point depends on the production line from which the entering bundle originates, while the output point is chosen by the truck driver, typically opting for the first available one. The sequence in which requests are processed is highly constrained. For input requests, rearranging the order of entry bundles once they have reached the input point and placed on the conveyor is time-consuming due to their substantial weight (over five tons) and length (up to twelve meters). Altering the sequencing of input requests involves significant expenses, typically requiring at least two operators and a forklift or a bridge crane. Hence, changing the sequence of input requests should be minimized. Regarding output requests, due to the bulkiness of the bundles, they cannot be temporarily stored in a loading area or yard (as with classic pallets). Therefore, output requests should generally adhere to first-in-first-out (FIFO) logic. Postponing an output request is rare and only considered when the required product (in the required quantity) is not in stock.  
The constraints for assigning bundles to output operations and empty spaces to input operations can be formalized as follows. For a storage operation \(j\in R^{\text{in}}\), the only requirement is that the space accommodating the entering bundle \(b_{j}\) must be of sufficient length. Thus, if \(L_{j}\) represents the length of \(b_{j}\), \(L_{\sigma}\) denotes the length of a generic space, and \(z_{\sigma,j}\in 0,1\) is a decision variable equal to one only if space \(\sigma\) is assigned to operation \(j\), the following constraint must be satisfied:  
\[L_{j}*z_{\sigma,j}\leq L_{\sigma},\ \ \forall j\in J,\ \forall\sigma\in S \tag{3}\]  
Conversely, for a customer order, quantity and quality constraints are essential. For each customer order \(k\in R^{\text{out}}\), the difference between the required and retrieved quantities must fall within certain limits:  
\[w_{k}-\bigtriangleup\leq\sum_{i\in B_{k}}w_{i}\leq w_{k}+\bigtriangleup,\ \ \forall k\in R^{\text{out}} \tag{4}\]  
where \(B_{k}\) represents the set of in-stock bundles selected to fulfil customer order \(k\), and \(\bigtriangleup\) denotes an acceptable deviation from the required quantity. Regarding the quality constraint, \(B_{k}\) must have an average quality level equal to or higher than the required quality \(q_{k}\):  
\[q_{k}\leq\frac{\sum_{i\in B_{k}}q_{i}}{|B_{k}|},\ \forall k\in R^{\text{out}} \tag{5}\]  
where \(|B_{k}|\) refers to the cardinality of set \(B_{k}\).