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,
在这里插入图片描述
也就是说该问题的解是,不打领带,穿衬衫

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

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
8皇后问题是一个经典的问题,其目标是在8x8的棋盘上放置8个皇后,使得每个皇后都不会互相攻击,即它们不在同一行、列或对角线上。可以使用命题逻辑和minisat求解器来找出8皇后问题的所有解,步骤如下: 1. 定义命题变量 将棋盘的每个位置看作一个命题变量,如果该位置上放置了皇后,则该命题变量为真,否则为假。可以使用以下命题变量表示一个8x8的棋盘: p11, p12, p13, p14, p15, p16, p17, p18, p21, p22, p23, p24, p25, p26, p27, p28, p31, p32, p33, p34, p35, p36, p37, p38, p41, p42, p43, p44, p45, p46, p47, p48, p51, p52, p53, p54, p55, p56, p57, p58, p61, p62, p63, p64, p65, p66, p67, p68, p71, p72, p73, p74, p75, p76, p77, p78, p81, p82, p83, p84, p85, p86, p87, p88 2. 定义限制条件 要满足8皇后问题的限制条件,需要定义以下几个限制条件: (1)每行只能有一个皇后。 可以使用以下限制条件来表示每行只能有一个皇后: (p11 ∨ p12 ∨ p13 ∨ p14 ∨ p15 ∨ p16 ∨ p17 ∨ p18) ∧ (p21 ∨ p22 ∨ p23 ∨ p24 ∨ p25 ∨ p26 ∨ p27 ∨ p28) ∧ (p31 ∨ p32 ∨ p33 ∨ p34 ∨ p35 ∨ p36 ∨ p37 ∨ p38) ∧ (p41 ∨ p42 ∨ p43 ∨ p44 ∨ p45 ∨ p46 ∨ p47 ∨ p48) ∧ (p51 ∨ p52 ∨ p53 ∨ p54 ∨ p55 ∨ p56 ∨ p57 ∨ p58) ∧ (p61 ∨ p62 ∨ p63 ∨ p64 ∨ p65 ∨ p66 ∨ p67 ∨ p68) ∧ (p71 ∨ p72 ∨ p73 ∨ p74 ∨ p75 ∨ p76 ∨ p77 ∨ p78) ∧ (p81 ∨ p82 ∨ p83 ∨ p84 ∨ p85 ∨ p86 ∨ p87 ∨ p88) (2)每列只能有一个皇后。 可以使用以下限制条件来表示每列只能有一个皇后: (p11 ∨ p21 ∨ p31 ∨ p41 ∨ p51 ∨ p61 ∨ p71 ∨ p81) ∧ (p12 ∨ p22 ∨ p32 ∨

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值