Constraint Satisfaction Not all problems are solved by a sequential series of steps. How do we solve other types of problems?
Problem structure • Some problems are structured such that you need to make a proper sequence of moves to solve the problem • Driving a car • Missionaries and cannibals • Not all are, though. For some, what matters is the end goal, not how you get there • 8 queens • Choosing a college
Constraint satisfaction problems • In CSPs, we are simply looking for a solution to the problem where a set of variables all have values that are valid within the set of constraints that defines the goal state. • Examples: • Map coloring • Cryptarithmetic
Searching in CSPs • Because the order of moves doesn’t matter, “searching” in a CSP is very different. • Instead of searching a tree that is essentially pre-defined, with each level representing a move, now we search a tree we generate, where each level contains the possible values for the variables.
How best to search? • One way of searching a CSP is to use our previous search algorithms. • The first step is to pick a value for one of the variables. • The next step picks a value for another variable, etc. • Problem: For the first level, the number of child nodes is the number of variables the average number of values per variable. • This creates a tree with a huge number of nodes! Way more nodes than all the possible combinations.
Efficient searching in CSPs • Clearly, we only gain a benefit over testing all possible variable-value combinations if we check fewer nodes than that. • The easiest way is to have each level in the search tree correspond to assigning a value to only one variable. • But how do we decide which variable to use first? • This is an important question because if we choose poorly, we may over constrain ourselves • The goal should be to find a choice that both minimizes branchiness, while leaving us with the most options (depth).
Minimum Remaining Values • Choose the remaining variable with the least number of possible values. • Minimizes branchiness because this variable will have the fewest branches at a given depth of the tree. • Unclear how it affects depth since it doesn’t take into account how this choice affects other variables.
Degree heuristic • Choose the one that is involved in the largest number of other constraints. • Reduces branchiness by pruning the number of possibilities for other variables • Can over-prune, so works best when used primarily to break ties in the MRV heuristic
Least-constraining value • Once we’ve chosen a variable, how do we choose a value? • Choose the value that rules out the fewest choices (prunes the fewest branches from the tree).
Forward checking • So far, we’ve only looked at constraints at the time we chose a particular variable-value combination. • Wouldn’t it be easier to look ahead and see the results of given choices on the constraints? • Forward checking works by, every time we choose a value for a variable, it eliminates the values for other variables that conflict with that constraint. • In combination with MRV, yields the most efficient constraint satisfaction system.