A * 3机器人相互接触

时间:2018-03-02 08:25:10

标签: java artificial-intelligence distance robot heuristics

所有大约3个机器人,名为A,B和C,可以使用明智的搜索在他们的环境中移动。环境包含障碍。 3个机器人需要在某个时刻相遇,以使他们行走的总距离最小。

为了使问题在计算上更简单,我们将障碍限制为矩形。 3个机器人总是半径为1的圆圈。目标状态是让3个机器人(圆圈)相互接触;每两个机器人的中心之间的距离是1个单位。移动时,机器人不得越过任何障碍物。在每个步骤中,3个机器人中的一个在四个方向中的每个方向上从当前位置移动一个单元:左,右,上和下。从一个点到另一个点的移动不能经历任何障碍。

我只需要一个良好的启发式功能,可以近似3个机器人之间的距离,你可以帮助我吗?

我在这里解决了这个问题,代码是Github code

2 个答案:

答案 0 :(得分:0)

我在这里假设您希望最小化总步数(一次只能移动一个机器人)。如果机器人全部同时移动,并且您希望最小化所需的时间,则解决方案将有所不同。此外,一些微调是必要的,因为机器人应该只是触摸,而不是来到同一点。

你实际上需要一个下限,而不是近似值。可以通过忽略任何障碍物来计算良好的下限,并检查空场上需要多少移动。由于机器人只能水平或垂直移动,我们会分别考虑这些方向。

先取水平方向。最左边和最右边的机器人需要在它们之间的某个地方相遇,在它们相遇的地方是独立的,总的来说它们必须移动它们之间的水平距离。如果它们在中间机器人的水平位置相遇,则中间不必移动。因此,在任何情况下所需的水平步骤是最左边和最右边的机器人之间的水平距离。将其称为水平跨度。

类似的论点适用于垂直方向。

因此总的来说,下限是垂直跨度加上水平跨度。

答案 1 :(得分:0)

如果每个机器人同时移动,并且知道障碍物在开始的位置(因此已知地图),并且障碍物没有移动,这将起作用。 Uou将需要使用波前算法生成各种网格。一开始将针对每个机器人执行此操作。然后遍历每个网格,添加每个机器人的步骤。然后找到数量最少的网格。