• No results found

unified operator to solve VRPOV, whereas their select algorithm is conceived only in the context of multi-vehicle routing problems with profits.

The remainder of the chapter is organised as follows. The starting point of the explanation is a brief presentation, in Section 3.2, of the Split operator of Prins (2004) and of the labelling algorithm of Desrochers (1988). Next, a detailed explanation of the Selector algorithm is provided in Section 3.3. Sections 3.4 through 3.6 present modifications done to the basic Selector algorithm to fulfill specific purposes. The implementation made of the selected metaheuristic is later detailed in Section 3.7. The final remarks are presented in Section 3.8.

3.2 Foundations of Selector

When solving a VRPOV, the Selector operator optimally splits a giant tour into sub-sequences of visited and non-visited vertices in a similar way as the Split operator optimally segments a giant tour into feasible vehicle routes when applied to solve the CVRP as proposed by Prins (2004). Splitting the giant tour into vehicle routes entails solving a Shortest Path Problem (SPP). However, in the case of a VRPOV, the side restriction(s) considered act(s) as a constraining resource and the problem to be solved then becomes a Resource-Constrained Elementary Shortest Path Problem (RCESPP).

The Selector operator shares similarities with the Split operator. However, the fact of not knowing a priori which vertices constitute the tour leaves a more difficult to solve problem. Nonetheless, the RCESPP for a VRPOV can be solved quickly enough in practice by adapting the algorithm devised by Desrochers (1988) for the Resource Constrained Shortest Path Problem (RCSPP). The elementary requirement is guaran-teed by the fact that the order given by the giant tour is respected.

This section provides an explanation of the mechanics of the Split process and of the pseudocode of its algorithm together with the fundamental principles of the algorithm of Desrochers (1988).

3.2.1 Split Operator

As stated before, Prins (2004) provided the first computational implementation of the clustering idea of Beasley (1983) for finding the optimal routes in a CVRP. Using any TSP algorithm, the first phase of Split computes a giant tour of all customers T = (T1, T2, , . . . , Tn) by relaxing vehicle capacity Q and maximum route length L.

The second phase builds an auxiliary acyclic graph H from T , and applies the well established Bellman-Ford shortest-path algorithm to obtain an optimal partition of the giant tour into least-cost, capacity-feasible vehicle routes.

The specifics are as follows. H contains n + 1 vertices indexed from 0 to n. Each cluster of customers (Ti, Ti+1, . . . , Tj) that can be treated as one feasible trip, i.e., a trip for which all the problem constraints are satisfied, is modelled by one arc (i − 1, j) in H. The weight of the arc is given by the trip cost cost(i, j) = c(0, Ti) +Pj−1k=i(s(Tk) + c(Tk, Tk+ 1)) + s(Tj) + c(Tj, 0), where s(Ti) represents the service cost of customer Ti. To find the shortest path, the algorithm inserts visits to the depot within the

a(5)

2. Auxiliary graph H of feasible trips for Q=10 (shortest path in boldtype)

Figure 3.1: Example of a splitting procedure.

sequence, so the depot is first considered at vertex v0, and then it is moved iteratively to vertices v1, v2, . . . , vn−1. Thus, when reading an arc, interpret the vertex where the tail lies as the depot rather than as a customer vertex. A shortest path from vertex v0 to vertex vn in H corresponds to an optimal splitting of T . The splitting is optimal for the given customer ordering. Figure 3.1 illustrates an example with five customers.

In drawing 1, the set of customers is represented as the giant tour T = (a, b, c, d, e), and the figures represent the traveling costs between customers and between customers and the depot, the ones in brackets are the customer demands. The graph depicted in drawing 2 is built assuming Q = 10, and L = ∞. For example, arc cd models a trip visiting customers c and d, with cost 95, while arc cde does not exist because the trip is not feasible due to excessive demand (13). The shortest path has three arcs (ab,c,de) and a cost of 205. The computation of the shortest path is reasonably fast because H is circuitless and the vertex numbering provides a natural topological ordering.

The Split procedure, shown in Algorithm 4, is a version in O(n) space which does not generate H explicitly. Instead, for each vertex j = 1, 2, . . . , n in H, it maintains two labels: (1) Vj, the cost of the shortest path from vertex v0 to vertex vj in H, and (2) Pj, the predecessor of vertex vj on this path. The repeat loop enumerates all feasible subsequences Ti. . . Tj, and instead of storing the arcs of feasible trips, the labels of vertex vj are directly updated when improved (lines 17 and 18). At the end, the total cost is stored in Vn and the set of routes is obtained from the information stored in vector P . For a given i—pointer which indicates the current position of

