Possible bug with -ve domains in ic

From: Karen E Petrie <scomkep_at_zeus.hud.ac.uk>
Date: Thu 21 Nov 2002 09:23:27 PM GMT
Message-Id: <200211212123.VAA27480@dvorak.hud.ac.uk>
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.


Karen
Received 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