- Type Parameters:
V
- the graph vertex typeE
- the graph edge type
- All Implemented Interfaces:
HamiltonianCycleAlgorithm<V,
E>
The travelling salesman problem (TSP) asks the following question: "Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?".
Insertion heuristics are quite straightforward, and there are many variants to choose from. The basics of insertion heuristics is to start with a tour of a subset of all cities, and then inserting the rest by some heuristic. The initial sub-tour is often a triangle or the convex hull. One can also start with a single edge as sub-tour. This implementation uses the shortest edge by default as the initial sub-tour.
The implementation of this class is based on:
Nilsson, Christian. "Heuristics for the traveling salesman problem." Linkoping University 38
(2003)
This implementation can also be used in order to augment an existing partial tour. See
constructor NearestInsertionHeuristicTSP(GraphPath)
.
The runtime complexity of this class is $O(V^2)$.
This algorithm requires that the graph is complete.
- Author:
- Peter Harman
-
Constructor Summary
ConstructorDescriptionConstructor.NearestInsertionHeuristicTSP
(GraphPath<V, E> subtour) Constructor Specifies an existing sub-tour that will be augmented to form a complete tour whengetTour(org.jgrapht.Graph)
is called -
Method Summary
Methods inherited from class org.jgrapht.alg.tour.HamiltonianCycleAlgorithmBase
checkGraph, closedVertexListToTour, edgeSetToTour, getSingletonTour, requireNotEmpty, vertexListToTour
-
Constructor Details
-
NearestInsertionHeuristicTSP
public NearestInsertionHeuristicTSP()Constructor. By default a sub-tour is chosen based on the shortest edge -
NearestInsertionHeuristicTSP
Constructor Specifies an existing sub-tour that will be augmented to form a complete tour whengetTour(org.jgrapht.Graph)
is called- Parameters:
subtour
- Initial sub-tour, or null to start with shortest edge
-
-
Method Details
-
getTour
Computes a tour using the nearest insertion heuristic.- Parameters:
graph
- the input graph- Returns:
- a tour
- Throws:
IllegalArgumentException
- If the graph is not undirectedIllegalArgumentException
- If the graph is not completeIllegalArgumentException
- If the graph contains no verticesIllegalArgumentException
- If the specified sub-tour is for a different Graph instanceIllegalArgumentException
- If the graph does not contain specified sub-tour verticesIllegalArgumentException
- If the graph does not contain specified sub-tour edges
-