9 Issues in constraint programming

9.1 Modeling

  1. Q: 举例说明不同的modeling
    A: 举例:是否引入辅助变量。
    举例:不同的语法表示同样语义(如all_different
    举例:增加新标识符(“新语法”)表示相同语义,并引入对应新规则。
  2. Q: 一些总体原则
  • 更()的变量,更简单(容易表达,容易传播的)约束
  • 传播需要预处理少,威力大(类比游戏技能)
  • 涉及()逻辑运算,则容易()
    A: 少,析取,分类讨论组合爆炸
  1. Q: 为什么需要Global constraints?
    A: Global constaints语法复杂。但可能有些定制手段,方便传播。
    比如all_different,(任务安排)的cumulativesortedness等(可以用跟排序有关的算法)

9.2 Constraint programming languages

  1. Q: 简要阐述“two-level architecture”
    A: 提示:回忆\(\mathcal C, \mathcal D\mathcal E\),一个是约束集合,一个是变量集合。
    除了要维护变量集合,还要维护约束集合(新加入时用指定求解器传播,传播失败则回溯……等等)
  2. Q: 如何解决constraint variables相比一般变量需要更复杂的结构和专门处理?
    A: logic programming中logic variable
    或专门定义类(C++)等

9.3 Constraint propagation

  1. Q: local consistency相关(一般)算法在具体问题可能效率低,但是这些local consistency notions()
    A: 可以启发(特殊)算法设计,帮助证明正确性等等。

9.4 Constraint solvers

  1. Q: 和纯理论相比,在实际中有哪些加速constraint solvers效率的方法?
    A: 采用更底层的手段写,而不是“调包写”(即:手动优化,造出一个“黑箱”优化器给上层用)
    考虑incrementality(对于基于“偏序集”迭代的那些方法可以机械地modify. 对于complete solvers往往“一题一法”)
  2. Q: 归纳和子句有何关系?
    A: 往往一个子句表示“归纳起点”,一个子句表示归纳过程。
  3. Q: 举例说明简化约束语法的方法。
    A: 如设法减少用到的函项、谓词、变量数量。
    通过某些“规范化”的形式表示(例如针对线性方程)
  1. Q: versioning和回溯有什么关系?这对你的工作有什么启发?
    A: 做好版本管理,github分支等,出问题就回溯(血泪教训)
  2. Q: best-first和limited discrepancy联合起来有何意义,具体如何执行?
    A: 总体上讲和best-first思想相近:“先看那些最好,最好不行就稍微偏一点点再看……”
    具体可能类似于\(000,(100,010,001)\)这种“对角线”感觉。
  3. Q: local-search和上题有何联系?
    A: 上面的有点像特定点("best")开始的local-search(只不过wave相比move来说,一次包含更多proposal)
  4. Q: 如何逃脱爬山算法中的局部极值?
    A: 比如重新定义邻居(升维),强行逃,重启等。
    例:皇后问题中,“调换行”或“单独改一个皇后的行数”都是可能的“邻居”定义。
    例:“强行逃”:禁忌搜索。可“强行逃”,通过维护“禁忌”防止循环。
    例:模拟退火
  5. Q: 基于神经网络的方法中,改变边权会改变什么?
    A: 各个节点(根据边权)更新的流程。
    注:这里的神经网络意思和现在流行的那些深度学习不太一样。但是共同点是每个node都根据权作简单处理。
  6. Q: 进化算法有什么不足?
    A: 没有保证,玄学,收敛慢,发散……

9.6 Over-constrained problems

  1. Q: 无解,但要找到一个相对来说比较好的解。这种相对好有什么常见标准?
    A: 比如部分约束可“放松”。比如给约束“赋权”(有些可放松有些不可放松相当于有些权1有些权无穷)
    比如约束是否满足变成“模糊”的(满足度,\([0,1]\)
    比如所有约束排序,前面的重要,先保证(“字典序”定义“优劣”)
    比如把违反了的约束作为元素进行代数运算(这就比较一般化了,范围很广)
  2. Q: 为了防止“短视”抹去解,应该怎么调整传播方式?
    A: 改consistency定义(如arc consistency counts)