CSCE 420 Lecture 8
« previous | Thursday, February 7, 2013 | next »
Constraint Satisfaction Problems (CSP)
- Set of variables, say through
- finite domains, say
- constraints: limits on combinations of choices:
- is even, i.e.
Extensional definition of binary constraints
- Involves and
- Allowed combinations is a subset of dom() × dom()
Constraint Graph
- Nodes = edges
- Edges = binary constraints
Multivariable Constraints
- Subset of tuples from cross products of all domains:
Converting Multivariable Constraints to Binary Constraints
If a constraint depends on more than two variables, we introduce a new variable whose domain consists of tuples. Each component corresponds to a variable, and the values represent consistent combinations of the domain of other variables.
Edges specify dependence of elements with their target variables.
Example
Given the constraint satisfaction problem among X, Y, and Z, we introduce another variable U with domain dom(U) ⊆ dom(X) × dom(Y) × dom(Z). The resulting binary constraint graph is visible at right.
domains:
constraints:
We introduce a third variable U to represent the tertiary constraint in (1), and the corresponding constraints with other variables.
Map Coloring
No adjacent regions can have the same color
Australia, for example, has the following states:
- Western Australia
- Northern Territory
- Victoria
- New South Wales
- South Australia
- Tasmania
- Queensland
Variables are states: { WA, NT, V, NSW, SA, T, Q }
Domain of each variable is colors: { R, G, B }
Extensional binary constraints:
- WA ≠ NT: { (R,G), (R,B), (G,R), (G,B), (B,R), (B,G) }
Sudoku
No digits may be repeated in any row, column, or section
Variables are cells
Domain of each cell is digits 0–9
Other Problems
- Crossword Puzzles
- Time scheduling
CSP Algorithms
Search space = partial assignments. Goal is a set of complete assignments (all variables have a value) that satisfies all constraints
Operator: choose value for unassigned variable
- When generating children, we can see whether chosen assignment violates constraints and prune that part of the decision tree.
Back Tracking
def backtrack(csp, assignment = {})
# check completeness of assignment
return assignment if assignment.size == csp.vars.size and csp.constraints.all { |c| c(assignment) }
# select variable
var = (csp.vars - assignment.keys).sample
csp.domain[var].each do |value|
if csp.constraints.all { |constraint| constraint(assignment) }
assignment[var] = value
result = bt(csp, assignment)
return result if result
assignment.delete(var)
end
end
# return failure if no assignments were found
false
endNot very efficient
Next Time
- Minimum remaining values (MRV)
- Least constraining value (LCV)
- Forward Checking