# tsp_descent Traveling Salesman Problem Solution by Descent

tsp_descent, a MATLAB program 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  0
```
The 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.

### Languages:

tsp_descent is available in a MATLAB version.

### Related Data and Programs:

CHANGE_MAKING, a MATLAB library which considers the change making problem, in which a given sum is to be formed using coins of various denominations.

CITIES, a MATLAB library which handles various problems associated with a set of "cities" on a map.

COMBINATION_LOCK, a MATLAB program which simulates the process of determining the secret combination of a lock.

PARTITION_PROBLEM, a MATLAB library which seeks solutions of the partition problem, splitting a set of integers into two subsets with equal sum.

SATISFY, a MATLAB program which demonstrates, for a particular circuit, an exhaustive search for solutions of the circuit satisfiability problem.

SUBSET_SUM, a MATLAB library 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 program which reads a file of city-to-city distances and solves the traveling salesperson problem, using brute force.

tsp_greedy, a MATLAB program 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 program 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.

### Reference:

1. Gerhard Reinelt,
TSPLIB - A Traveling Salesman Problem Library,
ORSA Journal on Computing,
Volume 3, Number 4, Fall 1991, pages 376-384.

### Source Code:

Last revised on 24 April 2019.