JWFD工做流引擎設計--簡單矩陣建模(初步討論)

做者: comsci 發表於 2010-08-18 11:41 原文連接 閱讀: 43 評論: 0html

 

JWFD工做流引擎設計--簡單矩陣建模(初步討論)java

 

 *  暫時忽略工做流狀態的問題,僅僅表示工做流的拓撲結構程序員

 * 
 *  爲何要搞這樣的東東,jwfd v0.96版本中的引擎算法已經足以應付常見的工做流模型了,其它工做流系統的狀態機模型也是比較不錯的解決方案
 *  由於在我設計0.96的引擎的時候,因爲嵌入式代碼模塊和外部數據(表單等)的加入,核心引擎的代碼出現了膨脹,引擎算法的結構出現複雜化的趨勢
 *  這個變化趨勢讓我感到流程系統的引擎核心因爲負擔的功能的增長而產生的代碼量的膨脹和結構的複雜化是流程系統設計的一大障礙,所以咱們有必要
 *  爲克服這個障礙而做出一些新的嘗試,所以尋找一種更加清晰和簡明的流程數學模型就成爲必須
 * 
 *  這裏還有一個重要的緣由促使我要採用矩陣來構建流程的數學模型,由於在我前面對「JWFD工做流引擎設計--節點匹配搜索算法(再討論)」這篇文章中
 *  我遇到了如何用算法來尋找一對匹配的節點的問題(帶條件選擇的並行匯聚路由問題 http://comsci.javaeye.com/blog/339756),雖然採用遞歸
 *  算法初步解決了這個問題,可是我始終認爲有更爲簡單的辦法來解決這個問題,通過一段時間的探索,我發現了一個比較有趣的現象,在流程矩陣中分支
 *  和匯聚的拓撲結構會在矩陣的數學模型中表現爲一個相似對稱子矩陣的結構,咱們能夠根據一些很簡單的邏輯判斷就能夠發現一對互相匹配的分支匯聚點
 *算法

 *  構造矩陣步驟
 * 
 *  1:用設計器畫出流程圖(驗證用流程圖相對比較簡單,包含一個簡單的對稱分支和匯聚結構)數據庫

    
 * 
 *  2:統計流程圖的節點總數N(流程圖有多少個節點?)
 *    
 *        這個流程圖一共有8個節點(包括開始和結束的點)
 *    
 *  3:生成一個N*N的空矩陣(N就是第一步中的節點總數,若是不瞭解或者忘記矩陣的概念,能夠翻翻線性代數的教材)
 *    
 *    
 *        1  2  3  4  5  6  7  8
 *      ************************
 *   1  * 0  0  0  0  0  0  0  0 
 *   2  * 0  0  0  0  0  0  0  0
 *   3  * 0  0  0  0  0  0  0  0
 *   4  * 0  0  0  0  0  0  0  0
 *   5  * 0  0  0  0  0  0  0  0
 *   6  * 0  0  0  0  0  0  0  0
 *   7  * 0  0  0  0  0  0  0  0
 *   8  * 0  0  0  0  0  0  0  0
 *  
 * 
 *  4:根據流程圖的節點之間的鏈接來填充第二步中生成的N*N空矩陣
 *
 *    根據流程的節點之間的鏈接線的狀況,好比說節點1到節點2有一條鏈接線,那麼咱們就在矩陣的第一行和第二列的交叉處用1來表示
 *    節點2和節點3有一條鏈接線,那麼咱們就在第二行和第三列的交叉處用1來表示,如此類推,這個流程矩陣模型就完成了
 *    (若是還不太理解這個流程模型的矩陣表示法,請參閱「算法導論」第22章-圖的算法)
 *   
 *        1  2  3  4  5  6  7  8
 *      ************************
 *   1  *  0  1  0  0  0  0  0  0 
 *   2  *  0  0  1  1  1  0  0  0
 *   3  *  0  0  0  0  0  1  0  0
 *   4  *  0  0  0  0  0  1  0  0
 *   5  *  0  0  0  0  0  1  0  0
 *   6  *  0  0  0  0  0  0  1  0
 *   7  *  0  0  0  0  0  0  0  1
 *   8  *  0  0  0  0  0  0  0  0
 *網絡


 *  這個時候,咱們觀察到矩陣中有一個比較對稱的地方,在第二行和第六列分別有三處爲1的地方,而這兩組共6個爲1的地方,恰巧是流程圖中
 *  對稱的分支和匯聚的拓撲結構所在之處,這個時候我在先前的文章「JWFD工做流引擎設計--節點匹配搜索算法(再討論)」中曾經爲尋找分支和匯聚
 *  的匹配點而作的一些工做顯然又多了一種解決方案,之後咱們在對一個工做流的進行矩陣建模以後,若是發現矩陣中出現這種行和列均有相同個數
 *  的鏈接點,且位置呈對角線對稱的子矩陣,那麼這個行數和列數所對應的流程節點既是一對分支和匯聚的匹配點,這個解決辦法在邏輯上面比我原來
 *  使用的「節點匹配搜索算法」更爲簡潔明瞭,工具

 
    關於矩陣的存儲結構,在計算機中有不少種辦法,若是這種工做流的矩陣模型的存儲比原來採用的鄰接表數據庫方式更爲簡單,佔用的空間更加少,那麼我認爲
    在不拋棄過去鄰接表數據庫存儲(流程在運行過程當中的狀態轉換須要數據庫,因此沒法徹底拋棄數據庫)的基礎上,增長矩陣結構的存儲和運算,將爲工做流引擎
    在處理複雜分支匯聚和其它拓撲結構的時候帶來一些便利。。。。。。。。開發工具


    採起矩陣模型來表示工做流的拓撲結構的意義尚不侷限在上面說的地方,隨着我進一步的探索,相信會有更多的發現。。。。。。網站

評論: 0 查看評論 發表評論spa

程序員找工做,就在博客園

最新新聞:
· 被iPad改變的網絡生態(2010-10-14 11:17)
· 馬雲的野心:「全網一站式」通吃購物、搜索(2010-10-14 11:16)
· 蘋果iPhone 4在線預訂恢復 水貨空歡喜(2010-10-14 11:15)
· AppBistro:讓你擁有本身的應用程序商店(2010-10-14 11:11)
· HTC周永明:不如放手一搏(2010-10-14 11:09)

編輯推薦:CodeRun Studio:基於Web的IDE開發工具

網站導航:博客園首頁  我的主頁  新聞  閃存  小組  博問  社區  知識庫

相關文章
相關標籤/搜索