新四季網

一種用於工作流引擎的多任務協同調度方法

2023-05-25 16:11:21

專利名稱:一種用於工作流引擎的多任務協同調度方法
技術領域:
本發明涉及工作流和業務流程分析與建模技術,特別涉及一種用於工作流引擎的多任務協同調度方法。
現有技術工作流引擎的主要目標是實現工作流中多任務的調度和執行,而工作流引擎的性能主要取決於多任務的調度方法,因此,工作流引擎中的多任務調度方法日益受到學術界和企業界的重視。Petri網技術是工作流引擎多任務調度中最常用的方法之一,其中,以Van derAalst在Petri網基礎上提出的工作流網(WF-net)調度方法最為著名。關於Petri網和工作流網的知識可參考書籍《工作流管理——模型、方法和系統》(Wil van der Aalst Kees vanHee著,王建民、聞立傑等譯,清華大學出版社,2004年2月,ISBN 7-302-08118-2/TP.5866)。
儘管以Petri網為基礎的工作流網技術,在工作流引擎多任務調度應用中取得了一定的成果,但它還存在以下問題1、工作流網以三元組(P,T;F)構成的Petri網為基礎,用庫所(P)表示條件,用變遷(T)表示任務,用流關係(F)連接條件和變遷。這種方法適合於每個任務只由一個客戶機負責的調度情形(即每個任務在一個客戶機上一次完成),而對於一個任務由多個客戶機同時負責的情況(即每個任務在多個客戶機上分階段完成),該調度方法因無法表述多客戶機和多任務之間的協同關係,因而無法實現正常的調度。
2、在工作流的多任務調度中,經常會出現已執行的任務被退回或重新執行的逆向調度情況。而在以Petri網為基礎的工作流網中,用庫所(P)表示條件,用變遷(T)表示任務,任務只能正向調度,不能逆向調度。因此,這種調度方法的實用性較低。

