【发布时间】:2021-08-20 14:36:54
【问题描述】:
我有 2 种代理类型、操作员和机器的工业模拟。每种代理类型都有状态图控制其逻辑的不同方面,如生产、空闲等。在进入和退出时计算状态图的状态,time 以确定每个操作员或机器在每个状态中花费的时间。所以在模拟结束时,我会打印它们或使用直方图绘制它们以查看每个步骤/状态的百分比。
我遇到的问题是模拟的长度是 480 分钟 或 28800 秒,但我计算的时间总和是 运行之间和代理之间不同(因为我有 9 台机器(来自代理类型的机器)和 6 个操作员(来自代理类型的操作员))。例如,操作员#1 有 28750 秒,操作员#2 有 29000 秒,依此类推。
我认为时间低于 28800 秒的原因是因为有时模拟在代理离开当前状态之前就结束了,所以函数不会更新,因为它没有启动存在动作。这对我来说很有意义。但是没有意义的是超过模拟长度(> 28800s)的代理,一些代理的时间总和超过了模拟的整个持续时间,我不明白为什么。
有什么方法可以知道问题是来自我在建模时犯的错误还是AnyLogic本身的问题?前段时间我在 AnyLogic 计算距离并与支持人员联系的方式上遇到了类似的问题,所以我猜这一次可能是 AnyLogic 处理时间的方式存在问题。
编辑,@Artem P. 的更多详细信息:
这是一个用于计算经过时间的代码示例,以及代码的总和,以及一个状态图示例:
例如,这是机器的状态图。
在每个状态(最低级别的状态,而不是更高级别的状态)的进入动作和退出动作中,都有计算进入时间,然后存在时间和减法的代码,例如这些是进入和等待状态的退出操作:
Waiting state entry and exit actions
然后我将每个时间添加到它自己的 DataSet 中,以便我可以将它们绘制在直方图中并获得所有时间的百分比视图,因此 TnPAttente_DS.update();
如果您需要更多详细信息,我很乐意分享!
【问题讨论】:
-
几个额外的问题:1)你如何定义
TnPAttnte_DS和TnPAttnte_DS.update();? 2)你有任何静态变量吗? 3) 你是如何定义模型停止条件的? -
1)
TnPAttente_DS只是我计算完所有time_exit - time_entry后存储数据的数据集,我猜TnPAttente_DS.update()是为了提高效率?因为我不让数据集自动更新,所以我只在它实际存储了一些东西后才更新它。 2)静态变量是什么意思?我猜我所有的变量都是动态的?因为它们都随着时间而变化,我不明白你的问题。 3)模型运行8小时或480分钟或28800秒即停止条件,一直运行到结束,我想模拟一个工作班次(8小时)
标签: java time simulation anylogic agent-based-modeling