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开发工具

网站导航:博客园首页  我的主页  新闻  闪存  小组  博问  社区  知识库

相关文章
相关标签/搜索