發明內容
本發明的目的在於實現多步任務和多客戶機之間的協同,和實現多步任務的正向和逆向調度,實用性強,調度靈活。
本發明的技術方案是這樣實現的1、一種用於工作流引擎的多任務協同調度方法,其特徵在於按照如下步驟進行
(1)構建多任務協同方法的計算模型——多步任務協同網,這是一個四元組N=(C,T;W,D)按照如下充分必要條件構造的1°C≠φ2°T≠φ3°CI T=φ4°WC×T5°DT×C6°dom(W)Ycod(W)=CY T其中,dom(W)={x|y:(x,y)W},cod(W)={y|x:(x,y)W}:]]>在四元組中,C是一個有限的客戶機集合;T是一個有限的任務集合;W是工作的集合,表示客戶機在任務中的分工;D是轉發的集合,表示任務的流轉方向。
(2)構建多步任務協同網的動態結構——多步任務協同網系統,這是一個八元組∑=(C,T;W,D;W0,PD,G,L)按照如下條件構造的1°N=(C,T;W,D)是一個多步任務協同網。
2°W0W,是起始工作的集合。起始工作是指不依賴於任何任務客戶機就可以辦理的工作。
3°PD是定義在D上的轉發條件的集合。轉發條件指轉發依賴的條件。
4°G是定義在C上的分組的集合。如果客戶機即將辦理的工作和已完成任務之間存在依賴關係,則需要將這些工作和傳遞這些任務的轉發劃分成一組,稱為分組。
5°LW∪D,是循環的集合。循環指可被反覆執行的,並只保留最後一次執行信息的環形路徑。
(3)構建多任務調度所需的狀態集合,包括五個狀態集合1°案例的狀態集合Si={Sir,Siw,Swf}。案例是多步任務協同網的一次執行,一個多步任務協同網可以被多次執行,每次執行都對應一個不同的案例。其中,Sir就緒狀態案例等待執行的狀態,Siw在辦狀態案例正在執行的狀態,Sif完成狀態案例已經結束的狀態。
2°工作的狀態集合Sw={Swr,Sww,Swn,Swf}。其中,
Swr就緒狀態工作等待客戶機辦理的狀態,Sww在辦狀態工作正在被客戶機辦理的狀態,Swn否定狀態工作因條件不滿足不能被客戶機辦理的狀態,Swf完成狀態工作已經結束的狀態。
3°務的狀態集合St={Str,Stw,Stn,Stf}。其中,Str就緒狀態任務等待客戶機辦理的狀態,Stw在辦狀態任務正在被客戶機辦理的狀態,Stn否定狀態任務因條件不滿足不能被客戶機辦理的狀態,Stf完成狀態任務已經結束的狀態。
4°轉發的狀態集合Sd={Sdr,Sdw,Sdn,Sdf}。其中,Sdr就緒狀態轉發等待被執行的狀態,Sdw待籤狀態轉發等待被客戶機籤收的狀態,Sdn否定狀態轉發因條件不滿足不能被客戶機籤收的狀態,Sdf完成狀態轉發已經結束的狀態。
5°循環的狀態集合Sl={Slr,Slw,Sdf}。其中,Slr就緒狀態循環等待被執行的狀態,Slw工作狀態循環正在被執行的狀態,Slf完成狀態循環已經結束的狀態。
(4)多任務調度包括啟動案例、終止案例、客戶機籤辦任務、客戶機退回任務、多步任務辦理、多步任務重辦、啟動循環和終止循環八個調度方法。在多任務調度之前,案例和所有的工作、任務、轉發、循環都被初始化為就緒狀態。啟動案例是第一個被執行調度,客戶機籤辦任務、客戶機退回任務、多步任務辦理、多步任務重辦、啟動循環和終止循環是根據多步任務協同網的流向,包括正向和逆向,由客戶機進行調度的,終止案例的調度是根據工作和轉發的狀態由系統自動調度的。
令SetStatus(x)表示設置對象x的狀態,x為案例、任務、工作、轉發或循環;GetStatus(x)表示獲得對象x的狀態,x為案例、任務、工作、轉發或循環;SetClient(x)表示設置對象所屬客戶機,x為工作或轉發;GetClient(x)表示獲得對象所屬客戶機,x為工作或轉發;PreCondition(x)表示條件計算,結果為True或False,x為轉發;
Count(x)表示集合中對象的數目,x為一個集合。
則多步任務的調度方法可表述如下1°啟動案例。
設w0為案例i的任一起始工作,W0是w0的集合,則啟動案例的調度方法如下將案例和每一個起始工作的狀態設置為在辦狀態。即SetStatus(1)=SiwSetStatus(w0)=Sww,w0∈W0。
2°終止案例設w為案例i的任一工作,W是w的集合,d為案例i的任一轉發,D是d的集合,則終止案例的調度方法為第一步若案例中仍有待辦的工作或待籤收的任務,即GetStatus(w)=Sww,wW]]>或GetStatus(d)=Sdw,dD,]]>則不能終止案例,結束;否則轉第二步。
第二步將案例的狀態置為完稱狀態,即SetStatus(i)=Sif。
3°客戶機籤辦任務。
設c是案例衝的任一客戶機,gc是定義在c上的任一分組,d分組gc中的任一轉發,D是d的集合,’t是d所屬的任務,d是任務’t中的任一轉發,D是d的集合,』w是任務’t中的任一工作,』W是』w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務,w是任務t中的任一工作,W是w的集合,d』是任務t中的任一轉發,D』是d』的集合。則客戶機c籤辦任務的調度方法如下第一步若gc中的每一個轉發d都處於待籤或否定狀態,即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉第二步;否則結束;第二步若gc中的每一個轉發d都處於否定狀態,即GetStatus(d)=Sdn,d∈D,則轉第三步;否則轉第四步;第三步將gc中的每一個工作w設置為否定狀態,即SetStatus(w)=Swn,w∈W;對於每一個w,若其所屬任務t的每一個工作w都處於否定狀態,即GetStatus(w)=Swn,w∈W,則將任務t和任務t的每一個轉發d′設置為否定狀態,即SetStatus(t)=StnSetStatus(d′)=Sdn,d′∈D,結束;否則結束。
第四步對於gc中的任一個d,若其處於待籤狀態,則將d的客戶機設置為c,即SetClient(d)=c,則轉第六步;否則將d的客戶機設置為空值null,即SetClient(d)=null,並轉第五步;
第五步若d所屬任務’t處於否定狀態,即GetStatus(′t)=Stn,則將任務’t和其每一個工作』w及每一個轉發d設置為完成狀態,即SetStatus(′t)=Stf,SetStatus(′w)=Swf,′w∈′W,SetStatus(d)=Sdf,d∈D;第六步將gc中的每一個轉發d設置為完成狀態,每一個工作w設置為完成狀態,並將每一個工作w的客戶機設置為c,即SetStatus(d)=Sdf,d∈D,SetClient(w)=c,w∈W,SetStatus(w)=Sww,w∈W。若gc中仍有轉發d處於待籤或否定狀態,即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉第四步;否則轉第七步。
第七步若任務t處於就緒狀態,即GetStatus(t)=Str,則將任務t設置為在辦狀態,即SetStatus(t)=Stw;第八步客戶機c辦理gc中的任一個工作w。
第九步若工作w辦理完畢,則將工作w設置為完成狀態,即SetStatus(w)=Swf。若gc中仍有處於在辦狀態的工作,即GetStatus(w)=Sww,wW,]]>則轉第八步;否則結束。
4°客戶機退回任務。
設c是案例衝的任一客戶機,gc是定義在c上的任一分組,d是分組gc中的任一轉發,D是d的集合,’t是d所屬的任務,d是任務’t中的任一轉發,D是d的集合,』w是任務’t中的任一工作,』W是』w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務,w是任務t中的任一工作,W是w的集合,d』是任務t中的任一轉發,D』是d』的集合,則客戶機c退回任務的調度方法如下第一步若gc中的每一個工作w都處於在辦狀態,即GetStatus(w)=Sww,w∈W,則轉第二步;否則結束。
第二步將gc中的每一個工作w都設置為就緒狀態,即SetStatus(w)=Swr,w∈W。對於gc中的每一個工作w,若w所屬任務t的每一個工作w都處於就緒狀態,即GetStatus(w)=Swr,w∈W,則將任務t設置為就緒狀態,即SetStatus(t)=Str。
第三步對於gc中的任一個d,若其客戶機為c,即GetClient(d)=c,則將d的客戶機設置為null,並將d設置為待籤狀態,即SetClient(d)=null,SetStatus(d)=Sdw,之後轉第五步;否則將d設置為否定狀態,即SetStatus(d)=Sdn,之後轉第四步。
第四步若d所屬任務′t的每一個轉發d都處於否定狀態,即GetStatus(d)=Sdn,d∈D,並且任務′t的每一個工作′w的客戶機都為空值null,即GetClient(′w)=null,′w∈′W,則將任務′t設置為否定狀態,即SetStatus(′t)=Stn。結束。
5°多步任務辦理。
設t是案例中的任一任務,w是任務t的任一工作,W是w的集合,c是負責辦理工作w的客戶機,gc是定義在客戶機c上的任一分組,』d是分組gc中的任一轉發,』D是』d的集合,’t是』d所屬的工作,』w是任務’t的任一工作,』W是』w的集合,』d是’t的任一轉發,』D是』d的集合,w是分組gc中的任一工作,W是w的集合,d是任務t的任一轉發,D是d的集合,c』是d所屬的客戶機,gc』是定義在客戶機c』上的任一分組,d是分組gc』中的任一轉發,D是d的集合,w』是分組gc』中的任一工作,W』是w』的集合,t』是w』所屬的任務,w』是任務t』中的任一工作,W』是w』的集合,d』是t』的任一轉發,D』是d』的集合。則任務t辦理過程的調度方法如下第一步若任務t的每一個工作w都處於完成或否定狀態,即GetStatus(w)∈{Swf,SWn}, w∈W,則轉第二步;否則結束。
第二步若任務t的每一個工作w都處於否定狀態,即GetStatus(w)=Swn, w∈W,則將任務t和任務t的每一個轉發d設置為否定狀態,即SetStatus(t)=StnSetStatus(d)=Sdn,d∈D,之後轉第七步;否則轉第三步。
第三步對於t中的任一個w,若w處於否定狀態,則將w設置為完成狀態,將w的客戶機設置為空值null,將與w處於同一分組gc中的每一個工作w和每一個轉發′d設置為完成狀態,即SetStatus(w)=Swf,SetClient(w)=null,SetStatus(w)=Swf,w∈W,SetStatus(′d)=Sdf,′d∈′D,之後轉第四步;否則轉第五步。
第四步對於任一個′d,若′d所屬任務′t處於否定狀態,即GetStatus(′t)=Stn,則將任務′t和任務′t的每一個轉發′d設置為完成狀態,即SetStatus(′t)=Stf,SetStatus(′d)=Sdf,′d∈′D。
第五步若任務t有工作w處於否定狀態,即GetStatus(w)=Swn,wW,]]>則轉第三步;否則轉第六步。
第六步將任務t設置為完成狀態,即SetStatud(t):=Stf,wW.]]>計算任務t的每一個轉發d的轉發條件,若結果為真,即PreCondition(d)=True,則將轉發d設置為待籤狀態,即SetStatus(d)=Sdw;否則將轉發d設置為否定狀態,即SetStatus(d)=Sdn。
第七步對於任一個d,若其所屬分組gc』中的所有轉發d處於否定狀態,即GetStatus(d)=Sdn,d∈D,則將分組gc』中的所有工作w′設設置為否定狀態,即SetStatus(w′)=SWn,w′∈W′。
第八步對於任一個w′,若其所屬任務t』中的所有工作w′處於否定狀態,即GetStatusS(w′)=Swn,w′∈W′,則將任務t』和任務t』的所有轉發d′設置為否定狀態,即SetStatus(t′)=StnSetStatus(d′)=Sdn,d′∈D′。
6°多步任務重辦。
設t是案例中的任一任務,w是任務t的任一工作,W是w的集合,c是負責辦理工作w的客戶機,gc是定義在客戶機c上的任一分組,』d是分組gc中的任一轉發,』D是』d的集合,’t是』d所屬的工作,』w是任務’t的任一工作,』W是』w的集合,』d是’t的任一轉發,』D是』d的集合,w是分組gc中的任一工作,W是w的集合,d是任務t的任一轉發,D是d的集合,c』是d所屬的客戶機,gc』是定義在客戶機c』上的任一分組,d是分組gc』中的任一轉發,D是d的集合,w』是分組gc』中的任一工作,W』是w』的集合,t』是w』所屬的任務,w』是任務t』中的任一工作,W』是w』的集合,d』是t』的任一轉發,D』是d』的集合。則客戶機c重辦任務t的調度方法如下第一步若任務t處於在辦狀態,即GetStatus(t)=Stw,或任務t處於完成狀態且任務t沒有轉發,即GetStatus(t)=Stf Count(D)=0,或任務t處於完成狀態且任務t的每一個轉發d都處於待籤或否定狀態,即GetStatus(t)=Stf GetStatus(d)∈{Sdw,Sdn},d∈D,則轉第二步;否則結束。
第二步對於任一個d,若其所屬分組gc』中的每一個轉發d都處於否定狀態,即GetStatus(d)=Sdn,d∈D,則將分組gc』中的所有工作w′設置為就緒狀態,即SetStatus(w′)=Swr,w′∈W′,之後轉第三步;否則轉第四步。
第三步對於任一個w′,若其所屬任務t』處於否定狀態,則將任務t』和任務t』的每一個轉發d′設置為就緒狀態,即SetStatus(t′)=StrSetStatus(d′)=Sdr,d′∈D′。
第四步將任務t和任務t要重辦的工作w設置為在辦狀態,並將任務t的每一個轉發d設置為就緒狀態,即SetStatus(w)=Sww,SetStatus(t)=Stw,SetStatus(d)=Sdr,d∈D。對於任一個d,若其所屬分組gc』中有工作W′處於否定狀態,即GetStatus(w)=Swn,wW,]]>則將分組gc』中的每一個工作w′設置為就緒狀態,即SetStatus(w′)=Swr,w′∈W′。
第五步若任務t有處於完成狀態的工作w,且w的客戶機為null,即GetStatus(w)=Swf]]>GetClient(w)=null,wW,]]>則將w置為否定狀態,即SetStatus(w)=Swn。
第六步對於t中的任一個w,若w所屬分組gc中的每一個工作w都處於否定狀態,即GetStatus(w)=Swn,w∈W,則將gc中的每一個轉發′d設置為否定狀態,即SetStatus(′d)=Sdn,′d∈′D。
第七步對於任一個′d,若其所屬任務′t處於完成狀態,且任務′t的每一個工作′w的客戶機都為空值null,即GetStatus(′t)=Stf GetClient(′w)=null,′w∈′W,則將任務′t和任務′t的每一個工作′w都設置為否定狀態,即SetStatus(′t)=StnSetStatus(′w)=Swn,′w∈′W。
第八步客戶機c重辦工作w。
第九步若工作w辦理完畢,則將工作w置為完成狀態,即SetStatus(w)=Swf,結束。否則轉第八步。
7°啟動循環。
設L為案例i的任一循環,w是循環路徑上的任一工作,則啟動循環的調度方法如下若工作w屬於循環L且工作w處於在辦狀態且循環L處於就緒狀態,即w∈LGetStatus(w)=SwwGetStatus(L)=Slr,則將循環L設置為運行狀態,即SetStatus(L)=Slw;否則結束。
8°終止循環。
設L為案例i的任一循環,w是循環路徑上的任一工作,則終止循環的調度方法如下若工作w屬於循環L且工作w處於在辦狀態且循環L處於運行狀態,即w∈LGetStatus(w)=SwwGetStatus(L)=Slw,則將循環L設置為運行狀態,即SetStatus(L)=Slf;否則結束。
本發明實現了在工作流的多任務調度中,當任務在多個客戶機上分階段完成時,多步任務和客戶機之間的協同方法,和多步任務的正向和逆向調度方法,包括啟動案例、終止案例、客戶機籤辦任務、客戶機退回任務、多步任務辦理、多步任務重辦、啟動循環和終止循環的調度方法。經基於該調度方法的工作流引擎軟體的實際測試,該調度方法完全滿足需求,很好地實現了本發明的目的。


