是否有用于绘制Petri网并从中生成任何源代码的软件?源代码可以是任何已知的编程语言......
稍微不太理想的选项是在一些开放格式(如XML或任何其他数据语言)中输出仅具有基于文本的文件中的Petri网图形描述的文件。然后我可以自己编写代码生成器,但至少我想避免使用gui / graph开发部分;))
由于
答案 0 :(得分:3)
检查PetriNetSim它是用Java开发的,你可以绘制和模拟简单/有色/定时的petrinets。它提供了一些例子。您可以在Java中扩展弧和节点约束。最后你可以看到生成的petri网的java类
您可以从github https://github.com/zamzam/PetriNetSim
获取源代码答案 1 :(得分:2)
我会看CPN Tools。它们提供各种构造,分析,有色Petri网仿真,以及索赔代码生成功能。
答案 2 :(得分:2)
我在Ruby中开发y_petri
。目前,YPetri可以处理可视化(YPetri::Net
类具有#visualize
方法,使用 Graphviz 来绘制网络),但不是您似乎想到的GUI编辑。仅供参考,首先,Petri网中的GUI编辑不像看起来那么重要。
使用的数据语言是Ruby本身(更准确地说,是用Ruby编写的内部DSL)。
Petri网的一个主要问题是,它们存在的种类太多了。 YPetri
试图成为一个通用的Petri网框架,有1种位置(任意标记类型)和4种基本类型的转换(定时/永久x化学计量/非化学计量)。此外,还有第五种转换,赋值转换,用其函数的返回值替换目标位置的标记。我相信这可以用来描述任何动态系统,同时像我能够做到的那样简约。
Petri网弧被理解为转换和位置之间的关系(它们属于y_petri
中的转换。我发现有一种方法来表达Petri网节点(位置/转换)之间的关系比只是弧形。为此,I use Ted Nelson's ZZ structure (ZigZag) basically as a replacement for a relational database。
对于模拟(Petri网执行),一般混合Petri网没有比隐式Euler方法(我称之为伪Euler)更快的模拟方法。这是因为Petri网可用于实现图灵机,对此无法进行通用加速。
如果您愿意在Ruby中运行,那么您可以在y_petri
或y_nelson
DSL代码中描述Petri网。我不提供转换为XML,因为我认为它不优于源DSL。可以编写这样的导出例程,但我鼓励您使用DSL。