除非每个部分都放在单独的按钮中,否则我的代码无法正常工作?

时间:2019-02-06 12:46:50

标签: anylogic

确切的问题

我发现,如果我将这两个部分的代码在一个地方(一个按钮)一个接一个地编写,则与块wait相关的功能(即wait.get()wait.size())将无法正常工作。但是,如果我将每个部分都放在一个单独的按钮中,那么一切都将正常运行。

PART 1

1-指导代理商householdsenter流程图

for (Agent i: households){
    enter.take(i);}
traceln("this is 1");

({enter在这里直接链接到wait)。

traceln("this is the current wait size: " + wait.size());

在这个阶段,代理商可能正在等待。但是,wait.size()返回this is the current wait size: 0。尽管代理正在视图窗口which looks like this中等待显示。这些代理无法使用诸如wait.get()或wait.size()之类的功能进行访问

PART 2

因此,这部分必须在第1部分不起作用之后才能运行

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

简而言之,这些代码只能在单独的按钮中使用,但是,我希望它们互相书写后才能使用。

有关该模型的更多信息

基本上,该模型用于某些地区之间的居民流动性。 在stratup的{​​{1}}阶段,我基于包含成员数量及其年龄的表来构造和链接每个家庭。

这些家族的构建方式基于main代理,该代理用作household的核心并移动其家族成员(linkingfather和{ {1}})。因此,如果我将mother从A移到B,则会将children发送给它的成员,指示他们从A移到B。

仅在家庭完全组成并准备好位于其原始位置之后的前两个步骤中进行编码。流程如下:

  1. 我使用household来使家庭陷入困境
  2. 然后,所有人在自由前都聚集在临时状态message中。
  3. 通过enter命令,我使用wait将这些wait.free(this)分发到其原始位置。
  4. selectOutPut(IN/Out)输入他的位置(在本例中为新的households)时,我household与其所有连接的成员联系,要求他们使用{的相同命令去相同的目的地{1}}和waitID..。此时,所有这些组件(send a message及其enterID.take(this)waitID.free(this)household的成员)应位于同一father中。
  5. mother愿意更改其位置的情况下,我重复此过程。

我使用children解决了动态更改和访问使用node生成的household的问题。重要的是,如果collections同时从Hash Lists接管,该如何解决?

screen capture

谢谢。

2 个答案:

答案 0 :(得分:1)

启动时,代理尚未发送到流程图,因此,等待块确实为空,大小为0。

您似乎正在尝试将家庭添加到集合中。如果要将所有住户添加到同一集合中,只需使用一个人口并将该人口与您的来源相关联即可。人口提供基本集合的功能。

在家庭代理的启动代码中,您还可以在其中添加一个集合,或根据代理参数添加多个集合。

答案 1 :(得分:0)

我以前遇到的一件事是同时发生的事件的顺序。我建议去实验,在随机性部分将其从LIFO更改为FIFO,看看它是否对您有任何改变。