【问题标题】:AnyLogic Simple Process Memory BlowupAnyLogic 简单进程内存爆炸
【发布时间】:2020-04-12 13:34:58
【问题描述】:

我在 AnyLogic 中模拟一个过程。

我的代理可在时间 t=0 时作为“原材料”使用。在模拟开始时,我有 30,000 多个相同的代理。因此,对于源模块,我指的是一个数据库,其中每次到达多个代理框被勾选,每次到达的代理数字取自数据库(其中那里是30,000)。

我正在使用一个虚拟过程,这些代理到达“源”并立即从“接收器”出去。例如,当我有 30 多个代理时,这不是问题。但是,当我有 30,000 个内存时,内存会爆炸并且模拟停止。我不知道为什么会出现问题。在这样一个简单的例子中,30 和 30,000 个代理有什么区别?

屏幕截图:

我的简单模型如下所示:

以及工作的数据库:

数量通过以下方式调用:

一切都完成了:

但是当我生产了 30,000 多个第一批产品时,它就卡在了到货日期上:

另外,我的代理类在这里:

它在项目视图中显示为:

【问题讨论】:

    标签: memory simulation anylogic


    【解决方案1】:

    如果您的矩形节点设置了“在上层代理上可见”,请尝试取消勾选。

    当前在 AnyLogic 中存在一个错误,当此设置被设置并且代理(或代理群体)的演示没有显示在上层代理中时,这会导致您的极度减速体验(特别是对于大量代理;甚至,如果“在上层代理上可见”表示元素在代理类型中有很多实例)。

    在您的情况下,您的矩形节点位于顶级代理 Main 中,从表示的角度来看,根据定义,它是实验的“子”——设置“在上层代理上可见”也是没有意义的" 在这里(但在某些情况下它似乎仍然会触发错误)。

    (说了这么多,在我看到的情况下,该错误并未导致“500错误”,因此这可能不起作用。)

    【讨论】:

      【解决方案2】:

      你能上传你的源表和数据库表的截图吗?

      如果您勾选该框,听起来您正在创建 30000x30000 个代理?

      无论如何,如果没有必要,对这么多代理进行建模并不是一个好策略。在您的情况下,您可以将 30000 种材料组合到 1 个代理中(直到它们被分解?)或使用材料库或 SD 设置。

      仅在您确实需要时为单个代理建模。

      【讨论】:

      • 另外,我需要 30,000 个这样的代理,因为它们的每个参数都将在下一个过程中更改...
      • 谢谢。确实很奇怪。模型什么时候停止?看起来引擎在代理仍在生产时被杀死。另外,您是否测试过中间的队列?模型何时开始崩溃(即每次到达有多少代理)?它是变化的还是一个确切的数字?
      • 模型在准确的到达时间停止。如果我有〜10,000,没有人会到达。我现在尝试使用 5,000,它非常慢,在冻结约 2-3 秒后它完成了该过程。也许是因为我的代理太多了,但我需要几百万!!您认为将所有已经可用的代理定义为“到达 t=0”是错误的吗?
      • 好吧,倒着做。将您的代理简化为只有 1 个参数。如果它仍然崩溃,则不是由于代理复​​杂性。然后继续工作:从头开始创建一个模型,并在没有 dbase 的情况下创建 30k 个代理。成为福尔摩斯并找到根本原因。如果你找到了,报告回来:-)
      • 想出了一些东西。如果我没有指定“到达位置”,它是空间标记部分的一个矩形节点,那么一切正常。否则,当我连接时,内存有问题......我不知道,但这很奇怪
      猜你喜欢
      • 1970-01-01
      • 2020-11-16
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      相关资源
      最近更新 更多