【问题标题】:Petri net drawing and code generationPetri 网绘图和代码生成
【发布时间】:2011-02-09 14:32:20
【问题描述】:

是否有任何软件可以绘制 Petri 网并从那里生成任何源代码?源代码可以是任何已知的编程语言...

稍微不太理想的选项是在基于文本的文件中以某种开放格式(如 XML 或任何其他数据语言)输出仅包含 Petri 网图描述的文件。然后我可以自己编写代码生成器,但至少我想避免 gui/graph 开发部分;))

谢谢

【问题讨论】:

标签: automation code-generation metaprogramming petri-net


【解决方案1】:

我正在用 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网没有比隐式欧拉法(我称之为伪欧拉法)更快的模拟方法。这是因为 Petri 网可用于实现图灵机,而一般的加速是不可能的。

如果您愿意在 Ruby 中进行操作,那么您可以使用 y_petriy_nelson DSL 代码来描述 Petri 网。我不提供到 XML 的转换,因为我不认为它优于源 DSL。可以编写这样的导出例程,但我鼓励您改用 DSL。

【讨论】:

    【解决方案2】:

    我会看看CPN Tools。它们提供各种有色Petri网的构建、分析、模拟,以及索赔代码生成能力。

    【讨论】:

      【解决方案3】:

      查看PetriNetSim它是用Java开发的,你可以绘制和模拟简单的/彩色的/定时的Petrinets。它带有几个例子。您可以在 Java 中扩展弧和节点约束。最后可以看到生成的Petri网的java类

      你可以从github上获取源代码https://github.com/guillem-catala/PetriNetSim

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-07
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        相关资源
        最近更新 更多