人工智能高级规划算法

标签 algorithm graph artificial-intelligence planning

我目前正在从事一个人工智能项目,其中代理需要将箱子从其原始位置推拉到某个目标位置。然后该项目将扩展到包括多个代理,因此我们有一个主管负责创建“高级”目标,而代理负责实际实现。

在实践中,目前,主管应该决定将盒子放在目标位置的顺序。事实上,将一个盒子放在目标位置可能会阻挡通向另一个目标的路径。

我们解决这个问题的第一个方法是尝试考虑“切入位置”。如果某个位置将可步行空间划分为两个子集,则该位置是一个切割位置,其中一个子集有代理,另一个子集有一个或多个目标。例如,考虑以下级别,其中“x”是代理,“A”和“B”是框,“a”和“b”是各自的目标位置:

+++++++++++++++++++++++++++++++++++++++++
x                        a             b+
+++++   +++++++++++++++++++++++++++++++++
    +AB +
    +++++ 

在这种情况下,目标“a”的位置是一个切割位置,因为如果一个盒子放在那里,那么智能体将无法到达目标“b”。

您能否建议一种快速算法来计算切割位置,并且可能会返回每个切割位置阻挡的目标数量?

最佳答案

您所说的网格词的切割位置在一般图形中称为切割顶点接合点。来自 Wikipedia :

Specifically, a cut vertex is any vertex whose removal increases the number of connected components.

在同一篇文章的更下方:

The classic sequential algorithm for computing biconnected components in a connected undirected graph due to John Hopcroft and Robert Tarjan (1973) [1] runs in linear time, and is based on depth-first search. This algorithm is also outlined as Problem 22-2 of Introduction to Algorithms (both 2nd and 3rd editions).

确定了双连通分量后,确定关节点应该很容易:包含在多个双连通分量中的所有节点都是关节点。

关于人工智能高级规划算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16065057/

相关文章:

algorithm - 如何删除由线段和颜色 block 分隔的区域?

c# - 调整图像大小以适合边界框

c - 如何在文件 "stack.c"中使用 "graph.c"的功能?

java - 大容量可查询和可遍历的数据结构

python - Python 中的 AI 工具入门

algorithm - 最小顶点覆盖

java - 同步 map 与集合的最佳复杂度

c++ - 为什么 BGL A* 需要隐式图来建模 VertexListGraph?

machine-learning - 遗传算法,大群体与小群体

artificial-intelligence - 使用 Slurm 进行分布式文本聚类