移动到最近的节点

Move to closest node

在我的模型中,我希望代理根据代理与集合中某些特定节点之间的距离移动到节点。 因此,在 moveto 块中,节点基于规范函数(见第一张图片),该函数应基于计算距离的 anylogic 中的函数。现在我的想法是创建一个循环遍历特定集合中所有节点的函数,并根据 getdistance() 函数选择最接近的节点(见图 2)。但是我不确定如何完成它以使函数 return 在目标节点部分被激活时成为最近的节点(在集合中)。

我也在考虑使用函数 getNearestNode 这可能会有帮助(但节点应该在特定的集合中?有人可以帮助我吗,因为我也无法在互联网上找到任何示例。

谢谢!

遍历集合中的所有节点,并使用dist.add(Agent.getDistance(currNode))记录到名为dist的变量的距离。然后选择最小值的索引。

int indexMin=0;
float min = dist.get(0);

for (int i=0; i<dist.size(); ++i) {
        if (min > dist.get(i)) {
                    min = dist.get(i);
                    indexMin = i;
        }
}

现在你知道距离最小的节点索引是indexMin。您可以将集合中索引为 indexMin 的节点指定为目标。

你可以这样做,只需将它放在你圈出的节点部分:

top(collectionOfNodes,n->-agent.getDistance(n.getX(),n.getY()))

如果你想找到在同一个 z 上的那些,那么:

top(findAll(collectionOfNodes,a->a.getZ()==agent.getZ()),n->-agent.getDistance(n.getX(),n.getY()))