[原创]JWFDv0.96工作流引擎设计--嵌入公式使用和结构说明

     


    JWFDv0.96工作流引擎设计

         

                         --嵌入公式使用和结构说明








注:这篇文章中所使用的“函数”就是指JAVA语言中的方法



作者 comsci   2010.11.18    四川。成都





总体 设计 思路



    通过在流程的节点里面嵌入公式 (脚本 ) 保存在 数据库中节点 字段 属性中的,然后流程引擎控制器通过执行脚本引擎获得 运行 公式的结果,然后通过这个 运行的结果数据来 控制流程流转的方向





设计说明:提前计算及其潜在问题



    在实际的流程系统工程设计中,我们会遇到这样的问题,流程引擎要根据嵌入条件公式的运行结果来判断流程流转的方向,一般来讲流程引擎在控制流程流转的那个时刻才能够获得控制流转的参数,因为负责控制嵌入节点的脚本的脚本引擎是在流程流转到该节点的时候才启动,而这个时候脚本引擎运算的结果才作为流程引擎控制流转方向的参数发挥作用,那么我们在解决这个问题的时候,采取了一种叫“提前计算”的方法来处理这个问题,简单的讲,提前计算就是将流程引擎中对流程的流转控制所需的参数通过提前启动脚本引擎运行嵌入节点的脚本来提前获得这个参数,那么引擎一旦运行到这个节点的时候,这个关键的控制参数已经放在参数表中,引擎立即就可以确定流转的方向。




---------------------------------------------------------------------------------------------------------------------



嵌入公式的二次开发使用说明



   当用户使用流程节点的属性编辑器写一段嵌入脚本公式进去之后,这段公式的数据就进入数据库的节点表step_main 中的 cond 字段中的保存(请参考 JWFD工作流系统的数据库结构文档


对着设计器的节点点击鼠标右键“增加节点属性”




尝试点击编辑节点条件公式,出现流程节点嵌入表达式编辑界面






用户可以在这里面自定义嵌入表达式   



这个界面所对应的代码是org.jwfd.workflowDesigner.UItools.SwingTools.ExpressEditor.java   




用户可以通过查看流程定义XML 编辑窗口,看看你编辑的公式进入 XML 文档中没有






用户点下面这个标签,流程图.gxl 的窗口就是 XML 的定义属性,如果用户编辑的公式已经在 Condition 的属性中,那么用户提交流程的时候,这个字段就会被送入数据库中的节点表 step_main 中的 cond 字段进行保存





用户提交,出现异常之后,不管这个异常,直接看数据库中数据进入没有,如果进入就OK ,这一步就到这里




那这一步就这样,这个异常我修改以后重新发布,用户暂时现在可以往下面的工作进行下去对流程节点的嵌入脚本尝试计算。。然后根据计算结果来控制流程走向,请参考前面的设计说明



这个时候,用户需要调用代码包中的 org.jwfd.workflowDesigner.UItools.Database.mysql.FlowsSqlControlModule.java这个类里面的这个 SQL 操作方法 public String get_condition()



这个方法通过传入的节点ID(step_id) 来获取流程数据表中节点的逻辑公式属性值 (cond)    位置在这个类的第 1440


那么通过这个方法获取这个公式之后,下一步,我们就通过调用org.jwfd.workflowEngines.GrammarAnalysis.GrammarInterface.java

这个类里面的 public void ScriptAnalysis(String str){} 这个方法来得到这个公式运行之后的结果值



通过这个ScriptAnalysis 方法运行后,将公式结果直接屏幕输出值,用户要通过代码获得这个结果,需要修改一下这个方法的返回属性,修改为字符串( JWFD 定义的嵌入公式都是字符串格式的,也可以定义为文本文件或者其它文件格式)


拿到这个结果之后,就需要进行下一步在 org.jwfd.workflowEngines.Algorithm.TopologyAnalysis.ja va 这个类中修改public void SAN(java.util.ArrayList ln, String graphid,String prestep){} 方法,这个 SAN 方法是流程引擎的核心控制器,这个控制器的原理在这篇文章中 



要根据公式计算结果来控制流程的流转方向,主要工作就在这个 v0.96 引擎的 SAN方法中处理,这个方法的前身其实就是一个图形拓扑遍历算法,算法的 伪码描述 在这里 ,SAN算法是在 v0.94 版本的引擎 DSF 算法的基础上面修改而成的,所以其基础结构还是 DSF 的结构

 



/* *******************************  流程引擎 伪码描述算法  ***************************/

          前驱路由点 该点是 N 个节点的 source (N>1)          

           后驱路由点 该点有 N 个节点的 target (N>1)

      Public     DSF   (){

            for(int  i = 0,   I  < 当前节点的邻接点个数 ,  I   ++  ){

          if (该点是个前驱路由点 ) {

              if (该点没有被访问过 ) {

                  设置访问次数加( 从递归方法中获得的循环控制变量 )

                  返回

              }

              else if( 如果已经访问过 , 但是访问次数 < 它的前驱节点总数 ){

                   设置访问次数加( 从递归方法中获得的循环控制变量 +1)

                   返回

              }

              else if(总计访问次数 = 它的前驱节点总数 ){

                  递归进入下一个节点的访问( 把大循环体的 , 循环变量带进去递归方法中 )

              }

              }

              else if(如果是普通节点 ){

                  设置访问标志

                  递归进入下一个节点的访问( 把大循环体的 , 循环变量带进去递归方法中 ,dfs(i) )

              }

              }

      }

}

