• SAT Encoding and CDCL Algorithm听课笔记


    CDCL::归结式

    如果x不出现在公式的别的地方,那么两者可以等价

    CDCL::watched literals

    通过监测文字来判断当前子句是否是单元子句

    先选择两个未赋值的文字作为监测文字,若其中的监测文字被赋值后则去寻找其他未被赋值的文字作为监测文字,若最后的两个监测文字重合,即只剩下一个未被赋值的文字,则为单元子句(unit clause)

    CDCL::clause learning

    假设之前已经对c=0,f=0进行赋值,现在对a=0进行赋值

    最后一个子句会出现冲突,这样我们可以得出一个新的学习子句

    即a,c,f最少有一个为1,同时为0则会出现冲突

    CDCL::implication graph(蕴含图)

    在第5层,表示x2赋值为0

    蕴含图的箭头表示对方是通过单元子句传播得到的值,所以蕴含图是不断生长的

    当出现冲突时(红箭头指向)

    就需要学习经验,也就是需要生成学习子句,可以进行如下图的分离割,将决策与冲突分离开

    三条边只要不成立就不会出现右侧的冲突,而三条边对应的点为x4与x21,则我们可以学习到x4=1与x21=0不能同时成立,即学习子句:非x4或者x21

    学习子句不唯一,因为可以有不同的分离割,不同的分离割对应不同的学习子句

    那到底应该在哪个地方进行割,引出概念独一蕴含点

    蕴含图的数据结构

    对每个变量要维护三个信息,变量的值;变量的层级,变量被哪个子句单元传播过来的

    CDCL::unique implication point(独一蕴含点)

    UIP(独一蕴含点):在部分蕴含图中决策点走到冲突点所有路径都要经过的点

    First UIP:离冲突结点最近的UIP、

    目标就是通过蕴含图找到冲突点的First UIP然后分离割,进行学习子句

  • 相关阅读:
    [附源码]SSM计算机毕业设计ssm新冠疫苗预约接种信息管理JAVA
    折半搜索-oier复健练习题目
    elasticsearch测试数据accounts.json
    Command(命令模式)
    如何为 Docker 容器设置内存限制
    21天学会C++:Day12----初始化列表
    【Java开发】 Spring 04:云服务器 Docker 环境下安装 Redis 并连接 Spring 项目实现简单 CRUD
    10-1.WPF模板
    Elasticsearch数据迁移从aliyun到aws
    MYSQL一站式学习,看完即学完
  • 原文地址:https://blog.csdn.net/weixin_43791787/article/details/134269793