与CPN Tools兼容的着色Petri网的C++运行引擎——CPetriNet

http://pan.baidu.com/s/1ntmjkHr

CPetriNet_API.rar源代码】

一种基于着色Petri网的RBAC策略冲突检测方法.pdf相关论文】


相信CPN Tools大家都用过,此API就是CPN Tools在C++上的实现,可以代码级别地进行声明和设置mark,可以单步执行,执行到终点。我没有设置固定的输出格式。但是信息都在类里封装好了,想读取也非常容易。
这个API的特点是:
1) 没有界面,全部用代码实现输入输出,可以做出规模很大的实验或工程应用。
2) 保持与CPN Tools的一致性,目前CPN Tools可以说是做着色Petri网设计与仿真的最佳工具了,会用CPN Tools的童鞋相信可以很快上手,可以大大节约学习成本。
3) 用C++实现,在VC6上开发与测试通过,相信在VS7,8,9,10上也可以顺利运行。比Java出身的CPN Tools速度不知快了多少倍。
4) 开源,方便大家增加一些其它功能,如n步执行,分析功能等等。


目前的一些不足:

1) 虽然目前并没有GUI编辑显示的功能,但是有对于处所已经写好了toString函数,相信调试不会太难。

2) 错误处理做的很简单,有些地方如colorset甚至没有类型检查,也是考虑到效率的问题。


大家最好确保声明和mark写对,如果控制台显示xxx Error.或者直接崩了的话,应该就是有的输入没写对的原因。API写的很仓促,如果大家发现是API本身的bug,请及时反馈给我。
源代码直接提供了我开发时用的VC6的工程,除了CPNetTest.cpp是测试文件,其它都是源代码,熟悉VC的相信一看就知道。测试文件里写了5个例子,通过不同的函数来切换。其中4个比较大的例子是直接照着CPN Tools里的模型写的,.cpn模型我就不传了,如果有需要再告诉我把。
最后,贴一段最简单的例子:

CCPNet *cpnet = new CCPNet(); \\表示一个colored petri网
cpnet->addPlace("P1", "int", CValue("int", 1, "int", 10)); \\添加名为P1的处所, 第二个参数为Place Type,第三个参数是初值。
cpnet->addPlace("P2", "int");
cpnet->addPlace("P3", "int");
  
cpnet->addTransition("T1_2"); \\添加名为T1_2的变迁
cpnet->transitionAddFromPlaceAndValue("T1_2", "P1", CValue("int", 1, "int", 10)); \\添加由P1连接到T1_2的弧,第三个参数是弧的expr
cpnet->transitionAddToPlaceAndValue("T1_2", "P2", CValue("int", 1, "int", 10));
  
cpnet->addTransition("T2_3");
cpnet->transitionAddFromPlaceAndValue("T2_3", "P2", CValue("int", 1, "int", 10));
cpnet->transitionAddToPlaceAndValue("T2_3", "P3", CValue("int", 1, "int", 10));
  
cpnet->initAllTransitions(); \\创建工作完毕后,初始化所有的变迁,做一次就行了
cpnet->fireToEnd(); \\触发变迁,直到终止,如果图本身停不了的话,程序也就停不了了
  
cout << cpnet->places2String(); \\在控制台显示所有处所中的token情况


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Casbin开源社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值