[原创]JWFDv0.96工作流引擎设计-数据库结构说明

基于关系数据库的工作流引擎设计与实现 探讨了一种数据库驱动的工作流引擎的实现方案;分析了中心数据库的作用 ,并给出了数据库模型图;从流程分配、路由选择、消息发送及监控管理方面详细分析了工作流引擎的实现机制。 立即下载


 

 

 

          JWFDv0.96工作流 引擎设计


                                                                           

                                      ----数据库结构说明

 

 

 


    

 

 

                   

 

           

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

 

注: 请参考 “JWFDv0.96 工作流系统开发包简易说明.doc”中的引擎API说明来理解JWFD工作流引擎的原理

 

 

作者 comsci   2010.10.5   四川。成都

 

 


V0.94版本介绍:  本项目是一个利用JGRAPH和SWING实现的工作流程设计与运行管理程序,其数据结构和流程算法均是自己设计的,没有使用XPDL等工作流规范文件,而是使用的最简单的XML(GXL)格式,没有状态机的概念而是使用的自定义图形遍历算法来驱动这个流程…主要的操作是在数据库方面,这样做仅仅是降低了工作流管理系统的技术门槛,便于初学者入门并从感性上理解什么是工作流技术,但是在实际应用上和真正的商业工作流产品还有较大的差距


 

V0.96版本介绍

 

      JWFD是由我在04年下半年开始设计并开发的一套包括基于Jgraph开源软件的流程设计器和建立在图形自定义数据结构基础上面的流程引擎的工作流软件系统,在随后的几年中,由于工作和其它一些技术原因,对JWFD的更新一直都停留在局部BUG的修正上面,对核心引擎算法没有进行什么大的改进,这几年国内的流程产品层出不穷,技术水平不断提高,为适应这种发展的情况,我利用在08和09年在完成某项目的机会,对JWFD在面对各种实际项目中所体现出来的缺陷进行了修改,对引擎算法进行了大幅度的修正,新增加了增强流程引擎功能的算法,加入了自定义嵌入式脚本解析工具(基于ANTLR3.0开发,脚本功能可能要少些),增加了流程设计器的流程代码编辑功能,增加了简易流程引擎调试工具,对数据库的表结构也做了一定的调整,精简了几张不需要的表,同时增加了主控制结构表的字段,为方便流程设计的初学者,我在不删除旧数据结构说明的基础上面,从新添加新版本数据结构的说明,这样可以使朋友们很容易的从简单的结构入手,再深入到新版本的结构中去。。。。

 

 


数据库结构总览(JWFD v0.94-v0.96数据库结构):

 

(下面这两段话是描述的jwfdV0.94之前的数据结构,用户可以跳过不看)

JWFD曾经使用表一共12张,分别是:

用户权限部门管理类一共三张表: 'department', 'department_level', 'departmentmember'

用户表类两张: user和user_group (以上的表都不是核心结构,可要可不要,但是做为一个完整的程序,还是应该考虑的…这些表是用户和权限控制的基础数据结构)

(上面的六张表由于和实际应用项目开发关系过于密切,在JWFD的新版本中已经完全被放弃不用了,JWFD只是一个用于学习的工作流系统,我只关心流程核心的运行控制和处理问题,对于项目和产品应用的外围数据结构,比如说表单等数据结构,我在这里暂时不关心,这些工作是交给项目实施者和商业产品开发者考虑的工作)

流程运行控制表一共五张表: 'edge_control', flow_manager', 'route_control', 'step_detail', 'step_main',

文档管理类: 一张表 :document

  v0.94版本之前的数据库总体结构

(下面的内容是描述jwfdv0.96的数据库结构)

 

    v0.96版本的数据库总体结构

目前所有的表,其中只有4张表对于流程引擎来讲比较重要

(它们分别是edge_control', flow_manager', 'route_control', 'step_main'),也需要重点说明,其它的表在系统中使用率不高,甚至根本没有使用,只是用于给用户进行自定义扩展的时候使用的,大家一看就懂。