/*****************************************************************************/  




   

可以,用户在理解这个 SAN 方法的原理之后,可以自己写个简单的过程,其实很简单,就是一个for 循环,然后里面嵌套若干个 IF 语句,用户在其中加入对节点计算结果进行的 IF 判断,就可以控制流程的流转方向了

 



由于有嵌入公式的加入,使得整个流程引擎结构的复杂程度上了一个台阶,因此,JWFDv0.96 版本的引擎采用了“节点匹配搜索”算法来处理这个问题,要处理条件汇聚问题,就需要把节点匹配搜索这个算法描述清楚


请大家参考这几篇文章



带条件选择的并行汇聚路由问题

http://comsci.javaeye.com/blog/339756



带条件选择的并行汇聚路由问题 的再思考

http://comsci.javaeye.com/blog/466358



JWFD引擎设计 - 节点匹配搜索算法 - 简易说明

http://www.javaeye.com/topic/513430



但是这个设计做完之后,我发现这个解决办法还无法完美的解决这个问题,因为提前启动脚本引擎进行运算,虽然可以提前于流程引擎获得运算结果,但是如果嵌入脚本需要前驱节点传递过来的表单或者业务数据才能够计算,那么这样的提前启动脚本引擎进行运行的方式就会因为缺少足够的计算参数而无法得到正确的结果,从而导致流程引擎无法提前获得确定的流转控制参数




对于这些新出现的问题,我在 JWFD的下一个版本中,打算采用新的设计思路来处理该类问题




1:对用于处理流程节点的嵌入式脚本的脚本引擎的启动和计算参数的传递这一过程进行独立于流程引擎的设计,采取分立的方法,对这一系列的过程进行分别独立操作,结合脚本引擎和参数传递,提前计算的几个模块,形成一个独立于流程引擎的参数控制模块,当然这样会使得系统变得更加复杂了,系统的设计和开发成本又要上一个台阶了。



2: 独立的脚本和参数模块在运行控制的时间上面与流程引擎的拓扑结构的运行控制时间进行分离,也就是说,参数模块在运行的时间上面与流程引擎的运行时间互相分离,时间上面不同步,参数模块提前于流程引擎的运行,从而使得流程引擎在运行之前就能够获得充分的控制参数



但是这里有个问题,如果业务数据的处理过程是和流程引擎的运行过程不同步的话,那么如何提前运行嵌入式脚本模块来获得正确的参数呢? 要运行这个模块就必须获得表单传递过来的参数,而表单数据传递的过程如果和流程引擎不同步运行,那表单数据就无法按照流程的拓扑次序正确的传递过来,那么嵌入脚本模块也就不可能获得初始参数,也不可能运算出正确的流程条件逻辑参数,那么流程的流转就无法进行? 这个矛盾的确存在呀。。。



如果按照这个思路设计下去,我打算采用两个时间线( 不一定是两个线程 ) 来异步运行嵌入脚本引擎和流程主引擎,一条时间线 (time line) 或者进程来负责运行嵌入脚本引擎,作为主流程引擎进程的子进程,如果主流程引擎时间线在运行到条件汇聚节点的时候,这条子时间进程没有提前运行,那么这个时候,条件汇聚节点就无法正确的流转下去。。。。。。


那么采取主流程引擎配合从参数引擎的方式来彻底解决这个问题,引擎的结构就变成两个主从模块共同工作了


