EPCs
EPCs是事件驱动链(Event-driven Process Chains),跟BPMN、YAWL一样有很多语义相同的符号,因为用得少不多过介绍了。
有一个“恶性循环(vicious circle)”的概念介绍一下,这是由于对EPCs语义的定义不明确导致的,如下图所示,事件e1和e2都持有一个托肯(token),这导致下一步会发生什么是不明确的,因为两个OR-joins都相互依赖于对方(OR-join要求其输入弧上可以到达的托肯都达到后才能执行下一步)。假如阻塞e1的OR-join,这样语义定义下,e2的OR-join也必须阻塞,这就导致死锁;而假如e1的OR-join不阻塞,同样e2的OR-join也不阻塞(同一语义定义),于是f1和f2都执行,并且在经过两个AND-split又流向了两个OR-join,这就要求OR-joins应该要阻塞的(因为会出现死循环)。这就是一个paradox,因为不管定义哪种语义都是错的。
恶性循环悖论表明,更高级别的构造可能会引入各种微妙的语义问题。尽管存在这些问题和不同的符号概念,但不同语言的核心概念却非常相似。

因果网(Casual Nets)
前面介绍的很多建模语言包含的元素符号如Petri网的库所、YAWL的条件、EPCs的连接器和事件、BPMN的网关等,它们用来连接活动,但是在事件日志却是没有留下任何“标记”(或者说信息)的,即它们需要通过分析(流程的)行为来推出。由于这个问题,有些挖掘算法挖掘的模型就只包括活动,而不包括活动的连接元素,因果网就是这类建模语言。
因果网就是一种为流程挖掘量身定制的一种模型表示。一个因果网是一个图,图中的结点表示活动(Activities),弧表示因果依赖关系(Casual dependencies),每个活动都包含一组可能的输入绑定(input bindings)和一组可能的输出绑定(output bindings)。
如下图所示,活动a的输入绑定是一个空集,因为它是作为开始活动,同理活动z的输出绑定是空集。a有两个输出绑定,即{b,d}和{c,d},这意味着a执行后,其后要么跟着b和d,要么跟着c和d。活动e有两个可能的输入绑定,即{b,d}和{c,d},以及三个可能的输出绑定{g}、{h}和{f},因此活动e要么出现在b和d(都发生)之后,要么出现在c和d(都发生)之后。
实际上,下图和Petri网介绍那篇文章中使用的流程图是行迹等价(trace equivalent,后面会专门写一篇介绍)的,即它们允许出现的行迹的集合是一致的,但是因果网中不需要库所,其路由逻辑仅有输入和输出绑定表示。

定义1(因果网,Casual net)一个因果网(C-net)是一个五元组,其中:
是有限的活动集合;
是开始活动(start activity);
是结束活动(end activity);
是依赖关系集(dependency relation);
(
是活动集A的幂集,即活动集合的集合);
定义了每个活动的可能输入绑定(input bindings)的集合;
定义了每个活动的可能输出绑定(output bindings)的集合,
使得
;
;
;
;以及
- 所有图(A,D)中的活动都在ai到ao的路径上。
如图2,活动集A = {a,b,c,d,e,f,g,h,z},a=ai是唯一的开始活动,z=ao是唯一的结束活动;依赖关系集D = {(a,b),(a,c),(a,d),(b,e),...,(g,z),(h,z)};函数I和O描述了可能的输入和输出绑定的集合,I(a)=∅,O(a)={{b,d},{c,d}},I(b)={{a},{f}},O(b)={{e}},...,I(z)={{g},{h}},O(z)=∅。注意,只有开始活动ai的输入绑定集和结束活动ao的输出绑定集可以是空集。下面给出绑定的形式定义:
定义2(绑定,binding) 令是一个C-net,B=
是活动绑定的集合。绑定序列σ 是一个活动绑定的序列,即
。
下面开始引出有效绑定序列的概念,这和工作流网的合理性(soundness)很相似,要求流程模型是能正常结束的。
定义3(状态,state) 令是一个C-net,
是C的状态空间,s∈S是一个状态(state),即一个未定约束(pending obligations)[有点像托肯]的集合,函数
归纳定义为:对任意绑定序列,
且
,
是执行绑定序列σ后产生的状态。
一个有效序列(valid sequence)是一个绑定序列满足a)以开始活动ai开始,b)以结束活动ao结束,c)只能消耗未定约束,且d)结束后网中没有遗留未定约束。其实也就是说,有效序列是一个从开始到结束的序列,并且序列中发生的活动是由未定约束决定的,一个有效序列的发生不能留有未定约束在网中(就跟WF-net中的库所一样,托肯不能在网中有遗留)。比如下面图中,一个有效序列σ=<(a, ∅,{b,d}),(d,{a},{e}),(b,{a},{e}),(e,{b,d},∅)>,其状态变化见图4:


下面给出有效性的形式化定义:
定义4(有效,valid)令是一个C-net,绑定序列σ =
是C的有效序列,当且仅当:
(首是开始活动,尾是结束活动,中间是除了开始活动和结束活动的其他活动)
(结束时不留未定约束在网中,即结束时状态应为空)
- 对于σ的任何前缀
。(这里原书应该有错,σ'应该是从a1到ak-1,这个充要条件的意思是由σ'对应的状态集推出的下一个活动ak,其输入绑定与ak的状态应当存在于σ'对应的状态集中,即ak的发生需要对应的状态满足(就比如Petri网中变迁的触发需要其前集都有托肯,即处于使能状态),到这个条件我们没有看到活动的发生需要消耗对应的输入绑定的未定约束,即对应的状态)。
我们记V(C)为网C的所有有效序列的集合。
有了有效序列的概念后,我们要求一个C-net只能允许有效序列,不能存在非有效序列(invalid sequence),这就引出因果网的合理性(soundness)的概念了,和工作流网是一样的道理,我们要求我们的流程模型是合理的,即每一个流程案例都要有始有终,并且流程案例结束后不能留信息在流程中(不能影响其他流程案例的执行),同时流程中给出的每个结构都是可以发生,并且不能有诸如死锁、活锁结构的存在,这保证每个活动都可以被发生,每个流程案例都可以结束。下面给出因果网的合理性的形式化定义:
定义5(因果网的合理性,soundness of C-nets) 一个C-net是合理的,如果a)对于任何活动及其输入绑定
,至少存在一个有效序列和A中的一个输出绑定
,使得
,且b)对任意活动及其输出绑定
,至少存在一个有效序列和A中的一个输入绑定
,使得
(即要求网中的每个结构都是可以发生的,都有存在对应的有效序列使它们可以发生,并且只能发生在有效序列中)。
因果网和工作流网的比较
有的因果网,会不存在合理的工作流网,可以只产生因果网的有效序列而不产生非有效序列,如下面一个因果网例子
因果网特别适合于流程挖掘,因为其固有的声明表示性(有效性上面是要求网的整个序列,而不是关注局部的触发规则)和表达性(有的因果网没有对应的合理的工作流网,所以表达性更强,即别的流程模型无法表达的内容),同时不需要额外的元素来复杂化流程(如库所、条件之类的)。