#routing #tsp #solver #dynamic-programming

concorde_rs

Concorde TSP 求解器的 Rust 绑定

1 个不稳定版本

0.1.1 2023年10月25日
0.1.0 2023年10月19日

算法 中排名第 2419

MIT 许可证

305KB
6.5K SLoC

C 6.5K SLoC // 0.1% comments Rust 298 SLoC

concorde-rs

一个 Rust 到 Concorde TSP 求解器的绑定,允许直接调用求解器而不是通过 TSP.lib 文件传递问题。目前,这个包只支持调用 Concorde TSP 求解器的两个例程。

  1. Held-Karp:基于动态规划的精确求解器
  2. Lin-Kernighan:启发式求解器

使用方法

use concorde_rs::{solver, Distance, LowerDistanceMatrix};

fn main() {
    struct Node(i32, i32);

    impl Distance for Node {
        fn calc_shortest_dist(&self, other: &Self) -> u32 {
            self.0.abs_diff(other.0) + self.1.abs_diff(other.1)
        }
    }

    let nodes: Vec<Node> = vec![Node(0, 0), Node(0, 3), Node(5, 6), Node(9, 1)];
    let dist_mat = LowerDistanceMatrix::from(nodes.as_ref());
    let solution = solver::tsp_hk(&dist_mat).unwrap();

    assert_eq!(solution.length, 30);
}

许可证

Rust 绑定代码遵循 MIT 许可证。对于 Concorde TSP 求解器代码,请查阅 Concorde TSP 求解器

无运行时依赖