Anylogic,在给定半径内寻找代理

Anylogic, finding agents in a given radius

我在网格中有代理,对于任何任意代理,我想以某种方式定义半径 r 并找到给定 r 的该区域中的所有其他代理。这可能吗,在 AnyLogic 中是否有任何实现的方法?

有。查看agentsInRange(double distance)函数,见帮助文章here.

如果 'in a grid' 你的意思是它们是连续的 space 但具有整数 (x,y) 坐标,你可以使用标准函数 agentsInRange (它在内部使用标准函数 distanceTo).

如果代理位于实际网格中(即具有(行,列)坐标的离散 space),则不能使用标准 continuous/GIS space 函数像 distanceToagentsInRange。 (您会遇到运行时异常。)

在那种情况下,您将不得不编写自己的函数来计算彼此之间的距离(可能通过毕达哥拉斯定理给定行和列值),并且 return 仅计算给定阈值内的距离.

下面是这样一个示例函数,它假设您的代理人属于 Thing 类型并且生活在一个名为 things 的群体中(并使用代理人之间的单元格数的直线距离作为 'distance between them')。您为函数提供 'source' 代理(您希望获得范围内的其他代理)和所需范围。 (有很多编码方式略有不同,具体取决于例如您是否希望它适用于任何代理类型的任何人群。)