服务热线:010-62964229
格瑞纳根植于教育行业,让仿真软件从理论教学到应用实践
新闻资讯
当前位置:首页 > 新闻资讯 > 行业新闻
建模技巧 | 如何以编程方式重画图表?
2022-09-05 16:14:13 发布人:admin 阅读 1729


本文分享了由Jaco-Ben Vosloo编写的关于AnyLogic的使用实践技巧,希望能为正在学习或使用AnyLogic的用户提供帮助。

原文:https://www.theanylogicmodeler.com/post/how-to-programmatically-redraw-a-chart

作者:Jaco-Ben Vosloo

更新:2022,Feb 15

阅读时间:4 min read

您是否曾经遇到过这样的情况:在 AnyLogic 中创建了一个图表,但在仿真过程中想更改图表的一个非动态设置?

例如,在时序图中,您想要更改时间窗口(或 x 轴的长度)以显示更多或更少的数据。 如果您想随时间显示一个变量,但您不知道时间是多少,这是个很典型的情况,例如:项目的持续时间、智能体的生命周期、智能体走过的距离等。

或者您想在运行时更改图表Y 轴的最大值?如果您有多个图表,并且希望它们都具有相同的最大 Y 轴,以便您可以轻松地直观地比较图表。

所有这些都是在设计时设置的,在仿真运行期间无法更改。 因此,您在设计期间所做的选择都被限制住了......


您有这样的经历吗?


示例

我们以下面的模型为例进行详细说明。

我们有一个4名IT工程师组成的工作组,负责在新IT平台的实施项目中处理支持案例。一个项目要支持的案例数可能是1-100中的任何值,通常用户每天报告大约1个案例。我们想要测量积压支持案例的平均值。

模型如下

这是一个超级简单的模型!

常规图表

最后,我们需要一个时间图来显示 queueLength 数据……但是我们将时间窗口设置为什么?

100?—— 但是如果模型需要更长的时间来完成...

200?—— 但是如果只有 10 个支持案例怎么办……那么图表将 95% 为空白并且没有那么有用……

我们先选择 100 ,运行几次模型并查看图表。

效果还不错……但在第一张图表中,模型在第 110 天结束,所以我们丢失了 10 天的初始数据,无法在图表上查看……在第三张图表中,模型在10 天之前结束, 因此需要扩展数据详细地查看一下……

幕后一观

下面我们要用到的解决方法,在 AnyLogic 中的许多其他实例也可以使用。让我们到幕后,看看 AnyLogic 在后台为我们做了什么。

在您构建模型、机械地拖放时,AnyLogic 正在秘密地努力在后台创建 Java 程序。

想要您一睹究竟,您只需单击绘图中的输入字段并按 Ctrl+j(对于 Windows)和 Cmd+j(在 Mac 上)即可查看对象背后的代码。

重绘图表

现在,我们需要做的就是将代码复制到函数中,添加一两个东西,然后我们就可以完全控制我们的图表了!

Step 1: 创建一个函数——并粘贴您从后台获取的代码——您可能需要对其进行一些格式化......

Step 2: 将看到时间窗口输入的新 TimePlot() 函数的参数更改为 roundToInt(time()) 以确保它始终显示为最新的模型时间。

Step 3: 每次智能体进入sink时调用该函数

Step 4: 运行模型

如果没有任何变化...

Step 5: 添加presentation.add(plot); 到函数末尾

然后,运行模型,发现现在绘制的图与模型运行的天数一样多了...

Step 6: 将创建的图保存到外部变量中,并在每次绘制新图之前将其删除。 请参阅下面代码中的第一行和最后一行。

完成!

动图

总结

这个例子可能很简单,但这里有两个关键要点:

1.在AnyLogic后台您可以看到为您生成的逻辑代码,并将其用于您的功能(使用代码绘制图表只是众多用例中的一个)

2.通过重新绘制图表,可以克服静态参数对图表的任何限制

您可以下载示例模型,或者在云中查看和下载源代码




  电话:010-62964229
  邮箱:support@carila.cn
  地址:北京市海淀区上地信息产业基地三街3号楼1门4层401
©2021 北京格瑞纳电子产品有限公司 版权所有 京ICP备19024141号 京公网安备 11010802029095号
 
QQ在线咨询
点击这里给我发消息 点击这里给我发消息
服务热线
010-62964229
E-mail
support@
carila.cn
地址:北京市海
淀区上地信息产
业基地三街3号