我有一个学校项目,必须使用SAT解算器找到游戏“ Lights Out”(https://en.wikipedia.org/wiki/Lights_Out_(game))的解决方案,但是在尝试设定游戏的普通形式时遇到了麻烦。
游戏包含5 x 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格式吗?
非常感谢您!
如果您需要更好地理解它,请看这里:
答案 0 :(得分:1)
您发表的Wikipedia文章引用了一个看起来非常不错的解决方案:Marlow Anderson,Todd Feil(1998)。 “使用线性代数将灯光熄灭”(PDF)。数学杂志。 71(4):300–303。您将需要了解本文中的数学知识以及如何将Z_2操作编码为CNF。 (IMO的执行工作比BMC少。)祝您好运!
答案 1 :(得分:0)
解决问题的一种方法是对达到目标所需的操作顺序进行编码。
一种执行此方法的方法是考虑解决问题需要K个动作。然后,您将为每个步骤编码选择单元格,以及对相关单元格的影响,然后向求解器询问模型,以使第K个配置均熄灭。
此技术称为边界模型检查,您应该找到有关如何转换为sat的几种解释。