@@ -16,26 +16,29 @@ def construct_nqueens_problem(n):
16
16
17
17
# Constraints list
18
18
CT = []
19
+ diag = []
19
20
20
21
CT += list (cp .AllDifferent (queens ).decompose ())
21
22
22
23
for i in range (n ):
23
24
for j in range (i + 1 , n ): # Compare each queen with every other queen once
24
- CT += [(queens [i ] - i != queens [j ] - j )] # Different major diagonals
25
- CT += [(queens [i ] + i != queens [j ] + j )] # Different minor diagonals
26
-
25
+ diag += [(queens [i ] - i != queens [j ] - j )] # Different major diagonals
26
+ diag += [(queens [i ] + i != queens [j ] + j )] # Different minor diagonals
27
27
28
28
# Add all collected constraints to the model
29
- model += CT
29
+ model += CT + diag
30
30
31
- C_T = toplevel_list (CT )
31
+ C_T = toplevel_list (CT + diag )
32
32
33
33
AV = absvar (2 )
34
- # lang = [AV[0] == AV[1], AV[0] != AV[1], AV[0] < AV[1], AV[0] > AV[1], AV[0] >= AV[1], AV[0] <= AV[1]] +
35
- lang = [AV [0 ] - AV [1 ] == constant for constant in range (- n , 2 * n )] + [AV [0 ] - AV [1 ] != constant for constant in range (- n , 2 * n )]
34
+ lang = [AV [0 ] == AV [1 ], AV [0 ] != AV [1 ], AV [0 ] < AV [1 ], AV [0 ] > AV [1 ], AV [0 ] >= AV [1 ], AV [0 ] <= AV [1 ]]
35
+ # lang = [AV[0] - AV[1] == constant for constant in range(-n, 2*n)] + [AV[0] - AV[1] != constant for constant in range(-n, 2*n)]
36
36
37
37
instance = ProblemInstance (variables = queens , params = parameters , language = lang , name = "nqueens" )
38
38
39
+ instance .construct_bias ()
40
+ instance .bias = instance .bias + diag
41
+
39
42
oracle = ConstraintOracle (list (set (toplevel_list (C_T ))))
40
43
41
44
print ("oracle constraints: " , len (oracle .constraints ))
0 commit comments