摘要:Process Trees
在PM4PY中,我们为process trees(可视化、转换成Petri Net、日志生成)提供支持,导入导出,和生成他们的功能。
导入导出Process Trees(pt)
在PM4PY中,我们提供PTML格式导入导出pt。
from pm4py.objects.process_tree.importer import importer as ptml_importer
tree = ptml_importer.apply("tests/input_data/running-example.ptml")
from pm4py.objects.process_tree.exporter import exporter as ptml_exporter
ptml_exporter.apply(tree, "running-example.ptml")
Generation of process trees 生成流程树
from pm4py.algo.simulation.tree_generator import simulator as tree_gen
parameters = {}
tree = tree_gen.apply(parameters=parameters)
parameters是个字典,每个键为参数名,并且要写小写才生效。下表进行参数解释。
参数 | 含义 |
---|---|
mode | 最频繁的可见活动数量(默认 20) |
min | 可见活动的最小数量(默认 10) |
max | 可见活动的最大数量(默认 30) |
sequence | 将序列运算符添加到树的概率(默认 0.25)(按顺序执行) |
choice | 将选择运算符添加到树的概率(默认 0.25)(即xor,择其一执行) |
parallel | 将并行运算符添加到树的概率(默认 0.25)(即and,并行) |
loop | 将循环运算符添加到树的概率(默认 0.25)(重复执行) |
or | 将或运算符添加到树的概率(默认 0) |
silent | 将静默活动添加到选择或循环运算符的概率(默认 0.25) |
duplicate | 复制活动标签的概率(默认 0) |
lt_dependency | 将随机依赖项添加到树的概率(默认 0) |
infrequent | 做出选择的概率具有不常见的路径(默认 0.25) |
no_models | 从模型种群中生成的树数(默认 10) |
unfold | 是否展开循环以便在依赖项中包含选项: 0=False, 1=True,如果 lt_dependency <= 0: 这应该始终为 0(假)如果 lt_dependency > 0:这可以是 1 或 0(True 或 False)(默认 10) |
max_repeat | 循环的最大重复次数(默认 10)(仅在unfold为 True 时使用) |
PT图中: | |
"->"即seq:树的当前节点的子节点从左到右执行。 | |
"*"即loop:左子节点总是执行,右子节点会触发左子节点重复执行。 | |
"X"即choice(xor):两个选项只选其一执行。 | |
"+"即parallel(and):两个选项并行。 |
通过PT生成一个日志log
示例代码中生成100次traces的事件日志,一次trace是 从开始走到结尾的一次记录。
from pm4py.objects.process_tree import semantics
log = semantics.generate_log(tree, no_traces=100)
PT转换成Petri net
示例代码将PT转换成Petri net
from pm4py.objects.conversion.process_tree import converter as pt_converter
net, im, fm = pt_converter.apply(tree)
注:net是Petri net,im是initial_marking, fm是final_marking
可视化PT
from pm4py.visualization.process_tree import visualizer as pt_visualizer
gviz = pt_visualizer.apply(tree, parameters={pt_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "png"})
pt_visualizer.view(gviz)
将Petri net转为PT
from pm4py.objects.conversion.wf_net import converter as wf_net_converter
tree = wf_net_converter.apply(net, im, fm)
print(tree)
*若对本文有疑问(例如:笔记中知识点或表达有误),欢迎指出,共同学习进步。