流程
图标

功能
流程单元容纳一系列按特定顺序连接流程步骤,用于表达行为
"A process describes a sequence or flow of activities in an organization with the objective of carrying out work."
“流程描述了组织中一系列活动的顺序或流程,其目标是完成工作。”
要点
行为执行者
- 流程单元对象所在画布的主体就是行为的执行者和所有者,如:根画布流程执行者是全局观察者、实体画布内的 流程由该Agent个体或观察者执行
- 由于共用画布,实体行为流程具体属于个体还是观察者,取决于流程的归属选择,他们的默认符号如下
- 个体流程

- 观察者流程

- 个体流程
主动与被动
- 根据触发运行的方式不同,流程分为主动和被动,由流程的开始事件的主动性设定决定
- 主动流程的执行由系统Tick触发,不依赖其它流程
- 被动流程的执行依赖其它流程触发,包括被调用、接收消息、父级流程触发
子流程
一个被动流程也可以被视作"流程步骤"连接在一个父级流程中,成为子流程
流程Trigger
一个流程的每次运行都是由一个特定令牌触 发,叫做Trigger,运行完成后销毁
被动流程的调用
- 被动流程可以被其他流程使用调用和请求调用而触发执行
- 二者区别是前者调用者与执行者相同,后者不同
- 实体可以在其流程中直接调用自己的其他被动行为,而不能直接调用其它实体的行为,但是可以使用请求组件间接触发其被动行为,相当于Ask someone to do something
- 实体种群的个体可以直接调用观察者的行为,但观察者不能直接调用个体行为,需要使用请求组件,同上述
请求是实体间重要的交互方式,概念和其它的交互方式参见实体间交互章节
被动流程的并发
- 被动流程可能被多点触发,因此可能会出现同时并行执行的情况叫做流程并发
- 最大并发数量:一个被动流程能够被外部Trigger同时触发的最大数量
上方的灰色流程在被调用时会推迟2Tick再执行计算动作,流程设置了并发限制为1。
下方有2个蓝色主动流程都将在Tick1调用灰色流程。
模型应该在第几个Tick结束?
因为被调用的灰色流程有最大并发限制,所以两个主动蓝色流程的其中1个必须等待另一个调用结束才能运行,所以模型最终在Tick5结束,而不是Tick3。放开灰色流程的并发限制(0或≥2),模型将在Tick3结束。
流程块
图形建模语法
- 流程单元可以放置在根画布作为全局行为、放置在实体内部画布作为实体行为、放置在其他流程内画布作为子流程(但必须是被动)
- 子流程可以读取上级数据对象,父级流程无法读取子流程的数据对对象,数据访问细节详见数据组件章节
- 流程数据传递详见相关章节
用法
创建流程对象
有以下方式
-
拖放流程组件到任意画布
从组件栏拖出流程组件放置到画布,流程内自带开始和结束,如下图
提示画布中的流程对象可以通过样式控制条设置以展开(如下图)还是收缩状态(如上图)呈现,详见下"外观操作"。
-
拖放流程步骤组件到非流程内画布
从组件栏拖出任意一个流程步骤组件到空白画布,流程内自带开始、该组件、结束三个流程步骤
提示如果拖放流程步骤组件到流程内画布,效果是仅添加该步骤对象,而不是一个子流 程。
-
拖放流程块到任意画布
从库中选择目标流程块拖放到画布,即创建流程块实例

-
复制粘贴已有流程对象到任意画布
鼠标右击复制目标流程,通过弹出的右键菜单操作

流程对象设置
点击画布中的流程对象,在右侧对象属性配置面板(如下图)中进行设置

主动性显示
主动/被动,不能被直接设置,仅为内部的开始事件设置状态的显示
最大并发设置
- 当流程为被动时可以设置最大并发限制,当流程为主动时无法设置
- 接受非负整数值设定,设置为0时意味着无限制
最大并发限制是一项重要设定。
- 最大并发通常设置为1,以保证每次只有1个总体触发在运行。
- 如果一个修改全局变量的被动流程设置了大于1的并发限制,意味着当它被多处同时调用时,由于顺序不确定而导致意外结果。
多个实体个体时,
- 一个N个个体的Agent种群,某个体行为的最大并发设置为1时,当调用所有个体该行为,也会出现"同时运行"N个进程,这是因为每个个体都有一份实例,每个实例依然遵守最大并发为1的限制。
归属选择
实体行为选择归属于个体还是观察者
流程块设置
- 流程块定义和块实例设置与流程对象设置方法类似,这里不再赘述
- 只是块实例中多了定义源显示,可以点击直接跳转到定义编辑界面

外观操作
- 外观操作不影响建模逻辑

- 鼠标点击流程对象,会浮现样式控制条如上图,从左至右功能依次如下:
- 进入内部全屏编辑模式
- 收起/展开,上图为收起状态
- 头像设定
- 颜色设定
- 文字大小
- 注释