case study 5: all interval series results due to simonis, puget & regin
TRANSCRIPT
Case study 5: all interval series
Results due to Simonis, Puget & Regin
All interval series
Prob007 at www.csplib.org Comes from musical composition
Traced back to Alban Berg Extensively used by Ernst Krenek
Op.170 “Quaestio temporis”
All interval series
Take the 12 standard pitch classes c, c#, d, .. Represent them by numbers 0, .., 11
Find a sequence so each occurs once Each difference occurs once
All interval series
Can generalize to any n (not just 12)
Find Sn, a permutation of [0,n) such that |Sn+1-Sn| are all distinct
• Finding one solution is easy
All interval series
Can generalize to any n (not just 12)
Find Sn, a permutation of [0,n) such that |Sn+1-Sn| are all distinct
• Finding one solution is easy[n,1,n-1,2,n-2,.., floor(n/2)+2,floor(n/2)-1,floor(n/2)+1,floor(n/2)]
Giving the differences [n-1,n-2,..,2,1]
Challenge is to find all solutions!
Basic methodology
Devise basic CSP model What are the variables? What are the
constraints?
Introduce auxiliary variables if needed Consider dual or combined models Break symmetry Introduce implied constraints
Basic CSP model
What are the variables?
Basic CSP model
What are the variables?Si = j if the ith note is j
• What are the constraints?
Basic CSP model
What are the variables?Si = j if the ith note is j
• What are the constraints? Si in [0,n)
All-different([S1,S2,… Sn])
Forall i<i’ |Si+1 - Si| =/ |Si’+1 - Si’|
Will this model be any good? If so, why?
If not, why not?
Basic methodology
Devise basic CSP model What are the variables? What are the
constraints?
Introduce auxiliary variables if needed Consider dual or combined models Break symmetry Introduce implied constraints
Improving basic CSP model
Is it worth introducing any auxiliary variables? Are there any loose or messy constraints
we could better (more compactly?) express via some auxiliary variables?
Improving basic CSP model
Is it worth introducing any auxiliary variables? Yes, variables for the pairwise differences
Di = |Si+1 - Si|
• Now post single large all-different constraint
Di in [1,n-1]
All-different([D1,D2,…Dn-1])
Basic methodology
Devise basic CSP model What are the variables? What are the
constraints?
Introduce auxiliary variables if needed Consider dual or combined models Break symmetry Introduce implied constraints
Dual or combined model?
Would a dual model be useful?
Dual or combined model?
Would a dual model be useful? We already have GAC on permutations so
not there!
Would an 0/1 model be useful?
Dual or combined model?
Would a dual model be useful? We already have GAC on permutations so
not there!
Would an 0/1 model be useful? No obvious benefits here?
Basic methodology
Devise basic CSP model What are the variables? What are the
constraints?
Introduce auxiliary variables if needed Consider dual or combined models Break symmetry Introduce implied constraints
Break symmetry
Does the problem have any symmetry?
Break symmetry
Does the problem have any symmetry? Yes, we can reverse any sequence
S1, S2, … Sn is an all-inverse series
Sn, …, S2, S1 is also
• How do we eliminate this symmetry?
Break symmetry
Does the problem have any symmetry? Yes, we can reverse any sequence
S1, S2, …, Sn is an all-inverse seriesSn, …, S2, S1 is also
• How do we eliminate this symmetry?• As with Golomb ruler!
D1 < Dn-1
Break symmetry
Does the problem have any other symmetry?
Break symmetry
Does the problem have any other symmetry? Yes, we can invert the numbers in any
sequence0, n-1, 1, n-2, … map x onto n-1-x
n-1, 0, n-2, 1, …
• How do we eliminate this symmetry?
Break symmetry
Does the problem have any other symmetry? Yes, we can invert the numbers in any
sequence0, n-1, 1, n-2, … map x onto n-1-x
n-1, 0, n-2, 1, …
• How do we eliminate this symmetry?S1 < S2
Basic methodology
Devise basic CSP model What are the variables? What are the
constraints?
Introduce auxiliary variables if needed Consider dual or combined models Break symmetry Introduce implied constraints
Implied constraints
Are there useful implied constraints to add?
Implied constraints
Are there useful implied constraints to add? Hmm, unlike Golomb ruler, we only have
neighbouring differences So, no need to consider transitive closure
Implied constraints
Are there useful implied constraints to add? Hmm, unlike Golomb ruler, we are not
optimizing So, no need to improve propagation for
optimization variable
Performance
Basic model is poor Refined model able to compute all
solutions up to n=14 or so GAC on all-different constraints very
beneficial As is enforcing GAC on Di = |Si+1-Si|
This becomes too expensive for large nSo use just bounds consistency (BC) for larger n
Case study 6: progressive party problem
Model due to Barabra Smith
Progressive party problem
Progressive does not mean “hippy”! But people progress
round the party Yacht club party
Small number of host boats
Crews of other boats circulate round the hosts
Progressive party problem
There are h hosts, and g guests Each host boat has a maximum capacity of people Each guest boat has a crew size
In each of t time periods Each guest boat visits one of the h hosts Subject to capacity constraints on hosts In addition, no two guests should meet twice and
no guest visit the same host twice
Basic methodology
Devise basic CSP model What are the variables? What are the
constraints?
Introduce auxiliary variables if needed Consider dual or combined models Break symmetry Introduce implied constraints
Basic CSP model
What are the variables?
Basic CSP model
What are the variables? Hit = j if guest boat i visits host j at time t Why not the “dual” model of which guest
visits host j at time t?
Basic CSP model
What are the variables? Hit = j if guest boat i visits host j at time t Why not the “dual” model of which guest
visits host j at time t?But several guests visit each host so would need
to deal with set of guests for each host?
Basic CSP model
What are the constraints?
No guest boat visits a host boat twiceFor all i . All-different([Hi1,Hi2,..,Hit])
Basic CSP model
What are the constraints?
No guest boat visits a host boat twiceFor all i . All-different([Hi1,Hi2,..,Hit])
• Host boat capacity is not exceeded
Basic CSP model
What are the constraints?
No guest boat visits a host boat twiceFor all i . all-different([Hi1,Hi2,..,Hit])
• Host boat capacity is not exceededHmm, hosts are values to Hit variables so would
need to look at all Hit variables simultaneously!
Basic methodology
Devise basic CSP model What are the variables? What are the
constraints?
Introduce auxiliary variables if needed Consider dual or combined models Break symmetry Introduce implied constraints
Improving basic CSP model
Is it worth introducing any auxiliary variables? Could we express capacity constraints via
some auxiliary variables?
Improving basic CSP model
Is it worth introducing any auxiliary variables? Could we express capacity constraints via
some auxiliary variables? Of course, I wouldn’t be asking the
question otherwise
Improving basic CSP model
Introduce auxiliary 0/1 variables that can be summed Vijt = 1 iff Hit=j
Improving basic CSP model
Introduce auxiliary 0/1 variables that can be summed Vijt = 1 iff Hit=j
Capacity constraint now easy to specify: Sum_i Vijt * crew_i <= capacity_j
where crew_i is crew size of boat j and capacity_j is capacity of host boat j
What about other constraints?
Still have to specify that no two guest boats meet twice
What about other constraints?
Still have to specify that no two guest boats meet twice Quantify over all pairs of guest, all host
boats and all time periods O(g^2 h t) constraints
Basic methodology
Devise basic CSP model What are the variables? What are the
constraints?
Introduce auxiliary variables if needed Consider dual or combined models Break symmetry Introduce implied constraints
Improving basic CSP model
Is it worth introducing any auxiliary variables? Could we express “don’t meet twice”
constraints more compactly/efficiently via some auxiliary variables?
Improving basic CSP model
Is it worth introducing any auxiliary variables? Could we express “don’t meet twice”
constraints more compactly/efficiently via some auxiliary variables?
Yes, of course. I wouldn’t be asking otherwise!
Improving CSP model
Introduce auxiliary 0/1 variables to represent meetings Mklt = 1 iff Hkt=Hlt I.e. if guest k meets guest l at time t
Improving CSP model
Introduce auxiliary 0/1 variables to represent meetings Mklt = 1 iff Hkt=Hlt I.e. if guest k meets guest l at time t
Meeting constraints easily specified Sum_t Mklt <= 1
Basic methodology
Devise basic CSP model What are the variables? What are the
constraints?
Introduce auxiliary variables if needed Consider dual or combined models Break symmetry Introduce implied constraints
Break symmetry
Does the problem have any symmetry?
Break symmetry
Does the problem have any symmetry? Yes, of course. The world is full of
symmetry!
Break symmetry
Host boats of the same capacity are symmetric
Guest boats of the same crew size are symmetric Guest boat symmetry is more important
than host boat. Why?
Break symmetry
Does the problem have any other symmetry?
Break symmetry
Does the problem have any other symmetry?
Yes, of course. Time periods are symmetric
Break symmetry
How do we deal with symmetry of time periods?
Break symmetry
How do we deal with symmetry of time periods? Largest guest boat visits host boats in
order Similar trick to assigning first row of
orthogonal Latin square Why largest?
Break symmetry
Guest boats with the same crew size are symmetric How do we break this symmetry?
Break symmetry
Guest boats with the same crew size are symmetric If j<k have same crew size then
Hj1 <= Hk1
Break symmetry
Guest boats with the same crew size are symmetric If j<k have same crew size then
Hj1 <= Hk1
• They might still meet at t=1!• We cannot rule this out• If they do, we still have this symmetry
Break symmetry
Guest boats with the same crew size are symmetric If j<k have same crew size then
Hj1 <= Hk1
• They might still meet at t=1!Hj1<Hk1 or Hj2<Hk2
They cannot meet at t=1 and t=2
Break symmetry
Host boats with the same capacity are symmetric How do we break this symmetry?
Break symmetry
Host boats with the same capacity are symmetric Partial solution If j<k have identical capacity, then guest
boat 1 visits k implies it also visits j
Break symmetry
Host boats with the same capacity are symmetric Partial solution If j<k have identical capacity, then guest
boat 1 visits k implies it also visits j
Can you improve on this?
Solving choices
Which variables to branch on? Hit, Vijt or Mijt ?
Solving choices
Which variables to branch on? Hit and let others follow
What variable ordering heuristic
Solving choices
Which variables to branch on? Hit and let others follow
What variable ordering heuristic Fail first
What value ordering?
Solving choices
Which variables to branch on? Hit and let others follow
What variable ordering heuristic Fail first
What value ordering? Host boats by their spare capacity Alias succeed first
Performance
Party held before problem solved! 13 hosts, 29 guests, 6 time periods
Heuristic tweaked to assign each period in turn
Solution found for 7 period problem They could have partied longer
12 host problem easy to show insoluble Simple capacity argument
Conclusions
Constraint programming can improve your social life!
Modelling is an art but there are patterns Develop basic model Use auxiliary variables to represent constraints
compactly/efficiently Consider dual, combined and 0/1 models Break symmetry Add implied constraints