@@ -33,22 +33,22 @@ class CSP(search.Problem):
33
33
curr_domains[var] Slot: remaining consistent values for var
34
34
Used by constraint propagation routines.
35
35
The following methods are used only by graph_search and tree_search:
36
- succ (a) Return a list of (action, state) pairs
36
+ successor (a) Return a list of (action, state) pairs
37
37
goal_test(a) Return true if all constraints satisfied
38
38
The following are just for debugging purposes:
39
39
nassigns Slot: tracks the number of assignments made
40
40
display(a) Print a human-readable representation
41
41
42
- >>> search.depth_first_tree_search (australia)
43
- <Node {'Q': 'B', 'T': 'B', 'WA': 'B', 'V': 'B', 'SA': 'G', 'NT': 'R', 'NSW': 'R'} >
42
+ >>> search.depth_first_graph_search (australia)
43
+ <Node (('WA', 'B'), ('Q', 'B'), ('T', 'B'), ( 'V', 'B'), ( 'SA', 'G'), ( 'NT', 'R'), ( 'NSW', 'R')) >
44
44
"""
45
45
46
46
def __init__ (self , vars , domains , neighbors , constraints ):
47
47
"Construct a CSP problem. If vars is empty, it becomes domains.keys()."
48
48
vars = vars or domains .keys ()
49
49
update (self , vars = vars , domains = domains ,
50
50
neighbors = neighbors , constraints = constraints ,
51
- initial = {} , curr_domains = None , pruned = None , nassigns = 0 )
51
+ initial = () , curr_domains = None , pruned = None , nassigns = 0 )
52
52
53
53
def assign (self , var , val , assignment ):
54
54
"""Add {var: val} to assignment; Discard the old value if any.
@@ -101,21 +101,22 @@ def display(self, assignment):
101
101
102
102
## These methods are for the tree and graph search interface:
103
103
104
- def successor (self , assignment ):
104
+ def successor (self , state ):
105
105
"Return a list of (action, state) pairs."
106
- if len (assignment ) == len (self .vars ):
106
+ if len (state ) == len (self .vars ):
107
107
return []
108
108
else :
109
+ assignment = dict (state )
109
110
var = find_if (lambda v : v not in assignment , self .vars )
110
111
result = []
111
112
for val in self .domains [var ]:
112
113
if self .nconflicts (var , val , assignment ) == 0 :
113
- a = assignment .copy (); a [var ] = val
114
- result .append (((var , val ), a ))
114
+ result .append (((var , val ), state + ((var , val ),)))
115
115
return result
116
116
117
- def goal_test (self , assignment ):
117
+ def goal_test (self , state ):
118
118
"The goal is to assign all vars, with all constraints satisfied."
119
+ assignment = dict (state )
119
120
return (len (assignment ) == len (self .vars ) and
120
121
every (lambda var : self .nconflicts (var , assignment [var ],
121
122
assignment ) == 0 ,
0 commit comments