Anylogic 使用代理统计数据进行参数变化实验期间的NullPointerException
在实验开始时,我得到错误消息“迭代5期间模型中出现错误(数字在2、3和5之间变化)”,它指向main中的代理统计数据集,我在实验中尝试将该数据集添加到直方图数据集。在初始化代理之前,我是否可能在某个地方尝试收集代理统计信息 更确切地说,我的设置:我的实验的根代理是一个名为“公司”的代理。在该代理中,我添加了数据集“DSUsers”,它只收集位于主代理中的代理统计数据(item.inState(Firm…)。数据集DSUsers是我尝试添加到直方图数据集“data”中的数据,用于参数变化实验,设置如下所述。(不幸的是,我还不能添加屏幕截图,我还太年轻,不是一名会员…) 在实验中,我使用以下设置: 模拟运行前:Anylogic 使用代理统计数据进行参数变化实验期间的NullPointerException,anylogic,Anylogic,在实验开始时,我得到错误消息“迭代5期间模型中出现错误(数字在2、3和5之间变化)”,它指向main中的代理统计数据集,我在实验中尝试将该数据集添加到直方图数据集。在初始化代理之前,我是否可能在某个地方尝试收集代理统计信息 更确切地说,我的设置:我的实验的根代理是一个名为“公司”的代理。在该代理中,我添加了数据集“DSUsers”,它只收集位于主代理中的代理统计数据(item.inState(Firm…)。数据集DSUsers是我尝试添加到直方图数据集“data”中的数据,用于参数变化实验,设置
data.reset()代码>
模拟运行后:
data.add(root.DSUsers)代码>
DSUsers是我从主代理统计信息中收集的数据集。我实验的顶级代理不是主代理(这可能是个问题吗?)。
所以这个过程看起来是这样的:
在main中收集代理统计数据->使用代理级别上的数据集,该数据集从main收集统计数据并存储->在实验中将此数据集导入直方图数据集
我在控制台中收到一条很大的错误消息,第一个错误指向
private double _DSPledgeUsers_YValue() {
return
get_Main().firms.NPledgeUsers()
;}
找到了问题制造者,但是,我不确定它为什么有效:
不知何故,我在代理中创建的数据集导致状态图中所有代理的状态在每个时间步都自动更新。这在我的模型中是一个问题,因为一些状态应该只是偶尔更新。因此,我只是将数据集移动到main
我不想猜测,但如果您遇到同样的问题,请检查数据集的位置 你能澄清一下这一点吗:“我实验的顶级代理不是主要代理(这可能是个问题吗?)”。你是说“数据”不存在于主数据上吗?请注意,“root”不会自动引用Main,而是引用实验属性中定义的顶级代理。另外,一些截图会很有帮助,有点难以遵循您的设置当然本杰明,谢谢!我的实验代理是一个名为“公司”的代理。在该代理中,我添加了数据集“DSUsers”,它只收集位于主代理中的代理统计数据(item.inState(Firm…)。数据集DSUsers是我尝试添加到直方图数据集“data”中的数据集,用于使用上述设置进行参数变化实验。如果你需要更多细节,请告诉我。我将很快添加一些屏幕截图。非常感谢!不幸的是,我还不能添加截图,我太年轻了…你可以上传到别处并在这里共享链接。你的问题是:当你用不同的随机种子多次运行一个等效的模拟实验时,它有效吗?由于它目前在不同的运行中失败,不同的随机种子有时会导致问题,但并非总是如此。“如果你可以通过一次模拟运行进行复制,那么追踪错误就会容易得多。谢谢你的帮助,”本杰明!这里是一些截图的链接:我不确定我是否正确理解您,当我在实验的随机性属性中选择“随机种子”而不是“固定种子”时,问题仍然存在……如果您有条件转换,并且如果这就是您解决问题的方式,则可能会发生这种情况,你的模型可能仍然不正确,你还没有看到yet@Felipe,是的,我使用了很多条件转换。你能说得更具体些吗?谢谢只需避免条件转换。它们总是会导致隐藏的问题,影响性能,并且总是可以被消息所取代。避开它们:-)谢谢@Benjamin,你能给我一个提示,我怎样才能用短信代替它们吗?例如,我如何认识到条件randomTrue(0.1)或time()使用具有相同条件的事件。当它们触发时,您向状态图发送一条消息以触发转换。这样做更好更安全,相信我:-)