3.2. Foundations of Selector 41

the depot—note that j is increased until the route length L is exceeded: no feasible trip is discarded since the triangle inequality holds. The resulting algorithm is simple, compact and fast, for further details see Prins (2004).

Algorithm 4 : Clustering algorithm for Split procedure Input: giant tour

Output: optimal set of routes for the given giant tour, total route length

1: V0← 0

2: for i = 1 to n do

3: Vi ← ∞

4: end for

5: for i = 1 to n do

6: load ← 0; cost ← 0; j ← i

7: repeat

8: load ← load + qTi

9: if i = j then

10: cost ← cost(0, Tj) + sTj+ cost(Tj, 0)

11: else

12: cost ← cost − cost(Tj−1, 0) + cost(Tj−1, Tj) + sTj+ cost(Tj, 0)

13: end if

14: if (load ≤ Q) and (cost ≤ L) then

15: {here subsequence Ti. . . Tj corresponds to arc (i − 1, j) in H}

16: if Vi−1+ cost < Vj then

17: Vj ← Vi−1+ cost

18: Pj ← i − 1

19: end if

20: j ← j + 1

21: end if

22: until (j > n) or (load > Q) or (cost > L)

23: end for

24: Decode(P )

25: return set of routes

3.2.2 Resource-Constrained Elementary Shortest Path Problem The Resource-Constrained Elementary Shortest Path Problem (RCESPP) is the prob-lem of finding an eprob-lementary1 shortest path from a source vertex vs to a target vertex vtin a network such that the overall resource usage does not exceed some given limits.

Hence, record of the resources used by each path should be kept. Resources are con-sumed when visiting vertices or traversing arcs. Such problem is NP-hard (Dror (1994)).

The standard approach to solve a RCESPP to optimality in pseudo-polynomial time is dynamic programming.

This approach relies upon the seminal work of Desrochers (1988) who proposed an

1synonym of Hamiltonian, vertices are visited only once

algorithm to solve a relaxed version of this problem, the Resource Constrained Shortest Path Problem (RCSPP), where the path needs not be elementary. Desrochers’ proce-dure is a multi-label extension of the Bellman-Ford algorithm taking resource con-straints into consideration. The dynamic programming-based Bellman-Ford algorithm is designed to find a shortest path in a graph. It is a label-correcting approach where a single label representing the cost of the path which gradually improves is assigned to each vertex of the given network. However, in the case of the RCSPP, the necessity of keeping record of used resources obliges to assign several labels to each vertex.

Feillet et al. (2004) explains that in label-correcting approaches, vertices are re-peatedly treated and their labels extended. Within this approach, two strategies can be used: reaching algorithms and pulling algorithms. In reaching algorithms, labels on a vertex are extended to its successors, while in pulling algorithms, labels from its predecessors are pulled to the vertex currently treated. Aside from the label-correcting approach, there is the label-setting approach, an extension of Dijkstra’s algorithm. It works by the permanent marking of the labels, which are treated in an order based on the resource consumption.

In this context, Desrochers’ procedure is a label-correcting reaching algorithm. Its basic principle is to associate a label with each partial path that goes from the origin vertex vsto a vertex vi. The label represents the cost of the path and its consumption of resources. Unnecessary labels are eliminated as the search progresses. Vertices are iteratively treated until no new labels are created. When a vertex is treated, all its new labels are extended toward every possible successor vertex. Throughout the search, then, every vertex receives several labels. When a label is extended from vertex vi to vertex vi+1 to generate another feasible label, the cost and resource consumption of the new label must be computed according to a recurrence formula.

The so-called label, which represents a feasible path, can be understood as a vector V = [ζ|r1, r2, . . . , rm] that memorizes the path cost ζ and the resource consumptions ri along the corresponding path. These consumptions enable to know if a partial path can still be extended. The efficiency of the dynamic programming-based algorithm outlined in the former paragraph relies heavily upon the possibility of pruning labels that cannot lead to an optimal solution. For this purpose, suitable dominance tests are always performed when labels are extended, so that only non-dominated labels are stored. To find the optimal path only non-dominated paths need to be considered. For a survey on models and algorithms for the RCSPP and the RCESPP, the interested reader may consult Irnich and Desaulniers (2004). Feillet et al. (2004) presented an exact algorithm to solve the RCESPP applied to VRPs. Also, the papers of Righini and Salani (2006) and Righini and Salani (2008) which propose new ideas for RCESPP algorithms, and the publication of Boland et al. (2006) which explains an implementation of a label setting algorithm to solve the RCESPP.