基于SAT的运动规划

时间:2017-05-30 05:15:50

标签: sat motion-planning

fill

可以将简单的动作规划问题重新设计为 SAT解决问题。任何人都可以解释这怎么可能?

在这个问题中,我们必须找到从开始到结束位置的无碰撞路径。

1 个答案:

答案 0 :(得分:0)

最简单的例子可能如下所示。

让我们介绍N行和M列的2D网格,移动代理A从节点(x,y)开始。他的目标T有坐标(x_i,y_j):

a grid

要达到目标,代理应该执行几个步骤 - 因此向左,向右,向上或向下移动。我们不知道它需要多少步骤,所以我们必须自己限制这个数字。比方说,我们正在寻找一个由K步骤组成的计划。在这种情况下,我们应该添加N * M * K布尔变量:N和M代表坐标,K - 时间。如果变量 True ,则代理当前位于节点( x y k 。< / p>

接下来,我们添加各种约束:

  1. 代理人必须在每一步改变他的位置(实际上这是可选的)
  2. 如果步骤 k 的机器人位于(x,y)位置,则步骤 k + 1 它必须位于四个相邻节点之一
  3. 当且仅当步骤 k 的代理人位于目标节点时才满足SAT公式
  4. 我不会在这里讨论约束的详细实现,并不困难。类似的方法可以用于multiagent planning

    这个例子只是一个例子。人们在现实生活中使用satplanSTRIPS

    EDIT1 在无冲突路径的情况下,您应该添加其他约束:

    1. 如果节点包含障碍物,则代理无法访问该障碍物。例如。相应的布尔变量在任何时间步长都不能,例如它总是错误
    2. 如果我们讨论的是多智能体系统,那么两个布尔变量(对应于两个代理在同一节点处于同一时间步长)不能同时 True
    3. AND (agent1_x_y_t, agent2_x_y_t) <=> False

      EDIT2

      如何建立一个满意的公式。迭代所有节点和所有时间戳,例如在每个布尔变量上。对于每个布尔变量添加约束(我将使用类似Python的伪代码):

       formula = []
       for x in range(N):
           for y in range(M):
               for t in range (K):
                   current_var = all_vars[x][y][t]
                   # obstacle
                   if obstacle:
                       formula = AND (formula, NOT (current_var))
      
                   # an agent should change his location each step
                   prev_step = get_prev_step (x,y,t)
                   change = NOT (AND (current_var, prev_step))
                   formula = AND (formula, change)
      
                   adjacent_nodes = get_adj (x,y, k+1)
      
                   constr = AND (current_var, only_one_is_true (adjacent_nodes))
                   formula = AND (formula, constr)
       satisfy (formula)