Document 7892096

Download Report

Transcript Document 7892096

Global Constraints
Toby Walsh
National ICT Australia and
University of New South Wales
www.cse.unsw.edu.au/~tw
Course outline
●
●
●
●
●
●
●
●
●
●
●
●
Introduction
All Different
Lex ordering
Value precedence
Complexity
GAC-Schema
Soft Global Constraints
Global Grammar Constraints
Roots Constraint
Range Constraint
Slide Constraint
Global Constraints on Sets
SLIDE meta-constraint
●
●
Even hotter off the press than the value
PRECEDENCE constraint
Under review for IJCAI 07!
SLIDE meta-constraint
●
A constructor for generating many sequencing and
related global constraints
–
–
–
–
–
●
REGULAR
CONTIGUITY
LEX
CARD PATH
…
Slides a constraint down one or more sequences of
variables
–
–
Ensuring constraint holds at every point
Fixed parameter tractable
Basic SLIDE
●
SLIDE(C,[X1,..Xn]) holds iff
–
●
C(Xi,..Xi+k) holds for every i
AMONG SEQ constraint
–
–
–
Used by ILOG for assembly line car sequencing at
Renault
At most 1 in 3 cars have a sun roof
SLIDE(C,[X1,..Xn]) where C(X1,X2,X3) holds iff
AMONG([X1,X2,X3],0,1,D) where D is set of cars
ordered with sunroofs
GSC
●
Global sequence constraint in ILOG Solver
–
–
–
Combines AMONG SEQ with GCC
Regin and Puget give partial propagator
We can show why!
GSC
●
Global sequence constraint in ILOG Solver
–
–
–
Combines AMONG SEQ with GCC
Regin and Puget give partial propagator
We can show why!
●
●
●
It is NP-hard to enforce GAC on GSC
Can actually prove this when GSC is AMONG SEQ plus an
ALL DIFFERENT
ALL DIFFERENT is a special case of GCC
GSC
●
Reduction from 1in3 SAT on positive clauses
–
–
–
–
–
The jth block of 2N clauses will ensure jth clause
Even numbered CSP vars represent truth assignment
Odd numbered CSP vars “junk” to ensure N odd values
in each block
X_2jN+2i odd iff xi true
AMONG SEQ([X1,…],N,N,2N,{1,3,..})
●
This ensures truth assignment repeated along variables!
GSC
●
Reduction from 1in3 SAT on positive clauses
–
Suppose jth clause is (x or y or z)
●
●
–
X_2jN+2x, X_2jN+2y, X_2jN+2z in {4NM+4j, 4NM+4j+1,
4NM+4j+2}
As ALL DIFFERENT, only one of these odd
For i other than x, y or z, X_2jN+2i in {4jN+4i,
4jN+4i+1} and X_2jN+2i+1 in {4jN+4i+2, 4jn+4i+3}
SLIDE down multiple sequences
●
Can SLIDE down more than one sequence at a
time
–
–
–
LEX([X1,..Xn],[Y1,..Yn])
Introduce sequence of Boolean vars [B1,..Bn+1]
Play role of alpha in LEX propagator
SLIDE down multiple sequences
●
Can SLIDE down more than one sequence at a
time
–
–
–
LEX([X1,..Xn],[Y1,..Yn])
Set B1=0, and Bn+1=1 (strict lex), Bn+1 in {0,1} (lex)
SLIDE(C,[X1..Xn],[Y1,..Yn],[B1,..Bn+1]) holds iff
C(Xi,Yi,Bi,Bi+1) holds for each i
SLIDE down multiple sequences
●
Can SLIDE down more than one sequence at a
time
–
–
–
–
LEX([X1,..Xn],[Y1,..Yn])
Set B1=0, and Bn+1=1 (strict lex), Bn+1 in {0,1} (lex)
SLIDE(C,[X1..Xn],[Y1,..Yn],[B1,..Bn+1])
C(Xi,Yi,Bi,Bi+1) holds iff Bi=1 or (Bi=Bi+1=0 and
Xi=Yi) or (Bi=0, Bi+1=1 and Xi<Yi)
SLIDE down multiple sequences
●
Can SLIDE down more than one sequence at a
time
–
–
–
–
–
LEX([X1,..Xn],[Y1,..Yn])
Set B1=0, and Bn+1=1 (strict lex), Bn+1 in {0,1} (lex)
SLIDE(C,[X1..Xn],[Y1,..Yn],[B1,..Bn+1])
C(Xi,Yi,Bi,Bi+1) holds iff Bi=1 or (Bi=Bi+1=0 and
Xi=Yi) or (Bi=0, Bi+1=1 and Xi<Yi)
Highly efficient, incremental, ..
SLIDE down multiple sequences
●
CONTIGUITY([X1,..Xn])
–
–
0…01…10…0
Two simple SLIDEs
SLIDE down multiple sequences
●
CONTIGUITY([X1,..Xn])
–
–
–
–
0…01…10…0
Two simple SLIDEs
Introduce Yi in {0,1,2}
SLIDE(>=,[Y1,..Yn])
SLIDE down multiple sequences
●
CONTIGUITY([X1,..Xn])
–
–
–
–
–
0…01…10…0
Two simple SLIDEs
Introduce Yi in {0,1,2}
SLIDE(>=,[Y1,..Yn])
SLIDE(C,[X1,..Xn],[Y1,..Yn]) where C(Xi,Yi) holds
iff Xi=1 <-> Yi=1
SLIDE down multiple sequences
●
REGULAR(Q,[X1,..Xn])
–
–
–
X1 .. Xn is a string accepted by FDA Q
Encodes into simple SLIDE
Introduce Yi to represent state of the automaton after i
symbols
SLIDE down multiple sequences
●
REGULAR(Q,[X1,..Xn])
–
–
–
X1 .. Xn is a string accepted by FDA Q
Introduce Yi to represent state of the automaton after i
symbols
SLIDE(C,[X1,..Xn],[Y1,..Yn+1]) where
●
●
●
Y1 is starting state of Q
Yn+1 is limited to accepting states of Q
C(Xi,Yi,Yi+1) holds iff Q moves from state Yi to state Yi+1
on seeing Xi
SLIDE down multiple sequences
●
REGULAR(A,[X1,..Xn])
–
–
–
X1 .. Xn is a string accepted by FDA A
Introduce Qi to represent state of the automaton after i
symbols
SLIDE(C,[X1,..Xn],[Q1,..Qn+1]) where
●
●
●
–
Y1 is starting state of A
Yn+1 is limited to accepting states of A
C(Xi,Qi,Qi+1) holds iff A moves from state Qi to state Qi+1
on seeing Xi
Gives highly efficient and effective propagator!
SLIDE with counters
●
●
●
●
●
AMONG([X1,..Xn],v,N)
Introduce sequence of counts, Yi
SLIDE(C,[X1,..Xn],[Y1,..Yn+1]) where
Y1=0, Yn+1=N
C(Xi,Yi,Yi+1) holds iff (Xi in v and Yi+1=1+Yi)
or (Xi not in v and Yi+1=Yi)
SLIDE with counters
●
●
CARD PATH
SLIDE is a special case of CARD PATH
–
SLIDE(C,[X1,..Xn]) iff CARD PATH(C,[X1,..Xn],nk+1)
SLIDE with counters
●
●
CARD PATH
SLIDE is a special case of CARD PATH
–
●
SLIDE(C,[X1,..Xn]) iff CARD PATH(C,[X1,..Xn],nk+1)
CARD PATH is a special case of SLIDE
–
SLIDE(D,[X1,..Xn],[Y1,..Yn+1]) where
Y1=0, Yn+1=N, and
D(Xi,..Xi+k,Yi,Yi+1) holds iff
(Yi+1=1+Yi and C(Xi,..Xi+k)) or
(Yi+1=Yi and not C(Xi,..Xi+k))
SLIDE with parameters
●
●
Slide constraints may share parameters
LINKSET2BOOLEANS(S,[X1,..Xn])
–
●
Converts set variable into characteristic function
Encodes as SLIDE(C,[X1,..Xn]) where
–
–
C(S,Xi) holds iff Xi in S
S is parameter common to each slide constraint
SLIDE over sets
●
●
●
●
Value precedence for set vars
PRECENDCE([vj,vk],[S1,..Sn]) holds iff
min(i,{i | vj in Si and vk not in Si or i=n+1}) <
min(i,{i | vk in Si and vj not in Si or i=n+2})
SLIDE over sets
●
●
●
●
●
Value precedence for set vars
PRECENDCE([vj,vk],[S1,..Sn]) holds iff
min(i,{i | vj in Si and vk not in Si or i=n+1}) <
min(i,{i | vk in Si and vj not in Si or i=n+2})
Introduce sequence of Booleans to indicate
whether vars have been distinguished apart yet or
not
SLIDE over sets
●
●
●
●
●
●
●
Value precedence for set vars
PRECENDCE([vj,vk],[S1,..Sn]) holds iff
min(i,{i | vj in Si and vk not in Si or i=n+1}) <
min(i,{i | vk in Si and vj not in Si or i=n+2})
SLIDE(C,[S1,..Sn],[B1,..Bn+1]) where
B1=0 and
C(Si,Bi,Bi+1) holds iff
Bi=Bi+1=1,
or Bi=Bi+1=0 and (vj, vk in Si or vj, vk not in Si),
or Bi=0, Bi+1=1, vj in Si and vk not in Si
SLIDE over sets
●
Open stacks problem
–
●
IJCAI 05 modelling challenge
Three SLIDEs and one ALL DIFFERENT
–
–
–
First SLIDE: Si+1 = Si u customer(Xi)
Second SLIDE: Ti-1= Ti u customer(Xi)
Third SLIDE: |Si intersect Ti| < OpenStacks
Circular SLIDE
●
●
STRETCH used in shift rostering
Given sequence of vars X1,.. Xn
–
–
–
–
Each stretch of identical values a occurs at least
shortest(a) and at most longest(a) time
For example, at least 0 and at most 3 night shifts in a
row
Each transition Xi=/=Xi+1 is limited to given patterns
For example, only Xi=night, Xi+1=off is permitted
Circular SLIDE
●
●
STRETCH can be efficiently encoded using
SLIDE
SLIDE(C,[X1,..Xn],[Y1,..Yn+1]) where
Y1=1
– C(Xi,Xi+1,Yi,Yi+1) holds iff
Xi=Xi+1, Yi+1=1+Yi, Yi+1<=longest(Xi),
or Xi=/=Xi+1, Yi>=shortest(Xi) and (Xi,Xi+1) in set of
permitted changes
–
Circular SLIDE
●
Circular forms of STRETCH are needed for
repeating shift patterns
Circular form of SLIDE useful in such situations
●
SLIDEo(C,[X1,..Xn]) holds iff
●
–
C(Xi,..X1+(i+k-1)mod n) holds for 1<=i<=n
SLIDE algebra
●
SLIDEOR(C,[X1..Xn]) holds iff
–
●
●
C(Xi,..Xi+k) holds for some I
Encodes as CARD PATH (and thus as SLIDE)
Other more complex combinations
–
–
–
NOT(SLIDE(C,[X1,..Xn])) iff SLIDEOR(C,[X1,..Xn])
SLIDE(C1,[X1,..Xn]) and SLIDE(C2,[X1,..Xn]) iff
SLIDE(C1 and C2,[X1,..Xn])
..
Propagating SLIDE
●
But how do we propagate global constraints
expressed using SLIDE?
Propagating SLIDE
●
SLIDE(C,[X1,..Xn])
–
–
–
Just post sequence of constraints, C(Xi,..Xi+k)
If constraint graph is Berge acyclic, then we will
achieve GAC
Gives efficient GAC propagators for CONTIGUITY,
DOMAIN, ELEMENT, LEX, PRECEDENCE,
REGULAR, …
Propagating SLIDE
●
SLIDE(C,[X1,..Xn])
–
–
–
–
Just post sequence of constraints, C(Xi,..Xi+k)
If constraint graph is Berge acyclic, then we will
achieve GAC
Gives efficient GAC propagators for CONTIGUITY,
DOMAIN, ELEMENT, LEX, PRECEDENCE,
REGULAR, …
But what about case constraint graph is not Bergeacyclic?
●
Slide constraints overlap on more than one variable
Propagating SLIDE
●
SLIDE(C,[X1,..Xn])
–
–
Slide constraints overlap on more than one variable
Enforce GAC using dynamic programming
●
pass support down sequence
Propagating SLIDE
●
SLIDE(C,[X1,..Xn])
–
–
Equivalently a “dual” encoding
Consider AMONG SEQ(2,2,3,[X1,..X5],{a}) where
●
●
●
●
●
–
–
X1=a, X2,X3,X4,X5 in {a,b}
AMONG([X1,X2,X3],2,{a})
AMONG([X2,X3,X4],2,{a})
AMONG([X3,X4,X5],2,{a})
Enforcing GAC sets X4=a
GAC can be enforced in O(nd^k+1) time and O(nd^k)
space where constraints overlap on k variables
Fixed parameter tractable
Conclusions
●
SLIDE is a very useful meta-constraint
–
●
Many global constraints for sequencing and other
problems can be encoded as SLIDE
SLIDE can be propagated easily
–
–
Constraints overlap on just one variable => simply post
slide constraints
Constraints overlap on more than one variable => use
dynamic programming or equivalently a simple dual
encoding