salesman.js
Version:
Solves the traveling salesman problem using simulated annealing.
57 lines (43 loc) • 2.12 kB
Markdown
<a name="module_salesman"></a>
## 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=])](#module_salesman..solve) ⇒ <code>Array.<Number></code>
<a name="module_salesman..Point"></a>
### salesman~Point
**Kind**: inner class of <code>[salesman](#module_salesman)</code>
<a name="new_module_salesman..Point_new"></a>
#### new Point(x, y)
Represents a point in two dimensions.
| Param | Type | Description |
| --- | --- | --- |
| x | <code>Number</code> | abscissa |
| y | <code>Number</code> | ordinate |
<a name="module_salesman..solve"></a>
### salesman~solve(points, [temp_coeff], [callback=]) ⇒ <code>Array.<Number></code>
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 <code>[salesman](#module_salesman)</code>
**Returns**: <code>Array.<Number></code> - An array of indexes in the original array. Indicates in which order the different points are visited.
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| points | <code>Array.<Point></code> | | The points that the path will have to visit. |
| [temp_coeff] | <code>Number</code> | <code>0.999</code> | changes the convergence speed of the algorithm: the closer to 1, the slower the algorithm and the better the solutions. |
| [callback=] | <code>function</code> | | An optional callback to be called after each iteration. |
**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.
```