最新的v0.96版本中,一共有5张表都已经废弃了,原因是由于在jwfd的设计过程中,会出现各种不同的应用,作为JWFD的设计者,我无法完全掌握用户自定义的需求,所以只给用户提供了扩展的接口,具体的应用还是需要用户自己去设计和实现的。。。


流程图数据结构--实际流程建模数据是由XML文件导入数据库,请看下例文章了解XML数据结构,

JWFDv0.96工作流系统开发包简要说明.doc

JWFDv0.96 工作流XML结构说明.doc

 

表名: step_main  ( 流程图节点属性主表 )

     该表和edge_control表共同在数据库中表示了流程图拓扑数据结构,(在数据库中采用顶点和弧的方式来表示图的拓扑结构是一种最流行的,最方便的解决方法,当然..这里也不例外,我已经在设计基于矩阵的流程拓扑数据结构,希望在JWFDv0.98以后的版本推出基于矩阵流程数据结构的新引擎)

step_main表的一条记录就代表在流程图中的一个顶点的拓扑数据,具体结构如下:


上图是jwfdv0.94之前版本的数据结构


上图是jwfdv0.96版本的新数据结构,增加了 5个字段,减少了3个字段(下面做补充说明)

字段1: id  (排序ID号,非空,短整型)                 功能: 该条记录的唯一性标识

字段2: step_name ((节)顶点标识名,非空,字符型)      功能: 标识流程图节点的名称,中文或者英文,在流程图定义或者运行控制过程中标识或者代表该节点,和表中的step_id字段相对应,字段3: graph_id (流程图标识字段,非空,字符型)       功能: 用于区分不同的流程图,使用中文或者英文,是该表的INDEX字段,查询各流程图的关键字段

字段4: is_active (流程运行状态标识字段,非空,短整型,默认值0) 功能: 通过该字段来标识一个已经处在运行状态中的流程的各个节点的状态,0代表非活动,1代表已经开始活动,2代表异常状态,(流程节点是否活动就是通过该字段来表示的,朋友们可以对这个字段进行自定义扩展,以便扩展引擎的控制功能)

字段5: step_id (流程图顶点的内部标识字段,非空,字符型)  功能: 在数据库和XML文件中标识一个节点,不对外显示,只是在内部程序中用来代表节点的字段,与step_name相对应,其重要性主要体现在数据SQL语句中作为where子句的查询条件字段,该字段和XML数据结构中的node_id属性相对照

字段6: is_routed (流程图路由节点标识字段,可空,短整型)    功能: 功能扩展字段

字段7: visited   (流程访问状态标识字段,非空,短整型)     功能: 标识流程运行阶段该顶点被运行控制模块访问次数的统计,该字段是程序中图形算法模块需要的重要字段,在有分支节点的流程图中,通过该字段来分辨哪些后驱点被访问,哪些没有被访问

字段8: allow_toback (流程运转回退标识字段,可空,短整型,默认0)   功能: 表示该节点可回退,0代表容许回退(在v0.96版本中,该字段已经被删除) 

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

JWFD V0.96版本的增加字段补充说明(要深入认识这几个字段的功能和作用,请大家参考“JWFDv0.96 工作流系统开发包简易说明.doc”文档中的流程引擎基础API调用说明)

字段9: cond (嵌入式公式数据字段 ,长字符串型,可为空,默认"")    功能:作为节点嵌入式脚本(公式)数据的数据库保存字段,用于流程条件表达式的逻辑判断和相应处理

字段10: actioned_time ( 流程节点处理次数计数器字段,可为空,短整型,默认0 )  功能:记录流程节点在运行过程中的被处理次数,属于功能计数器字段

字段11: jap_num (条件表达式汇聚逻辑控制字段,可为空,短整型,默认0)  功能:记录流程汇聚节点的汇聚控制次数,属于功能计数器字段

字段12: rollback_status ( 流程节点回退状态字段,可为空,短整型,默认0 )  功能:记录流程节点回退状态,尚未使用,备用字段

字段 13: rollback_time ( 流程节点回退次数计数器字段,可为空,短整形,默认0 )  功能:记录流程节点的回退次数,属于功能计数器字段

