【发布时间】:2021-03-06 09:10:12
【问题描述】:
我的理解是节点内的吸引子的容量应该为 1,也就是说,在 3D 动画中,每个吸引子应该只有一个代理。 当我运行模型时,我看到同一个吸引子上有两个代理形状,而其他吸引子是空的。
这是正常行为吗?有没有办法防止这种情况发生?
请注意,这并非一直都在发生,但随着模型的运行,有时代理会去空吸引子,而其他时候它们会去已经有代理的吸引子。
【问题讨论】:
标签: simulation anylogic
我的理解是节点内的吸引子的容量应该为 1,也就是说,在 3D 动画中,每个吸引子应该只有一个代理。 当我运行模型时,我看到同一个吸引子上有两个代理形状,而其他吸引子是空的。
这是正常行为吗?有没有办法防止这种情况发生?
请注意,这并非一直都在发生,但随着模型的运行,有时代理会去空吸引子,而其他时候它们会去已经有代理的吸引子。
【问题讨论】:
标签: simulation anylogic
一个选择是创建一个集合,简单的 ArrayList 就可以了,所有的吸引子
然后在您设置吸引子的过程建模块 (PML) 中,您有一个返回吸引子的函数。我在这里提供代理,这样我们就可以跟踪哪个代理被发送到哪个吸引子,这样一旦代理离开吸引子位置,我们就可以将吸引子放回可用堆中。
这里是getAttractor函数
它获取一个随机可用的吸引子,然后还将将其带到地图的代理保存
如果你想释放吸引子,你可以在吸引子被释放的任何时候简单地调用它
attractorsAvailable.add(mapAgentPerAttractor.get(agent));
mapAgentPerAttractor.remove(agent);
这是最终结果以及我们正在复制您描述的问题的比较
【讨论】:
这是完全可能的……如何避免取决于你的模型。
吸引子仅定义代理将在节点内的位置,并且没有规定不能在同一个吸引子中拥有多个代理。
AnyLogic 按照创建顺序将代理发送到吸引子,如果您有 10 个吸引子,如果代理 3 离开吸引子,则最初有 10 个代理进入吸引子,下一个代理将不会去吸引子 3,相反,它会去吸引子 1,然后下一个会去吸引子 2,按照相同的顺序...
如果你想避免它,你应该明确指定你的代理应该去什么吸引子。
我所做的是创建一个类并将其与该吸引子相关联并设置一个变量来定义吸引子是否被占用...
如果所有吸引子都被占用,您需要创建额外的逻辑将代理发送到其他地方
【讨论】: