Look Back Search - ai.dmi.unibas.ch · Backtracking is a basic algorithm used to solve a CSP...

Post on 11-Mar-2020

8 views 0 download

Transcript of Look Back Search - ai.dmi.unibas.ch · Backtracking is a basic algorithm used to solve a CSP...

Look Back Search

Cedric Geissmann

University Basel

October 31, 2014

Outline

1 Backtracking

2 BackjumpingGaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

3 LearningGraph-Based LearningConflict-Directed Learning

BacktrackingBackjumping

Learning

Backtracking

Backtracking is a basic algorithm used to solve a CSP

Backtracking has to explore every node in a search tree

Search space can be reduced by Look-ahead

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Motivation Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Motivation Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Motivation Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Motivation Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Motivation Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Motivation Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Motivation Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Motivation Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Dead-End

Definition (Dead-End)

A dead-end state at level i indicates that a current partialinstantiation ~ai = (a1, . . . , ai ) conflicts with every possiblevalue of xi+1.

(a1, . . . , ai ) is called a dead-end state, and xi+1 is called adead-end variable.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Dead-End Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Dead-End Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Leaf Dead-End

Definition (Leaf Dead-End)

Let ~ai = (a1, . . . , ai ) be a consistent tuple. If ~ai is in conflict withxi+1, it is called a leaf dead-end and xi+1 is a leaf dead-endvariable.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Culprit Variable

Definition (Culprit Variable)

Let ~ai = (a1, . . . , ai ) be a leaf dead-end.

The culprit index relative to ~ai is defined byb = min{j ≤ i | ~aj conflicts with xi+1}.We define the culprit variable of ~ai to be xb.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Culprit Variable Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Culprit Variable Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

No-Good

Definition (No-Good)

Given a network R = (X ,D,C )

Any partial instantiation a that does not appear in anysolution of R is called a no-good.

Minimal no-goods have no no-good subtuples.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Safe Jump

Definition (Safe Jump)

Let ~ai = (a1, . . . , ai ) be a leaf dead-end. xj is save when

j ≤ i and

~aj = (ai , . . . , aj) is a no-good

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Safe Jump Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping Algorithm

Gaschnig’s Backjumping Algorithm

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping Algorithm

i ← 1; D ′i ← Di ; latesti ← 0;

while 1 ≤ i ≤ n doinstantiate xi ← SELECT-VALUE-GBJ;if xi is null then

i ← latesti ;else

i ← i + 1; D ′i ← Di ; latesti ← 0;end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping Algorithm

i ← 1; D ′i ← Di ; latesti ← 0;

while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE-GBJ;if xi is null then

i ← latesti ;else

i ← i + 1; D ′i ← Di ; latesti ← 0;end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping Algorithm

i ← 1; D ′i ← Di ; latesti ← 0;while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE-GBJ;

if xi is null theni ← latesti ;

elsei ← i + 1; D ′i ← Di ; latesti ← 0;

end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping Algorithm

i ← 1; D ′i ← Di ; latesti ← 0;while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE-GBJ;if xi is null then

i ← latesti ;

elsei ← i + 1; D ′i ← Di ; latesti ← 0;

end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping Algorithm

i ← 1; D ′i ← Di ; latesti ← 0;while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE-GBJ;if xi is null then

i ← latesti ;else

i ← i + 1; D ′i ← Di ; latesti ← 0;

end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping Algorithm

i ← 1; D ′i ← Di ; latesti ← 0;while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE-GBJ;if xi is null then

i ← latesti ;else

i ← i + 1; D ′i ← Di ; latesti ← 0;end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping Algorithm

i ← 1; D ′i ← Di ; latesti ← 0;while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE-GBJ;if xi is null then

i ← latesti ;else

i ← i + 1; D ′i ← Di ; latesti ← 0;end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

SELECT-VALUE-GBJ

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

while D ′i is not empty do

select an arbitrary element a ∈ D ′i , and remove a from D ′i ;consistent ← true; k ← 1;while k < i and consistent do

if k > latesti then latesti ← k ;if not consistent(~ak , xi = a) then

consistent ← falseelse

k ← k + 1end

endif consistent then return a ;

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

while D ′i is not empty do

select an arbitrary element a ∈ D ′i , and remove a from D ′i ;

consistent ← true; k ← 1;while k < i and consistent do

if k > latesti then latesti ← k ;if not consistent(~ak , xi = a) then

consistent ← falseelse

k ← k + 1end

endif consistent then return a ;

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

while D ′i is not empty doselect an arbitrary element a ∈ D ′i , and remove a from D ′i ;

consistent ← true; k ← 1;

while k < i and consistent doif k > latesti then latesti ← k ;if not consistent(~ak , xi = a) then