字段 14: startup_time ( 流程引擎时间控制字段,可为空,字符串型,默认“” )功能:记录该流程节点的起始运行时刻值,属于流程时间控制参数字段

字段 15: end_time ( 流程引擎时间控制字段,可为空,字符串型,默认“” )功能:记录该流程节点的终止运行时刻值,属于流程时间控制参数字段

请大家注意,在v0.96版本中增加的上面的几个字段,实际上根据数据库设计的一般原理,应该是要放在step_detail表中作为节点的数据流转控制字段(step_main表和step_detail表互为主从表,step_main作为主表仅仅存储节点的拓扑结构,而step_detail作为从表需要存储节点操作和控制的具体参数,而我在这里并没有这样设计),因为我做这个新版本设计的时候,仅考虑到代码效率的问题,没有考虑到数据库结构的合理性,所以请大家在学习的时候,注意这个问题

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


表名: step_detail ( 流程节点属性明细表,作为主表step_main的附属表,存储节点的详细活动属性 ) 在v0.94和v0.96版本中,该表均未被引擎所使用,用户可以自行扩展该表,以使系统能够处理更加复杂的嵌入数据,比如说表单和公文流转等信息


设计本表的目的是为了让一个流程中的节点能够通过一些简单的数据处理变成一个活动点,同时最大限度的分离流程图拓扑数据和业务活动处理数据流

该表目前的对应程序里面的公文处理流程和一般企业流程中的大部分用户节点操作

 (action表示该节点的活动属性)


字段1:   id  记录ID

字段2:   flow_id  流程图ID

字段3:   step_id  顶点ID

字段4:   user_id  对应处理用户ID

字段5:   action_type  活动类型

字段6:   action_result 活动处理结构状态

 

字段9:   action_status  活动当前状态

字段10:  time_limit     活动处理时间期限

字段11:  startup_time  活动开始时间

字段12:  end_time     活动结束时间

 

用户可以在这个表的基础上进行修改,以方便自己的应用程序中对流程节点活动的处理

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

表名: EDGE_CONTROL  ( 流程图边(弧)关系表 )



字段1:  id     (排序ID号,非空,短整型)                 功能: 该条记录的唯一性标识, 

 

字段2:  edge_id ( 流程拓扑边标识ID,非空,字符型 )       功能: 标识流程图连接边的名称,SQL语言中查询的条件值,作为该条记录的唯一主键字段,该字段和XML连接边数据结构中的<edge from="node2" id="edge0" to="node1">数据段中的id字段数据值相对应

 

字段3:  from_step( 起始顶点连接属性,非空,字符型 )      功能: 该边所连接的起始顶点的标识ID,该字段和XML连接边数据结构中的<edge from="node2" id="edge0" to="node1">数据段中的from字段数据值相对应

 

字段4:  to_step ( 终结顶点连接属性,非空,字符型 )        功能: 该边所连接的终结顶点的标识ID,该字段和XML连接边数据结构中的<edge from="node2" id="edge0" to="node1">数据段中的to字段数据值相对应

字段5:  flow_master_id ( 保留字段 )                     功能: 保留

字段6:  graph_id ( 同step_main表中同名字段 )            功能: 同step_main表中同名字段相同

这张表和step_main表共同组成了流程图的基础拓扑数据结构表..实际上大多数对图的遍历和控制的操作算法都是在这两张表的数据结构基础上进行的


这篇博客仅仅把JWFD开源工作流引擎的数据库结构的部分内容展示出来,全部的数据库结构在下面的链接中下载,是一个DOC文档

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

更多内容请下载    JWFDv0.96 工作流系统-数据库结构说明.doc 

欢迎下载 :http://www.cnblogs.com/comsci/favorite/260690.html

 





工作流设计,包括设计思路与数据库结构 主要包括:process--流程定义表,task_node--流程节点表, sequence_flow--迁移(连接线)表,process_instance--流程实例表,task_instance--任务实例表,task_instance_parameter--任务参数表,sign_user--会签用户表 立即下载

相关推荐

[原创]JWFD工作流引擎设计原理(JWFD v0.94 版本)

NULL 博文链接:https://comsci.iteye.com/blog/610102

工作流引擎的设计与实现

