Class TwoOptHeuristicTSP<V,E>
- java.lang.Object
-
- org.jgrapht.alg.tour.TwoOptHeuristicTSP<V,E>
-
- Type Parameters:
V
- the graph vertex typeE
- the graph edge type
- All Implemented Interfaces:
HamiltonianCycleAlgorithm<V,E>
,HamiltonianCycleImprovementAlgorithm<V,E>
public class TwoOptHeuristicTSP<V,E> extends java.lang.Object implements HamiltonianCycleAlgorithm<V,E>, HamiltonianCycleImprovementAlgorithm<V,E>
The 2-opt heuristic algorithm for the TSP problem.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?".
This is an implementation of the 2-opt improvement heuristic algorithm. The algorithm generates k initial tours and then iteratively improves the tours until a local minimum is reached. In each iteration it applies the best possible 2-opt move which means to find the best pair of edges $(i,i+1)$ and $(j,j+1)$ such that replacing them with $(i,j)$ and $(i+1,j+1)$ minimizes the tour length. The default initial tours use RandomTour, however an alternative algorithm can be provided to create the initial tour. Initial tours generated using NearestNeighborHeuristicTSP give good results and performance.
See wikipedia for more details.
This implementation can also be used in order to try to improve an existing tour. See method
improveTour(GraphPath)
.- Author:
- Dimitrios Michail
-
-
Constructor Summary
Constructors Constructor Description TwoOptHeuristicTSP()
Constructor.TwoOptHeuristicTSP(int k)
ConstructorTwoOptHeuristicTSP(int k, long seed)
ConstructorTwoOptHeuristicTSP(int k, java.util.Random rng)
ConstructorTwoOptHeuristicTSP(int k, java.util.Random rng, double minCostImprovement)
ConstructorTwoOptHeuristicTSP(int k, HamiltonianCycleAlgorithm<V,E> initializer)
ConstructorTwoOptHeuristicTSP(int k, HamiltonianCycleAlgorithm<V,E> initializer, double minCostImprovement)
ConstructorTwoOptHeuristicTSP(HamiltonianCycleAlgorithm<V,E> initializer)
Constructor
-
-
-
Constructor Detail
-
TwoOptHeuristicTSP
public TwoOptHeuristicTSP()
Constructor. By default one initial random tour is used.
-
TwoOptHeuristicTSP
public TwoOptHeuristicTSP(int k)
Constructor- Parameters:
k
- how many initial random tours to check
-
TwoOptHeuristicTSP
public TwoOptHeuristicTSP(int k, long seed)
Constructor- Parameters:
k
- how many initial random tours to checkseed
- seed for the random number generator
-
TwoOptHeuristicTSP
public TwoOptHeuristicTSP(int k, java.util.Random rng)
Constructor- Parameters:
k
- how many initial random tours to checkrng
- random number generator
-
TwoOptHeuristicTSP
public TwoOptHeuristicTSP(int k, java.util.Random rng, double minCostImprovement)
Constructor- Parameters:
k
- how many initial random tours to checkrng
- random number generatorminCostImprovement
- Minimum cost improvement per iteration
-
TwoOptHeuristicTSP
public TwoOptHeuristicTSP(HamiltonianCycleAlgorithm<V,E> initializer)
Constructor- Parameters:
initializer
- Algorithm to generate initial tour
-
TwoOptHeuristicTSP
public TwoOptHeuristicTSP(int k, HamiltonianCycleAlgorithm<V,E> initializer)
Constructor- Parameters:
k
- how many initial tours to checkinitializer
- Algorithm to generate initial tour
-
TwoOptHeuristicTSP
public TwoOptHeuristicTSP(int k, HamiltonianCycleAlgorithm<V,E> initializer, double minCostImprovement)
Constructor- Parameters:
k
- how many initial tours to checkinitializer
- Algorithm to generate initial toursminCostImprovement
- Minimum cost improvement per iteration
-
-
Method Detail
-
getTour
public GraphPath<V,E> getTour(Graph<V,E> graph)
Computes a 2-approximate tour.- Specified by:
getTour
in interfaceHamiltonianCycleAlgorithm<V,E>
- Parameters:
graph
- the input graph- Returns:
- a tour
- Throws:
java.lang.IllegalArgumentException
- if the graph is not undirectedjava.lang.IllegalArgumentException
- if the graph is not completejava.lang.IllegalArgumentException
- if the graph contains no vertices
-
improveTour
public GraphPath<V,E> improveTour(GraphPath<V,E> tour)
Try to improve a tour by running the 2-opt heuristic.- Specified by:
improveTour
in interfaceHamiltonianCycleImprovementAlgorithm<V,E>
- Parameters:
tour
- a tour- Returns:
- a possibly improved tour
-
-