PM4PY - 分析建议怎样的BPMN可以转换成Process Tree

news/2025/2/16 5:21:25/

背景

读取手动绘制的BPMN图,欲将其转换成Process Tree,必定经过先将其转换成WF-net。
然而不规范或者逻辑有分歧的BPMN无法转换成唯一的WF-net,也就无法转换成Process Tree。
Process Tree:流程树,简称PT;
WF-net:工作流网,workflow-net,简称WF-net(是Petri net的一类子网);

遇到的问题(一)

在这里插入图片描述
如上图所示,说所给的Petri net不是一个WF-net。其实正常不会引发这个报错,后来发现是BPMN图的标注用错了,事件结束的标注用成了中间事件,所以画好一个BPMN至少得细心,而且最好是符合良构编排的BPMN。可参考BPMN - 如何绘制符合良构编排的基础BPMN?

遇到的问题(二)

在这里插入图片描述
如上图所示,说WF-net解析失败。溯源,点报错行定位到报错源码位置。
在这里插入图片描述
可以看到引发该错误的是因为len(grouped_net.transitions) 不等于 1。
我们再来看看这个grouped_net到底是什么,定位到上面group_blocks_in_net函数。
在这里插入图片描述
其实就是对传过来的petri net做一个处理。返回处理后的petri net,所以这个grouped_net就是这个处理后的petri net。
那么这个grouped_net的transitions是什么,我们把这段代码拿出来打印,把相关信息打印看看。
下面读取了一个报上面转换失败错误的BPMN。

bpmn_graph = pm4py.read_bpmn('D:\\PM数据\\diagram (10).bpmn')
bpmn_graph = layouter.apply(bpmn_graph)
net, im, fm = bpmn_converter.apply(bpmn_graph)
print(net)
print()
grouped_net = tpt.group_blocks_in_net(net, parameters={})
print(grouped_net.transitions)
print(len(grouped_net.transitions))

在这里插入图片描述
前三行是没处理过的petri net的属性
倒数第二行是处理过的transitions属性
最后一行是属性个数,也就是前面不等于1的那个值
为什么要等于1呢?我将上面错误的BPMN换成可以转换成功的BPMN
在这里插入图片描述
是的,他的个数就是1。细看它确实只有一个元组,里面第一个参数是标签,第二个参数是个字符串。
仔细看他这个字符串,其实它就是一个PT的结构,原来就是通过这一长串字符串来转换成PT的。

这就是为什么他len(grouped_net.transitions) 不等于 1,就无法将没处理过的petri net转换成PT的原因。
因为这个BPMN逻辑有分歧或者其他什么原因,导致他无法合并成1个完整的流程。
这些就是分析过程。

现象:
上面错误的BPMN中,我手动分析想将它画成一个PT会出现逻辑分歧,根本画不出来。因为发现其中的循环会导致在转换成吻合的PT时无法表达出来。

可能原因:
BPMN的XOR网关出现了嵌套,逻辑混乱有分歧。

结论:
避免网关嵌套。一个网关分叉出去后,要再合并回来。

注意事项:

  1. 尽量避免网关嵌套(就拿循环来说,这段循环里,最好是被两个网关包起来,不要在这个循环里的某个节点伸出一条到循环外,即不要节外生枝),可以参照下图的循环。
    在这里插入图片描述
    它可以转换成下图的PT,reinitiate request是触发循环的事件。
    在这里插入图片描述
  2. 画的BPMN的XOR分叉和合并最好可以看成两个分支,最后两个分支合并。
    如下图所示,网关1,可以将上面一整块看成是一个事件,这样就可以看成两个事件分叉,最后用合并网关将两个事件合并。其实这样也是避免嵌套。
    在这里插入图片描述

*若对本文有疑问(例如:笔记中知识点或表达有误),欢迎指出,共同学习进步。


http://www.ppmy.cn/news/514423.html

相关文章

pm4py、graphviz绘图中文乱码问题

最近使用pm4py画流程图,结果是中文乱码,汉字都是“四条”麻将。 pm4py是用graphviz画图的,默认不支持中文的,需要设置中文字体。 解决办法如下: 深入到pydotplus包里找到graphviz.py文件,找到Node类&#x…

pm4py在anaconda环境下的安装

由于研究方向与过程挖掘有关,prom工具是源于JAVA实现的,这里记录一下pm4py(process mining for Python)资源包如何安装。 首先来到pm4py官网:https://pm4py.fit.fraunhofer.de/ 来到Windows下的安装步骤:h…

PM4PY - 事件过滤的简化接口的使用

log pm4py.filter_end_activities(log, admitted_end_activities) 描述:在提供的列表中过滤具有结束活动的案例。 参数: log :log对象 admitted_end_activities:指定的结束活动列表 返回:过滤后的log对象 log pm4py…

PM4PY - Process Trees

摘要:Process Trees 在PM4PY中,我们为process trees(可视化、转换成Petri Net、日志生成)提供支持,导入导出,和生成他们的功能。 导入导出Process Trees(pt) 在PM4PY中&#xff0…

Python使用pm4py库读取xes文件

pm4py官方文档:PM4Py - Process Mining for PythonPM4Py is a process mining package for Python. PM4Py implements the latest, most useful, and extensively tested methods of process mining. The practical handling makes the introduction to the world o…

PM4PY - Filtering Event Data

摘要:过滤EVENT DATA 随笔 trace:路径,表示图上的路径,从头走到尾算一次trace Variant:变体,表示同一类traces,同一种路径为一个Variant case:方案/情况,表示事件日志里…

基于FPGA的快速傅里叶变换加速(三)

基于FPGA的快速傅里叶变换加速(三) 硬件加速介绍及部分verilog代码实现 1. 硬件加速1.1 FPGA1.1.1 FPGA介绍概念:基本结构:工作原理: 1.1.2 开发板开发板类型开发板介绍 1.2 加速理念1.2.1 硬件加速1.2.2 FFT中的加速&…

Android studio如何存放pm4和txt等其他文件

右击app——>new ——> folder——> assets Folder 确定 成功