接下来,我们将介绍四种质量度量维度的最后一种,简单度以及合理性。具体情况参见下述介绍。
1. 简单度介绍
简单度(simplicity)遵循“发现的模型不应过于复杂”原则,仅从流程模型的结构出发,与事件日志无关。在流程挖掘中,这通常通过量化模型的复杂性(节点数、弧数、可理解性等)来实现。简单度主要依据了奥卡姆剃刀原则。
奥卡姆剃刀原则:公元 14 世纪,来自奥卡姆的威廉(William of Ockham)对当时无休无止的关于“共相”“本质”之类的争吵感到厌倦,于是著书立说,宣传只承认确实存在的东西,认为那些空洞无物的普遍性要领都是无用的累赘,应当被无情地“剃除”。他所主张的“思维经济原则”,概括起来就是“如无必要,勿增实体。”因为他叫威廉,来自奥卡姆,人们为了纪念他就把这句话称为“奥卡姆剃刀”。
奥卡姆剃刀原则用一句话通俗解释为:“如无必要,勿增实体”,即“简单有效原理”。
2.简单度指标
(1)extended Cardoso metric (ECaM)
在介绍扩展Cardoso度量之前,让我们先介绍经典Cardoso量度。为此,有必要定义Cardoso考虑的流程类型,我们在定义11中这样做。
使用上述定义,我们可以定义所谓的“Cardoso metric”。
如定义12所示,度量对网络中的各种拆分(XOR、OR和and)进行计数,并对每个拆分给予一定的惩罚。每次拆分的基本原理是根据执行时引发的不同子状态的数量进行惩罚。
Cardoso度量适用于具有XOR-、OR-和and拆分的语言。Petri网只有两种类型的节点:位置和转换。然而,使用位置和转换可以对XOR、OR和and拆分进行建模。事实上,使用非自由选择网甚至更复杂的选择是可能的。因此,我们定义了一个度量的Petri网版本,它概括并改进了原始度量。
至于Cardoso度量,ECaM度量通过每个状态诱导多少个直接继承状态来惩罚每个状态。定义13中的ECFCP表示,库所p的惩罚是从库所p可到达的库所子集的数量。
(2)extended Cyclomatic metric (ECyM)
McCabe的Cyclomatic度量是一个非常著名的度量,用于测量程序过程的控制流图。其定义见定义14。
只有作为状态机网络的WF网络表现为控制流图,因为控制流图不允许并发。因此,需要扩展Cyclomatic度量来解决这一问题。
Cyclomatic度量旨在通过测量命令式代码的控制流程图来揭示复杂的命令式代码。McCabe没有考虑实际的代码,只考虑它的行为,在同样的意义上,我们可以通过不测量实际的WF网络结构,而是测量其可达性图,将Cyclomatic度量扩展到WF网络。
参考文献:K.B. Lassen and W.M.P. van der Aalst, “Complexity Metrics for
Workflow Nets,” Information and Software Technology, vol. 51, no. 3,
pp. 610-626, 2009.
复杂度(也可以叫做简单度)被定义为:
complexity = (2*EcaM*EcyM)/(EcaM+EcyM)
在Prom6中相关代码链接:
工具截图如下:
(3)python相关简单度介绍
在此示例中,我们仅仅考虑Petri网的简单度计算,具体思想如下:首先,考虑Petri网的库所/变迁的平均值mean_degree,即输入弧和输出弧的数目之和。如果所有库所至少有一个输入弧和输出弧,则数字至少为2。在0和无穷大之间选择一个数字k,则基于反弧度的简单性定义为1.0/(1.0+max(mean_degree-k,0))。
代码如下:
-
import pm4py #导入Petri网 net, initial_marking, final_marking = pm4py.read_pnml(os.path.join("example_Petri.pnml")) #简单度计算 from pm4py.algo.evaluation.simplicity import algorithm as simplicity_evaluator simp = simplicity_evaluator.apply(net) print(simp)
2.合理性(soundness)
合理性的定义如下:
定义 (合理性) [5]N=(P, T, F, A, l)是一个以i为输入库所,o为输出库所的工作流网。N是合理的当且仅当:
(1) 安全性(safeness):(N, [i])是安全的,即库所不能同时含有多个Token;
(2) 正确完成性(proper completion):对任意标识MÎ[N, [i]ñ,oÎM意味着M=[o];
(3) 可完成性(option to complete):对任意标识MÎ[N, [i]ñ, [o]Î[N, Mñ;
(4) 没有死的部分(absence of dead parts):(N, [i])不含有死变迁(也就是说,对于任意tÎT,存在一个使能t的发生序列)。
Woflan是一种流行的工作流网络可靠性检查方法,它能够为最终用户提供有意义的统计信息。Woflan应用于可接受Petri网(具有初始和最终标记的Petri网),并应用以下步骤:
1 .检查Petri网和标记是否有效; 2. 检查Petri网是否为工作流网;
3. 检查是否所有位置都被S形部件覆盖;4. 检查是否存在处理不当的对;
5. 检查均匀不变量中是否有未覆盖的位置;
6. 检查加权不变量中是否有未覆盖的位置;
7. 检查WPD是否正确; 8. 检查MCG中的子状态;
9. 检查是否存在无界序列; 11. 检查死掉的任务;
11. 正在检查活动任务; 12. 正在检查非活动任务;
13. 检查导致死锁的序列。
*prom6中代码链接:prom - Revision 47153: /Packages/Woflan/Trunk (tue.nl)
*pm4py中相关代码:
1. from pm4py.algo.analysis.woflan import algorithm as woflan
2. is_sound = woflan.apply(net, im, fm, parameters={woflan.Parameters.RETURN_ASAP_WH
EN_NOT_SOUND: True, woflan.Parameters.PRINT_DIAGNOSTICS: False, woflan.Parameters.RETURN_DIAGNOSTICS: False})