我被要求建立一个petri网引擎,作为内部工作流程的基础。
到目前为止,我已经能够生成所有的逻辑和行为(我已经创建了一个“服务台”类型的工作流来测试规则和条件),并且一切正常。
不过,可视化Petri网并使其自动化被证明是一件有点痛苦的事情。
我一直在看SVG绘制图例程,如:http://flowchart.js.org(流程图)https://bramp.github.io/js-sequence-diagrams/(顺序图)
我很想修改其中的一个,或者找一个类似的作为基础,但是我遇到了一个意想不到的问题:我完全不熟悉复杂的绘图例程和处理多个并发连接和分支的自动放置的理论。
上面的两个例子很简单,但是在Petri网中,你可能会有一个地方产生多个转换,即使是短/简单的网,如果处理不当,也很容易变成笨拙的图。
处理这个问题的最佳方法是什么?
编辑:我最终使用了MermaidJS,它有基本的工作流图,很容易适应。虽然它不是为Petri网图设计的,但它确实允许工作流有足够的样式和灵活性来准确地反映网络。
1条答案
按热度按时间gcuhipw91#
由于你不熟悉的主题,我认为这将是更容易使用或适应现有的工具,提供自动概述算法。
试试老的好graphviz包,它提供了很多图形的优化算法,我见过它在公司工作流可视化中的应用(不过我认为是png,使用后端),有vis.js版本,vis.js和衍生版本,d3混合版本,但我从来没有亲自尝试过。
对于实验和小型网络,有免费服务https://glitch.com/edit/#!/graphviz?path=README.md:1:0
SVG是http://www.graphviz.org/doc/info/output.html支持的输出之一
超过1000个节点可能需要较大的缓存:http://www.graphviz.org/content/drawing-large-petrinet
Boris Stitnicky用graphviz开发了YPetri,(我没有检查svg)为他工作,可能是为大量其他工作流可视化工具工作。
Petri net drawing and code generation
如果你一心想实现一些算法自己可能会问在比较科学组,有这么多的技术和算法美丽的图形绘制。