如何获得PDDL forall中断功能

时间:2019-06-23 15:37:27

标签: artificial-intelligence pddl

我正在尝试使用PDDL解决Light Up难题。为了实现将灯泡放置在单元格中的效果,我必须将灯泡放置在(x,y)中,然后在没有黑色单元格的情况下照亮相同的行和列。我无法点亮电池,直到黑电池。

例如,对于5 * 5的网格,如果我要将灯泡放置在(0,1)处并且在(3,1)处有黑色单元格,则只想点亮单元格(0,1 ),(1,1),(2,1)(如果我仅考虑该列)。但我不想照亮黑色单元格之后照亮单元格(4,1)。

因此,如果我使用诸如forall之类的东西,当它在行/列中找到一个黑色单元格时,如何中断for all循环?

1 个答案:

答案 0 :(得分:0)

我认为值得一看PDDL中的公理和派生谓词。这样就可以构建传递闭包并从其他变量中获取信息。

实际上,您可以从网格结构(哪些单元为黑色)和灯泡的信息中得出哪些单元具有光。因此,您可以为每个单元格定义派生谓词lit((x,y))并使用公理编写背景理论:

  • lit((x,y))<=灯泡((x,y))
  • lit((x,y))<= lit((x',y'))并已连接((x,y),(x',y'))和〜black((x,y))

对于所有非黑色单元格,目标公式可能类似于:“ lit((0,0))以及...和... lit((n,m))”。