Keywords

1 Introduction

The literature on vehicle routing problems has become very rich and covers nowadays a variety of applications, modeling approaches, and solution methods [16]. Due to their huge importance in practice, these problems have attracted attention of many researchers and motivate a large number of collaborations between companies and academia. In addition, vehicle routing problems lead to challenging formulations that require the development of sophisticated solution strategies and motivates the design of clever heuristics and meta-heuristics.

Earlier [25] we considered the uncapacitated variant of our problem, and now we consider a more general case. We have a capacitated heterogeneous fleet of vehicles and a finite set of clients with their demand. Our goal is to find a set of routes for the vehicles to service all clients with minimal total distance. This optimization problem and its variants have been extensively studied for nearly 60 years (see the early work of [6]). It is the consistent vehicle routing problem (ConVRP) where the companies focus on client satisfaction to get some competitive advantage [23, 24]. Over a given time horizon we need to construct a set of routes for the vehicles such that to service all clients. The consistency is modeled as follows:

  • a client can be visited by one driver only, and split deliveries are not allowed;

  • a client should be visited at about the same time of a specific day selected by the client in advance.

Thus, a company can increase client satisfaction by providing consistent service [12, 23]. In this paper, we consider a new ConVRP assuming that each client is served by the same vehicle, and a frequency is given for each client indicating how often this client should be visited. Each client is visited on the same day of the week one, two or four times a month. These consistency requirements were suggested by a Russian logistics company interested in results. Each vehicle has a maximum capacity that limits the number of clients it can visit before returning to the depot. All vehicles start from and return to their depot in the given working interval. Our goal is to find a visiting schedule for each client and a set of routes for each vehicle that jointly service all clients under the frequency constraints and driver shift length constraints. The objective is to minimize the total traveling distance for all vehicles over the planning horizon.

In [5], a similar periodic VRP was studied without consistency requirements. In [12, 24], the ConVRP was studied with fixed visiting scheduling for clients and unlimited fleet. In our problem, we consider ConVRP with a flexible schedule and limited fleet. To solve this real-world routing problem, we design the Variable Neighborhood Search heuristic (VNS) [26, 27]. We use eleven neighborhood structures for local search including four large neighborhoods of Kernighan–Lin [17, 22]. To enlarge the search space, we relax the shift length and capacity constraints and include them into the objective function with non-negative penalties that are modified during the search [5, 10]. Intensification and diversification strategies are applied in the VNS framework as well.

The rest of this paper is structured as follows. We first introduce the mathematical model in Sect. 2. Neighborhood structures are presented in Sect. 3. The framework of the VNS heuristic is described in Sect. 4. Computational results for real-world instances are discussed in Sect. 5. The last Sect. 6 concludes the paper.

2 Mathematical Model

Let us consider a complete directed graph \(G = \left( V, A\right) \) with the set of nodes V and the set of arcs A. The set V is the union of the set of depots M and the set of clients I. Each depot \(m\in M\) has a heterogeneous fleet of vehicles. The set K defines the total vehicle park. For each vehicle \(k\in K\), we know its depot m(k) and its capacity \(v_k\). For each arc \((i,j)\in A\), we have two parameters: the length of arc \(d_{ij}\) and traveling time \(t_{ij}\). We denote the length of a driver’s shift by T. Each client \(i\in I\) has a given frequency of visits \(\mu _{i}\) in the planning horizon D. Time intervals between two consecutive visits of client i should be the same and equal to \(\tau _i=\lfloor |D|/\mu _{i}\rfloor \). A demand \(q_i\) for each client i is given. By \(s_i\) we denote the service time which is positive for each client and 0 for each depot.

We introduce the following binary decision variables:

