Anylogic 我的代码赢了';除非每个零件都放在单独的按钮中,否则无法工作? 确切的问题

Anylogic 我的代码赢了';除非每个零件都放在单独的按钮中,否则无法工作? 确切的问题,anylogic,Anylogic,我发现,如果将这两部分代码放在一个位置,即一个按钮上,则与块wait(即wait.get()和wait.size())相关的函数将无法工作。然而,如果我有一个单独的按钮中的每一个部分,一切工作都很完美 第一部分 1-引导代理家庭到输入流程图 for (Agent i: households){ enter.take(i);} traceln("this is 1"); (enter此处直接链接到wait)然后 在这个阶段,特工们应该在等待。但是,wait.size()返回这是当前的等待

我发现,如果将这两部分代码放在一个位置,即一个按钮上,则与块
wait
(即
wait.get()
wait.size()
)相关的函数将无法工作。然而,如果我有一个单独的按钮中的每一个部分,一切工作都很完美

第一部分 1-引导代理
家庭
输入流程图

for (Agent i: households){
    enter.take(i);}
traceln("this is 1");
enter
此处直接链接到
wait
)然后

在这个阶段,特工们应该在等待。但是,
wait.size()
返回
这是当前的等待大小:0
。尽管代理正在视图窗口中等待显示。无法使用wait.get()或wait.size()等函数访问这些代理

第二部分 因此,必须在第1部分之后运行的该部分不起作用

for (int i =0 ; i<wait.size() ; i++){
    collection_main_households.add(wait.get(i).getIndex());
}
wait.freeAll();

for(int i=0;i启动时,代理尚未发送到流程图,因此等待块确实为空,大小为0

看起来您正试图将住户添加到集合中。如果要将所有住户添加到同一集合中,只需使用人口并将该人口与源关联。人口提供了基本集合的功能


在你的家庭代理的启动代码中,你也可以在那里添加一个集合,或者根据代理参数添加多个集合。

我以前遇到的一个问题是同时事件的顺序。我建议去实验,在随机性部分将其从后进先出更改为先进先出,看看它是否有任何变化你。

你好,艾米,谢谢你的解释。实际上,在调用“等待”功能之前,我使用“回车”将代理发送到流程图。代理显示在“等待”块中,但我无法访问“大小”或“获取”之类的内容。请检查上传的图片。在进一步检查问题源之后,我发现,一旦我t将'enter'代码与'wait'代码放在一个地方,即一个按钮,与'wait'相关的函数将不起作用。如果这有任何意义,就好像没有从内存中释放值一样。您需要小心使用enter块。调用enter时,AnyLogic不会像使用纯逻辑一样,将代理立即移动到块中Java集合。这是因为事件日历正在管理块之间的移动代理。您可以在进入等待时将它们添加到集合中,这样您就知道它们实际上在那里。但是,看起来您所做的只是基于填充创建一个集合,然后释放等待。您能说明您正在尝试什么吗要做什么?这对我来说是个大问题,因为输入和等待是我模型的主要功能。我已经添加了一个详细的描述,说明了我正在尝试做什么。ThanksHi Amy,我发现我所需要的只是通过使用几个按触发时间和重复发生顺序排列的事件,将模型从异步更改为同步建模。
for (int i =0 ; i<wait.size() ; i++){
    collection_main_households.add(wait.get(i).getIndex());
}
wait.freeAll();