我目前正在从事一项人工智能项目,其中一个代理需要将箱子从其原始位置推拉到特定的目标位置。然后,该项目将扩展到包括多个代理,因此我们有一个监督者负责创建“高级”目标,而代理则负责实际实现。
在实践中,目前监督者应该决定将箱子放在目标位置的顺序。实际上,可能会发生将一个箱子放在其目标位置会阻碍另一个目标的路径的情况。
我们解决这个问题的第一个方法是尝试考虑“切削位置”。如果某个位置将可走空间分成两个子集,在其中一个子集中我们有代理,而在另一个子集中我们有一个或多个目标,则该位置就是一个切割位置。例如,考虑以下关卡,“x”是代理,“A”和“B”是箱子,“a”和“b”是各自的目标位置:
+++++++++++++++++++++++++++++++++++++++++
x a b+
+++++ +++++++++++++++++++++++++++++++++
+AB +
+++++
在这种情况下,目标“a”的位置是一个切割位置,因为如果将一个盒子放在那里,代理机器人就无法到达目标“b”。
你能否建议一种快速算法来计算切割位置,并返回每个切割位置所阻挡的目标数?