-
Notifications
You must be signed in to change notification settings - Fork 0
/
alpha-beta.py
63 lines (49 loc) · 1.49 KB
/
alpha-beta.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"""
Implement Alpha-Beta Pruning Algorithm
Experiment: 7
@Learner: TE-CO
Name:
Roll No:
Batch: 3
Academic Year: 2024
Sem - 6
"""
# Program:
import math
def alphabeta(nodeIndex, depth, alpha, beta, isMaximizing, scores):
if depth == 0 or len(scores) == 1:
return scores[0]
if isMaximizing:
bestValue = -math.inf
for i in range(len(scores) // 2):
value = alphabeta(nodeIndex * 2 + i, depth - 1, alpha, beta, False, scores)
bestValue = max(bestValue, value)
alpha = max(alpha, bestValue)
if alpha >= beta:
break
print("Value of alpha at node", nodeIndex, ":", alpha)
return bestValue
else:
bestValue = math.inf
for i in range(len(scores) // 2, len(scores)):
value = alphabeta(nodeIndex * 2 + i, depth - 1, alpha, beta, True, scores)
bestValue = min(bestValue, value)
beta = min(beta, bestValue)
if alpha >= beta:
break
print("Value of beta at node", nodeIndex, ":", beta)
return bestValue
scores = [9, 5, 2, 4, 12, 3, 23, 25]
print("The optimal value is:", alphabeta(0, 3, -math.inf, math.inf, True, scores))
"""
Output:
Value of alpha at node 4 : 9
Value of alpha at node 5 : 9
Value of alpha at node 6 : 9
Value of alpha at node 7 : 9
Value of beta at node 0 : 9
Value of alpha at node 6 : 9
Value of beta at node 1 : 9
Value of alpha at node 8 : 9
Value of beta at node 2 : 9
"""