1个稳定版本
1.0.0 | 2023年5月29日 |
---|
#928 in 数据结构
34 每月下载量
用于 cargo-check-deadlock
81KB
2K SLoC
关于项目
Petri网实现
主要实现位于 petri_net.rs
。它使用两个 BTreeMap
来存储位置和转换。位置和转换的引用分别命名为 PlaceRef
和 TransitionRef
。位置和转换用 String
标记。网络保持位置顺序,这使得迭代器具有确定性。
当将位置和转换添加到网络时,会返回对它们的引用。稍后可以使用这些引用来添加弧并访问标记。
注意:引用可以被克隆。可以拥有任意数量的位置或转换引用。
支持的导出格式
- Petri网标记语言(PNML) https://www.pnml.org/
- LoLA - 低级Petri网分析器 https://theo.informatik.uni-rostock.de/theo-forschung/tools/lola/
- DOT(图形描述语言) https://en.wikipedia.org/wiki/DOT_(graph_description_language)
构建工具
入门指南
要获取本地副本并运行,请按照以下简单的示例步骤进行。
先决条件
- 使用Rust网站上的方法之一安装Rust
安装
-
克隆仓库
git clone https://github.com/hlisdero/netcrab.git
-
使用
cargo
构建项目cargo build
-
使用
cargo
运行测试以检查一切是否正常工作cargo test
使用
使用单个位置和一个转换形成循环来创建自定义Petri网
use netcrab::net::PetriNet;
let mut net = PetriNet::new();
let place_ref = net.add_place("Example place");
let transition_ref = net.add_transition("Example transition");
let result = net.add_arc_place_transition(&place_ref, &transition_ref);
assert!(result.is_ok());
let result = net.add_arc_transition_place(&transition_ref, &place_ref);
assert!(result.is_ok());
注意:有关更多示例,请参阅每个模块中的单元测试。
贡献
贡献使得开源社区成为一个如此美妙的学习、灵感和创造的地方。您所做的任何贡献都将受到 高度赞赏。
如果您有改进此项目的建议,请克隆仓库并创建一个拉取请求。您也可以简单地打开一个带有“增强”标签的问题。别忘了为项目加星!再次感谢!
- 分支项目
- 创建您的功能分支 (
git checkout -b feature/AmazingFeature
) - 提交您的更改 (
git commit -m 'Add some AmazingFeature'
) - 推送到分支 (
git push origin feature/AmazingFeature
) - 打开一个Pull Request
许可证
在MIT许可证和Apache许可证(版本2.0)的条款下分发。有关更多信息,请参阅LICENSE-MIT,LICENSE-APACHE。
联系方式
项目链接: https://github.com/hlisdero/netcrab
致谢
基于Tom Meyer在https://github.com/Skasselbard/PetriToStar中找到的原始作品。
此README.md
基于Best-README-Template提供的模板。
依赖项
~1–1.5MB
~32K SLoC