2D 航点寻路:从当前位置到目标位置的航点组合

请花一点时间理解我的情况。如果无法理解,请在评论中告诉我。

我有一个航点ArrayList。这些航点没有任何顺序。一个航点具有以下属性:
{int type, float z, float y, float x, float rotation}

这适用于三维世界,但由于我的寻路不需要考虑高度(因此将世界视为二维世界),因此 y 值将被忽略。旋转对于这个问题并不重要。

  • 在这个二维世界中,x 代表 x 轴,z 代表 y 轴。
  • 如果 x 增加,则世界中的对象向东移动。如果 x 减少,则世界中的对象向西移动。
  • 如果 z 增加,则世界中的对象向北移动。如果 z 减少,则世界中的对象向南移动。

因此,这些“新的”航点可以简化为:waypoint = {float x, float y}

现在,这些航点代表对象的 X 轴 (x) 和 Y 轴 (z) 位置。此外,还有一个当前位置:curLocation = {float x, float y} 和一个目标位置:tarLocation = {float x, float y}

这是我想得到的结果:
curLocationtarLocation 的所有航点组合(也就是:路径或路线),在以下严格条件下:

  1. 每个航点之间的距离不得大于 (float) maxInbetweenDistance。这包括从 curLocation 到第一个航点的初始距离以及从最后一个航点到 tarLocation 的距离。如果不可能找到这样的航点组合,则应返回 null。
  2. 当在某个航点的 maxInbetweenDistance 范围内找到多个通往目标航点的航点时,应选择最近的航点(如果稍微远一点的替代航点可以产生一条更长距离的新路径,并且也返回该路径,那就更好了)。
  3. 返回的航点组合(路径)的顺序应从最短路径(最小距离)到最长路径(最大距离)。

最后,请考虑以下几点:

  1. 这是我唯一需要做的 AI/寻路方面的事情,因此我不希望使用完整的寻路或 AI 框架。我相信一个函数应该能够处理上述问题。
  2. 如果返回所有可能的航点组合会导致过多的开销,那么如果可以指定最大组合数量(但仍然按从最近到最远的顺序排列)也是可以接受的。例如,5 条最近的路径。

我该如何实现这个目标?欢迎任何反馈。


回答:

我认为你的解决方案是从 Dijkstra 算法 开始,首先找到最短路径。 你可以认为你的航点是一个连通图,其中节点在 xy 平面上足够接近时连接,然后应用 Dijkstra(网上有很多示例代码清单)。

现在你有了从起点到终点的图中最短路径,它将由图的 N 条边组成。

接下来你需要创建 N 个新图,每个图都与第一个图完全一样,但你的最短路线中的一个片段未连接。 在这些修改后的图上找到从起点到终点的最短路线。 现在你有了 N+1 条路线,你可以按长度排序。

重复此操作,直到你找到足够满足你需求的路径,或者没有未排序的路径为止。

我没有找到这种技术的名称,但它被描述为 Dijkstra 的修改版本这里

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注