consistent ← falseelse

k ← k + 1end

endif consistent then return a ;

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

while D ′i is not empty doselect an arbitrary element a ∈ D ′i , and remove a from D ′i ;consistent ← true;k ← 1;

while k < i and consistent doif k > latesti then latesti ← k ;if not consistent(~ak , xi = a) then

consistent ← falseelse

k ← k + 1end

endif consistent then return a ;

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

while D ′i is not empty doselect an arbitrary element a ∈ D ′i , and remove a from D ′i ;consistent ← true;k ← 1;while k < i and consistent do

if k > latesti then latesti ← k ;

if not consistent(~ak , xi = a) thenconsistent ← false

elsek ← k + 1

end

endif consistent then return a ;

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

while D ′i is not empty doselect an arbitrary element a ∈ D ′i , and remove a from D ′i ;consistent ← true;k ← 1;while k < i and consistent do

if k > latesti then latesti ← k ;if not consistent(~ak , xi = a) then

consistent ← false;

elsek ← k + 1;

end

endif consistent then return a ;

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

while D ′i is not empty doselect an arbitrary element a ∈ D ′i , and remove a from D ′i ;consistent ← true;k ← 1;while k < i and consistent do

if k > latesti then latesti ← k ;if not consistent(~ak , xi = a) then

consistent ← false;else

k ← k + 1;

end

endif consistent then return a ;

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

while D ′i is not empty doselect an arbitrary element a ∈ D ′i , and remove a from D ′i ;consistent ← true;k ← 1;while k < i and consistent do

if k > latesti then latesti ← k ;if not consistent(~ak , xi = a) then

consistent ← false;else

k ← k + 1;end

end

if consistent then return a ;

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE-GBJ

while D ′i is not empty doselect an arbitrary element a ∈ D ′i , and remove a from D ′i ;consistent ← true;k ← 1;while k < i and consistent do

if k > latesti then latesti ← k ;if not consistent(~ak , xi = a) then

consistent ← false;else

k ← k + 1;end

endif consistent then return a ;

end

return null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Gaschnig’s Backjumping

Jumps back to its culprit variable at leaf dead-ends.

Only performs safe jumps.

Performs a maximal jump but only in leaf dead-ends.

Uses simple backtracking on internal dead-ends.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Ancestor, Parent

Definition (Ancestor, Parent)

Ancestor set of a variable x

all variables that precede x

and are connected to x

The parent of a variable x

is the most recent variable in the ancestor set of x

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Ancestor Example

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Invistit, Session

Definition (Invisit, Session)

Invisit of xi

Processing a variable coming from an earlier variable.

Session of xi

starts on invisit of xi

ends when at least as high as xi

holds all variables processed since invisit of xi

xi is included in its session

See example on whiteboard.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Relevant Dead-Ends

Definition (Relevant Dead-Ends)

The relevant dead-ends of xi ’s session are

just xi if xi is a leaf dead-end.

the union of its current relevant dead-ends and the onesencountered in the session.

See example on whiteboard.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Induced Ancestors, Graph-Based Culprit

Definition (Induced Ancestors, Graph-Based Culprit)

The induced ancestor set of xi

is the union of all ancestors for every relevant dead-end in xi ’ssession.

The graph-based culprit

is the induced parent of xi

or the latest variable in xi ’s induced ancestor set.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Induced Ancestors, Graph-Based Culprit Examples

Example

I4({x4}) = {x1, x2}I4({x4, x6}) = {x1, x2, x3}

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Induced Ancestors, Graph-Based Culprit Examples

Example

I4({x4})

= {x1, x2}I4({x4, x6}) = {x1, x2, x3}

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Induced Ancestors, Graph-Based Culprit Examples

Example

I4({x4}) = {x1, x2}

I4({x4, x6}) = {x1, x2, x3}

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Induced Ancestors, Graph-Based Culprit Examples

Example

I4({x4}) = {x1, x2}I4({x4, x6})

= {x1, x2, x3}

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Induced Ancestors, Graph-Based Culprit Examples

Example

I4({x4}) = {x1, x2}I4({x4, x6}) = {x1, x2, x3}

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping Algorithm

Graph-Based Backjumping Algorithm

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping Algorithm

compute anc(xi ) for each xi ;

i ← 1; D ′i ← Di ; Ii ← anc(xi );while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE;if xi is null then

iprev ← i ; i ← latest index in Ii ; Ii ← Ii ∪ Iiprev − {xi};else

i ← i + 1; D ′i ← Di ; Ii ← anc(xi );end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping Algorithm

compute anc(xi ) for each xi ;

i ← 1; D ′i ← Di ; Ii ← anc(xi );

