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

从内外参推导IPM变换方程及代码实现(生成AVM环视拼接图) 最近想实现AVM拼接,看了不少博客和论文,不过比较愚钝,一直没能很好理解原理,尤其是怎么在实现时把下文中Z1和Z2消除的,所以严谨的推导了一下对应的公式,如有不对,水平有限,烦请指出~IPM变换(逆透视变换),顾名思义,即将正常透视效应消除的变换,变换结果为鸟瞰图BEV(俯视图);AVM环视拼接一般是将车身前后左右的四个鱼眼相机拼接成环视图(也是俯视),其使用的单应矩阵将四个相机转到同一个俯视坐标系。 阅读详情

     


    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的下一个版本的文档中,为大家作出进一步的解释和说明了




缺陷检测-金属表面缺陷检测 1介绍 缺陷检测是工业视觉技术中最重要的组成部分。业务广泛,场景丰富,技术难点高、工作量大。针对不同的场景,选择不同的相机和 阅读详情

相关推荐

别再为淘宝滑块发愁了!一个Python脚本自动获取x5sec cookie的保姆级教程

本文提供了一套完整的Python自动化解决方案,帮助开发者轻松应对淘宝滑块验证码问题。通过模拟浏览器行为、精准识别滑块缺口位置和生成拟人化移动轨迹,脚本能够自动获取关键的x5sec cookie,显著提升爬虫效率。教程涵盖环境配置、验证机制分析、代码实现及反检测策略,是解决淘宝滑块验证的实用指南。

weixin_30300225的博客 577

[原创]JWFDv0.96工作流系统--流程XML文档结构说明

作者: comsci 发表于 2010-10-08 09:27 原文链接 阅读: 7 评论: 0 本文简要介绍了JWFDv0.96工作流系统的流程图XML模型结构,其中带有少量的专业语言,浅显易懂,适合初学工作流系统的设计和开发者,在了解这个结构之后就需要大家把注意力集中到流程图X...

chenglan8953的博客 158

STM32CubeMX+FreeRTOS实战:3步搞定LED任务配置(附代码解析)

本文详细解析了如何使用STM32CubeMX图形化工具配置FreeRTOS实时操作系统,并创建LED闪烁任务。通过剖析MX_FREERTOS_Init()函数和CMSIS-RTOS封装层,深入理解任务创建、调度及osDelay()协作机制,帮助开发者从点击生成进阶到内核原理掌握,实现高效的多任务嵌入式开发。

weixin_29192141的博客 469

JWFDv0.96开源工作流引擎设计--节点匹配搜索算法设计说明