圖1是本發明案例啟動調度流程2是本發明案例終止調度流程3是本發明客戶機籤辦和退回任務示意4是本發明客戶機籤辦任務流程5是本發明客戶機退回任務流程6是本發明任務辦理和重辦示意7是本發明任務辦理流程8是本發明任務重辦流程9是本發明啟動循環流程10是本發明終止循環流程11是本發明實例示意圖具體實施方式
參照圖1所示,設w0為案例i的任一起始工作,W0是w0的集合,則啟動案例的調度方法如下將案例和每一個起始工作的狀態設置為在辦狀態。即SetStatus(i)=SiwSetStatus(w0)=Sww,w0∈W0。
參照圖2所示,設w為案例i的任一工作,W是w的集合,d為案例i的任一轉發,D是d的集合,則終止案例的調度方法為第一步若案例中仍有待辦的工作或待籤收的任務,即GetStatus(w)=Sww,wW]]>或GetStatus(d)=Sdw,dD,]]>則不能終止案例,結束;否則轉第二步。
第二步將案例的狀態置為完稱狀態,即SetStatus(i)=Sif。
參照圖3所示,設c是案例i中的任一客戶機,gc是定義在c上的任一分組,d是分組gc中的任一轉發,D是d的集合,’t是d所屬的任務,d是任務’t中的任一轉發,D是d的集合,』w是任務’t中的任一工作,』W是』w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務,w是任務t中的任一工作,W是w的集合,d』是任務t中的任一轉發,D』是d』的集合。
參照圖4所示,設c是案例i中的任一客戶機,gc是定義在c上的任一分組,d是分組gc中的任一轉發,D是d的集合,’t是所屬的任務,d是任務’t中的任一轉發,D是d的集合,』w是任務’t中的任一工作,』W是』w的集合,w是分組gc中的任一工作,W是w集合,t是w所屬的任務,w是任務t中的任一工作,W是w的集合,d』是任務t中的任一轉發,D』是d』的集合。則客戶機c籤辦任務的調度方法如下第一步若gc中的每一個轉發d都處於待籤或否定狀態,即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉第二步;否則結束;第二步若gc中的每一個轉發d都處於否定狀態,即GetStatus(d)=Sdn,d∈D,則轉第三步;否則轉第四步;第三步將gc中的每一個工作w設置為否定狀態,即SetStatus(w)=Swn,w∈W;對於每一個w,若其所屬任務t的每一個工作w都處於否定狀態,即GetStatus(w)=Swn,w∈W,則將任務t和任務t的每一個轉發d′設置為否定狀態,即SetStatus(t)=StnSetStatus(d′)=Sdn,d′∈D′,結束;否則結束。
第四步對於gc中的任一個d,若其處於待籤狀態,則將d的客戶機設置為c,即SetClient(d)=c,則轉第六步;否則將d的客戶機設置為空值null,即SetClient(d)=null,並轉第五步;第五步若d所屬任務’t處於否定狀態,即GetStatus(′t)=Stn,則將任務’t和其每一個工作』w及每一個轉發d設置為完成狀態,即SetStatus(′t)=Stf,SetStatus(′w)=Swf,′w∈′W,SetStatus(d)=Sdf,d∈D;第六步將gc中的每一個轉發d設置為完成狀態,每一個工作w設置為完成狀態,並將每一個工作w的客戶機設置為c,即SetStatus(d)=Sdf,d∈D,SetClient(w)=c,w∈W,SetStatus(w)=Sww,w∈W。若gc中仍有轉發d處於待籤或否定狀態,即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉第四步;否則轉第七步。
第七步若任務t處於就緒狀態,即GetStatus(t)=Str,則將任務t設置為在辦狀態,即SetStatus(t)=Stw;第八步客戶機c辦理gc中的任一個工作w。
第九步若工作w辦理完畢,則將工作w設置為完成狀態,即SetStatus(w)=Swf。
若gc中仍有處於在辦狀態的工作,即GetStatus(w)=Sww,wW,]]>則轉第八步;否則結束。
參照圖5所示,設c是案例i中的任一客戶機,gc是定義在c上的任一分組,d是分組gc中的任一轉發,D是d的集合,’t是d所屬的任務,d是任務’t中的任一轉發,D是d的集合,』w是任務’t中的任一工作,』W是』w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務,w是任務t中的任一工作,W是w的集合,d』是任務t中的任一轉發,D』是d』的集合,則客戶機c退回任務的調度方法如下第一步若gc中的每一個工作w都處於在辦狀態,即GetStatus(w)=Sww,w∈W,則轉第二步;否則結束。
第二步將gc中的每一個工作w都設置為就緒狀態,即SetStatus(w)=Swr,w∈W。對於gc中的每一個工作w,若w所屬任務t的每一個工作w都處於就緒狀態,即GetStatus(w)=Swr,w∈W,則將任務t設置為就緒狀態,即SetStatus(t)=Str。
第三步對於gc中的任一個d,若其客戶機為c,即GetClient(d)=c,則將d的客戶機設置為null,並將d設置為待籤狀態,即SetClient(d)=null,SetStatus(d)=Sdw,之後轉第五步;否則將d設置為否定狀態,即SetStatus(d)=Sdn,之後轉第四步。
第四步若d所屬任務′t的每一個轉發d都處於否定狀態,即GetStatus(d)=Sdn,d∈D,並且任務′t的每一個工作′w的客戶機都為空值null,即GetClient(′w)=null,′w∈′W,則將任務′t設置為否定狀態,即SetStatus(′t)=Stn。結束。
參照圖6所示,設t是案例中的任一任務,w是任務t的任一工作,W是w的集合,c是負責辦理工作w的客戶機,gc是定義在客戶機c上的任一分組,』d是分組gc中的任一轉發,』D是』d的集合,’t是』d所屬的工作,』w是任務’t的任一工作,』W是』w的集合,』d是’t的任一轉發,』D是』d的集合,w是分組gc中的任一工作,W是w的集合,d是任務t的任一轉發,D是d的集合,c』是d所屬的客戶機,gc』是定義在客戶機c』上的任一分組,d是分組gc』中的任一轉發,D是d的集合,w』是分組gc』中的任一工作,W』是w』的集合,t』是w』所屬的任務,w』是任務t』中的任一工作,W』是w』的集合,d』是t』的任一轉發,D』是d』的集合。
參照圖7所示,設t是案例中的任一任務,w是任務t的任一工作,W是w的集合,c是負責辦理工作w的客戶機,gc是定義在客戶機c上的任一分組,』d是分組gc中的任一轉發,』D是』d的集合,’t是』d所屬的工作,』w是任務’t的任一工作,』W是』w的集合,』d是’t的任一轉發,』D是』d的集合,w是分組gc中的任一工作,W是w的集合,d是任務t的任一轉發,D是d的集合,c』是d所屬的客戶機,gc』是定義在客戶機c』上的任一分組,d是分組gc』中的任一轉發,D是d的集合,w』是分組gc』中的任一工作,W』是w』的集合,t』是w』所屬的任務,w』是任務t』中的任一工作,W』是w』的集合,d』是t』的任一轉發,D』是d』的集合。則任務t辦理過程的調度方法如下第一步若任務t的每一個工作w都處於完成或否定狀態,即GetStatus(w)∈{Swf,Swn}, w∈W,則轉第二步;否則結束。
第二步若任務t的每一個工作w都處於否定狀態,即GetStatus(w)=Swn, w∈W,則將任務t和任務t的每一個轉發d設置為否定狀態,即SetStatus(t)=StnSetStatus(d)=Sdn,d∈D,之後轉第七步;否則轉第三步。
第三步對於t中的任一個w,若w處於否定狀態,則將w設置為完成狀態,將w的客戶機設置為空值null,將與w處於同一分組gc中的每一個工作w和每一個轉發′d設置為完成狀態,即SetStatus(w)=Swf,SetClient(w)=null,SetStatus(w)=Swf,w∈W,SetStatus(′d)=Sdf,′d∈′D,之後轉第四步;否則轉第五步。
第四步對於任一個′d,若′d所屬任務′t處於否定狀態,即GetStatus(′t)=Stn,則將任務′t和任務′t的每一個轉發′d設置為完成狀態,即SetStatus(′t)=Stf,SetStatus(′d)=Sdf,′d∈′D。
第五步若任務t有工作w處於否定狀態,即GetStatus(w)=Swn,wW,]]>則轉第三步;否則轉第六步。
第六步將任務t設置為完成狀態,即SetStatus(t):=Stf,wW.]]>計算任務t的每一個轉發d的轉發條件,若結果為真,即PreCondition(d)=True,則將轉發d設置為待籤狀態,即SetStatus(d)=Sdw;否則將轉發d設置為否定狀態,即SetStatus(d)=Sdn。
第七步對於任一個d,若其所屬分組gc』中的所有轉發d處於否定狀態,即GetStatus(d)=Sdn,d∈D,則將分組gc』中的所有工作w′設置為否定狀態,即SetStatus(w′)=Swn,w′∈W′。
第八步對於任一個w′,若其所屬任務t』中的所有工作w′處於否定狀態,即GetStatusS(w′)=Swn,w′∈W′,則將任務t』和任務t』的所有轉發d′設置為否定狀態,即SetStatus(t′)=StnSetStatus(d′)=Sdn,d′∈D′。
參照圖8所示,設t是案例中的任一任務,w是任務t的任一工作,W是w的集合,c是負責辦理工作w的客戶機,gc是定義在客戶機c上的任一分組,』d是分組gc中的任一轉發,』D是』d的集合,’t是』d所屬的工作,』w是任務’t的任一工作,』W是』w的集合,』d是’t的任一轉發,』D是』d的集合,w是分組gc中的任一工作,W是w的集合,d是任務t的任一轉發,D是d的集合,c』是d所屬的客戶機,gc』是定義在客戶機c』上的任一分組,d是分組gc』中的任一轉發,D是d的集合,w』是分組gc』中的任一工作,W』是w』的集合,t』是w』所屬的任務,w』是任務t』中的任一工作,W』是w』的集合,d』是t』的任一轉發,D』是d』的集合。則客戶機c重辦任務t的調度方法如下第一步若任務t處於在辦狀態,即GetStatus(t)=Stw,或任務t處於完成狀態且任務t沒有轉發,即GetStatus(t)=StfCount(D)=0,或任務t處於完成狀態且任務t的每一個轉發d都處於待籤或否定狀態,即GetStatus(t)=StfGetStatus(d)∈{Sdw,Sdn},d∈D,則轉第二步;否則結束。
第二步對於任一個d,若其所屬分組gc』中的每一個轉發d都處於否定狀態,即GetStatus(d)=Sdn,d∈D,則將分組gc』中的所有工作w′設置為就緒狀態,即SetStatus(w′)=Swr,w′∈W′,之後轉第三步;否則轉第四步。
第三步對於任一個w′,若其所屬任務t』處於否定狀態,則將任務t』和任務t』的每一個轉發d′設置為就緒狀態,即SetStatus(t′)=StrSetStatus(d′)=Sdr,d′∈D′。
第四步將任務t和任務t要重辦的工作w設置為在辦狀態,並將任務t的每一個轉發d設置為就緒狀態,即SetStatus(w)=Sww,SetStatus(t)=Stw,SetStatus(d)=Sdr,d∈D。對於任一個d,若其所屬分組gc』中有工作w′處於否定狀態,即GetStatus(w)=Swn,wW,]]>則將分組gc』中的每一個工作w′設置為就緒狀態,即SetStatus(w′)=Swr,w′∈W′。
第五步若任務t有處於完成狀態的工作w,且w的客戶機為null,即GetStatus(w)=Swf]]>GetClient(w)=null,wW,]]>則將w設置為否定狀態,即SetStatus(w)=Swn。
第六步對於t中的任一個w,若w所屬分組gc中的每一個工作w都處於否定狀態,即GetStatus(w)=Swn,w∈W,則將gc中的每一個轉發′d設置為否定狀態,即SetStatus(′d)=Sdn,′d∈′D。
第七步對於任一個′d,若其所屬任務′t處於完成狀態,且任務′t的每一個工作′w的客戶機都為空值null,即GetStatus(′t)=StfGetClient(′w)=null,′w∈′W,則將任務′t和任務′t的每一個工作′w都設置為否定狀態,即SetStatus(′t)=StnSetStatus(′w)=Swn,′w∈′W。
第八步客戶機c重辦工作w。
第九步若工作w辦理完畢,則將工作w設置為完成狀態,即SetStatus(w)=Swf,結束。否則轉第八步。
參照圖9所示,設L為案例i的任一循環,w是循環路徑上的任一工作,則啟動循環的調度方法如下若工作w屬於循環L且工作w處於在辦狀態且循環L處於就緒狀態,即w∈LGetStatus(w)=SwwGetStatus(L)=Slr,則將循環L設置為運行狀態,即SetStatus(L)=Slw;否則結束。
參照圖10所示,設L為案例i的任一循環,w是循環路徑上的任一工作,則終止循環的調度方法如下
若工作w屬於循環L且工作w處於在辦狀態且循環L處於運行狀態,即w∈LGetStatus(w)=SwwGetStatus(L)=Slw,則將循環L設置為運行狀態,即SetStatus(L)=Slf;否則結束。
參照圖11所示,案例i中有6個客戶機(c1、c2、c3、c4、c5和c6)和7個任務(t1、t2、t3、t4、t5、t6、t7),其中任務t1、t5和t7是多步任務(在多個客戶機上分步完成),工作w1_1、w1_1和w_5是啟動工作,轉發d1_1和d1_2是條件轉發,在c6上定義了2個分組,d2和w6_2為分組g1,d1_2和w6_1為分組g2,其它所有沒有定義分組的客戶機默認為同一個分組,w2_1、d4、w3_1和d3是一個循環l。
多步任務協同網可以用圖形表示,簡稱網的圖。在本實施例中,採用了如圖11的圖形表示方法客戶機用圓圈表示,任務用矩形表示,工作和轉發用帶有箭頭的直線表示,起始工作和條件轉發用空心箭頭表示,循環用直線起始端的小圓圈表示(僅循環用為空心),分組用標在直線上的靠近客戶機端的數字表示。
在案例沒有啟動前,案例和案例中所有的工作、任務、轉發、循環都處於就緒狀態。
1、案例i的正向調度示例。
(1)當i啟動後,S(i)=Siw,S(w1_1)=Sww,S(w1_1)=Sww,S(w_5)=Sww,S(t1)=Stw,S(t2)=Stw。
(2)由圖中可以看出,t1由c1和c5同時負責,對應工作w1_1和w5,t2由c1負責,對應工作w1_2。
(3)當w1_1和w5辦理完畢後,S(w1_1)=Swf,S(w5)=Swf,S(t1)=Stf,由於d1_1和d1_2是條件轉發,需要根據條件設置進行條件判斷,這裡假設P(d1_1)=True,P(d1_2)=False,則S(d1_1)=Sdw,S(d1_2)=Sdn。
(4)當w1_2辦理完畢後,S(w1_2)=Swf,S(t2)=Stf,S(d2)=Sdw。
(5)c2沒有定義分組,默認所有轉發和工作為一組。由於d3為僅循環用(啟動循環運行時才有效),這裡假設不啟動循環,所以c2可以籤辦任務t1,籤辦後,S(d1_1)=Sdf,S(w2_1)=Sww,S(w2_1)=Swn,S(t4)=Stw,S(t5)=Stw。
(6)c6上定義了2個分組,d2和w6_2為分組g1,d1_2和w6_1為分組g2。對於g1,c6籤辦任務t2後,S(d2)=Sdf,S(w6_2)=Sww,S(t6)=Stw。對於g2,由於S(d1_2)=Sdn,所以S(w6_1)=Swn。
(7)當w2_1辦理完畢後,S(w2_1)=Swf,S(t4)=Stf,S(d4)=Sdw。
(8)當w2_2辦理完畢後,S(w2_2)=Swf,由於S(w6_1)=Swn,S(t5)=Stf,S(d5_1)=Sdw,S(d5_2)=Sdw。
(9)當w6_2辦理完畢後,S(w6_2)=Swf,S(t6)=Stf。
(10)c3沒有定義分組,默認所有轉發和工作為一組。由於w3_1為僅循環用,這裡假設不啟動循環,所以c3籤辦任務t4和t5後,S(d4)=Sdf,S(d5_1)=Sdf,S(w3_2)=Sww。
(11)c4沒有定義分組,默認所有轉發和工作為一組。c4籤辦任務t5後,S(d5_2)=Sdf,S(w4)=Sww。
(12)當w3_2和w4辦理完畢後,S(w3_2)=Swf,S(w4)=Swf,S(t7)=Stf,由於i中沒有任何一個w和d處於待辦或待籤狀態,所以i結束,S(i)=Sif。
2、案例的逆向調度過程示例。
(1)客戶機重辦任務設案例i正向調度到第(4)步,由於S(d1_1)=Sdw,S(d1_2)=Sdn,S(d1_2)=Sdn,所以c5可以重辦t1,c1可以重辦t1和t2。這裡設c1重辦t1,重辦後,S(d1_1)=Sdr,S(d1_2)=Sdr,S(t1)=Stw,S(w1_1)=Sww。
(2)客戶機退回任務設案例i正向調度到第(6)步,由於S(w2_1)=Sww,S(w2_1)=Swn,S(w6_1)=Swn,S(w6_2)=Sww,S(t4)=Stw,S(t5)=Stw,S(t6)=Stw,所以c2和c6都可以退回任務。這裡設c6退回分組g1的籤辦的任務t2,則S(w6_2)=Swr,S(d2)=Sdw。可以看出,當c6退回籤辦的t2後,c1還可以重辦w1_2,從而連續實現多步任務調度過程中的逆向。
3、案例的循環調度過程示例。
設案例i正向調度到第(10)步,c3啟動循環l,則S(l)=Slw,S(w3_1)=Sww,S(t3)=Stw;當w3_1辦理完畢後,S(w3_1)=Swf,S(t3)=Stf,S(d3)=Sdw;這時,c2可以籤辦任務t3,由於循環將路徑中工作、任務和轉發統一按照就緒狀態處理,而w2_2不在循環中,所以籤辦後S(d3)=Sdf,S(2_1)=Sww,S(t4)=Stw;當w2_1辦理完畢後,S(w2_1)=Swf,S(t4)=Stf,S(d4)=Sdw;此時c3如果中止循環,則S(l)=Slf,循環結束,如果不中止循環,ce可以接著辦理w3_1,則S(w3_1)=Sww,S(t3)=Stw,如此反覆循環直至終止循環。
權利要求
1.一種用於工作流引擎的多任務協同調度方法,其特徵在於按照如下步驟進行(i)構建多任務協同方法的計算模型——多步任務協同網,這是一個四元組N=(C,T;W,D)按照如下充分必要條件構造的1°C≠φ2°T≠φ3°CI T=φ4°WC×T5°DT×C6°dom(W)Y cod(W)=CYT其中,dom(W)={x|y:(x,y)W},]]>cod(W)={y|x:(x,y)W};]]>在四元組中,C是一個有限的客戶機集合;T是一個有限的任務集合;W是工作的集合,表示客戶機在任務中的分工;D是轉發的集合,表示任務的流轉方向;(2)構建多步任務協同網的動態結構——多步任務協同網系統,這是一個八元組∑=(C,T;W,D;W0,PD,G,L)按照如下條件構造的1°N=(C,T;W,D)是一個多步任務協同網;2°W0W,是起始工作的集合,起始工作是指不依賴於任何任務客戶機就可以辦理的工作;3°PD是定義在D上的轉發條件的集合,轉發條件指轉發依賴的條件;4°G是定義在C上的分組的集合,如果客戶機即將辦理的工作和已完成任務之間存在依賴關係,則需要將這些工作和傳遞這些任務的轉發劃分成一組,稱為分組;5°LW∪D,是循環的集合,循環指可被反覆執行的,並只保留最後一次執行信息的環形路徑;(3)構建多任務調度所需的狀態集合,包括五個狀態集合1°案例的狀態集合Si={Sir,Siw,Swf},案例是多步任務協同網的一次執行,一個多步任務協同網可以被多次執行,每次執行都對應一個不同的案例,其中,Sir就緒狀態案例等待執行的狀態,Siw在辦狀態案例正在執行的狀態,Sif完成狀態案例已經結束的狀態;2°工作的狀態集合Sw={Swr,Sww,Swn,Swf},其中,Swr就緒狀態工作等待客戶機辦理的狀態,Sww在辦狀態工作正在被客戶機辦理的狀態,Swn否定狀態工作因條件不滿足不能被客戶機辦理的狀態,Swf完成狀態工作已經結束的狀態;3°任務的狀態集合St={Str,Stw,Stn,Stf},其中,Str就緒狀態任務等待客戶機辦理的狀態,Stw在辦狀態任務正在被客戶機辦理的狀態,Stn否定狀態任務因條件不滿足不能被客戶機辦理的狀態,Stf完成狀態任務已經結束的狀態;4°轉發的狀態集合Sd={Sdr,Sdw,Sdn,Sdf},其中,Sdr就緒狀態轉發等待被執行的狀態,Sdw待籤狀態轉發等待被客戶機籤收的狀態,Sdn否定狀態轉發因條件不滿足不能被客戶機籤收的狀態,Sdf完成狀態轉發已經結束的狀態;5°循環的狀態集合S1={Slr,Slw,Sdf};其中,Slr就緒狀態循環等待被執行的狀態,Slw工作狀態循環正在被執行的狀態,Slf完成狀態循環已經結束的狀態;(4)多任務調度包括啟動案例、終止案例、客戶機籤辦任務、客戶機退回任務、多步任務辦理、多步任務重辦、啟動循環和終止循環八個調度方法;在多任務調度之前,案例和所有的工作、任務、轉發、循環都被初始化為就緒狀態;啟動案例是第一個被執行調度,客戶機籤辦任務、客戶機退回任務、多步任務辦理、多步任務重辦、啟動循環和終止循環是根據多步任務協同網的流向,包括正向和逆向,由客戶機進行調度的,終止案例的調度是根據工作和轉發的狀態由系統自動調度的;令SetStatus(x)表示設置對象x的狀態,x為案例、任務、工作、轉發或循環;GetStatus(x)表示獲得對象x的狀態,x為案例、任務、工作、轉發或循環;SetClient(x)表示設置對象所屬客戶機,x為工作或轉發;GetClient(x)表示獲得對象所屬客戶機,x為工作或轉發;PreCondition(x)表示條件計算,結果為True或False,x為轉發;Count(x)表示集合中對象的數目,x為一個集合;則多步任務的調度方法可表述如下1°啟動案例設w0為案例i的任一起始工作,W0是w0的集合,則啟動案例的調度方法如下將案例和每一個起始工作的狀態設置為在辦狀態,即SetStatus(i)=SiwSetStatus(w0)=Sww,w0∈W02°終止案例設w為案例i的任一工作,W是w的集合,d為案例i的任一轉發,D是d的集合,則終止案例的調度方法為第一步若案例中仍有待辦的工作或待籤收的任務,即GetStatus(w)=Sww,wW]]>或GetStatus(d)=Sdw,dD,]]>則不能終止案例,結束;否則轉第二步;第二步將案例的狀態置為完稱狀態,即SetStatus(i)=Sif;3°客戶機籤辦任務設c是案例i中的任一客戶機,gc是定義在c上的任一分組,d是分組gc中的任一轉發,D是d的集合,’t是d所屬的任務,d是任務’t中的任一轉發,D是d的集合,』w是任務’t中的任一工作,』W是』w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務,w是任務t中的任一工作,W是w的集合,d』是任務t中的任一轉發,D』是d』的集合,則客戶機c籤辦任務的調度方法如下第一步若gc中的每一個轉發d都處於待籤或否定狀態,即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉第二步;否則結束;第二步若gc中的每一個轉發d都處於否定狀態,即GetStatus(d)=Sdn,d∈D,則轉第三步;否則轉第四步;第三步將gc中的每一個工作w設置為否定狀態,即SetStatus(w)=Swn,w∈W;對於每一個w,若其所屬任務t的每一個工作w都處於否定狀態,即GetStatus(w)=Swn,w∈W,則將任務t和任務t的每一個轉發d′設置為否定狀態,即SetStatus(t)=StnSetStatus(d′)=Sdn,d′∈D′,結束;否則結束;第四步對於gc中的任一個d,若其處於待籤狀態,則將d的客戶機設置為c,即SetCliet(d)=c,則轉第六步;否則將d的客戶機設置為空值null,即SetClient(d)=null,並轉第五步;第五步若d所屬任務’t處於否定狀態,即GetStatus(′t)=Stn,則將任務’t和其每一個工作』w及每一個轉發d設置為完成狀態,即SetStatus(′t)=Stf,SetStatus(′w)=Swf,′w∈′W,SetStatus(d)=Sdf,d∈D;第六步將gc中的每一個轉發d設置為完成狀態,每一個工作w設置為完成狀態,並將每一個工作w的客戶機設置為c,即SetStatus(d)=Sdf,d∈D,SetClient(w)=c,w∈W,SetStatus(w)=Sww,w∈W;若gc中仍有轉發d處於待籤或否定狀態,即GetStatus(d)∈{Sdw,Sdn},d∈D,則轉第四步;否則轉第七步;第七步若任務t處於就緒狀態,即GetStatus(t)=Str,則將任務t設置為在辦狀態,即SetStatus(t)=Stw;第八步客戶機c辦理gc中的任一個工作w;第九步若工作w辦理完畢,則將工作w設置為完成狀態,即SetStatus(w)=Swf;若gc中仍有處於在辦狀態的工作,即GetStatus(w)=Sww,wW,]]>則轉第八步;否則結束;4°客戶機退回任務設c是案例i中的任一客戶機,gc是定義在c上的任一分組,d是分組gc中的任一轉發,D是d的集合,’t是d所屬的任務,d是任務’t中的任一轉發,D是d的集合,』w是任務’t中的任一工作,』W是』w的集合,w是分組gc中的任一工作,W是w的集合,t是w所屬的任務,w是任務t中的任一工作,W是w的集合,d是任務t中的任一轉發,D』是d』的集合,則客戶機c退回任務的調度方法如下第一步若gc中的每一個工作w都處於在辦狀態,即GetStatus(w)=Sww,w∈W,則轉第二步;否則結束;第二步將gc中的每一個工作w都設置為就緒狀態,即SetStatus(w)=Swr,w∈W;對於gc中的每一個工作w,若w所屬任務t的每一個工作w都處於就緒狀態,即GetStatus(w)=Swr,w∈W,則將任務t設置為就緒狀態,即SetStatus(t)=Str;第三步對於gc中的任一個d,若其客戶機為c,即GetClient(d)=c,則將d的客戶機設置為null,並將d設置為待籤狀態,即SetClient(d)=null,SetStatus(d)=Sdw,之後轉第五步;否則將d設置為否定狀態,即SetStatus(d)=Sdn,之後轉第四步;第四步若d所屬任務′t的每一個轉發d都處於否定狀態,即GetStatus(d)=Sdn,d∈D,並且任務′t的每一個工作′w的客戶機都為空值null,即GetClient(′w)=null,′w∈′W,則將任務′t設置為否定狀態,即SetStatus(′t)=Stn;結束;5°多步任務辦理設t是案例中的任一任務,w是任務t的任一工作,W是w的集合,c是負責辦理工作w的客戶機,gc是定義在客戶機c上的任一分組,』d是分組gc中的任一轉發,』D是』d的集合,’t是』d所屬的工作,』w是任務’t的任一工作,』W是』w的集合,』d是’t的任一轉發,』D是』d的集合,w是分組gc中的任一工作,W是w的集合,d是任務t的任一轉發,D是d的集合,c』是d所屬的客戶機,gc』是定義在客戶機c』上的任一分組,d是分組gc』中的任一轉發,D是d的集合,w』是分組gc』中的任一工作,W』是w』的集合,t』是w』所屬的任務,w』是任務t』中的任一工作,W』是w』的集合,d』是t』的任一轉發,D』是d』的集合,則任務t辦理過程的調度方法如下第一步若任務t的每一個工作w都處於完成或否定狀態,即GetStatus(w)∈{Swf,Swn},wW,]]>則轉第二步;否則結束;第二步若任務t的每一個工作w都處於否定狀態,即GetStatus(w)=Swn,wW,]]>則將任務t和任務t的每一個轉發d設置為否定狀態,即SetStatus(t)=StnSetStatus(d)=Sdn,d∈D,之後轉第七步;否則轉第三步;第三步對於t中的任一個w,若w處於否定狀態,則將w設置為完成狀態,將w的客戶機設置為空值null,將與w處於同一分組gc中的每一個工作w和每一個轉發′d設置為完成狀態,即SetStatus(w)=Swf,SetClient(w)=null,SetStatus(w)=Swf,w∈W,SetStatus(′d)=Sdf,′d∈′D,之後轉第四步;否則轉第五步;第四步對於任一個′d,若′d所屬任務′t處於否定狀態,即GetStatus(′t)=Stn,則將任務′t和任務′t的每一個轉發′d設置為完成狀態,即SetStatus(′t)=Stf,SetStatus(′d)=Sdf,′d∈′D;第五步若任務t有工作w處於否定狀態,即GetStatus(w)=Swn,wW,]]>則轉第三步;否則轉第六步;第六步將任務t設置為完成狀態,即SetStatus(t)=Stf,wW;]]>計算任務t的每一個轉發d的轉發條件,若結果為真,即PreCondition(d)=True,則將轉發d設置為待籤狀態,即SetStatus(d)=Sdw;否則將轉發d設置為否定狀態,即SetStatus(d)=Sdn;第七步對於任一個d,若其所屬分組gc』中的所有轉發d處於否定狀態,即GetStatus(d)=Sdn,d∈D,則將分組gc』中的所有工作w′設置為否定狀態,即SetStatus(w′)=Swn,w′∈W′;第八步對於任一個w′,若其所屬任務t』中的所有工作w′處於否定狀態,即GetStatusS(w′)=Swn,w′∈W′,則將任務t』和任務t』的所有轉發d′設置為否定狀態,即SetStatus(t′)=StnSetStatus(d′)=Sdn,d′∈D′;結束;6°多步任務重辦設t是案例中的任一任務,w是任務t的任一工作,W是w的集合,c是負責辦理工作w的客戶機,gc是定義在客戶機c上的任一分組,』d是分組gc中的任一轉發,』D是』d的集合,’t是』d所屬的工作,』w是任務’t的任一工作,』W是』w的集合,』d是’t的任一轉發,』D是』d的集合,w是分組gc中的任一工作,W是w的集合,d是任務t的任一轉發,D是d的集合,c』是d所屬的客戶機,gc』是定義在客戶機c』上的任一分組,d是分組gc』中的任一轉發,D是d的集合,w』是分組gc』中的任一工作,W』是w』的集合,t』是w』所屬的任務,w』是任務t』中的任一工作,W』是w』的集合,d』是t』的任一轉發,D』是d』的集合,則客戶機c重辦任務t的調度方法如下第一步若任務t處於在辦狀態,即GetStatus(t)=Stw,或任務t處於完成狀態且任務t沒有轉發,即GetStatus(t)=Stf Count(D)=0,或任務t處於完成狀態且任務t的每一個轉發d都處於待籤或否定狀態,即GetStatus(t)=Stf GetStatus(d)∈{Sdw,Sdn},d∈D,則轉第二步;否則結束;第二步對於任一個d,若其所屬分組gc』中的每一個轉發d都處於否定狀態,即GetStatus(d)=Sdn,d∈D,則將分組gc』中的所有工作w′設置為就緒狀態,即SetStatus(w′)=Swr,w′∈W′,之後轉第三步;否則轉第四步;第三步對於任一個w′,若其所屬任務t』處於否定狀態,則將任務t』和任務t』的每一個轉發d′設置為就緒狀態,即SetStatus(t′)=StrSetStatus(d′)=Sdr,d′∈D′;第四步將任務t和任務t要重辦的工作w設置為在辦狀態,並將任務t的每一個轉發d設置為就緒狀態,即SetStatus(w)=Sww,SetStatus(t)=Stw,SetStatus(d)=Sdr,d∈D;對於任一個d,若其所屬分組gc』中有工作w′處於否定狀態,即GetStatus(w′)=Swn,wW,]]>則將分組gc』中的每一個工作w′設置為就緒狀態,即SetStatus(w′)=Swr,w′∈W′;第五步若任務t有處於完成狀態的工作w,且w的客戶機為null,即GetStatus(w)=Swf GetClient(w)=null,wW,]]>則將w設置為否定狀態,即SetStatus(w)=Swn;第六步對於t中的任一個w,若w所屬分組gc中的每一個工作w都處於否定狀態,即GetStatus(w)=Swn,w∈W,則將gc中的每一個轉發′d設置為否定狀態,即SetStatus(′d)=Sdn,′d∈′D;第七步對於任一個′d,若其所屬任務′t處於完成狀態,且任務′t的每一個工作′w的客戶機都為空值null,即GetStatus(′t)=Stf GetClient(′w)=null,′w∈′W,則將任務′t和任務′t的每一個工作′w都設置為否定狀態,即SetStatus(′t)=StnSetStatus(′w)=Swn,′w∈′W;第八步客戶機c重辦工作w;第九步若工作w辦理完畢,則將工作w設置為完成狀態,即SetStatus(w)=Swf,結束;否則轉第八步;7°啟動循環設L為案例i的任一循環,w是循環路徑上的任一工作,則啟動循環的調度方法如下若工作w屬於循環L且工作w處於在辦狀態且循環L處於就緒狀態,即w∈L GetStatus(w)=Sww GetStatus(L)=Slr,則將循環L設置為運行狀態,即SetStatus(L)=Slw;否則結束;8°終止循環設L為案例i的任一循環,w是循環路徑上的任一工作,則終止循環的調度方法如下若工作w屬於循環L且工作w處於在辦狀態且循環L處於運行狀態,即w∈LGetStatus(w)=Sww GetStatus(L)=Slw,則將循環L設置為運行狀態,即SetStatus(L)=Slf;否則結束。
全文摘要
本發明公開了一種用於工作流引擎的多任務協同調度方法,構建多任務協同方法的計算模型——多步任務協同網,這是一個四元組N=(C,T;W,D)按照充分必要條件構造,多任務調度包括啟動案例、終止案例、客戶機籤辦任務、客戶機退回任務、多步任務辦理、多步任務重辦、啟動循環和終止循環八個調度方法。在多任務調度之前,案例和所有的工作、任務、轉發、循環都被初始化為就緒狀態。啟動案例是第一個被執行調度,客戶機籤辦任務、客戶機退回任務、多步任務辦理、多步任務重辦、啟動循環和終止循環是根據多步任務協同網的流向,包括正向和逆向,終止案例調度是根據工作和轉發的狀態由系統自動調度。本發明實現多步任務的正向和逆向調度。
文檔編號G06F9/46GK1728165SQ200510042888
公開日2006年2月1日 申請日期2005年7月4日 優先權日2005年7月4日
發明者胡飛虎 申請人:西安交通大學, 西安龍舟科技有限責任公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