{'fraction_non_alphanumeric': 0.03417380889421207, 'fraction_numerical': 0.013299320256964644, 'mean_word_length': 4.599686438463548, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 13, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Variable Neighborhood Search for the Two-Echelon Electric Vehicle Routing Problem with Time Windows

: Increasing environmental concerns and legal regulations have led to the development of sustainable technologies and systems in logistics, as in many ﬁelds. The adoption of multi-echelon distribution networks and the use of environmentally friendly vehicles in freight distribution have become major concepts for reducing the negative impact of urban transportation activities. In this line, the present paper proposes a two-echelon electric vehicle routing problem. In the ﬁrst echelon of the distribution network, products are transported from central warehouses to satellites located in the surroundings of cities. This is achieved by means of large conventional trucks. Subsequently, relatively smaller-sized electric vehicles distribute these products from the satellites to demand points/customers located in the cities. The proposed problem also takes into account the limited driving range of electric vehicles that need to be recharged at charging stations when necessary. In addition, the proposed problem considers time window constraints for the delivery of products to customers. A mixed-integer linear programming formulation is developed and small-sized instances are solved using CPLEX. Furthermore, we propose a constructive heuristic based on a modiﬁed Clarke and Wright savings heuristic. The solutions of this heuristic serve as initial solutions for a variable neighborhood search metaheuristic. The numerical results show that the variable neighborhood search matches CPLEX in the context of small problems. Moreover, it consistently outperforms CPLEX with the growing size and difﬁculty of problem instances.


Introduction
After the industrial revolution, the increasing consumption of fossil fuels caused numerous environmental and socioeconomic problems. In this context, it is considered a prime objective to replace fossil fuel technologies in many sectors with more sustainable technologies in order to reduce the amount of carbon dioxide released into the atmosphere. Increasing environmental and economic concerns and the decisions taken by states to reduce our dependence on fossil fuels have led to an acceleration of research and development activities in this area. This also holds for the logistics sector, where new regulations are introduced in order to reduce environmental problems. One of the most recent regulations in this field is the decision approved by the European Parliament on 18 February 2019, stating that the emissions of new trucks will need to be 30% lower in 2030 compared to 2019 emissions data [1].
In this context, sustainable city logistics emerged as a concept for reducing the negative impact of urban transportation activities on society, the environment and the economy. Sustainable city logistics is characterized by using environmentally friendly vehicles for freight distribution and designing multi-tier transportation structures to eliminate problems caused by freight vehicles operating in cities. A growing number of logistics and e-commerce companies make use of environmentally friendly electric vehicles for distribution in urban areas due to their low noise and zero exhaust emissions; see, for example, [2]. Despite these advantages, the en-route charging necessity of electric vehicles due to a limited driving range produces new difficulties for the planning and managing of logistics activities. In fact, the ability to derive optimal charging plans for electric vehicles taking into account the total time requirements and route distances is essential.
In this study, the issue of sustainable city logistics is addressed by means of a new variant of the classical vehicle routing problem: the two-echelon electric vehicle routing problem with time windows (2E-EVRP-TW). In two-echelon distribution networks, large trucks transport products from central warehouses to satellites in the surrounding areas of cities. Subsequently, smaller vehicles distribute goods from these satellites to customers located in the cities. Electric vehicles are preferably used in the second echelon of such a distribution network, as they are less noisy and have no exhaust emissions. In other words, two-echelon distribution networks are advantageous for preventing large trucks entering the cities and, in this way, reducing urban traffic jams, noise, and pollution. In addition to these features, our 2E-EVRP-TW problem also considers time window (TW) constraints for the delivery of goods to customers. Note that time windows can be used to control the visiting times of the customers, which might be regulated by local jurisdictions, but also by the customers themselves.

Our Contribution
First, we define the 2E-EVRP-TW problem by means of a three-index node-based mixed-integer linear programming (MILP) model. Any general-purpose MILP solver, such as CPLEX or Gurobi, may be used to solve this model. However, due to the multi-tier structure of the distribution network, the limited driving range of electric vehicles, and the time window constraints, the 2E-EVRP-TW problem is rather complex. In fact, our computational experiments show that CPLEX is only able to solve small-sized problems to optimality. Therefore, we also developed a variable neighborhood search (VNS) approach to solve the problem. In addition, we developed an initial solution generation method based on Clarke and Wright's savings algorithm [3], considering 2E-EVRP-TW assumptions and characteristics. The VNS approach makes use of this heuristic to obtain an initial solution.
VNS provides a powerful search performance by systematically changing neighborhood structures (shaking) to avoid getting stuck in local optima and by intensifying the search in the vicinity of the incumbent solution by applying local search. In addition to the classical shaking and local search operators, we also utilize large neighborhood search (LNS) operators known as "destroy and repair", resp. "removal and insertion", to enhance the performance of VNS. In this context, note that, since (1) the problem dimension of the first echelon is much smaller than that of the second echelon and (2) the first echelon does not include any constraint, it can easily be solved using a savings heuristic. Therefore, whenever the solution for the second echelon changes, the first echelon tours are generated again by utilizing our Clarke and Wright savings heuristic.
Finally, a last contribution concerns the generation of new problem-specific benchmark sets. This was necessary due to the lack of an available benchmark set for the 2E-EVRP-TW problem.

Organization of the Paper
The rest of this paper is organized as follows: Section 2 presents the related literature. A formal description of the new 2E-EVRP-TW problem, together with a mixed-integer linear programming model, is provided in Section 3. The proposed solution approach is described in Section 4. Section 5 reports computational experiments, and finally, Section 6 outlines our conclusions and future research directions.

Related Literature
Recent decades have witnessed considerable research efforts concerning the vehicle routing problem and its variations. Researchers and practitioners have put great effort into modeling and designing efficient routing strategies considering requirements and conditions that arise in real-life scenarios. Various extensions of vehicle routing problems as well as recent advances and challenges are defined and presented in [4,5]. Moreover, a broad taxonomy and a classification of publications available in the VRP literature are provided in [6]. Apart from introducing new problem variations, researchers also focused on developing solution methodologies to solve already existing problem extensions efficiently. A taxonomic review of metaheuristic solution approaches for vehicle routing problems and their variations is presented in [7]. The problem we address in this study combines two main research lines: the one on electric vehicle routing problems (EVRPs) and the one on two-echelon vehicle routing problems (2E-VRPs). Therefore, before presenting works related to our 2E-EVRP-TW problem, we will first summarize the literature on the EVRP and on the 2E-VRP.
Driven by environmental considerations and a growing interest in the use of alternative fuel in logistics, the related literature has focused on developing optimal routing plans considering the limited driving range and en-route charging necessity of electric vehicles. Respective publications either call the tackled problem an EVRP or, more generally, a green vehicle routing problem. A systematic review of green vehicle routing problems is presented in [8,9]. The study presented in [10] is regarded as the pioneering work that introduced route optimization of rechargeable vehicles to the literature. After this preliminary work, several researchers presented variations of electric vehicle routing problems together with solution methodologies. Erdogan et al. [11] proposed a mixedinteger programming model as well as two heuristic solution techniques for the generation of routing plans for alternative fueling vehicles. Schneider et al. [12] extended the EVRP by including time window constraints into the model. Moreover, they proposed a metaheuristic algorithm based on VNS and tabu search (TS). Aiming to develop more realistic models and applications, Felipe et al. [13] and Keskin and Çatay [14] analyzed and utilized multiple charging technologies with regard to different charging speeds and the partial recharging of electric vehicles. Moreover, Montoya et al. [15] introduced a new model that takes into account the non-linear charging time of batteries. They reported that the time spent for charging batteries is non-linear, and ignoring this fact may cause the generation of infeasible and/or costly solutions. Sadati and Çatay [16] recently introduced a multi-depot green vehicle routing problem and developed a mixed-integer linear programming model. They proposed a solution method based on VNS and TS and reported on the computational properties of the algorithm. Duman et al. [17] proposed exact and heuristic algorithms based on branch-and-price-and-cut and on column generation to solve the EVRP with TWs.
After Crainic et al. [18] introduced the concept of two echelons in the context of the 2E-VRP as a new concept to the literature, this line of research developed into one of the most popular ones in the context of urban freight transportation [19]. The idea of developing sustainable cities and transportation systems further increases the interest in this field of research. Perboli et al. [20] proposed a mathematical model and math-based heuristics for the 2E-VRP. Various researchers proposed exact solution approaches such as branch-and-cut (see [21,22]) and branch-and-price methods (see [23,24]) as well as dynamic programming [25] to solve various extensions of the 2E-VRP. However, with growing instance size and problem complexity, researchers focused on approximate techniques to solve these problems. Grangier et al. [26] proposed a heuristic based on large neighborhood search (LNS) for the 2E-VRP with time window and satellite synchronization constraints. Wang et al. [27] developed a matheuristic based on VNS and integer programming. Moreover, Belgin et al. [28] formulated the 2E-VRP with simultaneous pickup and delivery constraints as a two-index mixed-integer programming model and developed a hybrid metaheuristic combining variable neighborhood descent and local search.
The related literature on two-echelon electric vehicle routing problems is still rather scarce. The study by Jie et al. [29] was one of the first works proposing a 2E-EVRP considering the option of battery-swapping stations (BSS). More specifically, instead of charging empty batteries, the authors consider the possibility of swapping the battery of an electric vehicle with a full one when needed. A hybrid algorithm combines column generation and LNS to solve the proposed problem. At first, the battery-swapping scenario may seem helpful to overcome deficiencies due to long battery charging times. Nevertheless, the necessity of each BSS to maintain a certain number of spare batteries poses numerous problems related to the environment, safety, logistics, and storage. Therefore, the EVRP literature mainly focuses on the scenario of charging batteries instead of swapping them. Another work in this line is the one by Breunig et al. [30] in which the authors extended their previous work (see [31]) with the idea of using electric vehicles in the second echelon of the distribution network. They proposed a metaheuristic approach based on LNS and an exact mathematical programming algorithm that utilizes decomposition and pricing techniques. Furthermore, Cao et al. [32] studied the design of a two-echelon reverse logistics network for the collection of recyclable waste considering a mixed fleet of electric vehicles and conventional vehicles. Instead of an integrated mathematical model the authors present two separate models, one for each echelon. The hybrid genetic algorithm is tested on a single-instance set. Wu and Zhang [33] developed a branch and price algorithm to solve a 2E-EVRP. They tested the proposed solution approach on small and medium-sized instances containing up to 20 customers and two charging stations. The performance comparison shows that the proposed algorithm can provide optimal results faster than CPLEX. Recently, Wang and Zhou [34] introduced a 2E-EVRP with time windows and battery-swapping stations. They developed a MILP model that minimizes transportation, handling, and fixed costs for the vehicles used in the first and second echelon, in addition to battery-swapping costs. However, the time spent on battery swapping is not considered. A VNS algorithm was proposed to solve large sized problem instances.

Problem Description and Mathematical Model
Given is a directed graph G = (N, A) in which the set of nodes (N) is composed of the following four subsets: the set of central warehouses (N D ), the set of satellites (N S ), the set of charging stations (N R ), and the set of customers (N C ). The set of arcs (A) includes (1) arcs that connect central warehouses and satellites A1 = {(i, j)|i = j and i, j ∈ N D ∪ N S } and (2) arcs that connect satellites, customers and charging stations A2 = {(l, m)|l = m and l, m ∈ N S ∪ N R ∪ N C }. In other words, A1 contains the arcs of the first echelon, and A2 contains the arcs of the second echelon. Traveling along an arc (i, j ∈ A1), (l, m ∈ A2), has a cost/distance of d1 ij , d2 lm . Each customer i ∈ N C has a demand D2 i and a time window that indicates the earliest possible visiting time twe i and the latest possible visiting time twl i . Two different fleets of vehicles, each one homogeneous in itself, serve in the first and second echelons in order to meet customer demands. A fleet of large trucks V1 with internal combustion engines are located in the central warehouse and carry products from the central warehouses to the satellites, while a fleet of electric vehicles V2 are present at the satellites and distribute products to customers (demand points). In the first echelon, a truck k ∈ V1 starts its tour from a central warehouse, visits one or more satellites, and returns to the central warehouse from which the tour started. The total amount of deliveries may not exceed the load capacity Q1 k of vehicle k. In the second echelon, an electric vehicle e ∈ V2 starts its tour from a satellite, visits one or more customers and charging stations if necessary, and returns to the satellite from which the tour started. The total amount of deliveries cannot exceed the load capacity Q2 e of electric vehicle e. A customer can only be served by one electric vehicle. An electric vehicle starts its tour with a fully charged battery (battery level BC e ) and the vehicle's battery is consumed in proportion to the distance traveled. If a charging station is visited, the electric vehicle's battery is fully charged up to level BC e with a constant charging speed.
Note that an electric vehicle may need to visit a charging station multiple times. Therefore, set N R includes charging stations as well as copies of each charging station in order to allow multiple visits to any charging station. The idea of using such dummy vertices was introduced for the first time in [35] in order to permit multiple visits to intermediate satellites. Moreover, this approach was adopted in [11] for a green vehicle routing problem. Determining the number of copies of each charging station (ψ) is, however, not a trivial task. An insufficient number of copies may prevent finding an optimal solution due to not allowing a sufficient number of multiple visits of the same charging station. On the other hand, an unnecessarily large number of copies of each charging station would increase the model size, resulting in longer running times of the MILP solvers. As a result of preliminary experiments on various instance sets, we set ψ to 3.
We developed a three-index node-based integer programming model for 2E-EVRP-TW. Including the vehicles as a third index ensures that the model may be used for instances that contain heterogeneous fleets with different vehicle characteristics. In the following, we first introduce the notations, sets and problem data used by the MILP model. Subsequently, the model is outlined in terms of the decision variables, the objective function and the constraints.

Notations and Sets
n d = number of central warehouses n s = number of satellites n cs = number of charging stations ψ = number of copies of each charging stations n c = number of customers nv 1 = number of available vehicles in the first echelon nv 2 = number of available electric vehicles N D = set of central warehouses (node indices: 1, . . . , n d ) N S = set of satellites (node indices: n d + 1, . . . , n d + n s ) N R = set of charging stations and copies (node indices: n d + n s + 1, . . . , n d + n s + n cs * ψ) N C = set of customers (node indices: n d + n s + n cs * ψ + 1, . . . , n d + n s + n cs + n c ) N DS = set of central warehouses and satellites (node indices: 1, . . . , n d + n s ) N RC = set of charging stations and customers (node indices: n d + n s + 1, . . . , n d + n s + n cs * ψ + n c ) N SRC = set of satellites,charging stations and customers (node indices: n d + 1, . . . , n d + n s + n cs * ψ + n c ) N = set of central warehouses, satellites, charging stations and customers (node indices: 1, . . . , n d + n s + n cs * ψ + n c ) V1 = set of large vehicles serving in the first echelon (|V1| = nv 1 ) V2 = set of electric vehicles |V2| = nv 2 Problem data d1 ij = distance between node i and node j, (i, j ∈ N DS ) d2 lm = distance between node l and node m, (l, m ∈ N SRC ) Q1 k = loading capacity of large vehicle k ∈ V1 Q2 e = loading capacity of electric vehicle e ∈ V2 M = a big number BC e = battery capacity of electric vehicle e ∈ V2 g e = charging rate of electric vehicle e ∈ V2 D2 i = demand of customer i, (∀i ∈ N C ) s i = service time of customer i, (∀i ∈ N C ) twe i = earliest visiting time of customer i, (∀i ∈ N C ) twl i = latest visiting time of customer i, (∀i ∈ N C )

Decision variables
x kij = 1 if vehicle k visits node j after node i in the first echelon 0 otherwise ∀k ∈ V1, ∀i, j ∈ N DS y elm = 1 if vehicle e visits node m after node l in the second echelon Amount of product in vehicle k traveling from node i to node j (first echelon) U2 elm ∈ {0, . . . , Q2 e } ∀l, m ∈ N SRC , ∀e ∈ V2 Amount of product in vehicle e traveling from node l to node m (second echelon) Battery level of electric vehicle e at arrival to node l BSCd le ∈ [0, BC e ] ∀l ∈ N SRC , ∀e ∈ V2 Battery level of electric vehicle e when departing from node l D1 j ∈ {0, . . . , Visiting time of node i by vehicle k (first echelon) w2 el ∈ [twe l , twl l ] ∀l ∈ N SRC , ∀e ∈ V2 Visiting time of node l by vehicle e (second echelon)

MILP model
The objective function (1) minimizes the total distance traveled by all utilized vehicles in both echelons. Constraint (2) guarantees that each satellite will be visited by a truck. Constraints (3) and (12) ensure the balance of flow for the satellites and customers, respectively. Constraints (4) and (5) ensure that vehicles in the first echelon are used only if needed. Constraint (6) does not allow direct transportation between central warehouses if there is more than one warehouse. Constraints (7) and (20) guarantee that the demand of each satellite and customer is met by the vehicles serving in the relevant echelon, respectively. Constraints (8) and (21) ensure that no product remains in the vehicle when returning to the central warehouse in the first echelon and to the satellite in the second echelon, respectively. Constraints (9) and (22) indicate that the vehicle capacity cannot be violated. Constraint (10) determines each satellite's demand to be the total demand of those customers served by the relevant satellite. Constraint (11) guarantees that each customer is visited only once. Constraints (13) and (14) ensure that vehicles in the second echelon are only used when they are needed. Constraint (15) ensures that each customer is served by only one satellite. Constraints (16), (17), and (19) ensure that each electric vehicle completes its tour at the same satellite from which it started the tour. Constraint (18) guarantees that each electric vehicle can provide service through only one satellite. Constraints (23) and (24) prevent returning to the node from which a vehicle just departed. Constraints (25)-(32) are battery state constraints. Constraint (33) states that the load of a vehicle is the same when arriving and departing from a charging station. Constraints (34)-(39) calculate arrival and departure times considering service and battery charging times. Moreover, constraints (40)-(43) restrict the visiting time of each customer with respect to the time windows. Finally, constraint (44) defines variable domains.
The classical VRP is NP-Hard [36]. The multi-tier distribution structure (two echelons) and additional limitations such as the driving range of electric vehicles and customers' time windows further increase the complexity. As the computation time required to solve such complex problems to optimality increases dramatically with a growing instance size, most approaches from the related literature for similar problems are approximate techniques, especially in the context of large-sized problem instances. In this study, we propose an approach based on VNS to solve the 2E-EVRP-TW. Algorithm 2 presents the general structure of the proposed algorithm. It starts with the application of a modified version of the Clarke and Wright Savings Algorithm to obtain an initial solution quickly and efficiently. Subsequently, shaking and local search procedures are applied to improve the initial solution. However, before describing the proposed algorithm, we first explain how a solution S is represented, and subsequently we outline an extended objective function used to handle infeasible solutions.

Solution Approach
In the following, we first provide the representation of solutions and the description of an extended objective function for dealing with infeasible solutions. Then, an extended Clarke and Wright algorithm is provided, followed by the description of the VNS procedure.

Solution Representation and Extended Objective Function
In our implementation, a solution S is represented by two sets of routes: R1 and R2. Each route τ1 ∈ R1 starts from a central warehouse, visits one or more satellites from N S , and returns to the same central warehouse. Each route τ2 ∈ R2 starts from a satellite s ∈ N S , visits a sequence of locations/nodes v ∈ N RC , and returns to the same satellite. Figure 1 shows an exemplary solution for a 2E-EVRP-TW instance with a single central warehouse, two satellites, three charging stations and five customers. The solution contains one route in the first echelon (τ1 1 ) and two routes in the second echelon (τ2 1 and τ2 2 ).
Node Indexes: The usefulness of allowing the algorithm to visit unfeasible solutions during the search process has already been recognized in the metaheuristics community, especially in the field of evolutionary computation [37]. In this work, we do this in a similar way as in [12] in the context of the EVRP. In particular, the extended objective function that evaluates both feasible and unfeasible solutions by means of penalty values for capacity, battery, and time windows violations is defined as follows: Here, f (S) refers to the objective function of the 2E-EVRP-TW problem, that is, the sum of the distances traveled by all utilized vehicles from the first and the second echelon. Furthermore, P cap (S), P bat (S) and P tw (S) denote the capacity, battery and time windows violations in solution S. In this context, the function for calculating the capacity violations of a solution S with m routes in the first echelon and n routes in the second echelon is defined as follows: In words, if the total demand of the satellites (resp. the customers) on a route exceeds the vehicle capacity, the capacity violation of the route is determined as the difference between the vehicle capacity and the total demand of the route. Otherwise, it is set to zero. Note that, in an abuse of notation, j ∈ τ1 i refers to a satellite j visited by route τ1 i and l ∈ τ2 k refers to a customer l visited by route τ2 k .
Next, the total battery violation of a solution S, P bat (S), is calculated using Equations (46) and (47): That is, this function sums (for all second echelon routes τ2 k ) the battery level violations of the electric vehicles at the arrival to all nodes l ∈ τ2 k . Hereby, the term node refers to customers and charging stations. Finally, similar to the approach used to calculate P bat , P tw is calculated using Equations (48) and (49): These three penalty terms are added as a weighted sum to the original objective function value (see Equation (46)). The corresponding three weights are denoted by ω c , ω b and ω tw . At the start of the VNS algorithm, all three weights are set to an initial value p init . Then, they are dynamically updated between p min and p max . More specifically, if any of three terms (capacity, battery, and time windows violations) are greater than zero for p iter successive iterations, the respective penalty weight is increased by p + > 0. On the other hand, if the respective solution is feasible in terms of any of three constraint violation types, the respective weight is decreased by means of a division by p − > 1.

Initial Solution Construction
The VRP literature offers numerous heuristic approaches in order to construct initial solutions to different VRP variants. The Clarke and Wright (C&W) savings algorithm is one of the most commonly used methods because of its simplicity, performance, and ease of adaptation to different problem variants. This study proposes a savings-based initial solution construction algorithm that considers the multi-tier transportation structure and additional constraints (capacity, battery, and time windows) of the 2E-EVRP-TW. Algorithm 1 provides a high-level pseudo-code of this procedure.
First, each customer is assigned to the nearest satellite. After this assignment, set N s C ⊆ N C contains all customers assigned to satellite s, for all s ∈ N S . Note that, with this assignment, an indirect time window arises for each satellite based on the customer's time windows. Assume, for example, that goods are transported from central warehouse 0 to satellite s, and then from satellite s to customers i and j, that is, i, j ∈ N s C . As illustrated in Figure 2, the electric vehicle must depart from satellite s before a certain time in order to be able to visit customers within their time windows. Therefore, the large truck in the first echelon must deliver goods to satellite s no later than twl s := min{twl v − d2 sv | v ∈ N s C } such that the electric vehicle is able to visit customer i and j before twl i and twl j , respectively. After calculating time windows for each satellite, first, the routes for the large vehicles in the first echelon and, second, the routes for the electric vehicles in the second echelon are constructed using the savings heuristic. In the following, we explain the steps for constructing the routes for the electric vehicles in the second echelon. In particular, for each satellite s ∈ N S the following steps are applied: However, note that not all of these single-customer tours are necessarily battery feasible. If this occurs, a charging station with the minimum insertion cost is inserted into the route. To achieve this, first, for each charging station r ∈ N R the cost C insert (r) of inserting r between satellite s and customer i is calculated as C insert (r) = d2 sr + d2 ri − d2 si . Then, a charging station r ∈ N R such that C insert (r ) ≤ C insert (r) for all r ∈ N R is inserted into the infeasible route. Only one charging station is allowed to be inserted to fix infeasibility. In the unique case that the battery infeasibility cannot be eliminated despite charging station insertion, the relevant tour is removed, and the customer in the tour is added to the initially empty list of unvisited customers L u .

2.
Subsequently, a savings list formed by all possible pairs of nodes (customers and charging stations) together with their respective savings values is generated. A pair of nodes (i, j ∈ N RC | i = j) must fulfill the following conditions to be included in the savings list: (1) node i and node j must belong to different routes, and (2) both i and j must be directly connected to the satellite in the route to which they belong. With regard to the calculation of the savings value s2 ij for two nodes i and j, the literature offers various enhancements and extensions. In this study, we have utilized the formulation introduced by [38]: Note that, according to this formula, both the distances between nodes as well as the customer demands have an influence on the route construction process. More precisely, the first four terms of Equation (50) are based on the distances between nodes, while the last term ( ) takes into account the customer demands. Hereby, D2 i and D2 j refer to the demands of customers i and j, while D indicates the average demand of customers in N s C \ L u . As a result, tours that include customers with higher demands are prioritized during tour merging operations and vehicle capacities are used more effectively. Finally, note that the so-called route shape parameter λ adjusts the selection priority based on the distance between customers i and j [39], while µ is used to scale the asymmetry between customers i and j [40]. Parameter γ weights the demand information. Note that well-working values for these parameters are obtained by parameter tuning which is presented in Section 5.2. Finally, the savings list is sorted according to non-increasing savings values.

3.
At each iteration, the two routes that contain a pair of nodes (i, j) with the highest savings value s2 ij are selected from R (e.g., τ2 1 , τ2 2 ). Then, the chosen routes are merged by connecting nodes i and j. All of the merging scenarios are graphically illustrated in Figure 3. Based on the way in which nodes i and j are connected to the respective satellite, one or both of the routes must be reversed in order to be able to connect nodes i and j. In this context, note that the reversed version of a tour τ2 1 is denoted by rev(τ2 1 ). If the merged route is infeasible in terms of vehicle capacity or time windows, the route is eliminated, and merging continues considering the pair of nodes with the next-highest savings value. If the merged route is battery infeasible, a charging station r with a lowest insertion cost is inserted between node i and j (e.g., <s -. . . -i -r -j -. . . -s>). In these cases in which the route is still infeasible after charging station insertion, it is eliminated, and merging continues with the next pair of customers from the savings list. This procedure is repeated while the savings list is not empty. After merging, some of the charging stations that were previously added to the routes may become redundant. These charging stations are removed from the merged route.

4.
Update the savings list as described in step 2 and repeat step 3 until no further pairs of tours can be merged.

5.
Finally, the customers in L u (the list of unvisited customers) are inserted into the constructed tours using the greedy insertion operator, which is described in detail in Section 4.3.3.
Case 1: Case 2: Case 3: Case 4: Create back-and-forth tours for each customer i ∈ N s C (s − i − s) 6: if the created tour is infeasible in terms of the battery constraints then Generate the savings list and sort it in descending order based on the savings values 13: while savings list is not empty do 14: Merge the two tours with the greatest savings value 15: if vehicle capacity or time window constraints are violated then 16: Discard the tour and remove the corresponding pair of customers from the savings list 17: else 18: if the merged tour is infeasible in terms of the battery constraint then 19: Insert a charging station with a minimum insertion cost 20: if the tour is still infeasible then 21: Discard the tour and remove the pair of customers from the savings list 22: else 23: Accept the merged tour and update the saving list 24: end if 25: else 26: Accept the merged tour and update the saving list 27: end if 28: end if 29: end while 30: Insert all customers from L u into the constructed tours using the greedy customer insertion operator (see Section 4.3.3) 31: end for Finally, note that the same procedure is applied to construct routes for the large vehicles in the first echelon. In this case, all aspects related to batteries and charing stations are removed from the heuristic procedure.

Variable Neighborhood Search for the 2E-EVRP-TW
The initial solution constructed by our version of the C&W savings heuristic from above is used as input for a variable neighborhood search (VNS) approach outlined in the following. VNS was proposed by [41] to solve complex combinatorial optimization problems. Unlike other algorithms based on local search, VNS uses multiple neighborhood structures and makes use of them during the search based on a set of pre-defined rules. This dynamic search mechanism allows the algorithm to intensify the search in the vicinity of good solutions, but also to diversify the search in order to avoid getting stuck in local optima. In particular, intensification is achieved by applying a local search procedure in order to reach locally optimal solutions, while shaking operators are used in order to diversify the search process and to explore different neighborhoods. For these reasons, the choice of appropriate neighborhood structures/operators for local search and for shaking is crucial. So far, VNS has shown state-of-the-art performance for a wide range of optimization problems, including the facility layout problem [42], scheduling problems [43][44][45], portfolio optimization [46,47], assembly and disassembly line balancing [48] and various routing problems [49][50][51][52].
Algorithm 2 presents a pseudo-code of our implementation of VNS for the 2E-EVRP-TW. The proposed algorithm starts by taking an initial solution S init as input. Then, the neighborhood structures used for shaking N shake k , (k = 1, . . . , k max ) and the ones used for local search N local h , (h = 1, . . . , h max ) are determined. These neighborhood structures will be explained in detail in following sections. However, note that, in addition to rather standard inter-route and intra-route operators, our VNS also makes use of so-called destroyand-repair operators for the shaking step. Operators such as these ones were mostly introduced in the context of approaches based on large neighborhood search (and very large neighborhood search) algorithms and have shown to be highly useful for exploring large search spaces [53]. In particular, the reconstruction of a partially destroyed solution using various reinsertion operators has the potential to produce solutions that may have been difficult to reach otherwise. Concerning the specific case of VRP problems, removing rather large components of a solution and reinserting them into other positions of the solution may help reduce the number of routes and the number of vehicles, respectively.
After obtaining the initial solution S init , both the current solution S cur and the bestso-far solution S bs f are initialized to S init . At each main iteration of VNS, the shaking neighborhoods are randomly ordered. This order is then used until the current neighborhood utilized for shaking (indicated by k) is the k max -th neighborhood. Next, a random solution S shake is chosen from the current shaking neighborhood k. In case this neighborhood is a removal/destroy operator, the partially destroyed solution must subsequently be repaired with an insertion operator; see lines 15-17 of Algorithm 2. After re-constructing the first echelon tours of S shake using our C&W savings algorithm (line 18), local search is applied to S shake . For this purpose we applied the variable neighborhood descent (VND) method shown in Algorithm 3. In the VND phase, a set of local search operators are applied to S shake in a predefined and fixed order. In this context, note that after each application of a shaking and/or a local search operator, the first echelon routes must be reconstructed since satellite demands may have changed.
In a basic VNS, only improved solutions are accepted. However, in the context of problems with many unfeasible solutions, this may cause the algorithm to get stuck during the search process. Therefore, we have adopted the method introduced by [54] for the solution acceptance decisions (lines 20-29). Based on this method, while improved solutions are always accepted, non-improving solutions are accepted with a certain probability p accept . At each iteration, function ClcAcceptanceProbability() calculates p accept as follows: Here, f ext (S cur ) and f ext (S local ) are values of the extended fitness function of the current solution and of the solution after local search, respectively. Lastly, T refers to the actual temperature value. At the beginning, T is initialized to an initial temperature T init which is decreased by t − at each main iteration of VNS (see line 30). In this way, while a non-improving solution is more likely to be accepted early during the search, the probability of accepting non-improving solutions will decrease with a growing iteration number. However, in case no improved solution was found during iter_ni max iterations, T is reset to T init in order to enhance diversification.

Algorithm 2 VNS for the 2E-EVRP-TW
1: input: an initial solution S init 2: S shake : Solution obtained after shaking 3: S local : Local solution after VND 4: S cur : Current solution 5: S bs f : Best-so-far solution 6: iter_ni : The number of non-improving solutions 7: iter_ni max : The maximum iteration limit for non-improving solutions 8: Determine set of neighborhood structures for shaking {N shake k | k = 1, . . . , k max } and local search {N local h | h = 1, . . . , h max } 9: S cur , S bs f ← S init 10: while the computational time limit is not reached do 11: Create π of the shaking neighborhoods N shake k 12: Set k ← 1 13: while k ≤ k max do 14: Apply shaking: Choose S shake from N shake π(k) (S cur ), the π(k)th shaking neighborhood of S cur 15: if N shake π(k) is a removal/destroy operator then 16: Repair S shake 17:

end if
18: Re-construct first echelon tours using C&W savings algorithm 19: Apply local search: S local ← VND(S shake ) 20: ρ ← rand() 22: if f ext (S local ) < f ext (S bs f ) then S bs f ← S local

23:
if f ext (S local ) < f ext (S cur ) or ρ < p accept then 24: S cur ← S local The following four sections will provide a detailed description of standard shaking operators, removal/destroy operators, repair operators, and local search neighborhoods, respectively.

Standard Shaking Operators
Random cyclic exchange: This operator was originally introduced by [55]. It transfers a node sequence (consisting of customers and/or charging stations) from one route to another in a cyclic way. This operator is quite advantageous for many sequence-based combinatorial optimization problems as it enables the generation of a large variety of moves with a single operator.

Algorithm 3 Variable Neighborhood Decent (VND)
1: input: S shake 2: S V ND : Solution obtained after applying a local search operator 3: Set h ← 1 4: while h ≤ h max do 5: Generate S V ND from the hth local search neighborhood of S shake (S V ND : N local h (S shake )) 6: if f ext (S V ND ) < f ext (S shake ) then 7: S shake ← S V ND The cyclic exchange operator we have applied takes two parameters as input: (1) the number of routes (ζ) to be involved in the cyclic move, and (2) the maximum number of nodes (θ max ) to be transferred from one route to another. First, the operator randomly selects ζ routes. Then, a random integer number θ from the interval [1, θ max ] is independently determined for each route involved in the cyclic move. This value refers to the route-specific length of the node sequence to be transferred. Finally, θ consecutive nodes are randomly selected from each route and transferred to the next route in the cyclic move. If ζ is greater than the total number of routes existing in a solution, then ζ is set to the total number of routes. Similarly, if θ is greater than the total number of nodes in a route, then θ is readjusted. The optimal values for both parameters are determined by parameter tuning (see Section 5.2). Figure 4 illustrates a cyclic exchange move with three routes. Random sequence relocation: This operator selects a node sequence from one route and transfers it to another route. The origin and destination routes, the node sequence to be relocated, and the insertion position in the destination route are determined randomly. Parameter max n limits the number of nodes to be transferred. The optimal value for max n is determined by parameter tuning (Section 5.2).

Removal/Destroy Operators
One of the most critical aspects of a destroy operators is deciding on the number of nodes in the solution to be removed. Limiting the amount of destruction too much may cause a poor exploration performance of the algorithm. On the contrary, repairing a largely destroyed solution can be time-consuming and may result in a poor quality solution depending on the utilized repair procedure [53]. Therefore, we used a random removal rate between a lower and an upper bound to determine how many nodes (or routes) will be removed from the current solution. Well-working upper and lower bounds are decided via parameter tuning (Section 5.2) and fixed for each group of instances.
Random customer removal: First, a random number ρ is drawn from the interval [rr1 Lb , rr1 Ub ]. This number is the fraction of customers to be removed from the solution, henceforth called the removal rate. Note that rr1 Lb and rr1 Ub are the lower and upper bounds for the removal rate. Finally, a randomly chosen number of max{1, ρ * n c } randomly chosen customers are removed from the current solution and added to a removal list L r .
Random route removal: Similar to the random customer removal operator above, a random number ρ is drawn from the interval [rr2 Lb , rr2 Ub ]. This number is the fraction of routes to be removed from the solution. Assume that solution S has n routes in the second echelon. After drawing number ρ, a number of max{1, ρ * n } randomly chosen routes are removed from the current solution and all customers from these routes are added to a removal list L r .
Close satellite: This operator closes a randomly chosen satellite and adds all the customers served through this satellite to a removal list L r .

Repair Operators
A partially destroyed solution may either be repaired using an exact or a heuristic approach. Although exact approaches guarantee the optimal insertion of removed customers or routes, they are much more time consuming than heuristic approaches, especially when a rather large part of the solution is destroyed. Moreover, too much optimality in the repair operator may limit the diversification capabilities of the search. Therefore, we have applied greedy and best-insertion strategies for repairing partially destroyed solutions; see also [56,57]. In the following, partially destroyed solutions are labelled S d .
Greedy customer insertion: This operator reinserts each customer from L r into the partially destroyed solution S d according to the last-in-first-out (LIFO) principle. Henceforth, N S d denotes the set of nodes (customers and charging stations) that still form part of the partially destroyed solution S d . Let v ∈ L r be the customer that is to be re-inserted into S d . First, for each pair i, j ∈ N S d such that i and j are consecutive nodes in one of the routes of S d , the insertion cost δ vij is calculated as follows: Then, customer v is inserted at the position with the lowest insertion cost. Suppose that the obtained route after insertion is infeasible in terms of vehicle capacity or time windows constraints. In this case, customer v is inserted at the next-cheapest position in terms of the insertion cost, and so on. If no feasible insertion position can be found, the customer is finally inserted at the initially best position, ignoring the infeasibility. In case of battery infeasibility, a charging station is added to the route. These procedures are applied until no customer remains in L r .
Greedy customer insertion with noise: This operator is a special version of the greedy customer insertion operator described above. It utilizes the following modified cost function with a noise parameter for calculating the insertion cost of a customer v: Here, d max refers to the maximum distance between all nodes in N SRC , and α refers to the noise parameter set to 0.1 [57][58][59][60]. Finally, β is a uniform random number generated independently for the calculation of each cost value from the interval [−1, 1]. Best customer insertion: Instead of re-inserting customers from L r in the LIFO order, this operator aims to find the best insertion position for all customers. Each time, the insertion costs of all remaining customers from L r are calculated using Equation (52). Then, the customer with the best insertion cost is inserted into the best possible position. This operator is much more time consuming than the greedy customer insertion operator. It may, however, lead to better results. Infeasible insertions are handled in the same way as the greedy customer insertion operator.
Greedy CS insertion: In the case of battery infeasibility, this operator inserts a charging station with the lowest insertion cost at the point at which infeasibility occurs. Figure 5 illustrates the insertion of a charging station to a battery-infeasible route. Assuming that the electric vehicle runs out of battery before reaching node v 4 , the operator first tries to insert a charging station r * := argmax{d2 3r + d2 r4 − d2 34 | r ∈ N R } between nodes v 3 and v 4 . In case the battery level is not high enough to reach the charging station that is to be inserted, a possible insertion is tried before node v 3 , etc.

Local Search Neighborhoods
For the local search phase (that is, for the application within VND), the algorithm makes use of three inter-route operators (exchange (1,1), shift(1,0), and swap) and three intraroute operators (relocation, two_opt, and CS_reinsertion). In all these neighborhoods-except for CS_reinsertion-we use the first-improvement strategy, that is, a neighborhood exploration stops once the first improving solution is found. Infeasible moves are also allowed but they are penalized. Figure 6 graphically illustrates these local search neighborhoods.
The exchange(1,1) neighborhood considers all exchanges of each customer with every other customer not in the same route. The shift(1,0) neighborhood looks at all possibilities of removing a customer from its current route and inserting it at any position in the rest of the routes. Next, the relocation operator removes each customer from its current position and inserts it into another position in the same route. The swap neighborhood considers changing the positions of two selected nodes of the same route. The two_opt neighborhood considers all possibilities of selecting two non-consecutive nodes in the same route and reversing the node sequence between the two selected nodes. Note that there must be at least three nodes between the two selected nodes in order not to repeat moves already considered in the swap operator. The CS_relocation operator removes the current charging stations of a route and reinserts them in different positions in the same route in order to find the best positions for the charging stations. Unlike CS_relocation, the CS_reinsertion operator removes the current charging stations from a route. Instead of reinserting the removed ones, the greedy charging station insertion operator from the previous section is applied to repair the route. Thus, charging stations different from the removed ones may be inserted into the route.

Computational Experiments
In addition to our C&W savings heuristic and VNS we also tried to solve all problem instances with the MILP solver CPLEX. All experiments were performed on a cluster of machines with Intel Xeon CPU 5670 CPUs with 12 cores of 2.933 GHz and a minimum of 32 GB RAM. Note that CPLEX version 12.10 was used in one-threaded mode.

Generation of 2E-EVRP-TW Instances
Due to a lack of available benchmark sets for the 2E-EVRP-TW, we generated new problem-specific instance sets by extending the benchmark sets provided in [12]. These instances were proposed for the electric vehicle routing problem with time windows and consist of 36 small and 56 large instances. Small instances are composed of 5, 10, or 15 customers with a varying number of charging stations (between 2 and 5), while the large ones include 100 customers and 21 charging stations. We have extended these instance sets following the methodology proposed in [26]. In particular, first, the number of satellites to be added to each instance was determined. Then, the locations of those satellites and the one of a single central warehouse was specified.
Concerning the number of satellites, we decided to use one single satellite in the case of small instances with at most 10 customers, two satellites in the case of 15 customers, and eight satellites for the large instances. Note that the customers of each instance are scattered over the intersections of a 100 × 100 grid. The location of the single central warehouse was determined for each instance to be outside this area, at (50,150). The single satellite in the case of instances with at most 10 customers was placed at (50,75), while the two satellites in the case of instances with 15 customers were places at (50, 25) and (50, 75). Finally, the eight satellites for all remaining instances were placed at (25,25), (25,50), (25,75), (50,25), (50,75), (75, 25), (75, 50) and (75, 75). Figure 7 shows examples of all three cases. In addition, we updated the customers' time windows by adding the distance between the location of the central warehouse in the original instance set and the new central warehouse as an offset value. Lastly, we modified the capacities of the electric vehicles and large trucks, considering the fact that instances labeled with C2, R2, and RC2 are more capacity constrained as compared to those labeled C1, R1, and RC1. In particular, we have fixed the capacity ratio between large trucks and electric vehicles to 4/0.5 for instances of the first type, and to 2/0.25 for instances of the second type. All benchmark instances generated in this study and the executable of the proposed algorithm are available at https://github.com/manilakbay/2E-EVRP-TW, accessed on 12 January 2022.

Parameter Tuning
In order to determine well-working parameter values for our algorithms we have utilized the scientific tuning software irace [61]. Tables 1 and 2 summarize the parameters that are subject to tuning for our C&W savings heuristic and for the VNS together with the considered value domains.
Due to large differences in instance size, we decided to tune our VNS algorithm (including the parameters of the C&W savings heuristic) separately for small and for large problem instances. In the first case (small instances), instances C101_C10, R102_C10, RC102_C10, C103_C15, R102_C15 and RC103_C15 were used for tuning. In the case of the large instances, instances C101_21, C201_21, R101_21, R201_21, RC101_21 and RC201_21 were used. For each of the two tuning runs, the budget of irace was fixed to 2000 algorithm runs. In the context of small instances, the computation time limit of each run was fixed to 150 CPU seconds, while it was fixed to 900 CPU seconds in the case of the large problem instances. Tables 3 and 4 show the obtained parameter value settings for the two cases. It is worth noting, for example, that well-working ranges for the removal rates (in the context of the removal/destroy operators) are considerably smaller in the case of the large instances when compared to those for small instances. One reason for this may be that repairing a largely destroyed solution is time consuming and may lead to a rather bad quality solution. On the other hand, a high removal rate may be considered as a perturbation mechanism that helps to escape from local minima in the context of small instances.

Numerical Results
In the following we provide a detailed comparison of the following methods. First, we applied both CPLEX (version 12.10) and our C&W savings heuristic to all problem instances. Hereby, CPLEX was given a time limit of 2 h of CPU time for each problem instance. Next we also applied two versions of VNS. The full version of VNS is henceforth denoted by VNS full . In contrast, VNS red is a reduced version of VNS that only utilizes classical inter-route and intra-route shaking operators. A comparison of these two variants is interesting, because it shows how much the destroy and repair operators add to the performance of VNS. Note that both versions of VNS were applied with a computation time limit of 150 CPU seconds in the case of small problem instances, and 900 CPU seconds for large problem instances. Moreover, both versions of VNS were applied 10 times to each problem instance.
Tables 5-7 show the numerical results for small problem instances with 5, 10, and 15 customers, respectively. The structure of these tables is as follows. Instance names are given in the first column, and the maximum number of vehicles in the first and second echelons are provided in the second and third columns, respectively. These numbers are only necessary for the application of CPLEX. After the first three table columns, there are four blocks of columns, presenting the results of our four approaches. The first three columns of each block (with headings 'n', 'm', and 'dist') are the same for all four approaches. Hereby, columns 'n' and 'm' provide the number vehicles utilized by the respective solutions in the first echelon and the second echelon, respectively. In the case of VNS full and VNS red these numbers refer to the best solution found within 10 independent runs. Column 'dist' provides the objective function values of the solutions generated by the four approaches. In the case of VNS full and VNS red , 'dist' shows the objective function value of the best solution found in 10 runs, while an additional column with the heading 'avg' provides the average objective function value of the best solutions of each of the 10 runs. Next, columns with heading 't(s)' show the computation time of CPLEX, our C&W savings heuristic and the average computation times of VNS full and VNS red to find the best solutions in each run. Finally, column 'gap(%)' provides the gap (in percent) between the best solution and the best lower bound found by CPLEX. Note that, in the case where the gap value is zero, CPLEX has found an optimal solution. The following observations can be made: First, apart from instances R103_C10, RC102_C10, and RC108_C10, CPLEX was able to solve the mathematical model-within 2 h of CPU time-for all instances with five and ten customers to optimality. For the remaining three cases, CPLEX was able to provide feasible solutions of the same quality as VNS full and VNS red , without being able to prove optimality. However, for the instances with 15 customers, the performance of CPLEX heavily starts to degrade. The reason for the rapidly decreasing performance of CPLEX is that the size and complexity of the MILP model sharply increase based on the instance size. For instance, the average number of variables and constraints of the MILP model for the instances containing five customers is 986 and 2235, respectively. These values increase to 4008 and 9363 for the instances with 10 customers and to 13,125 and 31,482 for the instances with 15 customers. In this latter case, CPLEX could only provide valid solutions (without being able to prove optimality) in seven out of 12 instances. Nevertheless, for one instance (C106_15), CPLEX produced a better solution than both VNS variants.
Both VNS variants performed comparably on small problem instances with 5 and 10 customers. They were able to find solutions with the same objective function values as those of CPLEX. However, the performance of the two VNS variants starts to differ on the instances with 15 customers. While VNS full provides results at least as good as CPLEX for all instances except for C106_C15, VNS red only does so in eight out of 12 cases. Considering those instances for which CPLEX was able to obtain a solution, both VNS variants improved the solution quality of CPLEX, on average, by 1.57% (VNS red ) and 6.86% (VNS full ). In fact, VNS full outperforms VNS red both in terms of best-performance (column 'dist') and in terms of average-performance (column 'avg'). Note also that the running times of both VNS full and VNS red are in the order of seconds. While the superiority of both VNS full and VNS red over CPLEX in terms of CPU time is more significant for the instances with 10 and 15 customers, see Tables 6 and 7, only VNS red provides better CPU times for the instances with 5 customers. Finally, note that the results of the C&W savings heuristic are, in the context of these small problem instances, approx. 20% worse than the best results obtained. This is, however, achieved in very low computation times of a fraction of a second, which shows that our C&W savings heuristic is a good candidate for producing the initial solutions of VNS.
Next, we analyze the results of the four approaches when applied to the large problem instances of our benchmark set. These results are shown in Tables 8-10. The structure of these tables is slightly different to the one of the previous result tables. First, results of CPLEX are not provided, because CPLEX was not able to generate a single valid solution within 2 h of computation time. Second, the additional column with heading 'imp(%)' provides the improvement (in percent) of the VNS variants over the results of the C&W savings heuristic. In addition to the tables we also provide critical difference (CD) plots [62] as a statistical tool for assisting the interpretation of the obtained results. First, the Friedman test was used to compare the three approaches simultaneously. As a consequence of the rejection of the hypothesis that the techniques perform equally, the corresponding pairwise comparisons were performed using the Nemenyi post hoc test [63]. The obtained results are graphically shown by means of the above-mentioned CD plots in Figure 8. Note that each considered algorithm variant is placed on the horizontal axis according to its average ranking for the considered subset of problem instances. The performances of those algorithm variants that are below the critical difference threshold (computed with a significance level of 0.05) are considered as statistically equivalent; see the horizontal bars joining the markers of the respective algorithm variants. The following observations can be made. For the large clustered instances (Table 8), VNS full significantly outperforms VNS red , both in terms of best-performance and averageperformance. This is also shown in Figure 8b. Interestingly, for the random and randomclustered instances, VNS full is still superior to VNS red in the context of instances with a long scheduling horizon (R2* and RC2*); see Figure 8f. However, the opposite is generally the case in the context of the remaining instances (R1* and RC1*) as shown in Figure 8e. This means that the removal/destroy operators have a rather negative impact on the performance of VNS in these cases. This is most probably due to their elevated computation time requirements. Nevertheless, Figure 8e also shows that this difference is not statistically significant. Finally, when considering all large instances together, VNS full significantly outperforms VNS red (see also Figure 8a).
(i.e., C103_C15, R202_C15), even though VNS red provides solutions with a lower fleet size than VNS full , the solutions of VNS full are better. The reason for this is that the objective function only minimizes the traveled distance.
It is also worth noting that the average improvement rate with respect to the solutions of the C&W savings heuristic for large clustered problem instances is lower than in the context of the random and random-clustered instances. One reason for this is possibly the assignment of each customer to the nearest satellite in the initial solution construction phase, which provides most probably a better customer-satellite assignment than in the context of random instances. (e) (f)

Conclusions and Future Research Directions
This study presented the two-echelon electric vehicle routing problem with time windows as a valuable concept for sustainable city logistics. A three-index node-based mixed-integer programming model was developed and solved using CPLEX for small instances. In addition, we proposed a variable neighborhood search metaheuristic making use of a wide range of classical and large neighborhood search operators. Moreover, our algorithm allows visiting unfeasible solutions, which is achieved by means of an extended objective function for the evaluation of both feasible and unfeasible solutions. The local search step of our variable neighborhood search approach uses a variable neighborhood descent algorithm. Experimental tests were performed using new problem-specific instance sets generated based on available data sets from the literature. While CPLEX was able to solve the proposed mathematical model only for small problem instances with 5 and 10 customers, it started to struggle deriving even feasible solutions for larger instances. Our variable neighborhood search approach was able to find optimal or near-optimal solutions faster than CPLEX for all small problem instances. Moreover, numerical results showed that destroy-and-repair-type operators generally increased the algorithm's performance. Data Availability Statement: All the problem instances generated for this work and used for the experimental evaluation can be downloaded at https://github.com/manilakbay/2E-EVRP-TW accessed on 12 January 2022. The same repository offers executables of our algorithms for download.

Conflicts of Interest:
The authors declare no conflict of interest.

Abbreviations
The following abbreviations are used in this manuscript:

VNS
Variable Neighborhood Search VND Variable Neighborhood Descent 2E-EVRP-TW Two-Echelon Electric Vehicle Routing Problem with Time Windows