580 likes | 670 Views
Specialised (user defined) constraints in JChoco. 2 examples: max and subtour elimination. Consider the following contraint. This can be implemented in JChoco using primitives as follows. Due to Chris Unsworth. Could I define my own constraint to do this? Why would I want to do that?.
E N D
Specialised (user defined) constraints in JChoco 2 examples: max and subtour elimination
Consider the following contraint This can be implemented in JChoco using primitives as follows
Could I define my own constraint to do this? Why would I want to do that? • Possibly: • more compact • faster • more propagation
V[0] = max(v[1],v[2],…,v[n-1]) Define a constraint called Max that extends AbstractLargeIntConstraint
Methods to be implemented V[0] = max(v[1],v[2],…,v[n-1]) initiation inf: lower bound sup: upper bound removal of value instantiate
V[0] = max(v[1],v[2],…,v[n-1]) A demo Cart before the horse?
V[0] = max(v[1],v[2],…,v[n-1]) Note: output always has a 4 or a 5 in it
We haven’t used them yet, but …. Backtrackable Variables (Stored*)
The single successor model An array of n variables • “single successor” model of a graph • Limits what kind of graph can be modelled • out-degree of 1 But this aint enough
The single successor model NOT A TOUR! 1 2 3 0 5 6 7 4 4 5 6 7 0 1 2 3 We need subtour elimination
Yikes! Show me a picture! Associate with each variable next[i] the following reversible variables • When making an instantiation • next[i] = j • We now join the path that ends in i to path that starts with j • If the path involves less that n vertices/cities • next[e[j]] != s[i] • i.e. we cannot close that loop!
6 s[6] = 8 8 e[8] = 6 s[7] = 5 7 4 e[5] = 7 5 next[1] = 5 1 s[1] = 0 2 3 0 e[0] = 1
6 s[6] = 8 8 e[8] = 6 s[7] = 0 7 4 5 1 2 3 0 e[0] = 7
6 s[6] = 8 8 e[8] = 6 s[7] = 0 7 4 5 next[7] ≠ 0 Otherwise we have a subtour/loop This is the “propagation” . 1 2 3 0 e[0] = 7 Note: this is a constraint that may be used in a richer problem