while 1 ≤ i ≤ n doinstantiate xi ← SELECT-VALUE;if xi is null then

iprev ← i ; i ← latest index in Ii ; Ii ← Ii ∪ Iiprev − {xi};else

i ← i + 1; D ′i ← Di ; Ii ← anc(xi );end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping Algorithm

compute anc(xi ) for each xi ;i ← 1; D ′i ← Di ; Ii ← anc(xi );

while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE;if xi is null then

iprev ← i ; i ← latest index in Ii ; Ii ← Ii ∪ Iiprev − {xi};else

i ← i + 1; D ′i ← Di ; Ii ← anc(xi );end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping Algorithm

compute anc(xi ) for each xi ;i ← 1; D ′i ← Di ; Ii ← anc(xi );while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE;

if xi is null theniprev ← i ; i ← latest index in Ii ; Ii ← Ii ∪ Iiprev − {xi};

elsei ← i + 1; D ′i ← Di ; Ii ← anc(xi );

end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping Algorithm

compute anc(xi ) for each xi ;i ← 1; D ′i ← Di ; Ii ← anc(xi );while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE;if xi is null then

iprev ← i ; i ← latest index in Ii ; Ii ← Ii ∪ Iiprev − {xi};else

i ← i + 1; D ′i ← Di ; Ii ← anc(xi );end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping Algorithm

compute anc(xi ) for each xi ;i ← 1; D ′i ← Di ; Ii ← anc(xi );while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE;if xi is null then

iprev ← i ; i ← latest index in Ii ; Ii ← Ii ∪ Iiprev − {xi};else

i ← i + 1; D ′i ← Di ; Ii ← anc(xi );

end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping Algorithm

compute anc(xi ) for each xi ;i ← 1; D ′i ← Di ; Ii ← anc(xi );while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE;if xi is null then

iprev ← i ; i ← latest index in Ii ; Ii ← Ii ∪ Iiprev − {xi};else

i ← i + 1; D ′i ← Di ; Ii ← anc(xi );end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping Algorithm

compute anc(xi ) for each xi ;i ← 1; D ′i ← Di ; Ii ← anc(xi );while 1 ≤ i ≤ n do

instantiate xi ← SELECT-VALUE;if xi is null then

iprev ← i ; i ← latest index in Ii ; Ii ← Ii ∪ Iiprev − {xi};else

i ← i + 1; D ′i ← Di ; Ii ← anc(xi );end

endif i = 0 then

return ”inconsistent”else

return instantiated values of {x1, . . . , xn}end

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE

SELECT-VALUE

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE

while D ′i is not empty do

select an arbitrary element a ∈ D ′i , and remove a from D ′i ;if consistent(~ai−1, xi = a) then

return aend

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE

while D ′i is not empty do

select an arbitrary element a ∈ D ′i , and remove a from D ′i ;

if consistent(~ai−1, xi = a) thenreturn a

end

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE

while D ′i is not empty doselect an arbitrary element a ∈ D ′i , and remove a from D ′i ;if consistent(~ai−1, xi = a) then

return aend

endreturn null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

SELECT-VALUE

while D ′i is not empty doselect an arbitrary element a ∈ D ′i , and remove a from D ′i ;if consistent(~ai−1, xi = a) then

return aend

end

return null

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Graph-Based Backjumping

Can also jump on internal dead-ends.

Only relies on information from the constraint graph.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Conflict-Directed Backjumping

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Gaschnig’s BackjumpingGraph-Based BackjumpingConflict-Directed Backjumping

Conflict-Directed Backjumping

Combines the ideas of Gaschnig’s and Graph-BasedBackjumping.

When detecting a dead-end xi+1, jump back to the latestvariable in its jumpback set.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Graph-Based LearningConflict-Directed Learning

Learning

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Graph-Based LearningConflict-Directed Learning

Learning

Learn from dead-ends to exclude further occur of the samedead-ends.

Add no-goods to the constraints.

Better than backjumping, leads to a smaller tree.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Graph-Based LearningConflict-Directed Learning

Graph-Based Learning

Uses graph information collected during the search

Learn the no-good from a dead-end, that the previousconflicting variables may not be instantiated like this.

Small overhead, information does not need to be computed.

Disadvantage: No-goods can be very long and appear late inthe search tree.

Cedric Geissmann Look Back Search

BacktrackingBackjumping

Learning

Graph-Based LearningConflict-Directed Learning

Conflict-Directed Learning

Uses information gathered during the search.

Learn the no-good from a dead-end, that the previousconflicting variables may not be instantiated like this.

Small overhead, information are already computed.

Better than Graph-Based Learning, no-goods occur earlier inthe search.

Cedric Geissmann Look Back Search

Questions?