Expand description
elkai-rs is a rust library for solving travelling salesman problems (TSP) based on elkai (LKH 3)
- based on elkai by fikisipi (LKH by Keld Helsgaun): with proven optimal solutions up to N=315 and more accurate results than Google’s OR tools
- asymmetric and symmetric travelling salesman problems support
- clean and simple API: get results with one line calls
§Example usage
use std::collections::HashMap;
use elkai_rs::Coordinates2D;
fn main() {
let cities = Coordinates2D::new(HashMap::from_iter([
("city1", (0.0, 0.0)),
("city2", (0.0, 4.0)),
("city3", (5.0, 0.0))
]));
println!("{:?}", cities.solve(10));
}
use elkai_rs::DistanceMatrix;
fn main() {
let cities = DistanceMatrix::new(vec![
vec![0, 4, 0],
vec![0, 0, 5],
vec![0, 0, 0]
]);
println!("{:?}", cities.solve(10));
}
§License
The LKH native code by Helsgaun is released for non-commercial use only. Therefore the same restriction applies to elkai-rs, which is explained in the LICENSE
file.
§How it works internally
- We link the C api of elkai to Rust with cc-rs.
⚠️ elkai-rs takes a global mutex (just like what elkai did) during the solving phase which means two threads cannot solve problems at the same time. If you want to run other workloads at the same time, you have to run another process.
Structs§
- A structure representing coordinates of type {‘city name’: (x, y), …}
- A structure representing a matrix of float/int weights/distances.
Functions§
- solve problem with original LKH input as strings
param
: content of *.par fileparam
: content of *.[a]tsp file note to setPROBLEM_FILE = :stdin:
if use argproblem
.