\( {x_{ijkd} = \left\{ \begin{array}{ll} 1,\text { if vehicle } k \text { on day } d \text { traverses arc } (i, j), \\ 0,\text { otherwise,} \end{array} \right. }\)

\( {y_{ikd} = \left\{ \begin{array}{ll} 1,\text { if vehicle } k \text { on day } d \text { visits client } i,\\ 0,\text { otherwise,} \end{array} \right. }\)

\( {w_{id} = \left\{ \begin{array}{ll} 1,\text { if client } i \text { is visited on day } d,\\ 0,\text { otherwise.} \end{array} \right. }\)

The auxiliary non-negative variables \(u_{ikd}\) will be used for subtour elimination.

Now we can present the consistent capacitated vehicle routing problem under the shift length constraints as the mixed integer linear program:

$$\begin{aligned} \min \sum _{d\in {D}}\sum _{k\in {K}}\sum _{i\in {V}}\sum _{j\in {V}} d_{ij}x_{ijkd} \end{aligned}$$
(1)

subject to

$$\begin{aligned} \sum _{i\in I}q_iy_{ikd}\le v_k, \;\;k\in {K}, d\in {D}, \end{aligned}$$
(2)
$$\begin{aligned} {y_{mkd} = \left\{ \begin{array}{ll} 1,{ m=m(k),}\\ 0,{ m\ne m(k),} \end{array} \right. }\; \;m\in M, k\in {K},d\in {D}, \end{aligned}$$
(3)
$$\begin{aligned} \sum _{k\in K}y_{ikd}=w_{id}, \;\;i\in {I}, d\in {D}, \end{aligned}$$
(4)
$$\begin{aligned} \sum _{d\in D}w_{id}=\mu _{i}, \;\;i\in {I}, \end{aligned}$$
(5)
$$\begin{aligned} \sum _{t=0}^{\tau _i-1}w_{i\left( d+t\right) }=1, \;\; i\in {I}{, } d\in {\left\{ 0, \dots , (\mu _{i}-1)\tau _i\right\} }, \end{aligned}$$
(6)
$$\begin{aligned} \begin{array}{ll} w_{i\alpha }+w_{i\beta }-2\le &{} y_{ik\alpha }-y_{ik\beta }, \\ &{}i\in {I}, k\in K,\alpha ,\beta \in {D}{, }\alpha \ne \beta , \end{array} \end{aligned}$$
(7)
$$\begin{aligned} \sum _{i\in {V}}x_{ijkd}=\sum _{i\in {V}}x_{jikd}=y_{jkd},\;\; j\in {V}, k\in {K}, d\in {D}, \end{aligned}$$
(8)
$$\begin{aligned} u_{ikd}-u_{jkd}+n x_{ijkd}\le n-1, \;\;i,j\in {I}, \; k\in {K},\;d\in {D}, \end{aligned}$$
(9)
$$\begin{aligned} \sum _{i\in {V}}\sum _{j\in {V}} x_{ijkd}(t_{ij} + s_{j}) \le T,\;\;\quad k\in {K},d\in {D}, \end{aligned}$$
(10)
$$\begin{aligned} u_{ikd} \ge 0, \;\; i\in {I},\;\;k\in {K},\;d\in {D},\end{aligned}$$
(11)
$$\begin{aligned} w_{id}{, }\, x_{ijkd}{, }\, y_{ikd}\in \{0, 1\},\;\;i,j\in {V}{,}\;\; k\in {K}{, }d\in {D}. \end{aligned}$$
(12)

The objective function (1) minimizes the total traveling distance for all vehicles and all days of the planning horizon. In constraint (2), the total load of vehicle k should not exceed its capacity. Equalities (3) show the distribution of vehicles by depots. Equations (4) and (5) ensure that each client is visited according to its frequency. Constraints (6) guarantee that time intervals between two consecutive visits of each client are the same. Driver consistency is guaranteed in (7). Constraints (8) make sure that each client has exactly one predecessor and one successor and each vehicle returns to its own depot. Inequalities (9) prevent subtours on the set of clients, \(n=|I|\). The completion of the routes within the driver shift is enforced by inequalities (10). The last two constraints define the types of variables.

It is easy to see that variables \(u_{ikd}\) can be replaced by new variables \(u_{id}\) without loss of generality and dimension of the program can be reduced. Note that the problem (1)–(12) can be infeasible because of the limited fleet of vehicles in each depot and the driver shift constraints. To overcome this, we relax the constraints (2) and (10) and include them into the objective function with penalties \(\gamma _{kd}\ge 0, \lambda _{kd} \ge 0, \; k\in K, d\in D\). As a result, we have got a relaxation of the original problem (1)–(12) as follows:

$$L(x,\gamma ,\lambda )=\min \sum _{d\in {D}}\sum _{k\in {K}}\sum _{i\in {V}}\sum _{j\in {V}} d_{ij}x_{ijkd} $$
$$\begin{aligned} + \sum _{d\in {D}}\sum _{k\in {K}} (\gamma _{kd} \kappa _{kd}+ \lambda _{kd} \varepsilon _{kd}) \end{aligned}$$
(13)

subject to (3)–(9), (11), (12) and additional constraints for new variables \(\kappa _{kd},\varepsilon _{kd}\ge 0\) which indicate the excess capacity in kilograms and the over-hours in minutes for each pair (kd):

$$\begin{aligned} \kappa _{kd} \ge \sum _{i\in {V}} q_iy_{ikd}- v_k, \;\; k\in K, d\in D, \end{aligned}$$
(14)
$$\begin{aligned} \varepsilon _{kd} \ge \sum _{i\in {V}}\sum _{j\in {V}} x_{ijkd}(t_{ij} + s_{j}) - T, \;\; k\in K, d\in D. \end{aligned}$$
(15)

Now the relaxed problem (3)–(9), (11)–(15) is feasible even if there is just one vehicle at any depot, and we can solve it by local search metaheuristics [28]. The penalties \(\gamma _{kd},\lambda _{kd}\) will be modified during the search in order to get a feasible solution.

3 Neighborhoods

In the past four decades, local search has grown from a simple heuristic idea into a mature field of research in combinatorial optimization [1]. Local search is often used to solve NP-complete problems since it provides a reliable approach for obtaining high-quality solutions for realistic-size problems in a reasonable time. For partition and permutation problems, many small and large neighborhoods are introduced and studied from a theoretical and an empirical point of views [2, 3, 11, 13, 14, 16, 21]. Below we present eleven neighborhoods for the problem which is a special case of partition and permutation problems. We already considered all these neighborhoods in [25].

Fig. 1.
figure 1

Moving the client to another route

Let us denote by \(\sigma \) a feasible solution to the problem. For each vehicle \(k\in K\) and each day \(d\in D\) we have a route (the order of clients). We say that a driver of vehicle k is happy on day d if \(\kappa _{kd}=\varepsilon _{kd}=0\) and unhappy if these constraints are violated. We want to move clients from unhappy pairs (kd) to happy ones.

Now we define the following neighborhood structures for solution \(\sigma \).

The move neighborhood \(N_\text {move}(\sigma )\) consists of some feasible solutions resulting from \(\sigma \) by moving a client to another vehicle or the same vehicle but another day (Fig. 1). If the client must be visited several times, we move all his visits respectively. Moreover, we move an unhappy pair to a happy one only. In order to find the best permutation for new schedules, we select the best positions of new visits in previous schedules. The cardinality of this neighborhood is O(|I||D||K|). It is a large set. Thus, we will use a randomized neighborhood \(N_\text {move}^q(\sigma )\), \(0<q<1\), which is a random part of the neighborhood \(N_\text {move}(\sigma )\). Each element of the set \(N_\text {move}(\sigma )\) is included in the set \(N_\text {move}^q(\sigma )\) with probability q independently of other elements.

The neighborhood \(\tilde{N}_\text {move}^q(\sigma )\) has the same structure but includes the solutions for all moves, except those from happy pairs to unhappy.

The swap neighborhood \(N_\text {swap}(\sigma )\) consists of some feasible solutions resulting from \(\sigma \) by swapping two clients with the same frequency for the same or different vehicles (Fig. 2). We consider only the clients which are close enough to each other, the mutual distance between them is at most R, where R is a parameter of the neighborhood. The cardinality of the neighborhood is \(O(|I|^2)\). Thus, we apply the same randomization trick and use \(N_\text {swap}^q(\sigma )\) neighborhood instead of the deterministic case.

Fig. 2.
figure 2

Swapping the two clients

The neighborhood \(\tilde{N}_\text {swap}^q(\sigma )\) has the same structure but includes the solutions for swapping clients with different frequency. Thus, we can swap client with 4 visits with two clients with 2 visits or four clients with 1 visits or another client with 4 visits and so on.

Now we are ready to define four large Kernighan–Lin neighborhoods for a feasible solution \(\sigma \). The main idea of these neighborhood structures is similar to the truncated Tabu Search method by a small neighborhood, say \(N(\sigma )\). The neighborhood \(KL(\sigma )\) consists of l solutions resulting from \(\sigma \) by the following rule [17, 19]:

  1. 1.

    Find the best feasible solution \(\sigma '\) in the neighborhood \(N(\sigma )\).

  2. 2.

    Set \(\sigma :=\sigma '\), even if \(\sigma '\) is worse than \(\sigma \).

  3. 3.

    Repeat steps 1 and 2 l times, if a move or swap is used at step 1 or 2 of previous iterations, it can not be used anymore.

The sequence of \(\sigma _1,\ldots ,\sigma _l\) defines l neighbors of the solution \(\sigma \). We say that \(\sigma _b\) is a local minimum with respect to the KL–neighborhood if \(\sigma _b\) is the best solution of \(\sigma _1,\ldots ,\sigma _l\).

Using the six basic neighborhoods \(N_\text {move}(\sigma )\), \(N_\text {move}^q(\sigma )\), \(\tilde{N}_\text {move}^q(\sigma )\), \(N_\text {swap}(\sigma )\), \(N_\text {swap}^q(\sigma )\), and \(\tilde{N}_\text {swap}^q(\sigma )\) instead of the neighborhood \(N(\sigma )\), we may have four Kernighan–Lin neighborhoods \(KL_\text {move}(\sigma )\), \(\tilde{KL}_\text {move}(\sigma )\), \(KL_\text {swap}(\sigma )\), and \(\tilde{KL}_\text {swap}(\sigma )\) respectively. We illustrate the idea of the Kernighan–Lin neighborhoods in Fig. 3.

As we have mentioned above, the position of a new client in scheduling is selected without reordering other clients for the same pair (kd). For improving the final scheduling, we apply local descent algorithm by the well-known 2-opt neighborhood for each pair (kd). The idea of this neighborhood is to choose two non-adjacent arcs and replace them by two other arcs for creating a new tour. The main goal is removing intersections of arcs (see Fig. 4). In fact, we divide the problem into |K||D| the traveling salesman subproblems, and a local optimum by the 2-opt neighborhood is obtained for each subproblem independently [15].

Fig. 3.
figure 3

The Kernighan–Lin neighborhood

Fig. 4.
figure 4

Neighborhood 2-opt. Removing the intersection

4 Optimization Method

Variable Neighborhood Search is an efficient framework of local search invented about 20 years ago by Pierre Hansen and Nenad Mladenovich [26]. It is based upon a simple, but a strong principle: a systematic change of a neighborhood within the search. Its development has been rapid and successful in many real-world applications [27], including hard routing problems [18, 20] and games [7,8,9]. The main idea is to focus on local optima and change the landscape of search assuming that the local optimum for one neighborhood may not be the local optimum for another neighborhood. Below we apply this method to the relaxed problem. We used this method for a simpler problem in [25].

To start the method, we need to create an initial solution \(\sigma \) and define the penalties. The VNS method can start from an arbitrary solution, but we use a greedy solution to get a uniform distribution of clients through all pairs (kd), \(k\in K, d\in D\). We start from clients with high frequency and wish to minimize the maximal number of clients per day and per vehicle [4]. We put identical initial values of all penalties, \(\lambda _{kd}=2.5\), \(\gamma _{kd}=3\) in such a way to get approximately the same values of the items in the objective function \(L(x,\gamma ,\lambda )\).

In each iteration of the local search, we select a neighborhood and move from the current solution to the best neighboring solution. For the Kernighan–Lin neighborhoods, we generate l solutions and select the best one. The pseudo-code of the VNS algorithm is presented below.

figure a

At the initialization step, we generate an initial solution by a greedy algorithm and define the parameters of the method (line 1). Note that a randomization of the first four neighborhoods may be different and \(q_i \ne q_j\), \(1\le i\ne j \le 4\). We define these values in such a way that the cardinality of each randomized neighborhood is the same and equal to 200 on average. Thus, we accelerate the search, reduce the running time per iteration, and add a diversification aspect into the search process. The shaking procedure (line 11) is an additional diversification rule. We use some random steps by the swap or move neighborhoods in this procedure if the best found solution does not change for a long time.

The stopping criterion (line 2) is the total number of iterations which depends on the number of clients and their frequency. We use up to \(O(n_1^2) \) iterations in our experiments, where \(n_1=\sum _{i\in I} \mu _i\).

Local search (lines 5, 6) is applied by the move and swap neighborhoods and then by the Kernighan–Lin neighborhoods. In the latter case, we use local descents only and terminate the process in a local optimum. For the four basic neighborhoods, we terminate the process after a prescribed number of iterations. Further (line 7), we get a local optimum by 2-opt neighborhood for each pair (kd) of vehicle and day. As a rule, we discover a new best solution at this stage. If we find a solution with \(\kappa _{kd}>0\) for some pair (kd) then we increase the penalties \(\gamma _{kd}:=1.05\gamma _{kd}\). If a new solution has \(\varepsilon _{kd}=0\) for all pairs (kd), then we decrease the penalties \(\lambda \). Otherwise, we increase them. In general case, we modify the penalties by the following rule (line 8):

$$ {\gamma _{kd} = \left\{ \begin{array}{ll} 1.05\gamma _{kd},\text { if } \kappa _{kd}>0, \\ \gamma _{kd},\text { if } \kappa _{kd}=0, \end{array} \right. }$$
$$ {\lambda _{kd} = \left\{ \begin{array}{ll} 1.03\lambda _{kd},\text { if } \varepsilon _{kd}>0, \\ 0.97\lambda _{kd},\text { if } \varepsilon _{kd}=0. \end{array} \right. }$$

In the intensification procedure (line 9), we return to the best found solution and increase all randomization parameters \(q_1, \dots , q_4\) and the value of penalties \(\lambda _{kd}\) again to check the most promising area more carefully. If we discover a new best solution, we return to the previous values of these parameters. In the shaking procedure (line 11), we do the same for \(q_1, \dots , q_4\) and \(\lambda _{kd}\) to start the search in a new area of the feasible domain. Finally, we apply deterministic local descent (lines 12, 13) by \(N_\text {swap}\) and \(\tilde{N}_\text {swap}\) neighborhoods (\(q_3=q_4=1\)) and get local optima by 2-opt neighborhood for each pair (kd).

5 Computational Results

The described VNS algorithm was implemented in C++ with MSVC++ 14.16 compiler using standard release options. All experiments were conducted on a computer with an AMD Ryzen 5 2600 3.4 GHz processor and 16 GB of RAM running under Microsoft Windows 10 (64-bit).

The data set used to test the algorithm is proposed by a Russian logistics company with 892 clients from Orenburg region. Among them, one third are clients of frequency 1, and slightly more than half are clients of frequency 2. There are three depots located at a distance of 250 km from each other. We randomly select a part of the large instance to get small ones. For this purpose, we varied certain parameters used during client selection. These parameters include a number necessary for localization of the depots (radius), selection probabilities different for different depots, and a number specifying the random shift of the vehicles relative to their initial position. For the client selection and further in the algorithm, a 32-bit Mersenne Twister pseudo-random number generator was used. As a result, we generated 10 various instances with 600–700 clients. This range of the number of clients allows obtaining diverse large instances with the same number of vehicles in each depot. Besides, this range is close to the actual number of clients served by the company in one region. We assigned two vehicles in each depot for these test instances.

Also, to compare the algorithm with an optimization solver, data set with 672 clients from Orenburg region was used. Slightly less than three-quarters of these clients have a frequency of 1, while the numbers of clients of frequency 2 and 4 are approximately equal. There are the same three depots for this set. Using the same method as for the larger data set, we generated instances with 320–350 and 130–150 clients. We assigned one vehicle in each depot for the former instances and one vehicle in a single depot for the latter ones.

Client attributes include name, GPS coordinates (latitude and longitude), the frequency of visits, service time, and demand. The shift length is 8 h, including 40 min for a break. The time for a break is not fixed in drivers’ schedules, and they can spend it at any free from client service time of the working day. The problem we are investigating does not include time windows. Hence, we can just adjust the shift length to \(T=7\) h 20 min.

Vehicles can leave the depot starting at 8:30, but must arrive at the first client no earlier than 9:00. The last client must be serviced before 17:00, but the vehicle must return to the depot no later than 18:00. To include these additional requirements into the model, we modify the matrix \((t_{ij})\) by the following rule:

$$ t_{ij} = \left\{ \begin{array}{ll} t_{ij},\text { if } i, j \in I ,\\ \max \{0, t_{ij}-30'\}, \text { if } i\in M, \ \ j \in I , \\ \max \{0, t_{ij}-60'\}, \text { if } i\in I, \ \ j \in M . \\ \end{array} \right. $$

The planning horizon is 20 days. The speed of each vehicle is 50 km/h. For Kernighan–Lin neighborhoods we generate \(l=25\) neighboring solutions. The threshold R for the swap neighborhoods is defined as 20 km. Local search by the all basic neighborhoods of the VNS algorithm (line 5) is set as 1300 iterations. Results are obtained by running the VNS in 10 min 10 times per instance.

Figure 5 illustrates the typical behavior of the method. The initial value of the objective function \(L(x,\gamma ,\lambda )\) is huge with excess capacity \( \kappa =\sum _{kd}\kappa _{kd}\) and total over-hours \(\varepsilon = \sum _{kd} \varepsilon _{kd}\). And after 2000 iterations we found a solution with \( \kappa =\sum _{kd}\kappa _{kd}=0\). Note that the total over-hours and overload decrease as iterations grow. We denoted by \(\times \) new record values of the objective function for a feasible solution. We see that the value decreases for a feasible solution too.

Fig. 5.
figure 5

Easy instance with three vehicles in each depot

In Tables 1, 2, 3 and 4, we show computational results for these 10 small instances. The purpose is to study the impact of the capacity constraint on the solution. Each instance was run 10 times and the minimal, average, and maximum values for these runs are presented in the tables. To compare the obtained solutions the objective function (13) with penalties \(\gamma _{kd} = 50, \lambda _{kd} = 40\) was used.

Table 1. Capacity \(v_k\in [800,1000]\)

At first (Tables 1, 2 and 3), we used the model which does not allow violation of the capacity constraint at any step of the algorithm (including shakes). Table 1 show results for the case when the vehicles have enough capacity for all clients they may need to serve. By doing this, we were able to get an average daily load for the vehicles from different depots. For most of the instances, this number turned out to be 400–500 kg. From Tables 2 and 3 we see that the results become worse with the tightening of the capacity. Also, Table 3 shows that the search space can become so narrow that for some vehicles there will be no other options but to serve clients intended for another depot (instances 2–4).

Table 2. Capacity \(v_k\in [500,600]\)
Table 3. Capacity \(v_k\in [450, 500]\)

Next, the relaxed formulation of the problem with capacity penalties was used (Table 4). This allowed us to find much better solutions in most of the instances. It confirms the need for the penalties.

It should be taken into account that despite the presence of penalties in some solutions, in most of the instances they are small enough to be neglected.

Table 4. Capacity \( v_k\in [ 450,500]\) with the penalties

In order to study the efficiency of the algorithm, we compared it with the results obtained by metaheuristic solver LocalSolver. We chose it instead of such classical MILP solvers as CPLEX and Gurobi, since the latter cannot find the exact solution in a reasonable time for even quite small instances of the problem. The results are presented in Tables 5, 6, 7 and 8.

Since LocalSolver did not allow us to obtain satisfactory solutions to the problem with all the hard constraints, we decided to use the minimized objective function (16) for it. The main challenges for the solver were caused by the constraints (5)–(7) of the problem. We include constraints (6)–(7) into the objective function (16) with penalty \(\psi \), while constraints (5) remained hard. Variable \(\zeta \) in (16) denotes the total number of constraints (6)–(7) violations. We used penalties \(\gamma _{kd} = 100, \lambda _{kd} = 200, \psi = 10^5\) for this objective function. The constant \(\phi \) necessary for determining the variable \(\chi \) was set to \(3\cdot 10^5\) for Table 6 and \(8\cdot 10^4\) for Table 8. To provide non-deterministic results for LocalSolver runs, we added to the model one excessive constraint repeating already contained one.

$$ {\chi = \left\{ \begin{array}{ll} 1000,{ L(x,\gamma ,\lambda ) > \phi ,}\\ 1,\text { otherwise.} \end{array} \right. } $$
$$L_{\text {s}}(x,\gamma ,\lambda ,\psi )=\min \left( \sum _{d\in {D}}\sum _{k\in {K}}\sum _{i\in {V}}\sum _{j\in {V}} d_{ij}x_{ijkd}\right. $$
$$\begin{aligned} \left. + \sum _{d\in {D}}\sum _{k\in {K}} (\gamma _{kd} \kappa _{kd}+ \lambda _{kd} \varepsilon _{kd})\right) \chi + \psi \zeta \end{aligned}$$
(16)
Table 5. The results for instances with 320–350 clients for VNS algorithm
Table 6. The results for instances with 320–350 clients for LocalSolver
Table 7. The results for instances with 130–150 clients for VNS algorithm
Table 8. The results for instances with 130–150 clients for LocalSolver

In Tables 5, 6, 7 and 8, we show computational results obtained by our VNS algorithm and by LocalSolver. There were 10 runs for each instance. For Tables 5 and 8, computational time was set to 5 min, and for Tables 6 and 7, it was set to 10 and 2 min, respectively. To compare the obtained solutions, penalties \(\lambda _{kd} = 40\) for Tables 5 and 7 and \(\gamma _{kd} = 25, \lambda _{kd} = 20, \psi = 300\) for Tables 6 and 8 were used. All the solutions obtained for the former tables have \(\kappa = 0\).

It is clearly visible that the results obtained by our algorithm are better than those of LocalSolver in all instances. It is also worth noting the decrease in the difference between the maximum and minimum objective values of the results with a decrease in the dimension of the problem.

The large instance with 892 clients can be effectively solved using developed VNS algorithm as well. However, to achieve an acceptable value of the variance for the results of applying the algorithm for an instance with such a number of clients, more computational time is required. Although smaller instances are usually examined in the literature, large-scale ones are also of interest to study, as they are often applicable in the real world.

6 Conclusion

In this paper, we have studied a new consistent capacitated vehicle routing problem and designed the VNS algorithm for real-world instances. This algorithm is able to solve large-scale instances and reduce the total traveling distance.

Companies today are increasingly focused on customer satisfaction to achieve a competitive advantage. One of the components of these customer-first strategies is service consistency [12, 23]. Thus, it is important to study problems with consistency requirements addressing real-world challenges. In our version of ConVRP, it is required that the same driver visit the same clients on the same day of the week according to their frequency of visits. We presented our program to the logistics company, and they were satisfied with it.

One of the new research directions is the control of time for client visits. As we have mentioned before, a logistics company can get an additional competitive advantage if each client is visited at about the same time. Such type of constraints can be incorporated into the model to improve the service of clients. Sure, new constraints will increase the total traveling distance and may require additional vehicles. The optimal balance here is an important line for research as well.