前页 | 后页 |
跟踪属性参数值-示例
为了帮助您了解通过BPMN业务流程模型的仿真生成属性参数信息的工具, Sparx Systems提供了两个示例,您可以在EAExample模型中进行探索。这些是:
- 斐波那契过程-一个非常简单的示例,可帮助您熟悉参数跟踪功能
- 汽车维修流程-一个更复杂的示例,您可以操纵该示例以了解如何调查现实生活中的流程
斐波那契例子
这是一个非常简单的递归业务流程,它通过十次迭代来计算一系列斐波那契数。您可以看到属性参数在每个迭代过程中如何通过流程的元素递增。打开示例模型>模型仿真> BPSim模型>斐波那契。
该过程的伪代码显示在该图的Notes元素中。语句'print(next)'将输出数字系列2、3、5、8、13、21、34、55、89、144。
如此处所述,为此过程设置了BPSim配置。
步 |
行动 |
也可以看看 |
---|---|---|
1个 |
在StartEvent元素的“控件”选项卡上,将“ TriggerCount”设置为“ 1”,然后在“属性”选项卡上创建并初始化属性:
|
|
2 |
现在,在“属性”选项卡上为流程中的每个活动定义属性。请注意,这些属性的值是从Expressions派生的, Expressions的组件必须括在大括号-{xxx}中。对于活动:
|
使用参数值对话框 BPSim用户界面组件 |
3 |
在“控件”选项卡上,为从“ loopNode”网关元素发出的两个Sequenceflow连接器设置“条件”属性参数。 展开网关| loopNode元素,并链接到:
|
|
4 |
完成配置后,单击“配置BPSim”窗口和“ BPSim模拟控制器”对话框上的“运行”按钮,选择“标准”模拟。 模拟完成后,单击“属性”按钮。 在“ BPSim PropertyParameter值”对话框中,将“令牌号”字段设置为“ 0”,然后单击“查询”按钮。 |
|
5 |
现在,在每次模拟迭代中输入first = second Activity时,检查“ next”属性的值。单击“按属性分组”选项卡,然后展开“下一个”项目。 值列表很长,因此右键单击列标题,然后选择“切换过滤器栏”选项。在“属性”列标题下,键入“ first =”。这将过滤列表,以仅显示在输入第一个=第二个Activity时的属性参数值。
|
汽车维修实例
这个更复杂的示例基于汽车维修过程的现实模型,在该模型中,许多个人客户要求进行维修估算,然后继续维修或拒绝继续维修;您可以看到在过程中做出不同决定时,属性参数如何变化。打开示例模型>模型仿真> BPSim模型>汽车维修过程。
下图表示了整个过程:
修理汽车活动是一个包含以下子流程图的复合元素:
步 |
行动 |
---|---|
1个 |
在“浏览器”窗口中,在“汽车维修过程”程序包下展开“ BPSim”子程序包,然后双击“方案1:主要流程”工件。显示“配置BPSim”窗口。在“方案”选项卡上,查看“持续时间”字段;设置为2天12小时(即60小时)。 |
2 |
在窗口左侧的流程层次结构中,展开“开始事件”类别,然后单击“客户到达”。选择“控制”选项卡,然后查看“ InterTriggerTimer”参数,其值为24分钟;也就是说,客户每24分钟到达一次(因此,在60个小时内,有150位客户通过维修店)。 每个客户进入维修店时都会遇到一个或多个要评估和维修的问题。每个客户提出的问题数量可以使用BPSim支持的发行版之一随机生成。由于发行数量是以离散单位(而不是连续计量)来计算的,因此我们将使用“整数”分布。如果为“客户到达”开始事件选择“属性”选项卡,您将看到“ noOfIssues”属性值是从Poisson分布初始化的,平均值为3。 |
3 |
现在,扩展决策“是否接受”?及其连接器,在流程层次结构中。 “接受的初始估算”的控制参数“概率”设置为0.67。备用连接器“不接受初始估算”具有类似的控制参数“概率”设置为0.33。也就是说,我们希望客户平均撤回(或不追究)三分之一的问题。 |
4 |
在此过程的进一步过程中,当正在评估车辆的问题时,可能会发现另一个问题。 在网关元素列表中,最后一个“未命名元素”具有两个路径:“找到新问题”和“未找到增加的问题”。单击每个,然后查看“控制”选项卡;将“发现新问题”的“概率”参数设置为0.25,将“未发现新问题”的参数设置为0.75。因此,平均而言,报告和评估的每四个问题都会发现一个新问题。 “发现新问题”路径将流程转到“处理新发现问题”活动,该活动将为当前客户处理的问题数加1。展开“活动”组,然后单击“处理新发现的问题”元素和“属性”选项卡。您将看到此处的属性'noOfIssues'具有表达式值{noOfIssues} + 1 。 |
5 |
解决车辆问题后,“维修问题”活动会从当前客户要维修的问题数量中减去1。单击活动组中的“修复问题”元素,然后单击“属性”选项卡。您将看到此处的属性'noOfIssues'具有表达式值{noOfIssues} -1 。 |
6 |
“修复问题”活动中的值在“是否还有问题?”中进行了测试。网关。 单击“要修复的其他问题”连接器,然后单击“控制”选项卡;用于遵循此路径的Condition参数设置为Expression值{noOfIssues} > 0 ;流程在“检查问题”活动之前传递到网关。 同样,如果您单击“没有其他要修复的问题”连接器并在“控制”选项卡上,则用于跟踪该路径的Condition参数将设置为Expression值{noOfIssues} = <0 ,并且流程将传递到“修复”已完成”结束事件。 现在您已经检查了流程和配置设置,可以运行模拟并查看结果。 |
7 |
在“配置BPSim”窗口上,单击“运行”按钮,然后在“ BPSim仿真控制器”对话框上再次单击“运行”按钮,选择“标准”仿真(但是,仿真类型对于复查属性参数没有影响) 。 在“ BPSim Simulation控制器”对话框上,您可以查看令牌状态(并看到有另一个客户在最后一刻设法进入商店),但是很难确切看到此汇总数据是如何产生的。单击“属性”按钮,以在“ BPSim PropertyParameter Values”对话框中获取详细的属性参数值信息。 |
8 |
对话框的左侧是过程中每个元素的属性参数(属性)的最小值和最大值的摘要。例如,对于“客户到达”元素,“ noOfIssues”参数的最小值为0,最大值为8,这是由Poisson(3)分布生成的。 在“令牌编号”字段中,输入介于0到150之间的数字(N),以选择进入维修店的第N个客户。单击查询按钮以获取该客户在流程中使用的属性参数值。在两个选项卡中的每个选项卡上查看结果:
|
9 |
继续根据需要探索结果,选择其他客户(令牌)。您还可以返回到BPSim配置并更改参数初始化并添加新参数,或更改决策点,以对该过程进行试验。 |
在基于整数的过程的模拟中响应实数
在某些情况下,当流程中的活动使用整数进行操作时,或者当您想了解强制整数值对流程有何影响时,您可能需要使用返回“实数”的分布来生成属性参数值。
在这种情况下适用的一种机制是设置避免绝对数的条件。因此,例如,您可能有一个递减1的计数器,该计数器被初始化为“实数”。如果将条件设置为“值== 0”(等于0)或“值!= 0”(不等于0),则这两个条件可能分别永远不会为True或始终始终为True,从而导致无限循环。为了避免这种情况,在某些情况下,您可以使用以下运算符:
'值> 0'
'值<0'
'值> = 0'
'值<= 0'
另一种机制是编辑BPSim引擎使用的代码模板,以整数截取并替换提供给特定参数的实数,如下所示:
- 选择“开发>首选项>选项>编辑代码模板”功能区选项。
- 在代码模板编辑器的“语言”字段中,单击下拉箭头,然后选择“ MDGBPSimExecutionEngineExtension”。
- 在(Java)模板列表中,单击“ MDGBPSimExecutionEngineExtension计算值”。模板内容显示在“模板”面板中。
- 找到这一行:
double%bpsimPropertyParameterName%=(double)distribution.next();
更改为:
如果 bpsimPropertyParameterName ==“ noOfIssues”或bpsimPropertyParameterName ==“ noOfVisitors”%
double%bpsimPropertyParameterName%=(int)distribution.next();
// double%bpsimPropertyParameterName%= Math.ceil(distribution.next());
// double%bpsimPropertyParameterName%= Math.floor(distribution.next());
// double%bpsimPropertyParameterName%= Math.round(distribution.next());
% else %
double%bpsimPropertyParameterName%=(double)distribution.next();
%ENDIF% - 用您自己的属性参数替换属性参数名称。
- 单击保存按钮,关闭代码模板编辑器并重新加载项目。
如图所示,对于每个指定的参数,代码模板将简单地将由分布初始化的任何“实数”替换为整数。如果愿意,可以使用以下注释行之一:
- Math.ceil()将采用“实数”并将其转换为下一个最大整数
- Math.floor()将采用“实数”并将其转换为下一个最小整数
- Math.round()将采用“实数”并将其向上或向下取整,具体取决于它是大于还是小于n.5。
时间参数行为
在BPSim配置中,您可以为活动设置许多“时间”参数,例如“队列时间”和“等待时间”。您还可以针对自定义模拟对每个设置结果请求。但是,BPSim仿真引擎将这些参数组合为单个“处理时间”量。
考虑示例模型中的简单模型TimeParameter(示例模型>模型仿真> BPSim模型>时间参数),此图表示:
如果双击Artifact2元素,将显示“配置BPSim”窗口。单击图中的Activity1元素以展开“活动”组,在对话框左侧的层次结构中选择“ Activity1”,并为配置中的元素显示第一个选项卡“时间”,如图所示。
请注意,在上方面板中,有七个系统提供的“时间”参数,其初始值分别为-1、2、4、8、16、32和64分钟(64分钟为1小时, 4分钟)。还要注意,在下面的面板中,每个参数都有一个“结果请求”,用于参数的平均运行时间值。
单击“运行”按钮,然后在“ BPSim仿真控制器”对话框中单击“运行”按钮,然后选择“标准仿真”。模拟被配置为在整个过程中循环一次。模拟完成后,单击“打开结果”按钮,然后在“ BPMN模拟报告视图”上单击鼠标右键,然后选择“仅显示非空项目”选项。对于设置了参数的Activity1元素,这将为您提供以下结果:
所有这些得出的结果都是127分钟,是原始七个“时间”参数的初始值的总和。各个参数不会单独处理。
如果返回“ BPSim Simulation Controller”对话框,然后单击“运行”按钮,这次选择“ Custom Simulation”,则“ Open Result”按钮将显示“ BPMN Simulation Custom Report View”。在配置中,结果请求用于七个参数的平均值。在模拟的“报告视图”中,您只能看到单个聚合参数ProcessingTime的平均值为127分钟。