寻找路径:SAT 解决

Finding a path: SAT solving

我们给定了一个 n*m 的网格,它在各个点上都有障碍物,机器人的起点和终点位置。任务是找到一条从头到尾的无碰撞路径。此问题将建模为 SAT 问题。

请指导我在这种情况下应该怎么做才能获得最佳解决方案。

我会假设最优意味着最短。使用我描述的方法 您可以执行第一步:

  1. 定义网格
  2. 制定可满足性任务

在这个阶段,求解器returns给你随机满足所有约束的路径。需要记住的重要一点 - 您可以定义达到目标所需的步数 k!所以你只需从 k = 0 开始。 0行动是否有可能达到目标?可能不会,直到代理人已经到达目标为止。然后增加 k = 1。现在可以吗?如果没有,增加更多!如何实施?只需将所有 k 高于某个限制的值设置为 False 并在每次迭代时增加此限制。

如果你知道上限,你可以使用二分搜索来找到最短的可能路径,这样会更有效率。

如果您关心路径的其他属性,可以使用 pseudo-boolean constraints. By leveraging this approach, you can minimize, for example, a number of right turns. Create a Boolean counter for all possible right turns and limit number of available turns via assumptions