我是Z3的新手,并且通过调整现有的数独求解器(http://lauri.võsandi.com/tub/qaoes/z3.html),练习尝试了一个魔术解算器。除了所有行,列和主对角线的总和相等且条目不同且在[1,N * N]范围内之外,我不提供任何事实(即特定框中没有特定数字)。它适用于大小为4的正方形。虽然更高,但我放弃等待解决方案。
这是正常的吗?或者经验丰富的z3程序员会建议我的实现有问题,因为这个大小的问题应该是可以解决的吗?
感谢。
答案 0 :(得分:1)
您可以通过将每个单元格中的条目表示为BitVec()
变量而不是Int()
变量来获得更好的结果。
有关示例实现,请参阅https://github.com/0vercl0k/z3-playground/blob/master/magic_square_z3.py。该实现能够在1秒内找到5x5魔方的解决方案,在13秒内找到6x6魔方,在24秒内找到7x7魔方(在我的计算机上),所以它似乎比你的配方好得多