JWFDv0.96开源工作流引擎设计                        --节点匹配搜索算法设计说明 注:这篇文章中所使用的“函数”就是指JAVA语言中的方法         作者  comsci        四川.成都        最后修改时间    2013.4.1 算法设计说明   (前两年,我曾经公布

comsci的专栏 1421

创新实训项目博客:基于LoRA的医疗大模型高效微调实战

预训练大语言模型(LLMs)虽然具备了广泛的知识和一定的通用能力,但在特定领域(如医疗)或特定任务(如遵循特定指令格式进行思考链推理)上,其表现往往不尽如人意。微调(Fine-tuning)能够使模型学习到特定领域的数据分布和任务模式,从而在目标任务上获得更好的性能,使其更贴合实际应用需求。使用Unsloth框架加载并以4-bit量化模型。基于数据集,构建了包含明确思考链引导的训练Prompt。配置了LoRA参数,并使用SFTTrainer在单张T4 GPU上对模型进行了高效微调。

m0_73556916的博客 1291

Cadence IC5141保姆级教程:Bandgap电路四大仿真(稳定性/噪声/启动/PSRR)完整流程与调参心得

本文提供Cadence IC5141中Bandgap电路的四大仿真(稳定性仿真、噪声仿真、启动仿真、PSRR仿真)的完整流程与调参心得。从原理图检查到ADE L配置,详细解析各仿真步骤的关键参数设置与优化策略,帮助工程师高效完成电路设计与性能调优。

weixin_30399821的博客 1654

html格式文档结构保存数据库6,[原创]JWFDv0.96工做流系统--流程XML文档结构说明

做者: comsci 发表于 2010-10-08 09:27 原文连接 阅读: 7 评论: 0html 本文简要介绍了JWFDv0.96工做流系统的流程图XML模型结构,其中带有少许的专业语言,浅显易懂,适合初学工做流系统的设计和开发者,在了解这个结构以后就须要你们把注意力集中到流程图XML数据到后台SQL数据库结构的创建过程当中,以便你们理解JWFD工做流引擎的工做原理及其实现方式java1:...

weixin_34008968的博客 153

搭建微信机器人的方案都在这了!

功能超级强大,虽不支持二次开发,但已有的功能足够个人使用,可惜官方作品已被腾讯告死,好在市面上还流落着不少破解版,有需要的自行搜索。可惜的是,微信官方已不准许新的微信号再使用 web 登录,这就直接从源头扼杀了 web 协议的微信机器人,虽说老的微信号还是能凑合着用,不过部分功能也受限。所以,这些都属于 PC 端的微信机器人。无论是 PC 端还是手机端,用 hook 方式实现的最大缺点就是要和某一个版本的微信客户端进行绑定,如果框架本身不对最新版本的微信适配,那使用的时候就无法升级到最新版本的微信。

weixin_47246330的博客 1万+

[] JWFD v0.96 工作流系统--嵌入公式使用和结构说明

jwfdv0.96 工作流系统设计 --嵌入公式使用和结构说明 [img]http://dl.iteye.com/upload/attachment/350443/54560a4f-0279-34c5-9994-6c9aef0c74b0.jpg[/img] 注:这篇文...

tianlanlan 186

【Python基础】FastAPI 从入门到项目实战操作详解

【Python基础】FastAPI从入门到使用实战操作详解

congge_study的博客 458

Coze智能体开发:工作流教程之解析文件概述

大模型本身并不具备文件读取和解析的能力,无法直接处理文件字节流。对于支持工具调用(Function calling)的模型,扣子提供插件功能来帮助大模型调用外部工具 API,拓展大模型的能力边界。扣子插件商店提供海量官方插件和第三方插件,例如链接读取插件可以将链接对应的文件内容解析为纯文本传递给大模型。

王国平的博客 1794

[] [原创]JWFDv0.96工作流系统--流程XML文档结构说明

[img]http://dl.iteye.com/upload/attachment/326181/edb4d885-20ff-3452-9aa3-8a316a8cf390.jpg[/img] 本文简要介绍了jwfdv0.96工作流系统的流程图xml模型结构,其中带有少量的专业语言,浅显易懂,适合初学工作流系统的设计和开发者,在了解这个结构之后就需要大家把注意力集中到流程图xml数...

我的java 博客,嘿嘿 224

RT-DETR改进前必看 - Ultralytics调参 1:1还原RT-DETR官方版本实验环境,更方便改进

的项目文件中集成了YOLOv3v5v6v8v9v10rt-detr11以及其中不同大小的模型结构,更方便我们学习和使用。的参数配置在路径下,其中中设置了模型在训练Train验证Val/Test预测Predict可视化Visualize导出Export超参数Hyperparameters、以及跟踪Tracker的相关参数。在调参过程中主要涉及训练Train和超参数Hyperparameters。下面主要介绍一下初始超参数Hyperparameters。

Limiiiing的博客 7969

[原创]JWFDv0.96 开源工作流发布前的一些问题说明

                随着工作流技术的发展,工作流产品的应用范围也不断的在扩展,开始进入了像金融行业(我已经看到国有四大商业银行的工作流产品招标公告了),实时生产控制和其它比较重要的工程领域,而这些领域对数据的准确性和实时性要求都比类似文件管理,办公系统这些高得多,那么如果工作流技术要进入这些领域,我们该做些什么准备呢?       我在这里需要结合工作流系统设计的一些具

comsci的专栏 847

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[原创]工作流自适应引擎的设计思想(初步)

      最近一段时间都在思考这样一个问题:如果我们想让一个工作流引擎能够妥善的处理由用户通过流程设计器设计出来的任意复杂(简单)的流程图,那么对这个工作流引擎的结构设计就必须很灵活,因为如果仅仅依靠一个有限规模的类与方法集合体,我们不太容易很好的处理所有可能遇到的流程图,但是经过我在JWFDv0.94-v0.96这几个版本的流程引擎设计过程中,我发现了一个潜在的,有可能比较

comsci的专栏 2916

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【算法拾光】队列|在每个树⾏中找最⼤值 + 最后⼀块⽯头的重量

本文总结两道经典算法题:一是通过层序遍历(BFS)逐层找最大值,利用队列分层处理,每层维护最大值;二是用大根堆(优先队列)模拟石头碰撞过程,每次取最大两块石头,差值重新入堆,直至剩余一块或无石。前者适用于树的层次遍历,后者适合动态获取最值场景。核心思想:队列用于分层遍历,堆用于高效取极值。

wuqingyigexiaoba的博客 131

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 384

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 334

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 315
上一篇: [原创]JWFDv0.96工作流引擎设计-数据库结构说明
下一篇: [原创]JWFDv0.96工作流引擎设计-自动运行控制器结构说明
comsci
博客等级 码龄22年 412粉丝 397原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值