这种主从模型的设计对于整个流程引擎的结构会带来什么样的影响,就需要comsci在JWFD的下一个版本的文档中,为大家作出进一步的解释和说明了




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: cudnn-windows-x86_64-8.5.0.96_cuda11-archive.zip 是一个文件,该文件是CUDNN(CUDA® Deep Neural Network library)软件的一个归档版本。CUDNN是由NVIDIA提供的用于加速深度学习应用程序的GPU加速库。 这个zip文件的名称中包含一些关键信息: - cudnn-windows-x86_64:表示这是一个针对Windows操作系统的CUDNN版本,x86_64表示支持64位操作系统。 - 8.5.0.96:表示这个归档文件的版本号为8.5.0.96。版本号通常表示软件的更新和改进,这可能是较新的版本。 - cuda11:表示这个版本的CUDNN与CUDA 11兼容。CUDA是一种由NVIDIA开发的用于在GPU上进行通用计算的并行计算平台和编程模型。 这个zip文件很可能包含CUDNN库的所有文件和工具,用于在Windows平台上进行深度学习项目的开发和部署。在使用这个zip文件之前,需要将其解压缩,然后按照CUDNN的安装指南执行相应的步骤进行安装。 CUDNN具有高性能和优化的深度学习功能,可以加速神经网络的训练和推理过程。它提供了一系列的函数和工具,包括卷积、池化、归一化等基本操作的实现,以及各种算法和优化策略,可以帮助开发者更高效地构建和训练深度学习模型。 总结起来,cudnn-windows-x86_64-8.5.0.96_cuda11-archive.zip 是一个提供在Windows平台上进行深度学习开发和部署的CUDNN软件库的归档版本。 ### 回答2: "cudnn-windows-x86_64-8.5.0.96_cuda11-archive.zip" 是一个文件的名称和格式。这个文件是CUDNN(CUDA深度神经网络库)的一个特定版本的Windows 64位操作系统的压缩归档文件。 CUDNN是由NVIDIA提供的一个用于加速深度神经网络训练和推理的库。它能够充分利用GPU的并行计算能力,提高深度学习算法的运行效率和速度。 "cudnn-windows-x86_64-8.5.0.96_cuda11-archive.zip" 这个文件的版本是8.5.0.96,针对的是CUDA 11版本的框架。CUDA是NVIDIA提供的一种并行计算平台和API模型,用于在GPU上进行通用计算。该文件适用于Windows操作系统的64位版本。 压缩归档文件是将一个或多个文件压缩为一个文件的格式,以便于传输、存储或备份。通过解压缩这个文件,我们可以获取其中的内容,包括CUDNN库文件和其他相关文件。这些文件可用于在Windows系统上配置和使用CUDNN加速深度神经网络。 总而言之,"cudnn-windows-x86_64-8.5.0.96_cuda11-archive.zip" 是一种能够在Windows 64位操作系统上加速深度神经网络训练和推理的CUDNN库文件的压缩归档文件。 ### 回答3: cudnn-windows-x86_64-8.5.0.96_cuda11-archive.zip是一个用于Windows操作系统的CUDA深度学习库文件。CUDA是英伟达开发的并行计算平台和编程模型,它可以加速深度学习任务的运算速度。cudnn是CUDA深度神经网络库,提供了一些用于优化深度神经网络模型的函数和工具。 这个压缩文件中的cudnn版本为8.5.0.96,适用于64位的Windows操作系统,并且需要CUDA 11及以上版本的支持。它是一个存档文件,表示它是针对已经过时或不再支持的CUDA和cudnn版本的备份文件。 要使用这个文件,首先需要安装对应版本的CUDA平台。然后,将cudnn的压缩文件解压缩到CUDA的安装目录中的相应位置。这些位置包括bin目录、include目录和lib目录,它们通常位于CUDA安装目录下的相应子目录中。 一旦将cudnn文件正确安装到CUDA目录中,就可以在深度学习项目中使用它了。根据自己的需要,可以引用cudnn的函数和工具来优化神经网络模型的训练过程和推断过程,以提高计算效率和性能。 总结来说,cudnn-windows-x86_64-8.5.0.96_cuda11-archive.zip是一个用于Windows操作系统的CUDA深度学习库文件,它可以加速深度学习任务的运算速度。要使用它,需要安装对应版本的CUDA平台,并将cudnn的文件正确安装到CUDA的相应目录中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值