#flow #graph #optimization #min-max

mcmf

此软件包用于解决最小成本最大流问题的实例。它使用来自 LEMON 图优化库的网状简单算法。

3 个稳定版本

使用旧的 Rust 2015

2.0.0 2018年8月30日
1.1.0 2017年12月12日
1.0.0 2017年12月12日

#min-max 中排名第 16

Download history 49/week @ 2024-03-11 28/week @ 2024-03-18 30/week @ 2024-03-25 103/week @ 2024-04-01 232/week @ 2024-04-08 67/week @ 2024-04-15 33/week @ 2024-04-22 25/week @ 2024-04-29 122/week @ 2024-05-06 46/week @ 2024-05-13 84/week @ 2024-05-20 51/week @ 2024-05-27 130/week @ 2024-06-03 72/week @ 2024-06-10 58/week @ 2024-06-17 54/week @ 2024-06-24

每月下载量 321
用于 optimal-transport

MIT 许可证

440KB
3.5K SLoC

C++ 3.5K SLoC // 0.1% comments Rust 322 SLoC // 0.0% comments

mcmf

Version

此软件包用于解决 最小成本最大流问题 的实例。它使用来自 LEMON 图优化库的网状简单算法。

许多问题是最小成本最大流的特殊情况,包括最大流、单源最短路径以及在二分图上的最大权匹配。

因此,此软件包可以解决上述所有问题,尽管它可能不如专用算法高效。

请参阅 文档

示例

use mcmf::{GraphBuilder, Vertex, Cost, Capacity};
let (cost, paths) = GraphBuilder::new()
    .add_edge(Vertex::Source, "Vancouver", Capacity(2), Cost(0))
    .add_edge("Vancouver", "Toronto", Capacity(2), Cost(100))
    .add_edge("Toronto", "Halifax", Capacity(1), Cost(150))
    .add_edge("Vancouver", "Halifax", Capacity(5), Cost(400))
    .add_edge("Halifax", Vertex::Sink, Capacity(2), Cost(0))
    .mcmf();
assert_eq!(cost, 650);
assert_eq!(cost, paths.iter().map(|path| path.cost()).sum());
assert_eq!(paths.len(), 2);
assert!(
    paths[0].vertices() == vec![
        &Vertex::Source,
        &Vertex::Node("Vancouver"),
        &Vertex::Node("Halifax"),
        &Vertex::Sink]);
assert!(
    paths[1].vertices() == vec![
        &Vertex::Source,
        &Vertex::Node("Vancouver"),
        &Vertex::Node("Toronto"),
        &Vertex::Node("Halifax"),
        &Vertex::Sink]);

无运行时依赖