首页 > 解决方案 > 网络中点到点的距离,任意逻辑

问题描述

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

标签: networkingdistancepointanylogicagent

解决方案


使用您尝试使用的功能可以做到这一点,但该功能实际上是复杂的内部(未记录)AnyLogic 代码,涉及代理如何“在幕后”跨网络移动(当通过块或moveTo函数调用要求这样做时)。我不想保证这在未来的版本中会保持不变(并且需要对 Java 有很好的理解)。

(GIS 空间中的代理具有distanceByRoute通过 GIS 空间获取到另一个代理的距离的功能,但我所知道的网络中的代理没有等价物。通常,您不需要使用 distance-by-路径,那么您需要它的确切原因是什么?即使在您这样做的地方,使用直线距离通常就足够了,您可以通过getDistance代理中的getDistance功能而不是网络的功能获得。)

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

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

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

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)。)


推荐阅读