第四章  工作流引擎的设计与实现(一)   (2009-03-24 17:26:26) 转载▼ 标签:  工作流数据模型   工作流数据结构   工作流定义   工作流实例   it   分类: 基于工作流的政务系统--设计     工作流引擎的作用是解释流程定义,创建、执行和控制流程实例。对于

陌阡博客 1万+

介绍一款工作流引擎设计思路

工作流引擎该如何设计、工作流的数据库如何设计、应用筐架如何搭建等,这些问题其实都是很难有答案的。开发设计一个工作流引擎是要能够帮助客户营造价值,而不是为了一时兴趣实现某些技术特性。工作流管理联盟(Workflow Management Coalition, WfMC)早已定义了工作流技术的标准体系,但并未指明具体实现的方法。工作流引擎在实现方法上可以基于不同的软件技术架构,引擎本身应该是与具体业务无关的,但又需要考虑各类应用领域,工作流引擎设计的重点应该是有一定差异的,但无论基于什么架构,无论基于哪个领域,有些原理是相通的。

工作流引擎开发系列二数据库设计

在前面一节中简单的讲解了基本原理,从这节开始会详细讲解。首先需要讲解的就是数据设计,下面就是数据库的相关设计 表名:WorkflowTemplate--工作流模板 序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明 1 TemplateID uniqueidentifier 16 0 是 否 2 ...

cxm52013144的博客 883

工作流数据库表结构设计

工作流就是业务流程的计算机化或自动化。许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率非常低下,对于统计报表功能则不能实现。而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力。 :::本资源包含了工作流所涉及的表结构设计。:::

工作流引擎数据库表设计.docx

工作流引擎数据库表设计全文共3页,当前为第1页。工作流引擎数据库表设计全文共3页,当前为第1页。工作流引擎数据库设计 工作流引擎数据库表设计全文共3页,当前为第1页。 工作流引擎数据库表设计全文共3页,当前为第1页。 概述 基于打造一个灵活、高效、轻量级的工作流引擎,暂时不考虑功能的完备和复杂,只是实现其中必不可少的功能和条件。主要考虑以下三个方面的内容: 流程定义:工作流中的流程极其相关活动的定义和模型数据搭建 运行调度控制:执行工作流过程中流程活动任务分配、调度控制 运行阶段的人机交互:实现各种活动执行过程中用户与IT应用工具之间的交互 数据库定义 流程定义 主要是跟流程模型定义相关的数据表,主要包括流程模型定义表(WF_FlowTemplate)、流程步骤模型定义表(WF_StepTemplate)、流程链路表(WF_FlowLink)、流程类型表(WF_FlowType) WF_FlowType 字段 类型 描述 备注 FlowTypeID int 流程类型ID 标示 not null FlowTypeName nvarchar(50) 流程分类名称 Description nvarchar(200) 流程类别描述 WF_FlowTemplate 字段 类型 描述 备注 FlowID int 流程ID 标示 not null FlowName nvarchar(50) 流程名称 FlowTypeID int 流程类型编码 Manager nvarchar(50) 流程实例管理者 CreateUserID int 创建人ID CreateDate Date 创建时间 ModifyUserID int 最后修改人ID ModifyDate Date 最后修改时间 Version int 版本 WF_StepTemplate 工作流引擎数据库表设计全文共3页,当前为第2页。工作流引擎数据库表设计全文共3页,当前为第2页。字段 工作流引擎数据库表设计全文共3页,当前为第2页。 工作流引擎数据库表设计全文共3页,当前为第2页。 类型 描述 备注 StepID int 步骤ID 标示 not null StepName nvarchar(100) 步骤名称 FlowID int 流程ID FormURL nvarchar(200) 表单URL PositionX float X坐标 PositionY Float Y坐标 LimitTime int 步骤时限 SubFlowID int 子流程ID Description nvarchar(200) 步骤描述 WF_FlowLink 字段 类型 描述 备注 FlowLinkID int 流程链路ID 标示 not null FlowID nvarchar(50) 流程ID FromStep int 前一步骤ID ToStep Int 后一步骤ID Action nvarchar(200) 流转条件行为 Description nvarchar(200) 流转路径描述 Expression nvarchar(200) 条件表达式 流程调度 针对运行中的流程实例以及活动实例进行管理和调度,主要包括流程实例表(WF_FlowInstance)、步骤实例表(WF_StepInstance) WF_FlowInstance 字段 类型 描述 备注 FlowInstanceID int 流程实例ID 标示 not null FlowInstanceName nvarchar(100) 流程实例名称 FlowID int 流程ID CreateUserID int 创建人ID CreateDate Date 创建时间 FinishDate Date 完成时间 Status int 流程实例状态 WF_StepInstance 字段 类型 描述 备注 StepInstanceID int 步骤实例ID 标示 not null FlowInstanceID int 流程实例ID StepID int 步骤ID 工作流引擎数据库表设计全文共3页,当前为第3页。工作流引擎数据库表设计全文共3页,当前为第3页。StartDate 工作流引擎数据库表设计全文共3页,当前为第3页。 工作流引擎数据库表设计全文共3页,当前为第3页。 datetime 开始时间 FinishDate datetime 完成时间 Status int 步骤状态 TrackRemark nvarchar(200) 轨迹备注 任务管理 流程实例运行过程中产生的工作项任务,主要包括任务列表(WF_TaskList)、消息列表(WF_MessageList) WF_TaskList 字段 类型 描述 备注 TaskID int 步骤实例

