閱讀916 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《工作流管理——模型、方法和係統》筆記2:Petri網對工作流建模

一、工作流概念
1.案例(case):工作流係統的基本目的就是處理案例,保險索賠、績效考核、抵押申請等等都是案例。每一個案例都有一個唯一的標識,案例在出現和消失之間總是處於某個特定狀態,這個狀態有三個元素組成:
(1)案例相關的屬性,指出特定條件下案例是否被執行或者忽略
(2)已經滿足的條件,說明案例的進展。
(3)案例的內容,可能是文檔、文件、檔案或者數據庫
2.任務(task),泛指一般的工作單元,而非具體案例活動的一次具體執行(這一般稱為活動),為了區分這一點,引入了工作項(work item)和活動的概念(activity)。工作項是指將要被執行的實際工作塊,而活動就是指工作項的執行。

3.過程(process):過程指出了哪些任務需要被執行,以什麼順序執行。可以將過程理解為具體案例的藍圖。過程定義了案例的生命周期,每個生命周期都有start和end。

4.路由(route):決定了那些任務被執行和以何種方式執行,包括順序、並行、選擇和循環四種形式的路由

5.啟動(start):觸發,工作項是有一個resource來啟動的,觸發的形式包括:
(1)資源驅動,比如某個員工
(2)外部事件,一個JMS消息
(3)時間信號,比如淩晨2點觸發某任務等等。
顯然,觸發是由環境而非工作流係統負責的。
二。Petri網

    Petri網是一種過程建模和分析工具,是1962年由Carl Adam Petri提出的,它有著堅實的數學基礎,完全形式化的,可以將Petri網應用於工作流的建模和分析過程。

1.傳統的Petri網:
 Petri網有place(庫所)和transition(變遷)組成
place用於容納token,token用以表示具體的案例,通過transition的firing(實施)來表現過程的狀態轉變。理解幾個概念:
(1)transition enabled(變遷的就緒):當且進當transition的每一個輸入place都至少有一個token的時候,變遷就緒,可以實施。
(2)transition firing(變遷的實施):變遷的從每個輸入place取走一個token,並往它的每個輸出place增加一個token。
看一個Petri網進行過程建模的例子:


圓圈表示place;矩形表示transition;用黑點表示token,存在於place中,這裏沒有表示出來,我在網上隨便找的一張圖,不過這裏也展示了And-split、And-join、Or-split和Or-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.層次擴展,過程是由一係列的place、transition、弧線和子過程組成的,為了反映這樣的層次結構,適應複雜過程的建模,引入了層次擴展。

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

1.過程:過程是由條件和任務組成,映射到Petri網,place就是條件,而transition就是任務。條件和place都是被動元素,而任務和變遷都是主動元素。案例就是token,案例的屬性通過顏色擴展來映射,token的值包含了案例的屬性值。比如保險索賠案例的屬性:賠額、索賠人、時間等等。

2.路由:四種路由的Petri網建模,上麵的圖片已經給出。簡單分析下:
(1)順序路由,對應圖1,任務A和B是順序執行的,任務B的輸入是任務A的結果。通過在兩個任務之間引入一個place來解決,中間的圓圈對應的place是任務B執行前的必須滿足的條件,同時是任務A執行的結果。

(2)並行路由:對應圖2,為了並行地執行任務B和C,引入了任務A,稱為And-split,在A和B、C之間引入兩個place,當A任務實施後,為兩個輸出place產生token,任務B和C就處於就緒狀態可以實施。當B和C都實施之後,類似的實行And-join任務(任務D)合並兩個任務。

(3)選擇路由:圖3對選擇路由的建模並不正確,選擇執行B或者C,那麼在B和C之前引入兩個新任務t11、t12和兩個place(合並稱為Or-split),在前一個place的token,要麼實施t11,要麼實施t12,假設實施t11,那麼任務B將就緒,反之則任務C就緒。同樣的可以建模Or-join。選擇路由還根據選擇的時刻劃分為兩類,具體不再展開。

(4)循環路由,圖四的建模也不是很精確,循環也跟編程語言中的循環分為:repeate ...until...和while ...do...兩種,前者至少執行一次,而後者可能不執行,

3.啟動的映射:我們知道工作項是案例和準備執行的任務的組合,而活動是指一個工作項的實際執行,一旦工作項被實際執行,它就轉換成活動。映射到Petri網,工作項就是就緒的變遷(enabled transition),而活動對應一個transition的firing。Petri網中的transition是“饑餓”的,一旦它們就緒,就會立刻執行,這樣的變遷成為自動的。而工作流中的觸發並非是自動的,它可能是資源驅動、外部信號驅動以及時間驅動的。為了建模觸發,我們在變遷的上麵添加符號來區分:向下的箭頭表示資源驅動,信封表示外部信號驅動,而時鍾表示時間驅動。

    初步了解了Petri網,確實是對工作流甚至業務過程建模的良好工具,對於利用Petri網進行過程分析,還待進一步學習。

文章轉自莊周夢蝶  ,原文發布時間2007-09-01

最後更新:2017-05-18 10:32:44

  上一篇:go  線程任務的取消
  下一篇:go  C語言中實現可變參數函數