我正在尝试使用PDDL解决Light Up难题。为了实现将灯泡放置在单元格中的效果,我必须将灯泡放置在(x,y)中,然后在没有黑色单元格的情况下照亮相同的行和列。我无法点亮电池,直到黑电池。
例如,对于5 * 5的网格,如果我要将灯泡放置在(0,1)处并且在(3,1)处有黑色单元格,则只想点亮单元格(0,1 ),(1,1),(2,1)(如果我仅考虑该列)。但我不想照亮黑色单元格之后照亮单元格(4,1)。
因此,如果我使用诸如forall之类的东西,当它在行/列中找到一个黑色单元格时,如何中断for all循环?
答案 0 :(得分:0)
我认为值得一看PDDL中的公理和派生谓词。这样就可以构建传递闭包并从其他变量中获取信息。
实际上,您可以从网格结构(哪些单元为黑色)和灯泡的信息中得出哪些单元具有光。因此,您可以为每个单元格定义派生谓词lit((x,y))并使用公理编写背景理论:
对于所有非黑色单元格,目标公式可能类似于:“ lit((0,0))以及...和... lit((n,m))”。