3 个版本 (稳定)
1.1.0 | 2023年4月20日 |
---|---|
1.0.0 | 2023年4月12日 |
0.8.0 | 2022年9月20日 |
#342 in 模拟
80KB
809 行
Rust 的优先级网络分析
优先级网络
优先级网络(或优先级图法)是一种构建有向图中指定依赖关系的连通活动的方法。通过指定每个任务的最低、期望和最高持续时间,可以分析网络以找到位于关键路径上的活动,并且必须按时完成以避免延迟整个网络。
用法
给定以下优先级网络
┌──────────┐
┌────────────────►│Document:4├─────────────────┐
│ └──────────┘ │
│ ▼
┌────┴───┐ ┌─────────┐ ┌──────┐ ┌────────┐
│Design:5├──────►│Develop:6├────►│Test:4├─────►│Deploy:1│
└────────┘ └──────┬──┘ └──────┘ └────────┘
│ ▲
│ ┌───────┐ │
└────────►│Train:3├─────────┘
└───────┘
使用 precedence-net
,我们可以用以下代码建模它
use precedence_net::{Network, Result};
fn main() -> Result<()> {
let mut network_builder = Network::builder();
network_builder.add_activity("Design", 5.0)?;
network_builder.add_activity("Develop", 6.0)?;
network_builder.add_activity("Document", 4.0)?;
network_builder.add_activity("Deploy", 1.0)?;
network_builder.add_activity("Train", 3.0)?;
network_builder.add_activity("Test", 4.0)?;
network_builder.connect("Design", "Develop")?;
network_builder.connect("Design", "Document")?;
network_builder.connect("Develop", "Test")?;
network_builder.connect("Develop", "Train")?;
network_builder.connect("Test", "Deploy")?;
network_builder.connect("Train", "Deploy")?;
network_builder.connect("Document", "Deploy")?;
let network = Network::try_from(network_builder)?;
println!("Activity | Earliest Start | Earliest Finish | Latest Start | Latest Finish | Total Float | Free Float | Critical Path");
println!("---------------------------------------------------------------------------------------------------------------------");
for activity in network.activities()? {
println!(
"{:^8} | {:>14} | {:>15} | {:>12} | {:>13} | {:>11} | {:>10} | {:^14}",
activity,
network.earliest_start(activity)?,
network.earliest_finish(activity)?,
network.latest_start(activity)?,
network.latest_finish(activity)?,
network.total_float(activity)?,
network.free_float(activity)?,
network.on_critical_path(activity)?,
);
}
Ok(())
}
将生成以下输出
Activity | Earliest Start | Earliest Finish | Latest Start | Latest Finish | Total Float | Free Float | Critical Path
---------------------------------------------------------------------------------------------------------------------
Design | 0 | 5 | 0 | 5 | 0 | 0 | true
Develop | 5 | 11 | 5 | 11 | 0 | 0 | true
Document | 5 | 9 | 11 | 15 | 6 | 6 | false
Test | 11 | 15 | 11 | 15 | 0 | 0 | true
Train | 11 | 14 | 12 | 15 | 1 | 1 | false
Deploy | 15 | 16 | 15 | 16 | 0 | 0 | true
性能
使用 Criterion.rs,以下活动在一个包含 62,500 个活动的优先级网络上进行了基准测试,在拥有 16GB RAM 的 Intel Core i7 上。
- 向网络添加活动:78ms
- 从网络构建器创建网络:239ms
- 从网络创建网络构建器:44ms
- 检索关键路径:1.1ms
待实现
- 循环路由检查
- 序列化和反序列化
- 更新活动
许可证
版权所有 2022 Farrel Lifson
在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE-MIT。
依赖项
~2MB
~29K SLoC