#dot #petri-net #format #pnml

netcrab

一个用于创建和导出Petri网的简单库

1个稳定版本

1.0.0 2023年5月29日

#928 in 数据结构

34 每月下载量
用于 cargo-check-deadlock

MIT/Apache

81KB
2K SLoC

Contributors Forks Stargazers Issues Apache License

Netcrab

一个用Rust编写的简单库,用于创建和导出Petri网

报告错误或请求功能

关于项目

Petri网实现

主要实现位于 petri_net.rs。它使用两个 BTreeMap 来存储位置和转换。位置和转换的引用分别命名为 PlaceRefTransitionRef。位置和转换用 String 标记。网络保持位置顺序,这使得迭代器具有确定性。

当将位置和转换添加到网络时,会返回对它们的引用。稍后可以使用这些引用来添加弧并访问标记。

注意:引用可以被克隆。可以拥有任意数量的位置或转换引用。

支持的导出格式

构建工具

入门指南

要获取本地副本并运行,请按照以下简单的示例步骤进行。

先决条件

  • 使用Rust网站上的方法之一安装Rust

安装

  1. 克隆仓库

    git clone https://github.com/hlisdero/netcrab.git
    
  2. 使用 cargo 构建项目

    cargo build
    
  3. 使用 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());

注意:有关更多示例,请参阅每个模块中的单元测试。

贡献

贡献使得开源社区成为一个如此美妙的学习、灵感和创造的地方。您所做的任何贡献都将受到 高度赞赏

如果您有改进此项目的建议,请克隆仓库并创建一个拉取请求。您也可以简单地打开一个带有“增强”标签的问题。别忘了为项目加星!再次感谢!

  1. 分支项目
  2. 创建您的功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交您的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开一个Pull Request

许可证

在MIT许可证和Apache许可证(版本2.0)的条款下分发。有关更多信息,请参阅LICENSE-MITLICENSE-APACHE

联系方式

项目链接: https://github.com/hlisdero/netcrab

致谢

基于Tom Meyer在https://github.com/Skasselbard/PetriToStar中找到的原始作品。

README.md基于Best-README-Template提供的模板。

依赖项

~1–1.5MB
~32K SLoC