Goal
Implement WalkSAT algorithm that solve the CNF Boolean formula.
Implement Encoder that generate CNF notation for N-Queen for given
Using both module to solve N-Queen problem.
First, What's CNF(Conjunctive Normal Form)?
Conjunctive normal form : conjunction of clauses, where clause is a disjunction of literal.
Eg.
WalkSAT Algorithm
To slove Boolean satisfiability problems.
For given conjunctive normal form, it finds variable assignments that satisfies all clauses.
Algorithms
- Set random value to every literal
- Until every clause satisfies(maximum 10,000 times)
a. Pick a random unsatisfied clause
b.Select a variable from that clasue
-50%: Flip the variable that makes best result
-50%: Flip random variable
来点中文了解一下背景知识
什么是布尔可满足性问题
"
这是一个计算科学里的理论问题。让我试试看能不能用通俗的语言把它说清楚。计算机里的位变量都是布尔变量,只取值0或1。两个布尔变量之间的运算只有“与”“或”“非”,表示为“∧”“∨”“¬”。你能猜到 1∧0=0,1∨0=1,¬1=0。现在我有一个包含许多变量的表达式,例如:x∨y∧¬z,我问:这个表达式能等于1吗?如果能,x,y,z分别等于什 么,表达式就等于1,就说这个表达式被满足了。这就是布尔可满足性(简称SAT)问题。但是,你要允许变量个数可以任意,表达式可以任意长。这个问题是一 个计算复杂性很高的问题,已经证明它基本上是一个多项式复杂性算法不可解决的问题。这句话,我无法用通俗的语言来说明。但是没有关系,你只要知道这问题没 有一般的简单算法来彻底解决。本文要说的是:这个问题有实际意义,而且最近在算法上有进展和应用。
"
布尔可满足性问题有什么用呢?
"
布尔可满足性问题的扩张就是优化问题。如果变量的取值不只有0和1,目标函数的取值也不只是0和1,而是取最大或最小,而约束条件可以表示为若干个表达式。我们的问题是寻找变量的一组值,在满足约束条件下,目标函数取值最大或最小。这不就是优化问题吗?
布尔可满足性问题有许多应用,许多问题都可以归结为SAT。特别是在集成电路的设计与测试中,到处都是。例如,看两个逻辑函数f1,f2是否等价,只要判断(f1∧¬f2)∨(¬f1∧f2)是否永远不可满足。
"
WalkSat 是用于求解布尔可满足性问题(boolean satisfiability problems)
的局部搜索算法。
算法需要将问题表示为/或转化为合取规范形式(conjunctive normal form)。
算法的基本框架为:
(1)为合取式中的每个变量赋以一个随机值;
(2)如果该赋值满足所有的子句(clauses),则算法结束,并返回该赋值;
(3)否则,选择某个变量并重新对其赋值,然后重复上述过程。