我发现,如果我将这两个部分的代码在一个地方(一个按钮)一个接一个地编写,则与块wait
相关的功能(即wait.get()
和wait.size()
)将无法正常工作。但是,如果我将每个部分都放在一个单独的按钮中,那么一切都将正常运行。
1-指导代理商households
至enter
流程图
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()之类的功能进行访问
因此,这部分必须在第1部分不起作用之后才能运行
for (int i =0 ; i<wait.size() ; i++){
collection_main_households.add(wait.get(i).getIndex());
}
wait.freeAll();
简而言之,这些代码只能在单独的按钮中使用,但是,我希望它们互相书写后才能使用。
基本上,该模型用于某些地区之间的居民流动性。
在stratup
的{{1}}阶段,我基于包含成员数量及其年龄的表来构造和链接每个家庭。
这些家族的构建方式基于main
代理,该代理用作household
的核心并移动其家族成员(linking
,father
和{ {1}})。因此,如果我将mother
从A移到B,则会将children
发送给它的成员,指示他们从A移到B。
仅在家庭完全组成并准备好位于其原始位置之后的前两个步骤中进行编码。流程如下:
household
来使家庭陷入困境message
中。enter
命令,我使用wait
将这些wait.free(this)
分发到其原始位置。selectOutPut(IN/Out)
输入他的位置(在本例中为新的households
)时,我household
与其所有连接的成员联系,要求他们使用{的相同命令去相同的目的地{1}}和waitID..
。此时,所有这些组件(send a message
及其enterID.take(this)
,waitID.free(this)
和household
的成员)应位于同一father
中。mother
愿意更改其位置的情况下,我重复此过程。我使用children
解决了动态更改和访问使用node
生成的household
的问题。重要的是,如果collections
同时从Hash Lists
接管,该如何解决?
谢谢。
答案 0 :(得分:1)
启动时,代理尚未发送到流程图,因此,等待块确实为空,大小为0。
您似乎正在尝试将家庭添加到集合中。如果要将所有住户添加到同一集合中,只需使用一个人口并将该人口与您的来源相关联即可。人口提供基本集合的功能。
在家庭代理的启动代码中,您还可以在其中添加一个集合,或根据代理参数添加多个集合。
答案 1 :(得分:0)
我以前遇到的一件事是同时发生的事件的顺序。我建议去实验,在随机性部分将其从LIFO更改为FIFO,看看它是否对您有任何改变。