\documentclass{article}

\usepackage{amsmath}

\title{Notes on CSP}
\author{Will Guaraldi (et al)}
\date{version 1.1 10/10/2006}

\begin{document}
\maketitle


This document is a survey of the fundamentals of what we've covered 
in the course up to this point.

The information in this document was culled from a variety of sources:
meetings with Professor Lieberherr, research papers we've been given 
to read in class, Wikipedia, \ldots . \newline

\noindent \textbf{VERSIONS} \newline

\noindent version 1.1 (10/10/2006) - wbg (minor edits) \newline
Fixed an exponent that was a 5 and should have been an s.  Removed
a line from one of the itemized lists that was incomplete and
shouldn't have been there.  Moved the $ x = k/n $ to a better
place in the APPMEAN explanation. \newline

\noindent version 1.0 (10/10/2006) - wbg (major edits) \newline
Made a bunch of changes based on Professor Lieberherr's comments. \newline

\noindent version 0.5 (10/08/2006) - wbg (major edits) \newline
First write-up, csp information, precise, maxmean, and appmean.


%
% SECTION 1
%

\section{What is CSP?}

Constraint Satisfiability Problems are problems that are formed by a
series of constraints which must be satisfied by an assignment formed
of variables set to values.

\begin{figure}
  \begin{verbatim}
               CSP
             /     \
           /         \
       continuous     discrete
                    /         \
                  /             \
           Boolean         Other domains
          /   \                /    \
        /       \            /        \
      SAT      1-in-3      ...    Domain={1..9}
     / | \                                 \
   /   |   \                                 \
3-SAT  |    ...                           Sudoku
     2-SAT
  \end{verbatim}
  \caption{Sketch of CSP family}
\end{figure}

Our class so far has been concerned with the section of the tree
in \emph{figure 1} where the values are discrete (i.e. all whole 
numbers), the domain of values is boolean, and the rank of the
constraints is 3.

We talked briefly about CSP problems that are discrete where the
domain of values is not boolean.  One such example of this is
Sudoku.  We spent some time taking Sudoku and translating the 
problem so that it was discrete and the domain of values was
boolean.

I'll go through the section of the tree we're primarily concerned
with.


\subsection{Boolean}

Boolean CSP is any CSP problem where the domain of values is boolean.
For any variable in the CSP, you can set it to either true (1) or 
false (0).


\subsubsection{SAT}

SAT is a subset of CSP problems where:

\begin{enumerate}
\item the constraints are formed by literals that are connected by
  logical \emph{or}, and
\item the constraints are connected by logical \emph{and}, and
\item the domain of values is $ {0, 1} $
\end{enumerate}

The following terms are used when talking about SAT:

\begin{itemize}
\item \textbf{formula} - A specific instance of a CSP problem.  A
  formula consists of a series of clauses.

\item \textbf{clause} - A formula $ S $ is formed of clauses that
  are connected by logical \emph{and}.  \textbf{clauses} refer
  specifically to SAT whereas \textbf{constraints} refer to
  any CSP.  For SAT, these two terms are interchangeable.

\item \textbf{literal} - Clauses are formed of literals.  A literal
  has a variable and is either positive or negative.

\item \textbf{interpretation} - An interpretation is a list of
  variable to value assignments that solves the CSP.

\item \textbf{rank} - Rank refers to the number of literals in a clause.
  For example: \newline
  \begin{tabular}{l l}
    Or( x1 x2 x3 ) & rank 3 \\
    Or( x1 )       & rank 1 \\
    Or( x  y )     & rank 2
  \end{tabular}
  
\item \textbf{weight} - Sometimes the clauses we're working with have
  a weight associated with them.  For example: \newline
  \begin{tabular}{l l l}
    Or3( x1 x2 x3 ) & : 10 & weight 10 \\
    Or1( x1 )       & : 5  & weight 5 \\
    Or2( x y )      & : 2  & weight 2
  \end{tabular}
  
  Intuitively, a clause with a weight $ w $ is equivalent to having
  $ w $ of that clause in the formula of weight $ 1 $.

