【发布时间】:2021-12-13 21:19:21
【问题描述】:
我的模型执行了前 800 秒,之后我遇到了以下错误。有没有办法可以增加 AnyLogic 中的堆栈大小?有没有其他方法可以用来对付同样的问题?
`Exception during discrete event execution:
StackOverflowError
java.lang.StackOverflowError
at com.anylogic.engine.Agent.e(Unknown Source)
at com.anylogic.engine.Agent.h(Unknown Source)
at com.anylogic.engine.Agent.ext(Unknown Source)
at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
at com.anylogic.libraries.processmodeling.OutputBlock.forwardReadyEntityNotification(Unknown Source)
at com.anylogic.libraries.processmodeling.InputBlock$1.a(Unknown Source)
at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
at com.anylogic.libraries.processmodeling.OutputBlock.forwardReadyEntityNotification(Unknown
Source)
at com.anylogic.libraries.processmodeling.InputBlock$1.a(Unknown Source)
at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
at com.anylogic.libraries.processmodeling.OutputBlock.forwardReadyEntityNotification(Unknown
Source)`
【问题讨论】:
-
你能用更小的型号运行吗?难道这实际上不是一个无限循环,或者您实际上需要在代码中处理的东西吗?我不知道任何逻辑,但也许 this post 可以帮助您 - 它展示了如何增加 java 项目的堆栈,或者可能是 this tutorial,我认为这更有帮助 - 与 jvm 堆栈配置有关。
-
您可能已经创建了一个无限循环,没有任何 AnyLogic 设置可以帮助您。您需要调试模型以查看错误来自何处。
-
谢谢莱昂纳多和本杰明。你猜对了,这个错误是由无限循环引起的。让我解释一下到底发生了什么。在模拟模型中,我希望卡车代理被转移到一个或另一个海湾。只有当海湾是空的时,卡车才能驶入海湾。由于有 2 个托架,我创建了一个选择输出块,其在错误条件下退出导致另一个选择输出块,其错误条件退出导致返回到第一个选择输出块之前的块输入。如果卡车在两个海湾都出现,则会导致无限循环。
标签: java runtime-error simulation stack-overflow anylogic