@@ -86,7 +86,7 @@ def chance_node(state, action):
86
86
return max (game .actions (state ), key = lambda a : chance_node (state , a ), default = None )
87
87
88
88
89
- def alpha_beta_search (state , game ):
89
+ def alpha_beta_search (state , game , avoid_pruning = False ):
90
90
"""Search game to determine best action; use alpha-beta pruning.
91
91
As in [Figure 5.7], this version searches all the way to the leaves."""
92
92
@@ -99,7 +99,7 @@ def max_value(state, alpha, beta):
99
99
v = - np .inf
100
100
for a in game .actions (state ):
101
101
v = max (v , min_value (game .result (state , a ), alpha , beta ))
102
- if v >= beta :
102
+ if v >= beta and not avoid_pruning :
103
103
print ("pruning: {}" .format (v ))
104
104
print ("state: {}" .format (state ))
105
105
return v
@@ -115,9 +115,10 @@ def min_value(state, alpha, beta):
115
115
v = np .inf
116
116
for a in game .actions (state ):
117
117
v = min (v , max_value (game .result (state , a ), alpha , beta ))
118
- if v <= alpha :
118
+ if v <= alpha and not avoid_pruning :
119
119
print ("pruning: {}" .format (v ))
120
120
print ("state: {}" .format (state ))
121
+ # How can we ensure that a sub-node in which terminal_test is true is not being pruned? - Ryan Jackson
121
122
return v
122
123
prev_beta = copy .deepcopy (beta )
123
124
beta = min (beta , v )
@@ -137,6 +138,7 @@ def min_value(state, alpha, beta):
137
138
if v > best_score :
138
139
best_score = v
139
140
best_action = a
141
+
140
142
return best_action
141
143
142
144
0 commit comments