SAT求解器快速入门

从事组合优化或信息安全方向的研究人员,基于SMT研究,需要快速学习SAT求解器的基本原理和方法。以下是快速入门的几点体会:



1.理清需要——是完备求解器还是不完备求解器

    完备求解器 能给出SAT、UNSAT、unknow三种确定的答案,尤其是UNSAT结论能给出证明推导过程,指出导致矛盾的关键路径。

     不完备求解器能给出SAT、unknow两种结论。SAT结论给出一组可满足解即完成求解任务。可能会存在其他一组或多组可满足解。如果问题本身不知一组解,那么不同的求解器得出的可满足解可能不同。



2.先进的完备求解器中以CDCL框架为主流。

基本算法框架:

    最新比较经典的全面介绍minisat系列完备求解器的文献,本人推荐下面这篇文章作为掌握基本概念之后快速进阶。    

                Audemard, Simon - 2018 - On the Glucose SAT Solver

          结合glucose4.0版本,认真解读代码,不断补充知识点,这样学习进步会很快。



3.不完备算法——随机局部搜索(SLS)

    原理很简单:

    入门求解器:probSAT, wailSAT, Score2SAT,YalSAT等

    综合性较强的求解器:dimetheus,Sparrow2Riss-2018等

建议查阅文献:

        中文文献——硕士论文:命题逻辑中随机3_SAT问题算法研究_安世勇;基于概率推理的SAT局部搜索算法_梅方元;

        外文文献:Adrian Balint and Uwe Schoning,Choosing Probability Distributions for Stochastic Local Search and the Role of Make versus Break。 

   



4.两种求解器结合使用:CDCL+SLS

  截止2019年11月,从2019年SAT竞赛发布的总结和求解器介绍,可以看出CDCL+SLS发挥各自优势是许多科研工作者研究的内容。简要列出来如下:

(截止2020-4-6本人了解到的SLS与CDCL互相结合的求解器)

原文地址:https://www.cnblogs.com/yuweng1689/p/12652346.html

时间: 2024-11-06 11:36:25

SAT求解器快速入门的相关文章

Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)

Visual State Manager,中文又称视觉状态管理器(简称为VSM),是Silverlight 2中引进的一个概念.通过使用VSM,开发人员和设计人员可以轻松的改变项目控件的视觉效果,在项目中VSM主要用于创建自定义控件以及控件模板.为了能够打造个性绚丽的Silverlight项目,学习掌握VSM是非常必要的.本文将介绍VSM的快速入门知识以及VSM在Blend中的使用方法. 在学习VSM前,首先,了解以下几个基本概念: 正如前文所说,VSM视觉管理器是用户控制项目控件的视觉效果,S

SAT求解器变元活跃度计算模式的切换

变元活跃度计算模式有:VSIDS.基于历史出现时刻与当前冲突时刻距离等 有三个最小堆: // A priority queue of variables ordered with respect to the variable activity. Heap<VarOrderLt> order_heap_CHB,                                order_heap_VSIDS, order_heap_distance; 一般的求解切换方式是: conflicts

sat求解器是一个大数据系统

Understanding VSIDS Branching Heuristics in Conflict-Driven Clause-Learning SAT Solvers Jia Hui Liang Vijay Ganesh Ed Zulkoski Atulan Zaman Krzysztof Czarnecki Liang J.H., Ganesh V., Zulkoski E., Zaman A., Czarnecki K. (2015) Understanding VSIDS Bran

最早使用cmt的minisat改进版求解器3——vsids-master-1\countbridgemvsids

位置: E:\CNKI E-Study\localestudy\Literature\SAT求解器学习_6B1FE1DF69904FE2AEC3542DCF408574\VSIDS paper\VISDS-solvers\vsids-master-1\vsids-master-1\countbridgemvsids\core 代码解读 Solver.h 1 class Solver { ...100 101 // Statistics: (read-only member variable) 1

最早使用cmt的minisat改进版求解器2——vsids-master-1\minisat-performance

位置: E:\CNKI E-Study\localestudy\Literature\SAT求解器学习_6B1FE1DF69904FE2AEC3542DCF408574\VSIDS paper\VISDS-solvers\vsids-master-1\vsids-master-1\minisat-performance\core 代码分析 Solver.h 1 //============================================ 2 // Solver -- the ma

【Android快速入门】目录结构及adb命令【附Android拨号器的实现,自作】

目录结构 src: 存放java代码 gen: 存放自动生成文件的. R.java 存放res文件夹下对应资源的id project.properties: 指定当前工程采用的开发工具包的版本 libs: 当前工程所依赖的jar包. assets: 放置一些程序所需要的媒体文件. bin: 工程的编译目录. 存放一些编译时产生的临时文件和当前工程的.apk文件. res(resources): 资源文件. drawable: 存放程序所用的图片. layout: 存放android的布局文件.

【Android快速入门2】拨号器的实现

拨号器是个很简单的布局,用来做Android的入门最好不过. 本程序给予Android API19编译实现,因此是新版布局.不习惯的请注意. 截图下次我有空补上. 1.Java主程序: public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC

bash shell编程快速入门教程

Shell 俗称壳(用来区别于核),是指"提供使用者使用界面"的命令解析器(软件).它类似于DOS下的command和后来的cmd.exe.它接收用户命令,然后调用相应的应用程序. 同时,Shell又是一种程序设计语言.作为命令语言,它交互式解释和执行用户输入的命令,或者自动地解释和执行预先设定好的一连串的命令.Shell不像C/C++等语言,它不需要编译就能执行.作为程序设计语言,Shell 定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. UNIX系

kubernetes系列教程(三)kubernetes快速入门

写在前面 kubernetes中涉及很多概念,包含云生态社区中各类技术,学习成本比较高,k8s中通常以编写yaml文件完成资源的部署,对于较多入门的人来说是个较高的门坎,本文以命令行的形式代理大家快速入门,俯瞰kubernetes核心概念,快速入门. 1. 基础概念 1.1 集群与节点 kubernetes是一个开源的容器引擎管理平台,实现容器化应用的自动化部署,任务调度,弹性伸缩,负载均衡等功能,cluster是由master和node两种角色组成,其中master负责管理集群,master节