[原创]JWFD工作流引擎设计--简单矩阵建模与应用(初步讨论)

本文介绍了一种使用矩阵模型简化工作流引擎设计的方法,通过构建流程矩阵,不仅能够清晰地表示流程的拓扑结构,还能够解决节点匹配搜索问题,提供了一种更简洁的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  暂时忽略工作流状态的问题,仅仅表示工作流的拓扑结构

   为什么要搞这样的东东,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
 
    图2

   

      这个时候,我们观察到矩阵中有一个比较对称的地方,在第二行和第六列分别有三处为1的地方(矩阵中粗体的数字所在处),而这两组共6个为1的地方,恰巧是流程图中对称的分支和汇聚的拓扑结构所在之处(如图2),这个时候我在先前的文章“JWFD工作流引擎设计--节点匹配搜索算法(再讨论)”中曾经为寻找分支和汇聚的匹配点而做的一些工作显然又多了一种解决方案,以后我们在对一个工作流的进行矩阵建模之后,如果发现矩阵中出现这种行和列均有相同个数的连接点,且位置呈对角线对称的子矩阵,那么这个行数和列数所对应的流程节点既是一对分支和汇聚的匹配点,这个解决办法在逻辑上面比我原来使用的“节点匹配搜索算法”更为简洁明了。

    关于矩阵的存储结构,在计算机中有很多种办法,如果这种工作流的矩阵模型的存储比原来采用的邻接表数据库方式更为简单,占用的空间更加少,那么我认为在不抛弃过去邻接表数据库存储(流程在运行过程中的状态转换需要数据库,所以无法完全抛弃数据库)的基础上,增加矩阵结构的存储和运算,将为工作流引擎在处理复杂分支汇聚和其它拓扑结构的时候带来一些便利。。。。。。。。

    采取矩阵模型来表示工作流的拓扑结构的意义尚不局限在上面说的地方,随着我们的进一步的探索,相信会有更多的发现。。。。。。

 

JWFD申请到一个论坛专区,希望大家对JWFD的数据结构和设计有什么意见和建议,包括BUG都可以到这个地方来提交 地址是 http://www.openjweb.com/bbs/forum.php?mod=forumdisplay&fid=61 jwfd 工作流设计器V0.91 (本程序的源代码在comsci的其它资源中下载) 名称是 JWFD v0.94工作流源代码 for eclipse(BUG修正版) COMSCI 2005 需要JDK1.4以上 运行方法:双击jwfd.jar运行 QQ:784092877 本工具由JAVA SWING开源软件JGRAPH包的一些类和方法共同编写的,其中对原JGRAPH包的一些类 和方法进行了修改和完善(原始类不能将图的一些重要属性写入GXL文件,我添加了这几种属性的方法) 现在可以使用的一些功能有: 利用作图工具界面完成流程图的绘制,添加可以处理的节点属性和其他一些通用功能, 利用树型结构显示流程图文件的信息(一个是临时GXL文件目录(GXL_TEMP),一个是保存已经提交的GXL文件的目录(ACTIONED)) 通过点击顶部工具栏的最后一个图标,弹出对话框输入文件名后将图GRAPH保存为GXL文件 把GXL文件提交到数据库中的功能可通过在树型栏目中对已经保存的文件点击右键选择提交流程图来运行 提交完成后,在树型栏中的第二项目,已提交流程中就生成了一个被修改了文件名的项,同时数据库中的 stem_main(节点表)和edge_control(边定义表)中就就完整的图的基本数据,可以供流程运行处理模块使用 (本人使用的是MYSQL数据库,库的名字为new_sys,有三张基本表,建表SQL在包中,请自行修改 JGRAPH中对图和顶点边的定义存储结构是非常简洁实用的,利用数据库或者是GXL文件中的这些数据可以非常简单的处理一个复杂的流程图........... 该工具经过修改后,也可以实现一个实时监控界面和其它的适合于网络结构显示的工具和项目 GXL文件格式就是一种标准XML格式文件.....非常容易处理..可以脱离数据库进行流程图数据管理,效率很高 但是如果写入库中,则可以让程序更灵活一些............. 这些程序是在JBuliderX版本中完成的,我把需要用到的LIB都一起打成一个包..
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值