\item \textbf{3-SAT} - A 3-SAT problem is a SAT problem where the
  clauses are restricted to Rank 3 or less.  

  Some papers use the term ``3-SAT'' to refer to SAT problems where 
  clauses are of Rank 3, though some papers refer to this as 
  Exact-3-SAT.

\end{itemize}

SAT problems are usually shown using Conjunctive Normal Form (CNF).

Examples of SAT in CNF:

\begin{verbatim}
  X1  or X2  or !X13 or X4 or X10    AND 
  X21 or X22 or X23                  AND 
  !X32                               AND
  X14 or !X33                        AND ...
\end{verbatim}

Wikipedia adds that all of the following formulas are valid CNF:

\begin{verbatim}
  A or B
  !A or (B or C)
  (A or B) or (!B or C or !D) or (D or E)
  (!B or C)
\end{verbatim}

The following are \textbf{NOT} valid CNF:

\begin{verbatim}
  !(B or C)
  (A and B) or C
  A and (B or (D and E))
\end{verbatim}

In class, we've been using syntax like this:

\begin{verbatim}
  Or( x1 x2 !x3 ) and
  Or(    x2     ) and
  Or( x1    !x3 )
\end{verbatim}

\noindent or syntax like this where we explicitly specify the
type of the constraints:

\begin{verbatim}
  Or3( x1 x2 !x3 ) and
  Or1(    x2     ) and
  Or2( x1    !x3 )
\end{verbatim}

2-SAT and 3-SAT are SAT problems of rank 2 and rank 3 respectively.

Any problem can be reduced to a 3-SAT problem by adding new variables.


\subsubsection{One-in-three}

In the one-in-three CSP problem, only one literal in a clause can 
be set to 1:

\begin{verbatim}
  x1 + x2 + x3 = 1
  x1 + x5 + x6 = 1
  x2 + x8      = 1
  ...
\end{verbatim}

In order to maintain the equality, only one of the literals in each
clause can be equal to 1---the others have to be equal to 0.  For
example, if $ x1 $ and $ x2 $ were equal to $ 1 $, then we would have
this:

\begin{verbatim}
  x1=x2=1, x3=x5=x6=x8=0

  x1 + x2 + x3 = 1    unsatisfied
  x1 + x5 + x6 = 1    satisfied
  x2 + x8      = 1    satisfied
  ...
\end{verbatim}

In class, we've been using syntax for specifying one-in-three problems
that looks like this:

\begin{verbatim}
  OneInThree( x1 x2 x3 )
  OneInThree( x1 x5 x6 )
  OneInTwo(   x2 x8    )
\end{verbatim}

\noindent where the $ + $ and the $ = 1 $ are implied.



%
% SECTION 2
%

\section{SAT Solving}

SAT is the prototypical NP-complete problem.  However, we can 
approximate solutions that satisfy the maximum number of clauses 
in polynomial time.

Terminology:

\begin{itemize}

\item \textbf{MAXSAT} - A MAXSAT algorithm produces an interpretation 
  that satisfies the maximum number of clauses in a SAT formula.  

  If the clauses have weight, then a MAX algorithm produces an 
  interpretation that has the maximum weight of satisfied clauses 
  in the SAT formula.

  Similarly, a MAXCSP algorithm produces an interpretation that
  satisfies the maximum number of constraints in a CSP formula.

\item \textbf{MAX-3-SAT} - A MAX algorithm that operates on a 3-SAT
  problem.

\item \textbf{variable ordering} - For each variable, we pick an
  assignment that maximizes the potential solution.

\end{itemize}

Now we'll go through the algorithms we've used so far.


\newpage

\subsection{Homework 2: Precise}

Precise is a recursive algorithm that finds the maximum interpretation
(i.e. satisfying the maximum weight) of a given formula F.

Precise will return an interpretation I that satisfies the maximum
weight of the clauses in f.

The intuition for Precise is:

\begin{verbatim}
  P(f)
     if f has at least one unassigned variable x
        P(f[x=1])
        P(f[x=0])
\end{verbatim}

However, this version of Precise will traverse the entire search tree
of $ 2^n $ steps.

For Homework 2, we used a version of Precise that prunes sections of
the tree that we discover aren't worth traversing.

\begin{verbatim}
Input: formula F, interpretation I, weight of unsatisfied clauses WUC
Output: interpretation I and weight of unsatisfied clauses WUC

