【发布时间】:2021-10-10 14:20:35
【问题描述】:
最终编辑 - 这是 AnyLogic 中路由回归的一个错误,将在下一次更新中得到修复。
我正在开发一个城镇模拟,其中行人特工在它周围移动。我使用的 GIS 区域数据是从 .osm 文件以步行模式加载的,我在该区域周围随机生成建筑代理。
他们一开始还好好的在城里转了一圈,但是到了目的地的一半左右,他们突然高速飞过小镇,笔直地飞到了他们要去的地方。他们似乎到达了离建筑物最近的 GIS 节点,然后在里面走了最后几米。我相信我尝试过的每一个行人都会遇到这种情况。
我正在使用 Dijkstra 双向寻路(内置于 AnyLogic)。我尝试了 A* 双向,结果相同,并使用了不同的 .osm/.pbf 文件,并在快速和短路径模式下尝试,但没有成功。
我感觉这是双向寻路中的一个错误,但是 AnyLogic 不允许非双向路由,或为 GIS 区域实现自己的路由的方式...
任何想法都将不胜感激。
-编辑-
我回到这个错误并确定它 100% 是一个寻路错误。使用 AnyLogic 在线服务器在 2 点之间创建 GIS 路线时,它按预期工作,我们可以看到一条完整的路线。但是,当使用加载的离线 OSM 或 PBF 文件时(我尝试了不同的地图源),我观察到它绘制的路线在中途正确,但随后绘制一条直线到离目的地最近的节点,然后是一条直线到目的地.我附上了两张图片来证明这一点。
请注意,它不是距离的一半,而是节点数的一半。
根据下图我们可以看到节点存在,但是路由忽略了后半部分。我确定这不是一个断开的网络,因为我进行了很多测试,有时它可以通过一段路很好,但其他时候它会失败。
所以我想现在我的问题是:我该如何预防或解决这个问题?我尝试使用自定义 GraphHopper 路由器绕过双向路由并仅使用常规 A* 搜索,但没有任何运气,因为我尝试的其他算法只是直线。
这是在底部制作第一个点时发生的情况:
这是将第一个点放在顶部时发生的情况:
这是在线路由:
【问题讨论】:
-
也可能是您创建了超过 1 个网络,并且它们从 1 个网络“飞”到下一个,因为没有连接。确保您的 GIS 网络只有 1 个,而不是多个
-
我从 OSM 下载了地图数据,除非他们的网络是分裂的,否则我认为不是这个问题
-
此外,查询 OSM 服务器以进行寻路工作正常。我只是不能使用它,因为 API 调用太慢了
-
根据我的经验,您不能依赖 OSM 导入来创建干净的 AnyLogic 网络。在 Main 上检查您的属性树:是否有多个网络?
-
我在这里找什么?我认为没有
标签: gis path-finding anylogic