Activiti工作流引擎数据库表结构

版权声明:本文为博主原创文章,未经博主允许不得转载。不经过允许copy,讲追究法律责任,欢迎加入我们的学习提升群466355109,可以相互交流 数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的。第二部分是一个两个字符用例表的标识。此用例大体与服务API是匹配的。 l  ACT_RE_*:’RE’表示repository。带此前缀的表包含的是静态信息

程序猿开发日志【学习永无止境】 1万+

ADRV9026初始化避坑指南:手把手调试PostMcsInit常见故障

本文详细解析了ADRV9026多片同步初始化过程中的PostMcsInit常见故障,包括时钟校准失败、JESD链路建立问题和ARM核通信异常等。通过实际项目经验,提供了硬件检查清单、软件配置要点和分层诊断方法,帮助工程师快速定位和解决问题,提升系统稳定性。

hadoop5ranger的博客 621

浅谈工作流引擎数据表的设计及思路

浅谈工作流表的设计及思路 我们都知道工作流引擎在系统开发上起到了举足轻重的地位,那么如何很好的设计一个自己的工作流引擎,我们今天就简单从数据库设计方面,谈谈流引擎设计。 下面我们就以Tpflow工作流引擎的数据库设计来跟大家聊聊。 工作流引擎数据表一般有‘flow’‘flow_process’ ‘run’ ‘run_process’ ‘log’ 至少应该拥有这五张基础数据表;当然在tpflow中,...

蝈蝈博客,Tpflow官方博客,php工作流引擎 3045

手把手教你用Multisim 14.2仿真一个4.4V的LDO电路(附完整仿真文件)

本文详细介绍了如何使用Multisim 14.2仿真一个4.4V的LDO电路,从环境配置、核心参数解析到电路搭建和仿真调试。通过分压电阻精确计算和瞬态响应测试,帮助读者掌握LDO电路的设计与验证技巧,并附有完整仿真文件供参考。

weixin_28738397的博客 275

单片机NTC热敏电阻测温:六种实用电路方案与选型指南

本文详细介绍了单片机系统中NTC热敏电阻测温的六种实用电路方案,包括分压法、恒流源法、RC充放电法、电桥法、频率法及集成专用IC方案,并提供了关键的硬件选型指南和软件处理技巧,帮助工程师实现高精度、低成本的温度测量。

herb5的博客 824

JWFDv0.96 工作流引擎原子操作简易说明

作者: comsci 发表于 2010-09-07 10:46 原文链接 阅读: 20 评论: 0 JWFDv0.96新增加了若干基本SQL操作,并在这些操作的基础上面新编写了SAN流程运行控制方法,下面我就简单的介绍下这个这些基本SQL的结构 JWFDv0.94引...

chenglan8953的博客 189

