The problem we seek to solve in this paper is a two-echelon routing problem with synchronization, in which the inner-city delivery on the second echelon is performed by cargo bikes. The customers are divided into two groups. There are those located within the city center called bike-customers, and those located outside this area. These latter customers are supplied by vans and hence referred to as van-customers. Moreover, the vans also supply goods to the cargo bikes via so-called satellites. The satellites are transshipment points where vans and cargo bikes can meet. After loading, the cargo bikes perform their delivery and when they have to reload, they move again to a satellite. The city center is defined as the area within the satellites. As we want to avoid vans completely in the city center we also penalize van trips crossing this area by imposing penalty costs for such trips.
Goods from different suppliers arrive at the van depot located on the outskirts of the city. From there, vans perform the delivery to van-customers and to satellites. The satellites are a set of predefined meeting points which do not have storage facilities. So vans and cargo bikes must meet in a synchronized way at the same time at the same physical satellite, while waiting times for cargo-bikes and vans are minimized. Similar to vans, cargo bikes start and end their tours at the bike depot located in the city center.
The formulation of our VRP is based on the ones by Grangier et al. (2014) and by Crainic et al. (2012). The problem is defined on a graph \(G=(V,A)\). The set of nodes V consists of the set of two depot nodes \(V_d\) (one as starting point for bikes and one as starting point for vans), the set of n customers \(V_c\), and the set of m satellites \(V_s\).
Based on the topography of the problem the set of customers \(V_c\) is split into two parts: All customers located in a circle \(C_I \subseteq P_{V_s}\) (the polygon spanned by the satellites \(s \in V_s\)) are served by cargo bikes. We denote this subset of bike-customers by \(V_c^b\) and its complement \(V_c {\setminus } V_c^b\) by \(V_c^v\) (the van-customers). Let \(n_1 := \mid V_c^b \mid \) and \(n_2 := \mid V_c^v \mid \).
Furthermore, we can denote the bike depot by \(v_d^b\), and the van depot by \(v_d^v\).
As each physical satellite \(s \in V_s\) can be used as supply point for each bike-customer \(d \in V_c^b\) a set of cloned satellites \(\tilde{s} \in \tilde{V}_s\) is created where each physical satellite s is duplicated \(n_1\) times (once for each bike-customer). So, the extended set of vertices can be denoted by \(V_E = V_d \cup V_c \cup \tilde{V}_s\).
The set of arcs A consists of all feasible arcs which is described in detail below.
The first level (served by vans) is defined on \(G^v = (V^v, A^v)\) with \(V^v = \{v_d^v\} \cup V_c^v \cup \tilde{V}_s\) and \(A^v = \{(v_d^v,j) \mid j \in V_c^v \cup \tilde{V}_s \} \cup \{ (i,j) \mid i \in V_c^v, j \in V^v \} \cup \{ (\tilde{s},j) \mid \tilde{s} \in \tilde{V}_s, j \in V^v \}\).
The second level (served by bikes) is defined on \(G^b = (V^b, A^b)\) with \(V^b = \{v_d^b\} \cup V_c^b \cup \tilde{V}_s\) and \(A^b = \{(v_d^b,\tilde{s}) \mid \tilde{s} \in \tilde{V}_s \} \cup \{ (i,j) \mid i \in V_c^b, j \in V^b \} \cup \{ (\tilde{s},j) \mid \tilde{s} \in \tilde{V}_s, j \in V_c^b \}\).
Each vertex \(i \in V_E\) has its specific loading or service time \(\lambda _i \ge 0\) and each vertex \(i \in V_c\) has its specific demand \(d_i > 0\).
Furthermore, we have two fleets of vehicles: a fleet of vans (\(F^v\)) and a fleet of cargo bikes (\(F^b\)) in non-limited number with \(F = F^v \cup F^b\).
Each vehicle type \(\kappa = \{v,b\}\) has its specific speed \(s^v\)/\(s^b\) to derive the travel times \(\tau _{ij}^v\)/\(\tau _{ij}^b\) from the distances \(\delta _{ij}^v\)/\(\delta _{ij}^b\) for each arc \((i,j) \in A^v \cup A^b\), if now separate travel time matrix is provided, and its capacity \(Q^v\)/\(Q^b\). For the calculation of costs each vehicle type has vehicle cost \(c_D^v\)/\(c_D^b\) per unit of distance traveled, driver cost \(c_T^v\)/\(c_T^b\) per unit of time used and fixed cost \(c_F^v\)/\(c_F^b\) per vehicle used.
To penalize vans crossing the inner area \(C_I \subseteq P_{V_s}\) we use a penalty cost matrix with penalty costs \(p_{ij}\) for each arc \((i,j) \in A^v\). Please note that \(p_{ij}\) is 0, if an arc does not cross \(C_I\).
So \(c_{ij}^k\) represents the costs of vehicle k for traversing arc (i, j).
Furthermore, we define the following decision variables:
The binary variable
$$\begin{aligned} x_{ij}^k = {\left\{ \begin{array}{ll} 1 &{}\text {if vehicle } k \text { travels from node }i \text { to node }j \\ 0 &{}\text {otherwise} \end{array}\right. } \end{aligned}$$
and the continuous variables
-
\(w_i^b \ge 0\) specifying the occurring waiting time for a bike at node i
-
\(w_i^v \ge 0\) specifying the occurring waiting time for a van at node i
-
\(t_i^k \ge 0\) specifying the arrival time of vehicle k at node i
-
\(u_i^b \ge 0\) specifying the load of a bike after serving node i
-
\(u_i^v \ge 0\) specifying the load of a van after serving node i
Furthermore, we use the constant \(M_u\) which represents the total demand of all customers.
The maximum route duration is given by \(t_{max}\) and the maximum permitted waiting time at any satellite \(\tilde{s} \in \tilde{V}_s\) for each vehicle is defined by \(w_{max}\).
The objective function of our model can then be formulated as:
$$\begin{aligned} min \sum _{k \in F} \left( \sum _{i \in V_E} \sum _{j \in V_E} c_{ij}^k x_{ij}^k + \sum _{d \in V_d} \sum _{j \in V_E} c_F^k x_{dj}^k \right) \end{aligned}$$
(1)
with
$$\begin{aligned} c_{ij}^k= & {} \left( \tau _{ij}^{\kappa } + \lambda _j + w_j^{\kappa }\right) c_T^{\kappa } + \delta _{ij}^{\kappa } c_D^{\kappa } + p_{ij} \\ \kappa= & {} {\left\{ \begin{array}{ll} \{v\} &{}\forall k \in F^v\\ \{b\} &{}\forall k \in F^b \end{array}\right. } \end{aligned}$$
Subject to:
$$\begin{aligned}&\displaystyle \sum _{j \in V_c^v \cup \tilde{V}_s} x_{v_d^vj}^k = \sum _{j \in V_c^v \cup \tilde{V}_s} x_{jv_d^v}^k \text { , } \forall k \in F^v \end{aligned}$$
(2)
$$\begin{aligned}&\displaystyle \sum _{j \in V_c^v \cup \tilde{V}_s} x_{v_d^vj}^k \le 1 \text { , } \forall k \in F^v \end{aligned}$$
(3)
$$\begin{aligned}&\displaystyle \sum _{j \in V_c^b \cup \tilde{V}_s} x_{v_d^bj}^k = \sum _{j \in V_c^b \cup \tilde{V}_s} x_{jv_d^b}^k \text { , } \forall k \in F^b \end{aligned}$$
(4)
$$\begin{aligned}&\displaystyle \sum _{j \in V_c^b \cup \tilde{V}_s} x_{v_d^bj}^k \le 1 \text { , } \forall k \in F^b \end{aligned}$$
(5)
$$\begin{aligned}&\displaystyle \sum _{h \in V_E} x_{hi}^k = \sum _{j \in V_E} x_{ij}^k \text { , } \forall i \in V_c, \text { , } \forall k \in F \end{aligned}$$
(6)
$$\begin{aligned}&\displaystyle \sum _{k \in F} \sum _{h \in V_E} x_{hi}^k = 1 \text { , } \forall i \in V_c \end{aligned}$$
(7)
$$\begin{aligned}&\displaystyle \sum _{i \in V_E} x_{i\tilde{s}}^k = \sum _{j \in V_E} x_{\tilde{s}j}^k \text { , } \forall \tilde{s} \in \tilde{V}_s \text { , } \forall k \in F \end{aligned}$$
(8)
$$\begin{aligned}&\displaystyle \sum _{k \in F^b} \sum _{i \in V^b} x_{i\tilde{s}}^k \le 1 \text { , } \forall \tilde{s} \in \tilde{V}_s \end{aligned}$$
(9)
$$\begin{aligned}&\displaystyle \sum _{k \in F^v} \sum _{j \in V^v} x_{j\tilde{s}}^k \le 1 \text { , } \forall \tilde{s} \in \tilde{V}_s \end{aligned}$$
(10)
$$\begin{aligned}&\displaystyle \sum _{k \in F^b} \sum _{i \in V^b} x_{i\tilde{s}}^k = \sum _{k \in F^v} \sum _{j \in V^v} x_{j\tilde{s}}^k \text { , } \forall \tilde{s} \in \tilde{V}_s \end{aligned}$$
(11)
$$\begin{aligned}&\displaystyle u_i^b - d_j - u_j^b \ge \left( x_{ij}^k - 1\right) \left( d_j + u_j^b\right) \text { , } \forall k \in F^b \text { , } \forall i \in V^b \text { , } \forall j \in V_c^b \end{aligned}$$
(12)
$$\begin{aligned}&\displaystyle u_i^b \le M_u \left( 1 - \sum _{k \in F^b} \sum _{\tilde{s} \in \tilde{V}_s} x_{i{\tilde{s}}}^k\right) \text { , } \forall i \in V_c^b \end{aligned}$$
(13)
$$\begin{aligned}&\displaystyle 0 \le u_i^b \le Q^b \text { , } \forall i \in V^b \end{aligned}$$
(14)
$$\begin{aligned}&\displaystyle u_i^v - d_j - u_j^v \ge \left( x_{ij}^k - 1\right) \left( d_j + u_j^v\right) \text { , } \forall k \in F^v \text { , } \forall i \in V_c^v \cup \left\{ v_d^v\right\} \text { , } \forall j \in V_c^v \end{aligned}$$
(15)
$$\begin{aligned}&\displaystyle u_i^v - u_{\tilde{s}}^b - u_{\tilde{s}}^v \ge \left( x_{i{\tilde{s}}}^k - 1\right) \left( u_{\tilde{s}}^b + u_j^v\right) \text { , } \forall k \in F^v \text { , } \forall i \in V_c^v \cup \left\{ v_d^v\right\} \text { , } \forall \tilde{s} \in \tilde{V}_s \end{aligned}$$
(16)
$$\begin{aligned}&\displaystyle 0 \le u_i^v \le Q^v \text { , } \forall i \in V^v \end{aligned}$$
(17)
$$\begin{aligned}&\displaystyle \sum _{i \in V^b} \sum _{j \in V^b} \left( \lambda _i + \tau _{ij}^b + w_i^b\right) x_{ij}^k \le t_{max} \text { , } \forall k \in F^b \end{aligned}$$
(18)
$$\begin{aligned}&\displaystyle \sum _{i \in V^v} \sum _{j \in V^v} \left( \lambda _i + \tau _{ij}^v + w_i^v\right) x_{ij}^k \le t_{max} \text { , } \forall k \in F^v \end{aligned}$$
(19)
$$\begin{aligned}&\displaystyle t_{v_d^v}^k = 0 \text { , } \forall k \in F^v \end{aligned}$$
(20)
$$\begin{aligned}&\displaystyle t_i^k + \tau _{ij}^b + \lambda _i + w_i^b - t_j^k \nonumber \\&\displaystyle \le \left( 1 - x_{ij}^k\right) \left( t_i^k + \tau _{ij}^b + \lambda _i + w_i^b\right) \text { , } \forall i,j \in V_E \text { , } k \in F^b \end{aligned}$$
(21)
$$\begin{aligned}&\displaystyle t_i^k + \tau _{ij}^v + \lambda _i + w_i^v - t_j^k \nonumber \\&\displaystyle \le \left( 1 - x_{ij}^k\right) \left( t_i^k + \tau _{ij}^v + \lambda _i + w_i^v\right) \text { , } \forall i,j \in V_E \text { , } k \in F^v \end{aligned}$$
(22)
$$\begin{aligned}&\displaystyle w_{\tilde{s}}^b= max\left( 0;\sum _{k \in F^v} \sum _{i \in V^v} t_{\tilde{s}}^k x_{i\tilde{s}}^k - \sum _{k \in F^b} \sum _{j \in V^b} t_{\tilde{s}}^k x_{j\tilde{s}}^k\right) \text { , } \forall \tilde{s} \in \tilde{V}_s \end{aligned}$$
(23)
$$\begin{aligned}&\displaystyle w_{\tilde{s}}^v = max\left( 0;\sum _{k \in F^b} \sum _{i \in V^b} t_{\tilde{s}}^k x_{i\tilde{s}}^k - \sum _{k \in F^v} \sum _{j \in V^v} t_{\tilde{s}}^k x_{j\tilde{s}}^k\right) \text { , } \forall \tilde{s} \in \tilde{V}_s \end{aligned}$$
(24)
$$\begin{aligned}&\displaystyle w_{\tilde{s}}^b \le w_{max} \text { , } \forall \tilde{s} \in \tilde{V}_s \text { , } k \in F \end{aligned}$$
(25)
$$\begin{aligned}&\displaystyle w_{\tilde{s}}^v \le w_{max} \text { , } \forall \tilde{s} \in \tilde{V}_s \text { , } k \in F \end{aligned}$$
(26)
$$\begin{aligned}&\displaystyle x_{ij}^k \in \{0,1\} \text { , } \forall i,j \in V_E \text { , } k \in F \end{aligned}$$
(27)
$$\begin{aligned}&\displaystyle c_{ij}^k, t_i^k, w_i^v, w_i^v, u_i^v, u_i^b \ge 0 \text { , } \forall i,j \in V_E \text { , } k \in F \end{aligned}$$
(28)
The objective function (1) minimizes the total transportation costs, including variable costs based on distance and time traveled as well as fixed cost for each vehicle in use. Constraints (2) and (3) ensure that each van leaving the van depot also returns to this depot, while constraints (4) and (5) enforce same for bikes. Constraints (6) and (7) guarantee that each customer is visited exactly once by a vehicle. Constraints (8), (9), (10) and (11) ensure that each cloned satellite can be used at most once by a bike or a van and if it is used as supply point by a bike it has to be visited by a van too. Constraint (12) ensures for each bike that the load after visiting a node is equal to the load before minus the demand of the respective node. Constraint (13) ensures that each bike is empty when reaching a satellite. Constraint (14) ensures that the load of a bike at each visited node does not exceed the bike capacity. Constraint (15) ensures for each van that the load after visiting a node is equal to the load before minus the demand of the respective node. Constraint (16) ensures that the load of a bike at a satellite is added as demand for the van which visits this satellite. Constraint (17) ensures that the load of a van at each visited node does not exceed the van capacity. Constraints (18) and (19) restrict the maximum tour duration of a bike and a van, while constraint (20) enforces the start time of vans at the depot to be zero. Constraints (21) and (22) ensure the scheduling of nodes for bikes and vans. Constraint (23) determines the waiting time of a bike at a node as the difference between the arrival time of the van at this node minus the arrival time of the bike at this node, and if the difference is negative the waiting time of a bike at this node is set to zero. Constraint (24) ensures the same issue for the waiting time of a van at a node. Constraints (25) and (26) ensure the synchronization of bikes and vans at cloned satellites within a maximum permitted time span. Eventually, constraint (27) imposes binary values on the decision variable, while constraint (28) ensures non-negative values for all other variables.
The used notation is given in Table 1.
Figure 1 provides a simplified representation of our routing problem which shows the van depot (large rectangle), the bike depot (small rectangle), a number of potential satellites (triangles) and a number of customers (dots). The customers within the inner circle \(C_I\) of the satellites are served by cargo bikes (dashed lines) and all other customers are served by vans (solid lines). At a satellite a cargo bike has to meet with a van to reload before continuing on its route. Satellites like the one shown upper left in Fig. 1 are not used for synchronization purposes.
Figure 2 shows the main challenge in our routing problem, namely the spatial and temporal synchronization of cargo bikes and vans. The abscissa in the diagram is the timeline and the ordinate shows the vehicles operating on a certain route. Van 1 starts at the van depot (large rectangle) and services two customers (dots). Then it arrives at the satellite (triangle) which represents a cloned satellite \(\tilde{s}\), where the cargo bike arrives after starting its route at the bike depot (small rectangle). In the meantime van 2 has also started its route from the van depot and services five customers before it arrives at the next satellite which represents also a cloned satellite \(\tilde{s}\) and can therefore be located at the same physical location than the satellite mentioned above, but it can also be located at another physical satellite location. Here it meets with the cargo bike which has to be reloaded after servicing three customers.
To sum up the potential usage of a physical satellite s we can distinguish the following cases:
-
1.
A physical satellite s is used once in the solution for the meeting of one bike with one van. Then exactly one of the respective cloned satellites \(\tilde{s}\) is used in the solution.
-
2.
A physical satellite s is used once in the solution for the meeting of several bikes with one van. Then one respective cloned satellite \(\tilde{s}\) for each bike is used in the solution.
-
3.
A physical satellite s is used several times in the solution. Then for each usage in time either case 1. or case 2. can be realized.
-
4.
A physical satellite s is not used at all in the solution, so all respective cloned satellites \(\tilde{s}\) stay unused as well.
Our problem is a generalization of the classical VRP and is thus NP-hard.