[原创]JWFD工作流引擎设计--节点匹配搜索算法(再讨论)

JWFD工作流引擎设计--节点匹配搜索算法(再讨论)

NMSA  Node matching search algorithm--节点匹配搜索算法说明
   
     只所以要设计这样一个算法,原因是在设计流程引擎的过程中遇到下面的这个问题
   
    “在对称条件下带条件选择的汇聚路由问题”:
  
     问题的严格数学语言描述:在任意一个流程图中,存在N个分支点和M个汇聚点,所有汇聚点和分支点的关系有规则对称和不规则对称两种(图1中的A2的拓扑是规则对称,A1,A3是不规则对称),每一个分支点的运行路径数S和它的实际分支路径数W有可能不相同,即S<>W和S==W的情况同时存在,现在的问题是:在规则对称的拓扑结构下(A2),已知分支点的实际运行路径数值S,求图A2中对称汇聚点的实际访问(实际汇聚)数值K
(----图1)

     [原创]JWFD工作流引擎设计--节点匹配搜索算法(再讨论)_第1张图片
   
     问题的描述用比较严格的语言使得这个问题更加像数学问题,其实本来就是个数学问题,只不过我没有找到这个问题的所属的数学领域,干脆自己取个名字-叫流程拓扑分析方法
    
     该问题的现实描述(现实描述的含义是在实际的开发工作中用比较实际的语言来表述)

     已知流程分支点的运行路径数值S,求流程图中一个汇聚点的实际访问(实际汇聚)数值,通过获取该数值,使得流程运行控制器(流程引擎)能够准确的控制流程的运转走向,即准确的控制对条件异步汇聚点放行的时机
    
     算法设计思路: 对于标准的对称的流程图而言,一个汇聚点一般来讲是应该对应一个分支点的,也就是说汇聚支路数应该和它前面的分支支路数相吻合(当然,这只是对很规则的对称流程图模型来讲),那么如果在分支节点中如果出现了条件选择公式(或者智能脚本),那么从这个分支节点所分出来的支路,就不一定都会被选中,
    
     简单举例, 我们在分支节点中嵌入了一个条件表达式
    
     if a>2
       Then goto PATH A B  (实际运行两条分支)
       else goto PATH A B C(实际运行三条分支)
     if a=其它值
        then ..............(更多的情况)
    
     上述表达式中

     流程节点中嵌入的a值一般是要在流程实际运行过程中才能够获得,因为a的值极有可能来自一个嵌入流程的表单,而这个表单要在流程运行的时候才能够被处理,而处理的结果是实时的传递给流程的,所以从这个方面来讲,通过预先确定a值的方法来回避这个问题是不太现实的
    
(请参考 JE论坛上面大家对这个问题的讨论  http://www.iteye.com/topic/513430
    
     firebody同志的意见是a值可以放在数据库中
    
     ronghao同志

     意见1是”让这两个节点进行通信,可以在设计期就完成两者的互相映射“
    
     意见2是另一种实现方式是采用token。如下图所示,在OR-split节点token根据实际触发的情况,每个触发的分支产生一个新的子token,当子 token到达OR-join节点后即可通过其访问到它的父token,再通过父token遍历其子token即可获得OR-split节点实际触发的分支信息。

图2 [原创]JWFD工作流引擎设计--节点匹配搜索算法(再讨论)_第2张图片

     如果要采取其他的方式来处理这个问题,我比较倾向于ronghao同志的意见1,让两个关联节点进行通讯,使其互相映射在这种情况下,a的值一旦在运行状态下被确定下来,后面和它映射的那个汇聚控制点就立即知道了这个值,那么流程引擎通过简单的运算就可以知道精确控制汇聚放行的条件K值了,这个思路非常不错。。但是前提是要明确的知道互相映射节点是哪些,要在流程运行之前确定下来这一节点对,这个工作可以通过我设计的节点匹配算法
来完成,也可以在流程设计器设计流程的过程中,通过人工来完成,我个人认为,后者显得更加简洁明了些,但是前者也不失为一种有效的方法

(该算法的伪代码设计说明请参考我的博文 “JWFD工作流引擎设计----节点匹配搜索算法(用于初步解决条件异步汇聚问题) 补充” 地址:http://comsci.iteye.com/blog/502102 
该算法的JAVA代码  请参考 JWFD V0.96工作流开发包SRC中的org.jwfd.workflowEngines.Algorithm.TopologyAnalysis.java文件
文件中有详细的说明  下载地址(本文附件) http://comsci.iteye.com/blog/478323
旧版本JWFD代码开发包下载  http://d.download.csdn.net/down/1299903/comsci 
)


(希望同志们对这个问题不要放弃,我觉得里面还有很多东西可以挖掘)
    
    
     如果对采用匹配算法和节点映射都不是很感兴趣,那么ronghao同志的第二种方法-token方法也不错,这样的处理方法也很灵活,但是需要增加流程中的控制变量,那么总体来讲就设计和开发工作量而言,ronghao同志的第一种处理方法是最优的,特别是通过在流程设计过程中确定下来匹配的节点这个办法是在原理上和实际上比较易于理解和实现的,前提是流程设计器的设计活动中,系统需要增加一个或者几个变量来做对称节点的匹配映射工作,这个工作如果交给人工用肉眼来完成,个人觉得显得比较方便。。哈哈,计算机算法在这个方面不如人的肉眼判断拓扑关系那么方便和直观,这也许就是当前和今后人工智能要努力的方向了
    
     有点感觉,把这个问题的解决方法形成一个体系,并从中总结出一些系统的原理和方法论来,不过这个过程应该比较长

很多理论体系都是在经过比较漫长的岁月的沉淀之后才逐渐形成的,我想工作流系统设计也不例外。。。

你可能感兴趣的:(工作,算法,数据挖掘,搜索引擎,嵌入式)