网络中点到点的距离,任何逻辑

Distance from point to point in a network, anylogic

我想使用网络路径计算两个代理之间或代理的两个点之间的距离。 我用 double d = 0.0;vx = a.getX() vy = a.getY() 尝试了 getDistance(Point source, Point target, ShortestPathData<N,P> data) -> getDistance(Point(vx,vy), Point(a.getX(),a.getY()), d);。 vx 和 vy 是第二个代理的坐标。代理人来自同一类型,我们称之为类型一。我在代理类型二的状态图中键入了代码。 => 问题描述:类型二未定义方法 Point (double, double)。 我该如何解决这个问题?或者我可以使用其他功能吗?

使用您尝试使用的功能是可行的,但该功能实际上是复杂的内部(未记录)AnyLogic 代码,与代理如何跨网络移动有关'under the covers'(当要求通过块或moveTo 函数调用)。我不想保证这在未来的版本中会保持不变(并且需要对 Java 有很好的理解)。

(GIS space 中的代理有一个 distanceByRoute 函数来通过 GIS space 获取到另一个代理的距离,但我知道网络中的代理没有等效项的。但是,通常情况下,您不需要使用路径距离,那么您需要它的确切原因是什么?即使在您这样做的地方,通常只使用直线距离就足够了,您可以通过代理中的 getDistance 函数获得,而不是网络的 getDistance 函数。)

也就是说,这可以按如下方式工作...

您尝试调用的 getDistance 函数(Java 方法)仅存在于 Network 对象(其中网络是所有节点的 'parent'和连接网络中的路径)。另外,您必须创建(实例化)Point 对象(没有 Point 函数) 获取网络的 ShortestPathData 和 from/to 问题点。 (这个最短路径数据表示两点之间的计算路线,然后你可以得到该路线上任意一组点之间的距离。)

所以你会有类似下面的代码,其中 agent1agent2 是对你的两个代理的引用,network 是 nodes/paths网络(假设此代码在包含此网络的代理中):

Point p1 = new Point(agent1.getX(), agent1.getY());
Point p2 = new Point(agent2.getX(), agent2.getY());

ShortestPathData<Node, Path> pathData = network.getPathData(p1, p2, null);
double distance = network.getDistance(p1, p2, pathData);

(由于距离是以像素为单位返回的,您可能希望通过 scale.toLengthUnits(distance, METER) 之类的方式使用包含网络的代理的当前比例将其转换为适当的长度单位。)