tsp_descent, a MATLAB code which solves small versions of the traveling salesman problem, using a descent method.
The user must prepare a file beforehand, containing the city-to-city distances. The program will request the name of this file, and then read it in as a matrix d. An example of such a file is:
0 3 4 2 7 3 0 4 6 3 4 4 0 5 8 2 6 5 0 6 7 3 8 6 0The distance file d should be square, symmetric, and have a zero diagonal.
A tour of n cities can be represented as a permutation p on the integers 1 through n. The cost of the tour, that is, the length, is the sum
cost = sum ( 1 <= i <= n ) ( d(p(i),p(i+1)) )where p(n+1) is understood to mean p(1).
Given a permutation p, we can consider a variation p2 of p by selecting two indices i1 and i2, with i1 <= i2, and constructing a tour in which the ordering of cities between steps i1 and i2 is reversed.
p2 = [ p(1:i1-1), p(i2:-1:i1), p(i2+1:n) ]
We can consider a variation p2 of p by selecting two indices i1 and i2, with i1 <= i2, and constructing a tour in which we jump directly from i1 to i2, then traverse the cities between i2 and i1 in reverse order, and then resume the original tour, which we call a transposition of the tour.
p3 = [ p(1:i1), p(i2), p(i2-1:-1:i1+1), p(i2+1:n) ];
Starting with a random choice for p, we can generate random reversals and transpositions. The current value of p is replaced whenever a variation is seen to have a lower cost. By repeating this process, a sequence of tours is produced of successively lower cost. It is hoped that this process will find a good tour, if not the best.
This program is set to check only a limited number of variations, currently set to 1000. Thus, it will return an "answer" relatively quickly, even for problems of 50 or 100 cities, where the search space of possible tours is unimaginably complex.
However, even for small problems, there is no guarantee that the tour that is returned is optimal, or even close to optimal. Even if it can be shown that no reversal or transposition can improve the tour that is returned, this may merely mean that the tour is a local minimum.
The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.
tsp_descent is available in a MATLAB version.
change_making, a MATLAB code which considers the change making problem, in which a given sum is to be formed using coins of various denominations.
cities, a MATLAB code which handles various problems associated with a set of "cities" on a map.
combination_lock, a MATLAB code which simulates the process of determining the secret combination of a lock.
partition_problem, a MATLAB code which seeks solutions of the partition problem, splitting a set of integers into two subsets with equal sum.
satisfy, a MATLAB code which demonstrates, for a particular circuit, an exhaustive search for solutions of the circuit satisfiability problem.
subset_sum, a MATLAB code which seeks solutions of the subset sum problem.
tsp, a dataset directory which contains test data for the traveling salesperson problem;
tsp_brute, a MATLAB code which reads a file of city-to-city distances and solves the traveling salesperson problem, using brute force.
tsp_greedy, a MATLAB code which reads a file of city-to-city distances, picks a starting city, and then successively visits the nearest unvisited city.
tsp_random, a MATLAB code which reads a file of city-to-city distances, and then randomly samples a number of possible tours, to quickly seek a tour of lower length.