Upload
palmer
View
31
Download
0
Tags:
Embed Size (px)
DESCRIPTION
(baby) Bio. I am Patrick Prosser I am a senior lecturer at Glasgow I teach AF2 & CP4 I am a member of the algorithms group the apes (distributed, not disbanded) I am a Glaswegian. This is all that I am allowed to tell you. 10 years of conflict-directed backjumping. - PowerPoint PPT Presentation
Citation preview
• I am Patrick Prosser• I am a senior lecturer at Glasgow • I teach AF2 & CP4• I am a member of
• the algorithms group• the apes (distributed, not disbanded)
• I am a Glaswegian
This is all that I am allowed to tell you
(baby) Bio
10 years of conflict-directed backjumping
CI 9(4)
Hybrid Algorithms for the
Constraint Satisfaction
Problem• Still using that old greasy stuff?• Who cares?• So?
Patrick Prosser
Plan of the talk
• What’s a csp?• The simplest algorithm (BT) and its behaviour• Some improvements (BJ, GBJ)• A better way (CBJ)• Improvements to CBJ• Strange things about CBJ
• k-inconsistencies• the bridge and the long jump• value ordering and insolubility
• So, what about CBJ?• some say its good• some say it’s a waste of time• who’s using it• who’s not using
• Where’s it going• QBF?
What’s a csp?
• a set of variables• each with a domain of values• a collection of constraints (I’m going to assume binary)• assign each variable a value from its domain to satisfy the constraint
<V,D,C>
Example of a csp
CE
D
B
F
A
G
H
3 colour me!
Example of a csp
CE
D
B
F
A
G
H
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Why did it do that?That was dumb!
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
Example of a csp
CE
D
B
F
A
G
H
Va
Vb
Vc
Vd
Ve
Vf
Vg
Vh
1 = red2 = blue3 = green
Variables and Instantiation OrderChecking back
That was good old fashioned chronological backtracking
• instantiate a variable• check current against past variables to see if okay
• current? past? Future?• If not okay try another value• If no values left go back to previous variable
Example of a csp
CE
D
B
F
A
G
H
1 = red2 = blue3 = green
E1
E2
E3
E4
What would have happened if we had the E* intermediate variables?i.e. it falls back on E4, then E3, towards E?
It’s all just depth first search, right?
BT Thrashes!
past
future
current variable v[i]
conflict with v[h]
past variable v[h]
future variable v[j]
BT
Assume that when we instantiate the current variablev[i] we check against all past variables from v[1] to v[i-1]to check if consistent
consistent := falsefor x in domain[i] while not(consistent) // find a consistent valuebegin consistent := true v[i] := x for h in (1 .. i-1) while consistent // check backwards begin consistent := (check(v[i],v[h]) end if not(consistent) then delete(x,domain[i])end // did we find a good value?
John Gaschnig’s BJ
Make a small modification to BT. Remember the last variable we check against
If the loop terminates with consistent falsethen jump back to v[h], where h := lastCheck[i]This is then the deepest variable we failed against
consistent := falsemaxCheck[i] := 0for x in domain[i] while not(consistent) // find a consistent valuebegin consistent := true v[i] := x for h in (1 .. i-1) while consistent // check backwards begin consistent := (check(v[i],v[h]) maxCheck := max(h,maxCheck[i]) end if not(consistent) then delete(x,domain[i])end // did we find a good value?
John Gaschnig’s BJ
If the loop terminates with consistent true ...lastCheck[i] = i-1we then step back!
consistent := falsemaxCheck[i] := 0for x in domain[i] while not(consistent) // find a consistent valuebegin consistent := true v[i] := x for h in (1 .. i-1) while consistent // check backwards begin consistent := (check(v[i],v[h]) maxCheck := max(h,maxCheck[i]) end if not(consistent) then delete(x,domain[i])end // did we find a good value?
BJ jumps then steps back. It can only jump after it has moved forwards!
BJ reduces thrashing
1
2
3
4
5
6
maxCheck[i]
0
1
2
3
4
4
Jump back to v[4]then step back
Rina Dechter’s GBJ
If there are no values remaining for v[i]Jump back to v[h], where v[h] is the deepest variable connected to v[i] in the constraint graph
If there are no values remaining for v[h]Jump back to v[g], where v[g] is the deepest variable connected to v[h] or v[i] in the constraint graph
If there are no values remaining for v[g]Jump back to v[f], where v[f] is the deepest variable connected to v[g] or v[h] or v[i] in the constraint graph
Graph-based backjumping, exploits topology of constraint graph
What happens if constraint graph is a clique?
We want something that can jump and jump again,something that takes into consideration what causeda dead-end, not something that just looks at thetopology of the constraint graph
Combine BJ and GBJ
CBJ Remember your conflicts, and when you have used them forget them.
When we instantiate v[i] := x and check(v[i],v[h]) and it fails
• v[i] is in conflict with v[h]• add h to the set confSet[i]
confSet[i] is then the set of past variables that conflictwith values in the domain of v[i]
CBJ
If there are no values remaining for v[i]Jump back to v[h], where v[h] is the deepest variable in conflict with v[i]The hope: re-instantiate v[h] will allow us to find a good value for v[i]
Conflict-directed backjumping, exploits failures within the search process
What happens if: constraint graph is dense, tight, or highly consistent?
If there are no values remaining for v[h]Jump back to v[g], where v[g] is the deepest variable in conflict with v[i] or v[h]The hope: re-instantiate v[g] will allow us to find a good value for v[i] or a good value for v[h] that will be good for v[i]
If there are no values remaining for v[g]Jump back to v[f], where v[f] is the deepest variable in conflict with v[i] or v[h] or v[g]The hope: re-instantiate v[f] will allow us to find a good value for v[i] or a good value for v[h] that will be good for v[i] or a good value for v[g] that will be good for v[h] and v[i]
CBJ
consistent := falseconfSet[i] := {0}for x in domain[i] while not(consistent) // find a consistent valuebegin consistent := true v[i] := x for h in (1 .. i-1) while consistent // check backwards begin consistent := (check(v[i],v[h]) if not(consistent) then confSet[i] := confSet[i] {h} end if not(consistent) then delete(x,domain[i]) end
CBJ
When jumping back from v[i] to v[h] update conflict sets
confSet[h] := confSet[h] confSet[i] \ {h}confSet[i] := {0}
That is, when we jump back from v[h] jump back to a variable that is in conflict with v[h] or with v[i]
Throw away everything you new on v[i]
Reset all variables from v[h+1] to v[i] (i.e. domain and confSet)
CBJ
1
2
3
4
5
6 {4,1,0}
{2,0}
conflict set
CBJ
1
2
3
4
5
6
{2,1,0}
conflict set
CBJ (reduce thrashing)
1
2
3
4
5
6
{2,1,0}
Jump back to deepest past variablein confSet (call it h) and then combine confSet[i] with confSet[h]
•History: •Konkrat and V Beek,•Gent and Underwood
Forward Checking
1
2
3
4
5
6
7
9
8
NOTE: arrows go forward!
1
2
3
4
5
6
7
9
8
Check Forwards, Jump Back!
1
2
3
4
5
6
7
9
8
•There are no values in cd[6] compatible with v[9]• get more values into cd[9] (undo v[1]?) OR• get more values into cd[6] (undo v[4])
• … and if that doesn’t work? undo v[3] so cd[4] gets value compatible with cd[6] that is then compatible with cd[9]
CBJ Variants
BM-CBJ, FC-CBJ, MAC-CBJ
CBJ DkC
If we jump from v[i] to v[h] and confSet[i] = {0,h}then remove value(v[h]) from domain(h)value(v[h]) is 2-inconsistent wrt v[i]
If we jump from v[h] to v[g] and confSet[h] = {0,g}then remove value(v[g]) from domain(g)value(v[g]) is 3-inconsistent wrt v[i] and v[h]
If we jump from v[g] to v[f] and confSet[g] = {0,f}then remove value(v[f]) from domain(f)value(v[f]) is 4-inconsistent wrt v[i] and v[h] and v[g]
What happens if the problem is highly consistent?See JAIR 14 2001, Xinguang Chen & Peter van Beek
CBJ ATMS
If we jump from v[i] to v[g] and confSet[h] {0 .. g-1}then do NOT reset domain(h) and do NOT reset confSet(h)
Consider the past variables as assumptions and confSet[i]as an explanation
Down side, we have more work to do.This is a kind of learning (what kind?)
CBJ ~ DB
confSet[x,i] gives the past variable in conflict with v[i] := x
Finer grained:on jumping back we can deduce better what values to return to domains
Down side, we have more work to do.This is an algorithm between CBJ and DB
The bridge and the long jumpFunny things about cbj
Funny things about cbj Value ordering on insoluble problems can have an effect
Problem: V1 to V7, each with domain {A,B} nogoods {(1A,7A),(3A,7B),(5A,7B),(6A,7A),(6A,7B),(6B,7A),(6B,7B)}
Var Val confSetV1 AV2 AV3 AV4 AV5 AV6 AV7 A/B {1,3}
Var Val confSetV1 AV2 AV3 BV4 AV5 AV6 AV7 A/B {1,5}
Var Val confSetV1 AV2 AV3 BV4 AV5 BV6 AV7 A/B {6}
Var Val confSetV1 AV2 AV3 BV4 AV5 BV6 BV7 A/B {6}
Finally V6 has no values and cbj jumps to V0
Funny things about cbj Value ordering on insoluble problems can have an effect
Problem: V1 to V7, each with domain {A,B} nogoods {(1A,7A),(3A,7B),(5A,7B),(6A,7A),(6A,7B),(6B,7A),(6B,7B)}
Var Val confSetV1 BV2 BV3 BV4 BV5 BV6 BV7 A/B {6}
Var Val confSetV1 BV2 BV3 BV4 BV5 BV6 AV7 A/B {6}
Finally V6 has no values and cbj jumps to V0
We now order domains and choose B then A!
Value ordering made a difference to an insoluble problem!
Conflicting claims
Bessier & Regin CP96: CBJ is nothing but an overhead random problems as evidence
Smith & Grant IJCAI95: CBJ helps minimise occurrence of EHP’s random problems as evidence
Chen & van Beek JAIR 2001: CBJ is a tiny overhead When it makes a difference it is a HUGE difference random & real problems as evidence
New CBJ
I believe all state of the art sat solvers are using cbj(or have rediscovered cbj but don’t know it)
CBJ for QSAT: see recent AIJconflict and solution directed!
Who is not using cbj?
Constraint programming!
We don’t jump and we don’t learn
Is speed everything?
No
How about explanations and retraction?
Why is cbj not in CP?
Need to propagate laterally (see MAC-CBJ tech report)but this is no big deal
Need to get explanations out of constraints!
Not just writing a good constraint propagator but a good constraint explainer!
Maybe there is not yet the demand for retraction and explanation(but I don’t believe that)
So?• Paper rejected from IJCAI91 (written in 1990)• I was a Lisp programmer at the time (it shows)• I think the experiments were very good (so there!)• Nice study of influence of topological parameter on search cost.• In conclusion I forgot to say CBJ was new … why?• I like BMJ, it is cool (I was smart for 1 day)• I think CBJ is pretty (natural, discovered, not invented)• I like FC-CBJ (I can understand it)• I identify work to be done (researchers love that (why?))• … and I make errors re-dvo’s (researchers love that (why?))• I put my results in perspective (trash them :)• I got encouragement (Nadel) and help (Ole and Peter)• I got a whole load of background (Rina)• But it hurt … why did it take 3 years to get somebody to read it?• It is still alive! We are not done yet.