Logic 用于熄灯游戏的Sat解算器

Logic 用于熄灯游戏的Sat解算器,logic,solver,sat,satisfiability,cnf,Logic,Solver,Sat,Satisfiability,Cnf,我有一个学校项目,我必须用SAT解算器找到游戏“熄灯”(Lights Out)的解决方案,但我在尝试设置游戏的魔幻正常形式时遇到了困难 游戏由一个5乘5的网格组成。按下任何一个灯将切换它和四个相邻的灯。这个拼图的目的是把所有的灯都关掉 我是如何尝试到现在的: 对于3x3网格(首先),我设置了9个术语(每个按钮): C11:位置1,1处的按钮变亮 C12:位置1,2处的按钮变亮 C13:位置1,3处的按钮变亮。 [……] 因为1,1处的按钮将关闭位置1,2和2,1处的按钮 我做了C11=>C12和

我有一个学校项目,我必须用SAT解算器找到游戏“熄灯”(Lights Out)的解决方案,但我在尝试设置游戏的魔幻正常形式时遇到了困难

游戏由一个5乘5的网格组成。按下任何一个灯将切换它和四个相邻的灯。这个拼图的目的是把所有的灯都关掉

我是如何尝试到现在的:

对于3x3网格(首先),我设置了9个术语(每个按钮):

C11:位置1,1处的按钮变亮 C12:位置1,2处的按钮变亮 C13:位置1,3处的按钮变亮。 [……]

因为1,1处的按钮将关闭位置1,2和2,1处的按钮

我做了C11=>C12和C21 1,2处的按钮将关闭位置1,1和1,3和2,2处的按钮。我做了C12=>C11和C13以及C22

另一方面:

C13 => C12 and C23
C21 => C11 and C22 and C31
C22 => C12 and C21 and C23 and C32
C23 => C13 and C22 and C33
C31 => C21 and C32
C32 => C31 and C33 and C22
C33 => C23 and C32
然后我把这些转换成CNF,得到sat解算器所需的子句,但似乎我所做的是错的

有人能帮我把这个游戏写进CNF表格吗

多谢各位

如果您需要更好地理解游戏,请看以下游戏:


解决问题的一种方法是对实现目标所需的行动顺序进行编码

这样做的一个方法是考虑K的移动来解决这个难题。然后,您将为每个步骤编码选择单元以及对相关单元的影响,并向解算器请求模型,以使第K个配置的所有灯光都关闭


这种技术被称为有界模型检查,您应该可以找到一些关于如何转换为sat的解释。

您在维基百科上发表的文章引用了一些看起来不错的解决方案:Marlow Anderson,Todd Feil(1998)。“用线性代数关灯”(PDF)。数学杂志。71 (4): 300–303. 你需要理解论文中的数学知识,以及如何将Z_2运算编码到CNF中。(IMO的实施工作比BMC少。)祝您在任务中好运