编写算法解决NP问题中的Boolean Satisfiability问题。
Preamble
Boolean satisfiability (SAT) is the problem of deciding, via a yes or no
answer, if there is an assignment to the variables of a Boolean formula such
that the formula is satisfied (e.g., makes the formula “True”). Consider the
formula (a b) (a c). The assignment “b = True” and “c = False” satisfies the
formula.
Stephen Cook proved that SAT was NP-complete (nondeterministic polynomial
time) in 1971, thus becoming the first-known NP-complete problem. As an NP-
complete problem, SAT is a decision (yes/no) problem that when given a
solution, the solution can be verified in polynomial time. But, the problem of
finding a solution quickly (in polynomial time) is considered at least as hard
to solve as the hardest decision problem. NP-complete problems are of interest
to researchers because if any NP-complete problem can be solved quickly, then
every decision problem can be solved quickly.
Richard Karp’s subsequent paper, “Reducibility among combinatorial problems,”
generated renewed interest in Cook’s paper by providing a list of 21 NP-
complete problems. Cook and Karp received a Turing Award for this work. It is
interesting to note that Stephen Cook was denied tenure in 1970 by the
University of California, Berkeley. He then joined the faculty of University
of Toronto, Computer Science and Mathematics Departments as an associate
professor, where he was promoted to professor in 1975 and Distinguished
Professor in 1985. In a speech celebrating the 30th anniversary of the
Berkeley EECS department, fellow Turing Award winner and Berkeley professor
Richard Karp said that, “It is to our everlasting shame that we were unable to
persuade the math department to give him tenure.”
Despite the inherent inefficiency of algorithms to solve Boolean
satisfiability problems, Martin Davis, Hilary Putnam, George Logemann, and
Donald W. Loveland developed a solution using a backtrackingbased search
algorithm in 1962 (the DPLL algorithm), which is still the basis for the most
efficient complete SAT solvers today. SAT is useful for many practical
applications, such as model-checking (e.g., does a model match its
specifications), automated reasoning (e.g., theorem proving), and determining
whether a solution exists to a combinatorial search problem.
It is also used in AI planning, which is described as follows. Given a
description of possible initial states of the world, a description of the
desired goals, and a description of a set of possible actions, the planning
problem is to find a plan that is guaranteed to generate a sequence of actions
from any of the initial states that leads to one of the goal states. Outside
of AI, SAT is also useful for determining whether two logic circuits are
equivalent, allowing circuits to be simplified.
As a practical example, consider the following constraints:
- Kelly must schedule a meeting with John, Catherine, Ann, and Peter.
- No one is willing to meet on a weekend.
- John can only meet either on Monday, Wednesday, or Thursday.
- Catherine cannot meet on Wednesday.
- Anne cannot meet on Friday.
- Peter cannot meet on Tuesday or on Thursday.
- Question: When can the meeting take place?
This can be encoded into the following Boolean formula:
¬Sat ∧ ¬Sun ∧ (Mon ∨ Wed ∨ Thu) ∧ (¬Wed) ∧ (¬Fri) ∧ (¬Tue ∧ ¬Thu)
Thus, the meeting can only take place on Monday.
Assignment
Convert to CNF
Since SAT solvers typically only accept formulas in Conjunctive Normal Form
(CNF), your first task is to develop an algorithm that, given an input
formula, converts it to CNF, and outputs the formula in clause form. For
example, given the input formula A v (B ^ C), the equation would be converted
to CNF, giving (A v B) ^ (A v C) and output that in clause form {(A,B),(A,C)}.
Proof by Refutation
Given a set of premises and a conclusion, your next task is to determine
whether the conclusion logically follows from the premises. You will need to
convert premises and the conclusion to CNF, then implement the DPLL algorithm
to solve the problem. Premises will be on separate lines, and the line
containing the conclusion will begin “Therefore, “ and end with a period “.”
For instance, a sample input could be:
A v (B ^ C)
C
Therefore, B.
The output from your program would either be, “The conclusion follows
logically from the premises,” or “The conclusion does not follow logically
from the premises.”
Three-coloring problem
Given a set of edges in a graph, your third task is to solve the threecoloring
problem. This problem is as follows. Given a map, is it possible to color the
countries using three colors such that no two countries that are next to each
other have the same color? The countries are represented as nodes on a graph,
and the task is to assign values from a set of three possible colors (red,
green, or blue), such that no two nodes that are joined by an edge have been
assigned the same value. For this problem, the input is of the following form:
{(A,B),(A,C),(A,D),(B,C),(C,D)}, where each clause represents an edge. For
instance, there is an edge from A to B in this graph. The graph presented
looks like the following: This is an exmaple of a graph that can be three-
colored.
The output of your program will either be a solution to the problem (which is
unlikely to be a unique solution) or, “The graph cannot be three-colored.”
Since the example graph is satisfiable, a possible solution, and thus possible
output from your program, is “{AR, BG, CB, DG}”, where AR represents the fact
that A has been colored Red, BG represents that B has been colored Green, and
so on. Note that this isn’t the only solution. You only need to find one
solution. An implementation of DPLL will be needed for this program. This is
an example of a graph that cannot be three-colored. This graph is an example
of one that cannot be three-colored. The input to your program for this graph
would be {(A,B),(A,C),(A,D),(B,C),(B,D),(C,D)}. Your program would output,
“The graph cannot be three-colored.” Either spelling of colored / coloured is
acceptable.
Turn in the three programs
Turn in the three programs along with a technical document (which can be
combined in one document) and READMEs describing how to run the programs. You
will be graded on the quality of the technical document, but not on the
quality of the README (unless I can’t get your program to run using your
instructions). You can work in groups. I expect one submission per group. In
your submission, be sure to include the names and net IDs of all the group
members.
The technical document(s)
The technical document(s) should provide details about the algorithms you
implemented, along with each function and their purpose. The key things to
this document are that you explain your algorithm well and present it in the
best manner possible. The document is required because I allow any high-level
language.
Note
However, that PROLOG, Haskell, LISP, and similar languages are not allowed for
this assignment, as they would practically solve the problem for you. Use
high-level languages such as C, C++, C#, Java, JavaScript, PHP, Visual Basic,
MATLAB, etc. No matter which language you use, you (or your group) must
implement your own algorithms. You may certainly use example pseudocode, such
as the DPLL algorithm shown in this document, but you may not use someone
else’s full DPLL code/program.
Grading
There are four parts to the grading.
Part 1: Convert to CNF.
- a. Your CNF program will be run with several input formulas. You will be graded on the number of correct solutions.
- b. Part 1 is thus worth a maximum of 26 points.
Part 2: Proof by Refutation
- a. Your proof by refutation program will be run with several input statements (e.g., a set of premises with a conclusion). You will be graded on the number of correct solutions.
- b. Part 2 is thus worth a maximum of 26 points.
Part 3: Three-coloring Problem
- a. Your three-coloring program will be run with several input graphs (e.g., a set of edges). You will be graded on the number of correct solutions.
- b. Part 3 is thus worth a maximum of 26 points.
Part 4: Technical Document
- a. The fourth part is a grade on your technical document and algorithms. This is worth 22 points. I’ve weighted this less heavily this time since there is no competition component. The grade will include grammar, spelling, presentation quality, and the description of your algorithms. I should be able to know how your algorithms work.
The total points you can earn for this assignment is 100. This assignment is
17% of your total grade.