Starting from the model structure and functioning described in Section
4.1, a digital model (DM) based on DES was built to achieve an effective DT implementation. AnyLogic, a Java-based multi-method simulation software, was chosen as the platform for building the DM. It provides an integrated modelling environment that streamlines the entire modelling process by providing a unified workspace where modellers can easily create, modify, and analyse their simulations. In addition, the extensive collection of built-in libraries greatly accelerates the modelling process. These libraries include a wide range of pre-built components such as sources, queues, delays, and resources. Finally, the versatility of AnyLogic is a key factor in its selection over other commercial simulation software options. The object-oriented approach allows the construction of different types of models, whether simple or complex, flat or hierarchical, replicated or dynamically changing structures. This feature allows a model to be built to any desired level of detail, depending on the problem to be solved [
35]. The model developed focuses only on the storage process of the MLS system.
The following list summarises the notation used for the variables and parameters considered:
For each travel axis, that is
x-axis for horizontal movement, and
y-axis for vertical movement, it was calculated the space needed to reach the maximum speed as
$$\begin{aligned} sv_{ax} = \frac{v_{ax}^2}{2a_{ax}} \quad \forall \, ax \in \{x,y\} \end{aligned}$$
(1)
Then, in line with [
36], we can consider acceleration and deceleration equal and constant, and thus the total travel time can be calculated as follows:
$$\begin{aligned} t_{ax}= & {} {\left\{ \begin{array}{ll} \sqrt{\frac{s_{ax}}{a_{ax}}} &{} \text{ if } s_{ax} \le 2*sv_{ax} \\ 2*\sqrt{\frac{2*sv_{ax}}{a_{ax}}}+(s_{ax}-\frac{2*sv_{ax}}{v_{ax}}), &{} \text{ if } s_{ax} > 2*sv_{ax}\end{array}\right. } \nonumber \\{} & {} \quad \forall \, ax \in \{x,y\} \end{aligned}$$
(2)
Once obtained the travelling time for each axis, the total travelling time of a single HM movement is given by the following:
$$\begin{aligned} t = {\left\{ \begin{array}{ll} t_x &{} \text{ if } t_x \ge t_y \\ t_y &{} \text{ otherwise } \\ \end{array}\right. } \end{aligned}$$
(3)
Since the MLS was designed in order to have space for two UL on board, if a UL needs to be transfer from front 1 (storage front of the input conveyor) to front 2, it is necessary to take into account also the transfer time
ttransf. The UL can be also be moved on board in the storage location selected is in front 1. This happens for the types of UL that do not occupy entirely half the dimension of the HM. As a consequence, the transfer time can be calculated as follows:
$$\begin{aligned} ttransf={\left\{ \begin{array}{ll} \frac{\frac{ls}{2}-lul}{vtransf}, &{} \text{ if } fsl = fin\\ \frac{\frac{ls}{2}}{vtransf}, &{} \text{ if } fsl \ne fin \end{array}\right. } \end{aligned}$$
(4)
The MLS stars transferring the UL on board simultaneously while moving in the direction of the selected storage location. Therefore, the travel time
t can be updated as follows:
$$\begin{aligned} t = {\left\{ \begin{array}{ll} t, &{} \text{ if } ttransf \le t \\ ttransf, &{} \text{ otherwise }\end{array}\right. } \end{aligned}$$
(5)
In addition to the travel and transfer time, there are other times when the MLS needs to perform other processes. After successfully completing the loading process, the MLS needs some time to perform post-processing activities, such as verifying the correctness of the operation, performing subsequent tasks, and calculating the next set of routes. Then, once the MLS has completed the movement to a storage location to perform a successive storage operation, it waits for a period of time to accurately adjust its position and check the correspondence between the expected status and the actual status of the storage location. The MLS then requires a certain amount of time to place the UL into a specific depth of a storage location. If the mission requires a UL to be loaded from the input conveyor, this time must be taken into account. Therefore, the total time to store a UL can be calculated as follows:
$$\begin{aligned} tt = tcin + tro + t + tst + tdep \end{aligned}$$
(6)
Since the MLS follows a PB inventory policy, each storage location is associated with a priority value determining the sequence followed to store the boxes within the warehouse. In order to calculate it, the matrix
T(
r,
c), in which each element
\(t_{ij}\) correspond to the time needed to move of
i tiers and
j columns, is generated. The values of each
\(t_{ij}\) are calculated according to Eq.
3.
$$ T = \begin{pmatrix} 0 &{} t_{01} &{} t_{02} &{}... &{} t_{0c} \\ t_{10} &{} t_{11} &{} t_{12} &{}... &{}...\\ t_{20} &{} t_{21} &{} t_{22} &{}... &{}...\\ ... &{}... &{}... &{}... &{}...\\ t_{r0} &{}... &{}... &{}... &{} t_{rc} \end{pmatrix} $$
For each storage location, it is then calculated the mean time to reach each input point of the system as
$$\begin{aligned} avgtin_{sl} = \frac{\sum _{i=1}^{nin} tin_{i,sl}}{nin}\quad \forall \, sl \in SL \end{aligned}$$
(7)
Analogously, it is calculated the mean time to reach each output point of the system as
$$\begin{aligned} avgtout_{sl} = \frac{\sum _{i=1}^{nout} tout_{i,sl}}{nout}\quad \forall \, sl \in SL \end{aligned}$$
(8)
Then, the priority associated with each storage location, which determines the degree of preference in selecting that storage location, is calculated as the inverse of the sum of
avgtin and
avgtout, that is
$$\begin{aligned} p_{sl} = \frac{1}{avgtin_{sl}+avgtout_{sl}}\quad \forall \, sl \in SL \end{aligned}$$
(9)
For each storage location, the priority previously calculated priority is normalised, meaning a scaling transformation is applied so that the maximum priority value is 1 and the minimum priority value is 0, as
$$\begin{aligned} pn_{sl} = \frac{p_{sl}-pmin}{pmax-pmin}\quad \forall \, sl \in SL \end{aligned}$$
(10)
When the WMS sends a message to the WCS containing the task to be carried out, Algorithm 1 is executed. It first generates the mission to retrieve the UL from the input conveyor. Successively, it searches for an available storage location for the UL to be stored. If a storage location is found, the mission to store it at the specific AS/RS location is created. On the other hand, if no storage location is found, a mission to move the UL to the output conveyor is generated.