当前位置: 首页 > 知识库问答 >
问题:

AnyLogic错误行人在旅途中飞越GIS地图

宇文飞翮
2023-03-14

最终编辑-这是AnyLogic中路由回归的一个错误,在下一次更新中得到修复。

我正在开发一个城市模拟,让行人代理在它周围移动。我使用的GIS区域数据是从加载。osm文件处于步行交通模式,我在该地区随机生成建筑代理。

起初,他们在城市里走得很好,但在到达目的地的半路上,他们突然以高速直线飞越城镇,到达目的地。他们似乎到达了离大楼最近的地理信息系统节点,然后走了最后几米。我相信我试过的每个行人都会这样。

我正在使用Dijkstra双向路径查找(内置于AnyLogic)。我尝试了一个双向的,同样的结果,以及使用不同的。osm/。pbf文件,并尝试在快速和短路径模式没有运气。

我觉得这是双向寻路中的一个缺陷,然而AnyLogic不允许非双向路由,也不允许为GIS区域实现自己的路由。。。

任何想法都将不胜感激。

-编辑-

我回到这个bug,并确定它是一个百分之百的路径查找bug。当使用AnyLogic在线服务器在2个点之间创建地理信息系统路由时,它按预期工作,我们可以看到完整的路由。然而,当使用加载的离线OSM或PBF文件(我尝试了不同的地图源)时,我观察到它绘制的路由正确地走了一半,但随后绘制了一条直线到距离目标最近的节点,然后绘制了一条直线到目标。我附上了两张照片来证明这一点。

注意,它并没有使距离减半,而是使节点数减半。

我们可以从下图中看到节点的存在,但路由忽略了其中的后半部分。我确信这不是一个断开的网络,因为我做了很多测试,有时它可以通过一段路,但其他时候它会失败。

所以我想现在我的问题是:我该如何防止或避免这种情况?我尝试使用自定义GraphHopper路由器绕过双向路由,只使用常规的a*搜索,但没有任何运气,因为我尝试的其他算法只是直线。

这是在底部做第一个点时发生的事情:

这是在顶部做第一个点时发生的事情:

这与在线路由有关:

共有2个答案

微生博简
2023-03-14

AnyLogic刚刚证实这是路径查找回归中的一个错误。它将在下一次更新中修复。

越高峻
2023-03-14

正如Benjamin所说,这可能是因为您有多个网络,并且有时当您的网络未按照您的意愿定义时,路由行为以不可预测的方式发生。

在“项目”部分的“网络”上搜索,确保只有一个网络。。

例如,在下图中,您可以看到有2个网络。。。找到一种连接事物的方法,以1个网络结束。。。

 类似资料:
  • 穿越地心之旅 (如果你了解洋葱圈模型,略过本小节) 首先让我们对洋葱圈模型有一个直观的认识: 地球构造 物理学上,地球可划分为岩石圈、软流层、地幔、外核和内核5层。 化学上,地球被划分为地壳、上地幔、下地幔、外核和内核。地质学上对地球各层的划分 演示Koa的中间件之前,我们用函数来描述一场穿越地心之旅: <?php function crust($next) { echo "到达<地壳>\

  • 我目前正在研究城市环境下最后一英里交付领域的论文。 我想了解Anylogic软件的功能,我们正在开发一个基于agent的城市环境中最后一英里交付的模拟模型。在我们的模型中,最重要的模拟领域之一是在我们的分析中使用驾驶员从A点移动到B点所需的时间和距离。 因此,我们正在询问Anylogic是否能够为用户“我们”提供从A点移动到B点所需的时间,而不假设驱动程序的速度,类似于从软件(如Google Ma

  • 途乐行旅游网网站官方模版,静态的纯html5+js+css。

  • 我目前正在Anylogic中研究一个基于代理的模型,该模型由多个商店组成,每个商店都有一个分配给每个商店的驱动程序和下订单的客户,然后这些订单从最近的商店交付给他们。 我已经创建了一个具有一定订单频率事件的代理类型“客户”。我知道anygic允许通过在GIS地图上放置一个节点、在地图上搜索位置的名称或通过以编程方式定义位置来为代理分配GIS位置(setLoce(INodenode)、setLoce

  • 我遇到了以下问题: 当我了解到我在1.44中添加的数据无效并且我不想在旧环境中处理它,但在新环境中我不想要这些数据时,就会发生这种情况。我想要将在新迁移中插入的数据(例如1.48)。 如果我更改旧的迁移,由于校验和,它将在旧的envs上失败; 如果我离开它,在新的envs上,我将有来自1.44的无效数据; 如何删除它,以便完成我需要的内容而不会出现错误?正确的方法是什么?

  • 问题内容: 我希望执行一组代码,直到用户明确想要退出该功能为止。例如:当用户运行程序时,他将看到2个选项: 再次运行 出口 这将通过使用开关盒结构来实现。如果用户按下1,则将执行与1相关的一组功能;如果用户按下2,则程序将退出。我应该如何在golang中实现这种情况?在Java中,我相信可以使用do while结构来完成此操作,但是go不支持do while循环。以下是我尝试过的代码,但是它陷入了