The ECLiPSe banner with the version number and configuration (unless visible in the script): ECLiPSe Constraint Logic Programming System [kernel] Copyright Imperial College London and ICL Certain libraries copyright Parc Technologies Ltd GMP library copyright Free Software Foundation Version 5.5 #46, Thu Nov 21 00:13 2002 Machine type: Pentium 4 1.6 GHZ,pC Laptop Operating system name and version number: Red Hat Linux Version 8.0 Description of Problems: A: file: k4p2lexGACedgeNegDom.ecl Can't use -ve integers in domain declerations [eclipse 3]: X :: [-16..-1, 1..16]. syntax error: postfix/infix operator expected | X :: [-16..-1, 1..16]. | ^ here [eclipse 3]: B: file: k4p2lexGACedgeAllDom.ecl If I use the full -ve Integer domain than I am loosing solutions The model is: model(Node, Edge, N):- dim(Node, [8]), Node[1..8] :: 0..16, dim(Edge, [32]), Edge[1..32] :: [-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15,16], N is 16. The Constraints are: constrain(Node, Edge):- Edge[1] #= Node[1]-Node[2], Edge[2] #= Node[2]-Node[1], Edge[3] #= Node[2]-Node[4], Edge[4] #= Node[4]-Node[2], Edge[5] #= Node[3]-Node[4], Edge[6] #= Node[4]-Node[3], Edge[7] #= Node[1]-Node[3], Edge[8] #= Node[3]-Node[1], Edge[9] #= Node[1]-Node[5], Edge[10] #= Node[5]-Node[1], Edge[11] #= Node[2]-Node[6], Edge[12] #= Node[6]-Node[2], Edge[13] #= Node[3]-Node[7], Edge[14] #= Node[7]-Node[3], Edge[15] #= Node[4]-Node[8], Edge[16] #= Node[8]-Node[4], Edge[17] #= Node[5]-Node[6], Edge[18] #= Node[6]-Node[5], Edge[19] #= Node[6]-Node[8], Edge[20] #= Node[8]-Node[6], Edge[21] #= Node[7]-Node[8], Edge[22] #= Node[8]-Node[7], Edge[23] #= Node[5]-Node[7], Edge[24] #= Node[7]-Node[5], Edge[25] #= Node[5]-Node[8], Edge[26] #= Node[8]-Node[5], Edge[27] #= Node[6]-Node[7], Edge[28] #= Node[7]-Node[6], Edge[29] #= Node[1]-Node[4], Edge[30] #= Node[4]-Node[1], Edge[31] #= Node[2]-Node[3], Edge[32] #= Node[3]-Node[2], flatten_matrix(Edge, EdgeList), flatten_matrix(Node, NodeList), ic_global:alldifferent(EdgeList), ic_global:alldifferent(NodeList). This gives 10 non-isomorphic solutions, when I know there are 15. The same problem can be remodelled by adding 16 to the domains and to each of the constraints (as each of the edges is only defined in one constraint) i.e. model(Node, Edge, N):- dim(Node, [8]), Node[1..8] :: 0..16, dim(Edge, [32]), Edge[1..32] :: [0..15,17..32], N is 16. constrain(Node, Edge):- Edge[1] #= Node[1]-Node[2]+16, Edge[2] #= Node[2]-Node[1]+16, Edge[3] #= Node[2]-Node[4]+16, Edge[4] #= Node[4]-Node[2]+16, Edge[5] #= Node[3]-Node[4]+16, Edge[6] #= Node[4]-Node[3]+16, Edge[7] #= Node[1]-Node[3]+16, Edge[8] #= Node[3]-Node[1]+16, Edge[9] #= Node[1]-Node[5]+16, Edge[10] #= Node[5]-Node[1]+16, Edge[11] #= Node[2]-Node[6]+16, Edge[12] #= Node[6]-Node[2]+16, Edge[13] #= Node[3]-Node[7]+16, Edge[14] #= Node[7]-Node[3]+16, Edge[15] #= Node[4]-Node[8]+16, Edge[16] #= Node[8]-Node[4]+16, Edge[17] #= Node[5]-Node[6]+16, Edge[18] #= Node[6]-Node[5]+16, Edge[19] #= Node[6]-Node[8]+16, Edge[20] #= Node[8]-Node[6]+16, Edge[21] #= Node[7]-Node[8]+16, Edge[22] #= Node[8]-Node[7]+16, Edge[23] #= Node[5]-Node[7]+16, Edge[24] #= Node[7]-Node[5]+16, Edge[25] #= Node[5]-Node[8]+16, Edge[26] #= Node[8]-Node[5]+16, Edge[27] #= Node[6]-Node[7]+16, Edge[28] #= Node[7]-Node[6]+16, Edge[29] #= Node[1]-Node[4]+16, Edge[30] #= Node[4]-Node[1]+16, Edge[31] #= Node[2]-Node[3]+16, Edge[32] #= Node[3]-Node[2]+16, flatten_matrix(Edge, EdgeList), flatten_matrix(Node, NodeList), ic_global:alldifferent(EdgeList), ic_global:alldifferent(NodeList). This gives 15 solutions as expected. I have included the 3 full files to illustrate this. The command to run them is all_solutions(all_sym_funcs). If you need any more information than please feel free to ask, it is rather complicated to try and explain it here. I would also be intrested to know if this is really a bug or if -ve domains aren't supported. KarenReceived on Thu Nov 21 21:31:18 2002
This archive was generated by hypermail 2.1.8 : Wed 16 Nov 2005 06:08:18 PM GMT GMT