Moreover, in practice, the planning for one time period is executed, while an initial planning for future time periods is included, to be used as a starting point for the following time period. We pay attention to this dynamic nature of the problem by including information from past week’s planning as well as the initial planning for the following week. If this information would be excluded, besides the fact that this is unrealistic, many pickup tasks would occur at the beginning of the current week, and many delivery tasks would need to be executed at the end of the week. Moreover, this would result in a limited choice of long-haul services, with a lower capacity utilisation for long-haul services with departure in the beginning and at the end of the week, compared to long-haul services in the middle of the week. First, we include requests which were already assigned to a long-haul service with departure in the previous week. For these requests, only the truck delivery task still has to be executed after arrival at the destination terminal. In practice, this is given input for current week’s planning. Therefore, it is assumed that these requests are assigned to long-haul services in advance, and only the delivery trucking cost is relevant for this week’s problem. The assigned long-haul service and related delivery task do not vary during the execution of the heuristic. The delivery task should only be assigned to a position in a truck route. Second, some requests are assigned to long-haul services which depart in the current planning cycle and arrive in the next. For this type of assignment, the long-haul service is selected by the heuristic. Only the pickup task should be included in truck routes. Delivery tasks in the next week are included by means of the two-way direct distance between the destination terminal and the customer destination, plus a high value M in order to avoid postponing requests. At the same time, this ensures that if postponement is required, a smaller end-haul trucking distance is preferred. For these requests, total assignment costs consist of costs for including the pickup task in truck routes (VRP), long-haul service costs, and direct two-way end-haul truck costs.
4.1. General Structure of the LNS
Algorithm 1 provides the general heuristic structure. It includes a constructive heuristic (lines 2–4) as well as a framework with several removal operators (lines 9–12) and insertion operators (lines 13–15).
The constructive heuristic consists of first assigning requests to long-haul services by solving the long-haul routing problem using integer linear programming using ILOG Cplex 12.6 in C++, and next inserting for each request its pickup and delivery task—related to the known, assigned long-haul services—into truck routes. These given drayage tasks are inserted in a random order at their best feasible insertion position, i.e., with the lowest additional cost, in order to obtain a good initial solution. This corresponds to the random order best insertion operator of the sequential approach.
In each iteration, one removal operator is selected randomly in which requests or tasks are removed until a given threshold is reached with respect to the number of removed requests or tasks. Next, one insertion operator is selected randomly. Requests are reinserted in order to obtain a new, complete solution. In a sequential approach (Seq.), after requests are assigned to long-haul services in the constructive phase, minimum-cost truck routes are established with known pickup and delivery tasks. Sequential operators aim at removing or inserting single drayage tasks, instead of requests, and the assigned long-haul services remain unchanged. In an integrated approach (Int.), destroy and repair operators consider removing and reinserting requests from the solution. More information on these integrated operators is presented in
Section 4.2.
The acceptance criterion for moves includes a function with multiple cost components (lines 18–20). The total costs of each solution consist of vehicle routing costs in both service regions (), two-way direct truck costs for drayage tasks to be executed in the next planning period as a result of long-haul services with arrival in the next week (), and long-haul transport costs (). Moreover, for accepting new solutions, a worse solution is allowed to be accepted for the vehicle routing cost () in order to focus on the optimisation of vehicle routes in each service region.
Algorithm 1 LNS Heuristic Structure for intermodal routing. |
- 1:
Set parameters: , - 2:
Construct initial solution - 3:
Solve exact sequential long-haul problem - 4:
Apply random order best insertion - 5:
; - 6:
Large neighbourhood search - 7:
for to do - 8:
- 9:
Randomly select a destroy operator from: - 10:
Random removal - 11:
Worst removal - 12:
Random order removal of linked tasks or requests - 13:
Randomly select a repair operator from: - 14:
Random order best insertion - 15:
Two-regret insertion - 16:
- 17:
if is complete and - 18:
- 19:
then - 20:
- 21:
if then - 22:
- 23:
end if - 24:
end if - 25:
end for
|
4.2. Integrated Operators
In this section, the operators used within the large neighbourhood search framework are described. Operators which are well-known and have shown to obtain good results for pickup and delivery problems (random and worst removal, random order best insertion and two-regret insertion) [
47], as well as an operator designed to fit the characteristics of the problem are included (random order removal of linked tasks/requests). Integrated operators, which are dedicated to the integrated nature of the problem, are explained in this section. Sequential operators are not discussed individually, but use the same building blocks. The only difference is that in the sequential approach, improvements in truck routes are considered without changing selected long-haul services, as this decision is made in advance. To summarise, sequential operators focus on individual drayage tasks, whereas integrated operators address the entire intermodal route of a request, i.e., the pickup and delivery task as well as the assigned long-haul service. Four removal operators and three insertion operators are included and described next. The removal procedure is repeated until the number of removed requests or drayage tasks, for the integrated and sequential approach respectively, reaches a given threshold. The process of inserting uninserted requests or drayage tasks is repeated until either all requests are inserted or no feasible insertion can be found for a request. If no feasible insertion can be found, the solution is incomplete and the iteration ends.
Random removal of requests: Randomly selected requests are removed from the solution until a given threshold is reached.
Worst removal of requests: Requests are ordered based on the savings that could be obtained by excluding that request from the solution, i.e., if its pickup task and delivery task are omitted from truck routes and the request is removed from the previously assigned long-haul service. The request with the largest savings is removed and savings are updated.
Random order removal of linked requests: Randomly selected requests are removed from the solution. For each randomly selected request r, both the pickup and delivery task are removed, and the request is removed from its assigned long-haul service. Further, if any delivery task immediately precedes the pickup task of request r in its current truck route, the request related to that delivery task is removed too. Similarly, if any pickup task immediately succeeds the delivery task of request r, the request related to that pickup task is removed. Obviously, in the sequential variant of this operator, if a pickup task is selected, the delivery task executed right before is removed if available. For selected delivery tasks, a single pickup task executed afterwards is removed, again if available. By removing subsequent pickup and delivery tasks, subroutes (or street turns) between two terminal visits can be removed from the solution.
Random order best insertion of requests: Uninserted requests are selected randomly. For each request, the best long-haul service is selected, defined by taking an integrated perspective. The sum of the long-haul rail cost and the best corresponding pre- and end-haul cost for inserting tasks into truck routes determine the total cost of assigning a request to a long-haul service and inserting it into a route in each region.
Two-regret insertion of requests: First, for all uninserted requests, the best and second-best insertion costs are calculated, defined by the best and second-best long-haul service, insertion of the pickup node and insertion of delivery node, again taking an integrated perspective. Next, the request with the highest difference between the lowest and the second-lowest total insertion cost is inserted in the solution, after which insertion costs for the remaining requests are updated if required. The idea is to first insert the requests which are the most difficult to insert in order to avoid that they cannot be inserted feasibly anymore if more requests are inserted.
Two other operators, a removal of related requests from similar services and a greedy insertion were considered. However, experiments showed that their omission caused a better objective value. As the removal of both operators simultaneously also results in a significantly increased solution quality, the sequential and integrated heuristic without the greedy insertion and related removal operator will be used in the remainder of this paper.
4.4. Feasibility of New Routes
Only if all conditions in the preliminary check are satisfied (see
Section 4.3)—which are required, but insufficient conditions for feasibility—, another procedure determines whether a feasible schedule can be found for a certain truck with a given sequence of nodes in a candidate solution. As trucks can be out for multiple days, it would not be realistic to assume that they are active for an entire week. Therefore, the scheduling procedure for multiple days should include a minimum overnight’s rest and a maximum daily active time. The day at which a task should be executed is not fixed in advance (within given release and due times of a request) and, as such, is part of the decision process.
Nodes in a given sequence are added to a given day’s route using the earliest feasible start as long as the daily limit on the route duration is not violated. If not feasible, the forward time slack principles, explained in detail later on, are used to shift the route schedule within a single day. It is always better to travel to and serve a node on the current day than shifting one or both of these activities to a future day. Therefore, if a feasible route can be composed on a particular day by reducing that day’s route duration, and thus postponing the start of that route, this is always executed. In this part of the procedure, the earliest possible arrival in the last node of the day is assumed to be given and does not shift. Hence, the shift does not restrict the feasibility of the next day. Only if shifting the start of the route is not feasible, travel to and/or service of the node under consideration is tried to be performed on a future day and the entire procedure is repeated for that future day. If all nodes in a route can be feasibly visited, the procedure provides a schedule which satisfies a maximum daily route duration , a minimum night’s rest and daily time windows and between which trucking is allowed.
Within this procedure, four types of feasible scheduling options are considered for each node to be added to a route. These are explained below. The procedure evaluates a given sequence of nodes, where nodes i and j are assumed to be two subsequent nodes in the sequence. If adding a new node j does not result in any infeasibility, the next node in the sequence will be evaluated (i.e., and , and the procedure is repeated).
The procedure requires two modifications to the forward time slack (
F) principles of Savelsbergh [
48] and Vidal et al. [
49]. The forward time slack (
F) indicates the time with which each node served on a particular day can be shifted later in time such that a feasible route can be composed serving all nodes before (and including) the currently considered node based on the earliest start procedure, which calculates the earliest feasible start of a task at any node in a sequence using time windows, service times and travel times. To calculate the forward time slack, both the earliest feasible execution date
and the cumulative idle time
are required for a given node
i. A first modification,
, is explained in case 2 below. A second modification,
is used in case 3.
Case 1: Travel and service on current day d without changing service start of nodes in route of current day. If adding travel to and service of node j to the current day’s route results in a feasible route duration (i.e., , with equal to the route duration of the current day) and if it can be performed before the end of the current day , node j is added to the current day’s route if this does not result in any infeasibilities of the route of future nodes.
Case 2: Travel and service on current day d with removal of excess waiting time in route of current day. If adding a node
j with the regular earliest feasible start results in a violation of the maximum daily route duration (
), it is checked whether it is possible to postpone the service start of previous nodes in the route of the current day such that node
j can be feasibly included on the current day’s route within the maximum daily route duration. If feasible, this is always preferred compared to serving it on a future day. In this case, a first modification to the regular forward time slack
is performed. Using the regular time slack
F could influence the start of the minimum overnight rest and consequently the start time of the next day, which might lead to an infeasible schedule on the next day. Therefore, one difference with the regular time slack principles is the fact that the service start of the currently considered node
j remains unchanged when attempting to shift the start of a day’s route. To feasibly include travel to and service at node
j, the maximum daily route duration should be respected after shifting the current route (
), and the truck should be able to finish service before the end of that day (
).
Figure 3 visualises such a feasible shift. Initially, inserting node
j is infeasible with a given start of the day, in this case represented by the start of service in node
i. However, by postponing the start of a route on a given day with
, it becomes feasible to travel to and serve node
j, without changing its earliest feasible service start. At the same time, excessive wait time on the route of the current day is reduced.
Case 3: Travel on current day d with removal of excess waiting time in route of current day, service on a future day. If adding a node
j with the current earliest feasible start results in a violation of the maximum daily route duration (i.e., case 2 is infeasible), it is checked whether it is possible to postpone the service start of previous nodes in the route of the current day such that the travel to node
j can be feasibly included on the current day within the maximum daily route duration. An important aspect within this regard is the fact that a minimum night’s rest might need to be added before or after serving (i.e., travel towards a node can occur on that day, before actually serving that node on a future day). However, a truck is only allowed to rest with an empty container. Therefore, if postponing the route with
is infeasible, a second modification to the forward time slack
is performed, which is equal to zero if no predecessor of
i is available on the current day (i.e., no node is served before this node on the current day). It is used to check whether it is feasible to only include the travel to node
j on the current day, while service occurs on any future day. Furthermore, the service start of the last node on the current day (represented by node
i in
Figure 4) is not allowed to shift, as this could influence the feasibility of the next day’s route. Again, three conditions must hold: the current day should not be the last day in the planning horizon (
), the current day’s route can be feasibly shifted such that it does not exceed the maximum daily active time (
), where
denotes the total active time of a truck on the current day with travel to but without service of node
j, and travel should be finished before the end of the current day (
).
If a single overnight’s rest is required before service at node j occurs on the following day, defines the earliest start. If more than one day passes between travel to and service at node j, the service start is calculated by . If the service start resulting from this procedure turns out to be infeasible, the solution is infeasible.
Case 4: Travel on next day , service on future day . If cases 1, 2 and 3 are not feasible, it is tested whether it would be feasible to include a night’s rest after serving node i on day d. Travel to node j is performed on the next day and service of node j occurs on any future day . If travel and service can be feasibly inserted on the same future day, after a minimum night’s rest, the service start is defined by if this is on the next day, or by any day after the next. Identical to case 3, if one or more days pass between travel and service, the service start of node j as a first activity on any day further in the future depends on the number of days that pass between travel to and service of node j.