HFSS新手避坑指南:手把手教你用FR4基板仿真威尔金森功分器(附参数优化技巧)

本文详细介绍了使用HFSS仿真FR4基板威尔金森功分器的12个关键细节,包括介质基板设置、微带线建模、隔离电阻设置等实战技巧。特别针对微波技术中的常见问题,提供了参数优化和结果解读的实用方法,帮助新手快速掌握HFSS仿真技能。

weixin_27310417的博客 227

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

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

chenglan8953的博客 158

wincc 服务器授权型号,WinCC V7.5 SP1软件安装及授权方法

上篇教程给大家介绍了TIA Portal V16 安装方法,今天分享一下WinCC V7.5 SP1。目前V7.5 SP1是WinCC最新的版本,发布时间2019年11月13日。先放一个官网对WinCC V7.5 的介绍视频,感兴趣的可以先看一下。1、软件下载官网下载链接:https://support.industry.siemens.com/cs/document/109772879五个文件下...

weixin_39956110的博客 1万+

2026年CSP-J初赛真题及答案解析

2026年CSP-J初赛真题及题解

王老师青少年编程 1652

[原创]JWFDv0.96开源工作流引擎设计---XMLTO数据库解析过程说明

JWFDv0.96开源工作流引擎设计 ---XML to 数据库解析过程说明 注:这篇文章中所使用的“函数”就是指JAVA语言中的方法 作者 comsci 2011.4...

chenglan8953的博客 241

YOLOv11 改进 - C2PSA | C2PSA融合TSSA(Token Statistics Self-Attention)令牌统计自注意力,优化遮挡目标感知

本文介绍了Token Statistics Self-Attention(TSSA)机制,并将其集成到YOLOv11中。传统自注意力计算复杂度高,TSSA进行了范式转变,基于token统计特征实现高效注意力交互。它通过“算法展开”推导得出,以“最大编码率降低”为目标,实现特征学习。TSSA包含动态分组和低秩投影优化两步创新,具备线性复杂度。我们将TSSA代码集成到YOLOv11的C2PSA模块中。实验表明,改进后的YOLOv11在目标检测任务中表现良好,验证了TSSA机制的有效性。

魔改工程师的博客 670

[原创] JWFDv0.96工作流引擎设计--节点回退算法说明

          JWFDv0.96工作流引擎设计                                                       ----节点回退算法说明注:这篇文章中所使用的“函数”就是指JAVA语言中的方法作者 comsci   2010.10.7   四川。成都算法设计的简要说明JWFD工作流系统在v0.96版本之前并没有实现回退的功能,在v0.96版本中节点单步回退功能才被使用单一算法函数的方式加入到引擎模块中,但是由于在开发过程中,时间比较紧张,我并没有对这个算法进

comsci的专栏 1397

【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04

Jeson Orin Nano系列:烧写Ubuntu22.04 电脑主机可以是Ubuntu20.04

郭老二 4896

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

        JWFDv0.96工作流引擎设计                                 --嵌入公式使用和结构说明注:这篇文章中所使用的“函数”就是指JAVA语言中的方法作者 comsci   2010.11.18   四川。成都总体设计思路   通过在流程的节点里面嵌入公式(脚本),保存在数据库中节点字段属性中的,然后流程引擎控制器通过执行脚本引擎获得运行公式的结果,然后通过这个运行结果控制流程的走向设计说明:提前计算及其潜在问题    在实际的流程系统工程设计中,我们会遇到这样

comsci的专栏 3420

蓝牙模块HM-10手册

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

[原创]JWFDv0.96工作流引擎设计-自动运行控制器结构说明

JWFDv0.96---工作流引擎设计                                             --自动运行控制器结构说明   注:这篇文章中所使用的“函数”就是指JAVA语言中的方法 作者 comsci   2010.12.12   四川。成都

comsci的专栏 1775

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

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

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

comsci的专栏 1421
上一篇: [原创] JWFDv0.96工作流引擎设计--节点回退算法说明
下一篇: [原创]JWFDv0.96工作流引擎设计--嵌入公式使用和结构说明
comsci
博客等级 码龄22年 412粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值