Before calling Precise the first time, do these setup steps:
   I = random assignment for all variables
   WUC = total weight of unsatisfied clauses in F using I

Then call Precise:

   I, WUC = Precise(F, I, WUC)


function Precise(F, I, WUC) returns I, WUC:
   if F is empty (everything is satisfied or unsatisfied):
      return I, WUC

   v = variable in F

   F' = F[v=1]
   I' = I[v=1]
   WUC' = total weight of unsatisfied clauses in F'
   if WUC' < WUC:
      I', WUC' = Precise(F', I', WUC')
      I = I'
      WUC = WUC'

   F' = F[v=0]
   I' = I[v=0]
   WUC' = number of unsatisfied clauses in F'
   if WUC' < WUC:
      I', WUC' = Precise(F', I', WUC')
      I = I'
      WUC = WUC'

   return I, WUC:
\end{verbatim}


\newpage

\subsection{Homework 2: MAXMEAN}

MAXMEAN is defined in the paper Partial Satisfiability SAT II.  I 
reprint it here, but you should refer to the original paper for 
specifics.

Note the invariants $ mean_{-1}(S) = mean_0(S) $ and 
$ mean_{n+1}(S) = mean_n(S) $.

\begin{verbatim}
max_assignment := 0
loop
   compute k such that:
   mean_k(S) = max (0 <= k' <= n) of mean_k'(S)

   for all variables x in S do:
      if mean_k-1(S[x=1]) > mean_k(S[x=0]):
         J[x] := 1,  k := k-1,  S := S[x=1]
      else:
         J[x] := 0,  S := S[x=0]

   h := SATISFIED(S, J)

   if h > max_assignment:
      max_assignment = h
   else:
      exit loop
end;
\end{verbatim}

\noindent where:

\begin{itemize}
\item \textbf{max\_assignment} is the best assignment we've found
  so far of variables to values.

\item \textbf{J[x]} is variable $ x $ in assignment $ J $.

\item \textbf{SATISFIED(S, J)} is the number of satisfied clauses
  in formula $ S $ using assignment $ J $.

\item \textbf{$ mean_k(S) $} is the average fraction of satisfied
  clauses in $ S $ among all assignments having exactly $ k $
  ones.

  Formally, $ mean_k(S) $ is calculated as:

  $$
  mean_k^n(\overrightarrow{t}) = \sum_{i=1}^{m} t_{R_i} SAT_k^N(R_i)
  $$

  \noindent where:

  \begin{itemize}
  \item $ R_i $ is a relation R

  \item $ t_{R_i} $ is the fraction of the clauses in $ S $ that are
    of relation $ R $.

  \item $ \overrightarrow{t} $ is the vector of $ t_{R_i} $.
  \end{itemize}

  $ SAT_k^N(R_i) $ is calculated as:

  $$
  SAT_k^n(R) = \sum_{s=0}^{r(R)} q_s(R) 
  \frac{(k)_s(n-k)_{r(R)-s}}{(n)_{r(R)}}
  $$

\end{itemize}

MAXMEAN uses the lines:

\begin{verbatim}
if mean[k-1](S[x=1]) > mean[k](S[x=0]):
   x = 1
else:
   x = 0
\end{verbatim}

\noindent to make the decision as to whether to set x to 0 or 1.  
This is called \textbf{value ordering}.


\newpage

\subsection{Homework 3: APPMEAN}

We can approximate $ mean_k^n $ (where $ 0 <= k <= n $)
using $ appmean_x $ (where $ 0 <= x <= 1 $ and $ x = k/n $).

\begin{eqnarray}
appmean_k( \overrightarrow{t} ) & = & \sum_{i=1}^m t_{R_i}
appSAT_x(R_i) \\
appSAT_x(R) & = & \sum_{s=0}^{r(R)} q_s(R) x^s (1-x)^{r(R)-s}
\end{eqnarray}

The parts are similar to $ mean_k(S) $ and $ appmean_k(S) $.

Intuitively, the computations for $ mean_k $ have the same structure 
as $ appmean_x $ where they're both computing a sum of operations on 
$ R_i $ and $ t_{R_i} $.

\end{document}
