主要观点:
- 作者将“Linkedin Queens”问题表示为 SAT 问题并使用 CVC5 求解,后用 Z3 展示在 SMT 级别求解该问题更易,且效率低于原始 SAT 求解器但仍比 SAT 求解更易,以此解释为何人们更倾向于 SMT 而非 SAT。
- 强调在编码过程中要进行 sanity check,通过添加测试和检查来尽早发现错误,如检查区域编码是否正确等。
关键信息:
- 2025 年 6 月 12 日,下周无 newsletter,作者将在Systems Distributed演讲,其演讲尚未完成导致本期 newsletter 较晚且简短。
- “Linkedin Queens”问题是在 NxN 网格中放置 N 个皇后,每行、列和区域各一个且对角线上不能相邻,这是“Star Battle”游戏的变体。
- 用 SAT 表示皇后位置需 N²个布尔变量,而在 SMT 中可编码为 N 个整数,如“queens[n] = col of queen on row n”。
- 在 Z3 中通过一系列约束条件来求解“Linkedin Queens”问题,包括约束整数在[0, N)范围内、不同列、非对角相邻等,最后通过
solver.check()
和solver.model()
获取解。 - 进行 sanity check 的代码,包括检查是否遗漏或重复方块的测试,以及打印区域的代码以确认编码正确。
重要细节:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。