跳转至主要内容
Ctrl+K

思考的代码 ― 约束与优化的冒险

Z3

  • 约束满足问题(CSP):给每个变量定一个值,让全部条件都满足
  • Z3的用法:用五个步骤解约束,从建立变量到取出全部解
  • 用尽量少的硬币付款:借助 Optimize 直接求出最优解
  • 扫雷:根据已翻开格中的数字推断出哪些格是安全的
  • 运动会得分谜题:竞赛数目未知时如何求解
  • 10 个问题的谜题:用 Implies 解自指的选择题
  • 24 点:寻找四个数与三个运算符的组合
  • 插入运算符凑出 99:让 Z3 决定括号的位置
  • 骑士巡游:找出把每一格都访问一次的路线
  • 数回:用线把相同的数字连起来
  • 预测伪随机数:用 Z3 反算 rand() 的种子
  • 格雷码:构造每步只变一位的数列
  • 攻破 CRC32:从哈希值造出原始数据
  • Z3 的数据类型:式、类型与函数声明的关系
  • Fixedpoint:用递归的规则推导可达性

PySat

  • 用 SAT 解数独:把恰好一个写成 CNF
  • 解数织:用位置变量把 CNF 变小
  • 解四角分割:用布尔变量把格与数字连起来

OrTools

  • CP-SAT 简介:用 SAT 的技术做约束编程
  • CP-SAT 的基本 API:构造约束所用的函数与写法
  • 解数织:把每个数字的起始位置设为整数变量
  • 装箱谜题:把 12 种五格骨牌装进箱子
  • 巡回路约束:用一条闭合回路来决定访问顺序
  • 数墙:把谜题当作格点上的回路来解
  • 珍珠 Masyu:用边写出圆圈的约束
  • 阴阳谜题:用整数编号来表达同色格的连通性
  • 数回:用回路把数字的对连起来
  • 旅行商问题:寻找一条总距离最短的巡回路线
  • Repository
  • Open issue

索引

作者: 株式会社フォン

© Copyright 2024.