#tsp #salesman #lkh #atsp

elkai-rs

elkai-rs 是一个基于 elkai (LKH 3) 的 Rust 库,用于解决旅行商问题 (TSP)。

8 个版本

0.1.7 2024年7月31日
0.1.6 2024年7月20日
0.1.3 2024年2月14日

#413数据结构

Download history 32/week @ 2024-07-01 315/week @ 2024-07-15 200/week @ 2024-07-29

每月 515 次下载

自定义许可协议

1MB
20K SLoC

C 20K SLoC // 0.2% comments Rust 209 SLoC // 0.0% comments

elkai-rs - 解决 TSP 问题的 Rust 库

crates.io docs repo


  • 基于 fikisipi 的 elkai (Keld Helsgaun 的 LKH):已证明 N=315 以上的最优解,比 Google 的 OR 工具更准确
  • 支持非对称和对称 旅行商问题
  • 简洁简单的 API:一行代码即可获得结果

安装

[dependencies]
elkai-rs = "0.1.7"

示例用法

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));
}

许可协议

Helsgaun 的 LKH 原生代码仅限非商业用途发布。因此,elkai-rs 也适用同样的限制,这在 LICENSE 文件中有解释。

内部工作原理

  • 我们使用 cc-rs 将 elkai 的 C API 连接到 Rust。

⚠️ elkai-rs 在解决阶段会使用 全局互斥锁(与 elkai 一样),这意味着不能同时有两个线程解决问题。如果您想同时运行其他工作负载,您必须运行另一个进程。

依赖项