1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | $ $ Traffic lights problem in Essence' $ $ CSPLib problem 16 $ """ $ Specification: $ Consider a four way traffic junction with eight traffic lights. Four of $ the traffic lights are for the vehicles and can be represented by the $ variables V1 to V4 with domains $ {r,ry,g,y} (for red, red-yellow, green and yellow). $ The other four traffic lights are for the pedestrians and can be $ represented by the variables P1 to P4 with domains {r,g}. $ $ The constraints on these variables can be modelled by quaternary $ constraints on $ (Vi, Pi, Vj, Pj ) for 1<=i<=4, j=(1+i)mod 4 which allow just the tuples $ {(r,r,g,g), (ry,r,y,r), (g,g,r,r), (y,r,ry,r)}. $ $ It would be interesting to consider other types of junction (e.g. five roads $ intersecting) as well as modelling the evolution over time of the $ traffic light sequence. $ ... $ $ Results $ Only 2^2 out of the 2^12 possible assignments are solutions. $ $ (V1,P1,V2,P2,V3,P3,V4,P4) = $ {(r,r,g,g,r,r,g,g), (ry,r,y,r,ry,r,y,r), (g,g,r,r,g,g,r,r), (y,r,ry,r,y,r,ry,r)} $ [(1,1,3,3,1,1,3,3), ( 2,1,4,1, 2,1,4,1), (3,3,1,1,3,3,1,1), (4,1, 2,1,4,1, 2,1)} $ $ $ The problem has relative few constraints, but each is very tight. $ Local propagation appears to be rather ineffective on this problem. $ """ $ $ This Essence' model was created by Hakan Kjellerstrand, hakank@gmail.com $ See also my Essence' page: http://www.hakank.org/savile_row/ $ $ Licenced under CC-BY-4.0 : http://creativecommons.org/licenses/by/4.0/ language ESSENCE' 1.0 letting n be 4 letting range be domain int (1..n) letting r be 1 $ red letting ry be 2 $ red-yellow letting g be 3 $ green letting y be 4 $ yellow letting allowed = [ [r,r,g,g], [ry,r,y,r], [g,g,r,r], [y,r,ry,r] ] letting Cars be domain int (r,ry,g,y) letting Pedestrians be domain int (r,g) $ decision variables find V: matrix indexed by [range] of Cars find P: matrix indexed by [range] of Pedestrians such that forall i, j: range . (j = (1+i) % 4) => table ([V[i], P[i], V[j], P[j]], allowed) |