Optimising Quantified Expressions
Optimising Quantified Expressions in Constraint Models Ian P. Gent, - - PowerPoint PPT Presentation
Optimising Quantified Expressions in Constraint Models Ian P. Gent, - - PowerPoint PPT Presentation
Optimising Quantified Expressions Optimising Quantified Expressions in Constraint Models Ian P. Gent, Ian Miguel and Andrea Rendl University of St Andrews, UK AIT Austrian Institute of Technology, Austria September 2010 Workshop on Modelling
Optimising Quantified Expressions
Context of this Work
Quantified expressions in solver-independent constraint modelling languages
Optimising Quantified Expressions
Context of this Work
Quantified expressions in solver-independent constraint modelling languages Example: forall i,j:int(1..n) . (i=j) ⇒ (q[i]-i = q[j]-j)
Optimising Quantified Expressions
Context of this Work
Quantified expressions in solver-independent constraint modelling languages Example: forall i,j:int(1..n) . (i=j) ⇒ (q[i]-i = q[j]-j) powerful means to compactly represent a set of expressions
Optimising Quantified Expressions
Context of this Work
Quantified expressions in solver-independent constraint modelling languages Example: forall i,j:int(1..n) . (i=j) ⇒ (q[i]-i = q[j]-j) powerful means to compactly represent a set of expressions same structure in all constraint modelling languages
Optimising Quantified Expressions
Context of this Work
Quantified expressions in solver-independent constraint modelling languages Example: forall i,j:int(1..n) . (i=j) ⇒ (q[i]-i = q[j]-j) powerful means to compactly represent a set of expressions same structure in all constraint modelling languages
restriction: no decision variables in i1, . . . , im and int(lb..ub)
Optimising Quantified Expressions
Goal and Contributions
Our Observation: quantified expressions can contain redundancies, often when formulated by novices
Optimising Quantified Expressions
Goal and Contributions
Our Observation: quantified expressions can contain redundancies, often when formulated by novices Our Goal: automatically improve poorly formulated quantified expressions
Optimising Quantified Expressions
Goal and Contributions
Our Observation: quantified expressions can contain redundancies, often when formulated by novices Our Goal: automatically improve poorly formulated quantified expressions Our Contributions:
we consider 2 kinds of redundancies
Optimising Quantified Expressions
Goal and Contributions
Our Observation: quantified expressions can contain redundancies, often when formulated by novices Our Goal: automatically improve poorly formulated quantified expressions Our Contributions:
we consider 2 kinds of redundancies we propose means to detect and address those redundancies
Optimising Quantified Expressions Loop-invariant Expressions
1 Loop-invariant Expressions 2 Weak Guards 3 Summary
Optimising Quantified Expressions Loop-invariant Expressions
Loop-invariant Expressions
Idea: analyse equivalent representations of quantified expressions
Optimising Quantified Expressions Loop-invariant Expressions
Loop-invariant Expressions
Idea: analyse equivalent representations of quantified expressions Example: (x = 0) ⇒ ∀i∈D. (x[i] = i)
Optimising Quantified Expressions Loop-invariant Expressions
Loop-invariant Expressions
Idea: analyse equivalent representations of quantified expressions Example: (x = 0) ⇒ ∀i∈D. (x[i] = i) ≡ ∀i∈D. (x = 0) ⇒ (x[i] = i)
Optimising Quantified Expressions Loop-invariant Expressions
Loop-invariant Expressions
Idea: analyse equivalent representations of quantified expressions Example: (x = 0) ⇒ ∀i∈D. (x[i] = i) ≡ ∀i∈D. (x = 0) ⇒ (x[i] = i) we call ‘(x = 0)’ loop-invariant
Optimising Quantified Expressions Loop-invariant Expressions
Loop-invariant Expressions
Idea: analyse equivalent representations of quantified expressions Example: (x = 0) ⇒ ∀i∈D. (x[i] = i) ≡ ∀i∈D. (x = 0) ⇒ (x[i] = i) we call ‘(x = 0)’ loop-invariant Question: which representation is better?
Optimising Quantified Expressions Loop-invariant Expressions
Loop-invariant Expressions
Many different cases....
1 A∧∀IEI
≡ ∀IA∧EI
Optimising Quantified Expressions Loop-invariant Expressions
Loop-invariant Expressions
Many different cases....
1 A∧∀IEI
≡ ∀IA∧EI
2 A∨∃IEI
≡ ∃IA∨EI
3 mA+
IEI
≡
- I A+EI
where m = |I|
4 A∨(∀IEI))
≡ ∀IA∨EI
5 etc
Optimising Quantified Expressions Loop-invariant Expressions
Loop-invariant Expressions
Many different cases....
1 A∧∀IEI
≡ ∀IA∧EI
2 A∨∃IEI
≡ ∃IA∨EI
3 mA+
IEI
≡
- I A+EI
where m = |I|
4 A∨(∀IEI))
≡ ∀IA∨EI
5 etc
Intuitively, we expect the outside-representation to be better...
Optimising Quantified Expressions Loop-invariant Expressions
Loop-invariant Expressions
Many different cases....
1 A∧∀IEI
≡ ∀IA∧EI
2 A∨∃IEI
≡ ∃IA∨EI
3 mA+
IEI
≡
- I A+EI
where m = |I|
4 A∨(∀IEI))
≡ ∀IA∨EI
5 etc
Intuitively, we expect the outside-representation to be better... is this true for all cases?
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
We compare representations at solver level (flat representation)
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
We compare representations at solver level (flat representation) We assume the solver provides:
(reifyable) n-ary conjunction (∀) (reifyable) n-ary disjunction (∃) n-ary sum ()
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
We compare representations at solver level (flat representation) We assume the solver provides:
(reifyable) n-ary conjunction (∀) (reifyable) n-ary disjunction (∃) n-ary sum ()
Let’s look at one case (see paper for other cases): A⇒(∀IEI) ≡ ∀IA⇒EI
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
Inside-Representation Outside-Representation Original (∀IA ⇒ EI) A ⇒ (∀IEI)
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
Inside-Representation Outside-Representation Original (∀IA ⇒ EI) A ⇒ (∀IEI) Unrolled (A ⇒ E1) ∧ A ⇒ (E1 ∧ · · · ∧ Ek) . . . (A ⇒ Ek)
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
Inside-Representation Outside-Representation Original (∀IA ⇒ EI) A ⇒ (∀IEI) Unrolled (A ⇒ E1) ∧ A ⇒ (E1 ∧ · · · ∧ Ek) . . . (A ⇒ Ek) Flat a ⇒ e1 aux ⇔ (e1 ∧ · · · ∧ ek) (unnested) . . . a ⇒ aux a ⇒ ek
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
Inside-Representation Outside-Representation Original (∀IA ⇒ EI) A ⇒ (∀IEI) Unrolled (A ⇒ E1) ∧ A ⇒ (E1 ∧ · · · ∧ Ek) . . . (A ⇒ Ek) Flat a ⇒ e1 aux ⇔ (e1 ∧ · · · ∧ ek) (unnested) . . . a ⇒ aux a ⇒ ek 0 auxiliary variables 1 auxiliary variable k constraints 2 constraints
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
Inside-Representation: more constraints (increasing with k), no additional variables
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
Inside-Representation: more constraints (increasing with k), no additional variables Outside-Representation: only two constraints but 1 additional variable
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Representations
Inside-Representation: more constraints (increasing with k), no additional variables Outside-Representation: only two constraints but 1 additional variable Let’s compare the representations in an example!
Optimising Quantified Expressions Loop-invariant Expressions
Example: Peaceful Army of Queens
Place two equally-sized armies of queens on a chess board such that they do not attack another, maximising the army size
Optimising Quantified Expressions Loop-invariant Expressions
Peaceful Army of Queens: Outside Representation
Non-attacking Constraints in model based on Smith et al (2004): forall fields(i,j) on the chess board.
Optimising Quantified Expressions Loop-invariant Expressions
Peaceful Army of Queens: Outside Representation
Non-attacking Constraints in model based on Smith et al (2004): forall fields(i,j) on the chess board. white queen at field(i,j) ⇒
Optimising Quantified Expressions Loop-invariant Expressions
Peaceful Army of Queens: Outside Representation
Non-attacking Constraints in model based on Smith et al (2004): forall fields(i,j) on the chess board. white queen at field(i,j) ⇒ forall k. no black queen at field(i,k) (same column)
Optimising Quantified Expressions Loop-invariant Expressions
Peaceful Army of Queens: Outside Representation
Non-attacking Constraints in model based on Smith et al (2004): forall fields(i,j) on the chess board. white queen at field(i,j) ⇒ forall k. no black queen at field(i,k) (same column) ∧ no black queen at field(k,j) (same row)
Optimising Quantified Expressions Loop-invariant Expressions
Peaceful Army of Queens: Outside Representation
Non-attacking Constraints in model based on Smith et al (2004): forall fields(i,j) on the chess board. white queen at field(i,j) ⇒ forall k. no black queen at field(i,k) (same column) ∧ no black queen at field(k,j) (same row) ∧ no black queen at field(i+k,j+k) (NW-diagonal) ∧ no black queen at field(i-k,j+k) (SW-diagonal) ∧ no black queen at field(i+k,j-k) (NE-diagonal) ∧ no black queen at field(i-k,j-k) (SE-diagonal)
Optimising Quantified Expressions Loop-invariant Expressions
Peaceful Army of Queens: Inside Representation
Alternatively, moving loop-invariant expression inside: forall fields(i,j) on the chess board.
Optimising Quantified Expressions Loop-invariant Expressions
Peaceful Army of Queens: Inside Representation
Alternatively, moving loop-invariant expression inside: forall fields(i,j) on the chess board. forall k. white queen at field(i,j) ⇒ no black queen at field(i,k) (column)
Optimising Quantified Expressions Loop-invariant Expressions
Peaceful Army of Queens: Inside Representation
Alternatively, moving loop-invariant expression inside: forall fields(i,j) on the chess board. forall k. white queen at field(i,j) ⇒ no black queen at field(i,k) (column) ∧ forall k. white queen at field(i,j) ⇒ ∧ no black queen at field(k,j) (row)
Optimising Quantified Expressions Loop-invariant Expressions
Peaceful Army of Queens: Inside Representation
Alternatively, moving loop-invariant expression inside: forall fields(i,j) on the chess board. forall k. white queen at field(i,j) ⇒ no black queen at field(i,k) (column) ∧ forall k. white queen at field(i,j) ⇒ ∧ no black queen at field(k,j) (row) ∧ forall k. white queen at field(i,j) ⇒ ∧ no black queen at field(i+k,j+k) (NW-diagonal) ...
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Inside- and Outside-Representation
What did we do?
1 We modelled two different PAQ models (in Essence’)
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Inside- and Outside-Representation
What did we do?
1 We modelled two different PAQ models (in Essence’) 2 We translated both models to solvers Gecode and Minion
(using Tailor), generating:
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Inside- and Outside-Representation
What did we do?
1 We modelled two different PAQ models (in Essence’) 2 We translated both models to solvers Gecode and Minion
(using Tailor), generating:
- utside-representation
inside-representation
for both models
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Inside- and Outside-Representation
What did we do?
1 We modelled two different PAQ models (in Essence’) 2 We translated both models to solvers Gecode and Minion
(using Tailor), generating:
- utside-representation
inside-representation
for both models
3 We solved both representations using the same solving setup
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Number of Constraints
Inside-Representation has far more constraints than Outside-Representation
0.7 1 2 5 10 15 500 1000 5000 10000 30000 Constraint Reduction with Inside Representation Constraints with Inside Representation (Forall-Impl) Problem Classes paq1 with CSE (Minion) paq1 with CSE (Gecode) paq3 with CSE (Minion) paq3 with CSE (Gecode) same #constraints
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Number of Auxiliary Variables
Inside-Representation has 30% less auxiliary variables than Outside-Representation
0.5 0.7 1 2 5 10 15 50 100 1000 2000 Aux Variable Reduction with Inside Representation Number of Aux Variables with Inside-Representation Problem Classes paq1 with CSE (Minion) paq1 with CSE (Gecode) paq3 with CSE (Minion) paq3 with CSE (Gecode) same number of aux variables
Optimising Quantified Expressions Loop-invariant Expressions
Comparing Number Solving Performance
0.5 0.7 1 1.3 1.5 2 2.5 3 0.01 0.1 1 10 50 100 1000 Solving Time Reduction with Inside Representation Solving Time with inside-representation (sec) Problem Classes paq1 with CSE (Minion) paq1 with CSE (Gecode) paq3 with CSE (Minion) paq3 with CSE (Gecode) same solving time
Inside-Rep. better in Minion (speedup of max. 300%) Inside-Rep. slightly better in Gecode (speedup of max. 30%)
Optimising Quantified Expressions Loop-invariant Expressions
Conclusion on Loop-Invariant Expressions
Against our expectations: it can be beneficial to move loop-invariant expressions into quantifications
Optimising Quantified Expressions Loop-invariant Expressions
Conclusion on Loop-Invariant Expressions
Against our expectations: it can be beneficial to move loop-invariant expressions into quantifications Difficult to make a general statement
depends on solver (provided propagators, architecture, etc) depends on problem structure
Optimising Quantified Expressions Loop-invariant Expressions
Conclusion on Loop-Invariant Expressions
Against our expectations: it can be beneficial to move loop-invariant expressions into quantifications Difficult to make a general statement
depends on solver (provided propagators, architecture, etc) depends on problem structure
Tailor can automatically reformulate quantifications to inside/outside-representation
user can choose preferable representation (for each case) in translation settings
Optimising Quantified Expressions Weak Guards
1 Loop-invariant Expressions 2 Weak Guards 3 Summary
Optimising Quantified Expressions Weak Guards
Weak Guards
A guard B for an expression E has to hold to enforce E
B ⇒ E
Optimising Quantified Expressions Weak Guards
Weak Guards
A guard B for an expression E has to hold to enforce E
B ⇒ E
Often used in modelling, mostly to restrict quantifying variables
Optimising Quantified Expressions Weak Guards
Weak Guards
A guard B for an expression E has to hold to enforce E
B ⇒ E
Often used in modelling, mostly to restrict quantifying variables Example: forall i, j in (1..n). (i = j) ⇒ queen[i] + i = queen[j] + j
Optimising Quantified Expressions Weak Guards
Weak Guards
If guards are weak they yield duplicate constraints
Optimising Quantified Expressions Weak Guards
Weak Guards
If guards are weak they yield duplicate constraints forall i, j in (1..n). (i = j) ⇒ queen[i] + i = queen[j] + j
Optimising Quantified Expressions Weak Guards
Weak Guards
If guards are weak they yield duplicate constraints forall i, j in (1..n). (i = j) ⇒ queen[i] + i = queen[j] + j is unrolled to: queen[1]+1 != queen[2]+2, queen[1]+1 != queen[3]+3, queen[2]+2 != queen[1]+1, queen[2]+2 != queen[3]+3, queen[3]+3 != queen[2]+2, queen[3]+3 != queen[1]+1, etc
Optimising Quantified Expressions Weak Guards
Weak Guards
If guards are weak they yield duplicate constraints forall i, j in (1..n). (i = j) ⇒ queen[i] + i = queen[j] + j is unrolled to: queen[1]+1 != queen[2]+2, queen[1]+1 != queen[3]+3, queen[2]+2 != queen[1]+1, queen[2]+2 != queen[3]+3, queen[3]+3 != queen[2]+2, queen[3]+3 != queen[1]+1, etc
Optimising Quantified Expressions Weak Guards
Weak Guards
If guards are weak they yield duplicate constraints forall i, j in (1..n). (i = j) ⇒ queen[i] + i = queen[j] + j is unrolled to: queen[1]+1 != queen[2]+2, queen[1]+1 != queen[3]+3, queen[2]+2 != queen[1]+1, queen[2]+2 != queen[3]+3, queen[3]+3 != queen[2]+2, queen[3]+3 != queen[1]+1, etc
Optimising Quantified Expressions Weak Guards
Addressing Weak Guards
Option1: remove duplicate constraints after quantification is unrolled
Optimising Quantified Expressions Weak Guards
Addressing Weak Guards
Option1: remove duplicate constraints after quantification is unrolled
problem: only possible when quantification can be unrolled, i.e. all parameters are known
Optimising Quantified Expressions Weak Guards
Addressing Weak Guards
Option1: remove duplicate constraints after quantification is unrolled
problem: only possible when quantification can be unrolled, i.e. all parameters are known
Option2: strengthen the guard!
Optimising Quantified Expressions Weak Guards
Strengthening Guards
Our Idea: use unification to strengthen guards
Optimising Quantified Expressions Weak Guards
Strengthening Guards
Our Idea: use unification to strengthen guards Unification Example:
What is the unifier for ‘x + i’ and ‘x + 3’?
Optimising Quantified Expressions Weak Guards
Strengthening Guards
Our Idea: use unification to strengthen guards Unification Example:
What is the unifier for ‘x + i’ and ‘x + 3’? u = {3/i} (i substituted with 3)
We want to demonstrate the algorithm on an example...
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
A Golomb Ruler has n ticks such that the distance between each tick is different, minimising the length of the ruler.
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
A Golomb Ruler has n ticks such that the distance between each tick is different, minimising the length of the ruler. Sample Golomb Ruler with 4 ticks and length 6:
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
‘The distances between all ticks are different’-Constraint:
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
‘The distances between all ticks are different’-Constraint: forall i1, i2, i3, i4 : TICKS. ((i1>i2) ∧ (i3>i4) ∧ (i2=i4)) ⇒ (ruler[i1]-ruler[i2] = ruler[i3]-ruler[i4])
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
STRENGTHEN_GUARD(∀I : D.BI ⇒ EI)
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
STRENGTHEN_GUARD(∀I : D.BI ⇒ EI) (1) If EI’s root node corresponds to a binary commutative
- perator then continue, otherwise stop.
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
STRENGTHEN_GUARD(∀I : D.BI ⇒ EI) (1) If EI’s root node corresponds to a binary commutative
- perator then continue, otherwise stop.
forall i1, i2, i3, i4 : TICKS. ((i1>i2) ∧ (i3>i4) ∧ (i2=i4)) ⇒ (ruler[i1]-ruler[i2] = ruler[i3]-ruler[i4])
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
STRENGTHEN_GUARD(∀I : D.BI ⇒ EI) (2) Compute the set of unifiers U for the two children of EI, e1 and e2. UNIFY (ruler[i1]-ruler[i2], ruler[i3]-ruler[i4]): u1 = {i1/i3 ∧ i2/i4} u2 = {i3/i1 ∧ i4/i2} u3 = {i3/i1 ∧ i2/i4} u4 = {i1/i3 ∧ i4/i2}
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
STRENGTHEN_GUARD(∀I : D.BI ⇒ EI) (3) Search U for unifiers from which we can deduce equivalence of the quantifying variables. UNIFY (ruler[i1]-ruler[i2], ruler[i3]-ruler[i4]): u1 = {i1/i3 ∧ i2/i4} u2 = {i3/i1 ∧ i4/i2} u3 = {i3/i1 ∧ i2/i4} u4 = {i1/i3 ∧ i4/i2} we deduce that (i1 = i3) ∧ (i2 = i4)
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
STRENGTHEN_GUARD(∀I : D.BI ⇒ EI) (4) Add lex-ordering constraint C on all quantifying variables whose equivalence renders e1 and e2 equivalent C: i1, i2 ≤lex i3, i4 hence (i1 ≤ i3) ∧ (i1 < i3 ∨ i2 ≤ i4)
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
Yielding the constraint with strengthend guard: forall i1, i2, i3, i4 : TICKS. ((i1>i2) ∧ (i3>i4) ∧ (i2=i4) ∧ (i1 ≤ i3) ∧ (i1 < i3 ∨ i2 ≤ i4)) ⇒ (ruler[i1]-ruler[i2] = ruler[i3]-ruler[i4])
Optimising Quantified Expressions Weak Guards
Strengthening the Guard in Golomb Ruler
Yielding the constraint with strengthend guard: forall i1, i2, i3, i4 : TICKS. ((i1>i2) ∧ (i3>i4) ∧ (i2=i4) ∧ (i1 ≤ i3) ∧ (i1 < i3 ∨ i2 ≤ i4)) ⇒ (ruler[i1]-ruler[i2] = ruler[i3]-ruler[i4]) However: we have not implemented the algorithm yet!
Optimising Quantified Expressions Weak Guards
Effects of Duplicate constraints
How bad is the effect of duplicate constraints due to weak guards?
in other words: is it worth putting energy into strengthening guards?
Optimising Quantified Expressions Weak Guards
Effects of Duplicate constraints
How bad is the effect of duplicate constraints due to weak guards?
in other words: is it worth putting energy into strengthening guards?
We analyse the effects on two naive models in solver Minion and Gecode:
Naive n-Queens Naive Golomb Ruler
Optimising Quantified Expressions Weak Guards
The Number of Duplicate Constraints
For both solvers: constant for n-Queens, linear within Golomb Ruler
0.95 1 1.1 1.5 2 2.5 25 50 100 1000 2500 Constraint Increase Factor Number of Constraints (when duplicates eliminated) Problem Classes golomb (Minion) golomb (Gecode) nQueensNaive (Minion) nQueensNaive (Gecode) same number of constraints
Optimising Quantified Expressions Weak Guards
Effect on Solving Performance
strong effect in Gecode, mild effect in Minion
0.5 0.9 1 1.1 1.5 2 2.5 3 3.5 0.0001 0.001 0.01 0.05 0.1 1 10 100 1200 Solving Time Increase Factor Solving Time with eliminated duplicates (sec) Problem Classes golomb (Minion) golomb (Gecode) nQueensNaive (Minion) nQueensNaive (Gecode) same solving time
Optimising Quantified Expressions Weak Guards
Conclusions for Weak Guards
Duplicate constraints can impair the solving performance
Optimising Quantified Expressions Weak Guards
Conclusions for Weak Guards
Duplicate constraints can impair the solving performance We have an idea on how to strengthen guards to address this redundancy
Optimising Quantified Expressions Weak Guards
Conclusions for Weak Guards
Duplicate constraints can impair the solving performance We have an idea on how to strengthen guards to address this redundancy We still need to implement/test/refine the algorithm..
Optimising Quantified Expressions Summary
Summary
There is scope for optimisations in quantifications
Optimising Quantified Expressions Summary
Summary
There is scope for optimisations in quantifications We can already provide some enhancement
Optimising Quantified Expressions Summary
Summary
There is scope for optimisations in quantifications We can already provide some enhancement But there is still a lot to investigate!
Optimising Quantified Expressions Summary