任何逻辑在 36 次复制后冻结
Posted
技术标签:
【中文标题】任何逻辑在 36 次复制后冻结【英文标题】:Any Logic Freezes after 36 replications 【发布时间】:2022-01-19 18:38:44 【问题描述】:我正在运行一个随机实验,因此希望在收集平均结果之前对模拟进行 N=500(或一些相当大的 N)复制。
我已经设置了一个蒙特卡洛实验来执行此操作,并且因为有人告诉我 AnyLogic 不会自然地对复制的输出进行平均,所以我累积添加每个实验的输出,然后在所有实验完成后除以我运行的复制次数。我不存储每个实验的输出只是累积值。
我的问题是实验在 36 次重复后似乎冻结了,我不确定为什么会发生这种情况。请注意,每次复制运行大约需要 5 秒(并且它们不会每次都花费更长的时间)。
有没有其他人经历过这样的事情/任何人都可以提出诊断问题的方法吗?
【问题讨论】:
是否有任何内容写入控制台?比如“java运行时内存不足” 没有任何内容打印到屏幕编号。我以前见过这些错误,所以我知道你的意思。我试图设计实验,以便只有保存结果的集合保留在所有复制中。在每次运行开始时,我都会清除代理并再次填充它们,这样我就看不出为什么当我进行更多复制时内存使用量会增加。 故障查找的一个选项是跟踪每个实验的复制、种子和日期...然后您很快就会看到哪个实验和种子在哪一天失败...然后您尝试在单次运行模式下运行那个确切的种子,看看你是否可以复制失败 谢谢这是个好建议,我不知道种子可以打印出来-我会调查一下-谢谢! 【参考方案1】:是的,吃过很多次了。两种选择:
-
内存太少:增加实验内存
这是您的模型有问题,与 AnyLogic 无关 :) 。您需要自己进行一些调查,可能是在该迭代中触发了一些特殊的无限循环。
【讨论】:
我通过在我编写的 java 操作中放置一些跟踪调用来进行更多挖掘,以查看它停止的确切位置以及模型冻结的点在复制之间。它完成了我在复制 36 中要求它执行的所有 java 操作,然后不会开始复制 37。我还打印了种子并运行了单独冻结的实验,它作为单独的模拟实验运行良好。我不确定还可以尝试什么,但我注意到实验在所有复制之间暂停了相当长的一段时间 - 你知道复制之间发生了什么吗? 您可能会向某个 dbase 写入大量数据,或者您没有为实验分配足够的内存。另外,尝试顺序运行,而不是并行运行 感谢您的回复。为了提供更多信息,我在每次运行后清空数据库,因为我在一个集合对象中保存了我需要的所有统计信息的累积总数(从运行结束时填充的数据库计算)。这些除以模拟结束时的复制总数,得到我想要的平均统计数据。在您发表第一条评论后,我增加了内存,但我对 Anylogic 的了解还不够,无法检查什么是足够的——您能在这里指导我吗?无论如何,我相信实验是按顺序进行的。 最好总是在 SOF 上提出一个新问题(“如何查看内存”),它不像论坛那样工作 :) 见 benjamin-schumann.com/blog/2021/4/1/…以上是关于任何逻辑在 36 次复制后冻结的主要内容,如果未能解决你的问题,请参考以下文章