Minisat的基本使用方法

minisat安装和基本知识

SAT问题即布尔可满足性问题,是确定给定逻辑电路是否具有其输入的赋值使输出正确的决策问题。换句话说,它询问给定布尔电路的输入是否可以设置为1或0,以使该电路输出1。在这种情况下,该电路称为“可满足的”。否则,电路称为“不满足”。

MiniSat是一种简约的开源SAT解算器,旨在帮助研究人员和开发人员开始使用SAT,目前在许多项目中使用。在此页面上minisat,您将找到与MiniSat相关的二进制文件,源代码,文档和项目,包括伪布尔求解器MiniSat +和CNF最小化器/预处理器SatELite。

Linux下安装方法sudo apt install minisat,命令行键入minisat,出现以下界面即为安装成功
在这里插入图片描述
命令行键入minisat --help查看minisat的基本使用方法:
在这里插入图片描述
使用:minisat [指令选项] 输入文件名 输出文件名
指令选项:minisat --help 下面给出的一大串都是,目前我也没用过
输入文件:输入文件必须是特殊的CNF格式文件,最好是以.cnf结尾,当然不以.cnf结尾也没关系(亲测有效),但是文件内容必须是特定的CNF格式编码
输出文件:任意文本文件。

minisat使用示例

例子:

  • 布尔变量:tie,shirt
  • 符号:非“~”,与“▲”,或“▼”
  • 子句(clause):
    clause1:讲员演讲时不能不穿衬衫,只打一个领带;~tie ▼ shirt
    clause2:讲员既不穿衬衫,也不打领带是不礼貌的;tie ▼ shirt
    clause3:讲员既穿衬衫,又打领带自己不舒服。~tie ▼ ~shirt
  • 问题:能找到一种满足上述的约束吗?
    (~tie ▼ shirt)▲(tie ▼ shirt)▲(~tie ▼ ~shirt)
    和之积形式,直观上可以看成一个数字电路
    解答:
    此时我们可以将该问题编写成CNF格式编码:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210408142732341.png

line1:p指的是project(我猜的),cnf指的是cnf编码,2指的是有两个变量,3指的是有三个约束子句。
line2

line3、line4、line5:负号代表该变量取反,无符号代表该变量取原变量,以0结尾

3、4、5行是这么理解:(-1 或 2)与(1 或 2)与(-1 或 -2),寻找满足该约束条件的一组解,接下来使用minisat求解:
在这里插入图片描述
在这里插入图片描述
结果是可满足的,则查看输出文件result.log,
在这里插入图片描述
也就是说该问题的解是,不打领带,穿衬衫

接下来,我们可以为该问题进一步添加约束,将刚生成的解编程约束添加进子句:
在这里插入图片描述
在这里插入图片描述
再次得到的结果是不满足的,因此该问题只有一个解

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值