An open API service indexing awesome lists of open source software.

https://github.com/lovasoa/salesman.js

Solves the traveling salesman problem using simulated annealing.
https://github.com/lovasoa/salesman.js

salesman solver

Last synced: 10 months ago
JSON representation

Solves the traveling salesman problem using simulated annealing.

Awesome Lists containing this project

README

          

## salesman
**See**: [demo](https://lovasoa.github.io/salesman.js/)
**Author**: Ophir LOJKINE

salesman npm module

Good heuristic for the traveling salesman problem using simulated annealing.

* [salesman](#module_salesman)
* [~Point](#module_salesman..Point)
* [new Point(x, y)](#new_module_salesman..Point_new)
* [~solve(points, [temp_coeff], [callback], [callback], [keep_end])](#module_salesman..solve) ⇒ Array.<number>

### salesman~Point
**Kind**: inner class of [salesman](#module_salesman)

#### new Point(x, y)
Represents a point in two dimensions. Used as the input for `solve`.

| Param | Type | Description |
| --- | --- | --- |
| x | number | abscissa |
| y | number | ordinate |

### salesman~solve(points, [temp_coeff], [callback], [callback], [keep_end]) ⇒ Array.<number>
Solves the following problem:
Given a list of points and the distances between each pair of points,
what is the shortest possible route that visits each point exactly
once and returns to the origin point?

**Kind**: inner method of [salesman](#module_salesman)
**Returns**: Array.<number> - An array of indexes in the original array. Indicates in which order the different points are visited.

| Param | Type | Default | Description |
| --- | --- | --- | --- |
| points | Array.<Point> | | The points that the path will have to visit. |
| [temp_coeff] | number | 0.999 | changes the convergence speed of the algorithm. Smaller values (0.9) work faster but give poorer solutions, whereas values closer to 1 (0.99999) work slower, but give better solutions. |
| [callback] | function | | An optional callback to be called after each iteration. |
| [callback] | function | euclidean | An optional argument to specify how distances are calculated. The function takes two Point objects as arguments and returns a number for distance. Defaults to simple Euclidean distance calculation. |
| [keep_end] | boolean | false | An optional argument to specify if the last point is fixed. If false then the minimum circuit is calculated, if true the minimum path from first to last node is calculated. |

**Example**
```js
var points = [
new salesman.Point(2,3)
//other points
];
var solution = salesman.solve(points);
var ordered_points = solution.map(i => points[i]);
// ordered_points now contains the points, in the order they ought to be visited.
```