woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

Petri网对工作流建模

一、工作流概念
1.
案例(case):工作流系统的基本目的就是处理案例,保险索赔、绩效考核、抵押申请等等都是案例。每一个案例都有一个唯一的标识,案例在出现和消失之间总是处于某个特定状态,这个状态有三个元素组成:
1)案例相关的属性,指出特定条件下案例是否被执行或者忽略
2)已经满足的条件,说明案例的进展。
3)案例的内容,可能是文档、文件、档案或者数据库
2.
任务(task),泛指一般的工作单元,而非具体案例活动的一次具体执行(这一般称为活动),为了区分这一点,引入了工作项(work item)和活动的概念(activity)。工作项是指将要被执行的实际工作块,而活动就是指工作项的执行。

3.
过程(process):过程指出了哪些任务需要被执行,以什么顺序执行。可以将过程理解为具体案例的蓝图。过程定义了案例的生命周期,每个生命周期都有startend

4.
路由(route):决定了那些任务被执行和以何种方式执行,包括顺序、并行、选择和循环四种形式的路由

5.
启动(start):触发,工作项是有一个resource来启动的,触发的形式包括:
1)资源驱动,比如某个员工
2)外部事件,一个JMS消息
3)时间信号,比如凌晨2点触发某任务等等。
显然,触发是由环境而非工作流系统负责的。
二。Petri

    Petri
网是一种过程建模和分析工具,是1962年由Carl Adam Petri提出的,它有着坚实的数学基础,完全形式化的,可以将Petri网应用于工作流的建模和分析过程。

1.
传统的Petri网:
Petri
网有place(库所)和transition(变迁)组成
place
用于容纳tokentoken用以表示具体的案例,通过transitionfiring(实施)来表现过程的状态转变。理解几个概念:
1transition enabled(变迁的就绪):当且进当transition的每一个输入place都至少有一个token的时候,变迁就绪,可以实施。
2transition firing(变迁的实施):变迁的从每个输入place取走一个token,并往它的每个输出place增加一个token
看一个Petri网进行过程建模的例子:
clip_image001

圆圈表示place;矩形表示transition;用黑点表示token,存在于place中,这里没有表示出来,我在网上随便找的一张图,不过这里也展示了And-splitAnd-joinOr-splitOr-join的四种任务以及四种形式路由(从上到下依次是:顺序、并行、选择和循环)的Petri网建模。

2.
高级Petri
   
传统Petri网有一些缺点,比如无法对某些活动进行有效的建模,容易变的庞大而难以理解,因此通过扩展,就可以对复杂情况用结构化、容易理解的方式建模。关注三种扩展:颜色扩展、时间扩展和层次扩展。
1.
颜色扩展,为token引入颜色,用以区分同一place中的不同token,颜色其实代表了token(具体到某个案例)的属性,通过颜色扩展,我们可以为将要被消耗的token值设置了前置条件,那么变迁就绪的前提变化为:每个输入place都至少有一个token,并且满足前置条件。颜色扩展,也将产生的token与消耗的token进行了关联,产生token的值和数目将依赖于被消耗的token的值。

2.
时间扩展,当需要对一个过程的预期性能进行判断时,引入了时间扩展,为token加入时间戳,只有当被消耗的token的时间戳早于当前时间,就绪的transition才可以firing,而产生的token的时间戳就等于firing的时间加上延时。通过引入时间扩展,我们将可以对类似十字路口红绿灯时间敏感的复杂过程进行建模。

3.
层次扩展,过程是由一系列的placetransition、弧线和子过程组成的,为了反映这样的层次结构,适应复杂过程的建模,引入了层次扩展。

三、工作流概念到Petri网的映射

1.
过程:过程是由条件和任务组成,映射到Petri网,place就是条件,而transition就是任务。条件和place都是被动元素,而任务和变迁都是主动元素。案例就是token,案例的属性通过颜色扩展来映射,token的值包含了案例的属性值。比如保险索赔案例的属性:赔额、索赔人、时间等等。

2.
路由:四种路由的Petri网建模,上面的图片已经给出。简单分析下:
1)顺序路由,对应图1,任务AB是顺序执行的,任务B的输入是任务A的结果。通过在两个任务之间引入一个place来解决,中间的圆圈对应的place是任务B执行前的必须满足的条件,同时是任务A执行的结果。

2)并行路由:对应图2,为了并行地执行任务BC,引入了任务A,称为And-split,在ABC之间引入两个place,当A任务实施后,为两个输出place产生token,任务BC就处于就绪状态可以实施。当BC都实施之后,类似的实行And-join任务(任务D)合并两个任务。

3)选择路由:图3对选择路由的建模并不正确,选择执行B或者C,那么在BC之前引入两个新任务t11t12和两个place(合并称为Or-split),在前一个placetoken,要么实施t11,要么实施t12,假设实施t11,那么任务B将就绪,反之则任务C就绪。同样的可以建模Or-join。选择路由还根据选择的时刻划分为两类,具体不再展开。

4)循环路由,图四的建模也不是很精确,循环也跟编程语言中的循环分为:repeate ...until...while ...do...两种,前者至少执行一次,而后者可能不执行,

3.
启动的映射:我们知道工作项是案例和准备执行的任务的组合,而活动是指一个工作项的实际执行,一旦工作项被实际执行,它就转换成活动。映射到Petri网,工作项就是就绪的变迁(enabled transition),而活动对应一个transitionfiringPetri网中的transition饥饿的,一旦它们就绪,就会立刻执行,这样的变迁成为自动的。而工作流中的触发并非是自动的,它可能是资源驱动、外部信号驱动以及时间驱动的。为了建模触发,我们在变迁的上面添加符号来区分:向下的箭头表示资源驱动,信封表示外部信号驱动,而时钟表示时间驱动。

   
初步了解了Petri网,确实是对工作流甚至业务过程建模的良好工具,对于利用Petri网进行过程分析,还待进一步学习。

posted on 2009-11-19 18:46 肥仔 阅读(3710) 评论(0)  编辑 收藏 引用 所属分类: 状态机 & 自动机 & 形式语言


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理