Week 4 - CSP

advertisement
CS188 – Week 4 Discussion Note
Nuttapong Chentanez
Constraints Satisfaction Problem (CSP)
Set of variables: X1, X2, …. , Xn
Each variables has a non-empty domain Di of possible values
Set of constraints: C1, C2, …., Cm involve some subset of variables
Consistent assignment, Complete assignment
Solution = Complete & Consistent assignment
How to solve CSP?
Pick a variable, then pick a value that is consistent, go to the next variable, until all
variables are assigned or consistent assignment does not exist. Does the order of variable
chosen matter? How many possible assignments (in term of |Di| )?
Pseudo-Code
CSP-solve(numUnassigned)
If (numUnassigned == 0):
Found = True;
Solution = (X1, …., Xn)
Done
Pick an unassigned variable, Xi
Pick a consistent value from di remaining Di
If (can’t): return
Xi = di
PruneDomains()
CSP-solve(numUnassigned – 1)
Xi = unassigned
CSP-wrapper()
Set X1 … Xn to unassigned
Found = False
CSP-solve(n)
Heuristics for solving CSP
Picking variables:
1. Minimum remaining values (MRV) – Pick variable with smallest number of values it
can be, that still consistent. Why? Will make it fail fast. Why we want to fail fast? Better
know sooner than later. Example: X1 with 2 different values left {1,2}, X2 with 100
different values left {1,..100}, X3 with 50 different values left {0,..49}. Constraint: X2
and X3 has to be < X1 . If choose X1 first, will eliminate lots of possibility for X2 and X3
2. Degree Heuristic – Pick variable that involves in largest number of constraints. Why?
Rule out most possibility fast (if no-solution exist, will fail fast. If solution exist, will find
one fast) Will likely to conflict with other variable and hence fail fast. Example: X0 can
be {1,2}. Must be same as X1, X2, X3 {1,3} Star graph. Picking X0 = 1 will force X1, X2,
X3 to be 1 quickly.
Picking value for a variable:
1. Least-constraining value. Pick Xi that rules out fewest choices for neighboring
variables in the constraint graph. Why? We want to pick value that will likely to find
solution. (We don’t want to fail anymore.) Can someone tell me why this is different
from when you pick variable? The reason is that we need to try all consistent values for
this variable anyway (in case no solution exist), so we would pay the same price anyway.
But if sol exist, we want to find it fast.
Pruning (Constraint Propagation) – Early detection of failure that can be implied
(cheaply) from current assignment of variables.
Forward Checking:
When assign Xi, look at each unassigned variable Xj that is connected to Xi, delete the
value of Xj that inconsistent with the chosen value of Xi. If any empty, fail immediately.
If one value left, assign the value to Xj and then check the neighbors of Xj. When would
this be useful? Will help detecting inconsistent assignment faster. Eg. Same example as
Degree Heuristic. If we pick X0 = 2, will fail immediately without having to get to the
assignment of X1, X2, X3
Arc Consistency for (Xi Xj):
(Xi  Xj) is consistent if for every value of Xi there is some value of Xj that is consistent
What’s the cost of checking if (Xi  Xj) is consistent, in terms of |Di|, |Dj|? |Di| |Dj|
Does Xi  Xj implies Xj Xi ? No. Example? X1 < X2 , X1 {1,3} X3  {0,7}
How can we use this information? Eliminate inconsistency to reduce domain size
When to check for Arc Consistency? Every time we assign a value to a variable Xi, check
all arc Xk  Xi. If we reduce domain of some Xk, then need to check Xq Xk as well.
AC-3
This improves the performance of the algorithm significantly.
A partial assignment is arc-consistent if all arcs are consistent.
k-consistency of a CSP:
If for any consistent assignment to a subset of size k-1 of variables, it’s possible to assign
the value of the kth variable consistently. How to check? |Di||Dj||Dk| bruteforce
Strongly k-consistent, if is 1..k consistent. If we know a CSP is strongly n-consistent,
how to solve CSP, at what cost? O(N*max|Di|) for each Xj just find value from Dj that
consistent with all previously assigned variables
Can use k-consistent to reduce domain, but can be costly.
Problems:
(Modified from a homework from AI class of U of Pittsburgh)
Each variable can be {0..9}. The edge between variables (a,b) with label C indicates the
constraints (a mod C == b mod C)
List the variables, domain, and binary constraints:
List the remaining possible values of each variable that can be inferred after the
assignment of {x = 2, y = 0, t = 0} by
1. Forward checking
When x = 2, z in {2,5,8}
When y = 0, z = 5, so w in {1,5,9}
When t = 0, v = 0, so u in {0, 3, 6, 9}
So x=2, y = 0, t = 0, z = 5, v = 0, w in {1,5,9}, u in {0,3,6,9}
2. Arc consistency
Everything forward checking can do, arc consistency can do as well: x=2, y = 0, t = 0, z
= 5, v = 0, w in {1,5,9}, u in {0,3,6,9}
Check wu, If w = 1, u must be 1,4,7. not true, hence w can’t be 1
Now w in {5,9}. If w = 5, u in {2,5,8}. not true, hence w can’t be 5
So w = 9.
So x = 2, y = 0, t = 0, z = 5, v = 0, w = 9, u in {0, 3, 6,9}
Find one solution to this CSP
From arc consistency, we can pick u to be 0 or 3 or 6 or 9 and then done
Converting Arbitrary Constraints to Binary Constraints
Cryptography
SEND
MORE
====
MONEY
Write the variables, the domains and the constraint graph. Annotate each constraints.
Convert this problem into binary constraints. Ideas? How many variables you need to
introduce? What are their domains? Constraints?
Download