@@ -10,87 +10,85 @@ class Minimax():
10
10
11
11
pos_value = [
12
12
# Rey
13
- [ 0.5 , 0.5 , 0.5 , 0 .0 , 0.0 , 0 .5 , 0.5 , 0.5 ,
14
- 0.5 , 0.5 , 0 .0 , 0.0 , 0.0 , 0.0 , 0 .5 , 0.5 ,
15
- - 1 .0 , - 2 .0 , - 2 .0 , - 2 .0 , - 2 .0 , - 2 .0 , - 2 .0 , - 1 .0 ,
16
- - 2 .0 , - 3 .0 , - 3 .0 , - 4.0 , - 4.0 , - 3 .0 , - 3 .0 , - 2 .0 ,
17
- - 3 .0 , - 4.0 , - 4.0 , - 5.0 , - 5.0 , - 4.0 , - 4.0 , - 3 .0 ,
18
- - 3 .0 , - 4.0 , - 4.0 , - 5.0 , - 5.0 , - 4.0 , - 4.0 , - 3 .0 ,
19
- - 3 .0 , - 4.0 , - 4.0 , - 5.0 , - 5.0 , - 4.0 , - 4.0 , - 3 .0 ,
20
- - 3 .0 , - 4.0 , - 4.0 , - 5.0 , - 5.0 , - 4.0 , - 4.0 , - 3 .0 ],
13
+ [2.0 , 2.0 , 2 .0 , 1.5 , 1 .5 , 2.0 , 2.0 , 2.0 ,
14
+ 2.0 , 2 .0 , 1.5 , 1.5 , 1.5 , 1 .5 , 2.0 , 2.0 ,
15
+ 2 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 2 .0 ,
16
+ 1 .0 , 1 .0 , 1 .0 , 0.5 , 0.5 , 1 .0 , 1 .0 , 1 .0 ,
17
+ 1 .0 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 1 .0 ,
18
+ 1 .0 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 1 .0 ,
19
+ 1 .0 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 1 .0 ,
20
+ 1 .0 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 1 .0 ],
21
21
# Reina
22
- [- 2.0 , - 1.0 , - 1.0 , - 0.5 , - 0.5 , - 1.0 , - 1.0 , - 2.0 ,
23
- - 1.0 , 0 .0 , 0 .5 , 0.0 , 0.0 , 0.0 , 0.0 , - 1.0 ,
24
- - 1.0 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.0 , - 1.0 ,
25
- 0 .0 , 0 .0 , 0.5 , 0.5 , 0.5 , 0 .5 , 0.0 , - 0.5 ,
26
- - 0 .5 , 0 .0 , 0.5 , 0.5 , 0.5 , 0 .5 , 0.0 , - 0.5 ,
27
- - 1.0 , 0 .0 , 0.5 , 0.5 , 0.5 , 0 .5 , 0.0 , - 1.0 ,
28
- - 1.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , - 1.0 ,
29
- - 2.0 , - 1.0 , - 1.0 , - 0.5 , - 0.5 , - 1.0 , - 1.0 , - 2.0 ],
22
+ [0.5 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 0.5 ,
23
+ 1.0 , 1.5 , 2 .0 , 1 .5 , 1.5 , 1.5 , 1.5 , 1.0 ,
24
+ 1.0 , 2.0 , 2.0 , 2.0 , 2.0 , 2.0 , 1.5 , 1.0 ,
25
+ 1 .0 , 1.5 , 2 .0 , 2.0 , 2.0 , 2.0 , 1 .5 , 1.0 ,
26
+ 1.0 , 1 .5 , 2 .0 , 2.0 , 2.0 , 2.0 , 1 .5 , 1.0 ,
27
+ 1.0 , 1.5 , 2 .0 , 2.0 , 2.0 , 2.0 , 1 .5 , 1.0 ,
28
+ 1.0 , 1.5 , 1.5 , 1.5 , 1.5 , 1.5 , 1.5 , 1.0 ,
29
+ 0.5 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 0.5 ],
30
30
# Alfiles
31
- [- 2.0 , - 1.0 , - 1.0 , - 1.0 , - 1.0 , - 1.0 , - 1.0 , - 2.0 ,
32
- - 1.0 , 0.5 , 0.0 , 0.0 , 0.0 , 0.0 , 0.5 , - 1.0 ,
33
- - 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , - 1.0 ,
34
- - 1.0 , 0.0 , 1.0 , 1.0 , 1.0 , 1.0 , 0.0 , - 1.0 ,
35
- - 1.0 , 0.5 , 0.5 , 1.0 , 1.0 , 0.5 , 0.5 , - 1.0 ,
36
- - 1.0 , 0.0 , 0.5 , 1.0 , 1.0 , 0.5 , 0.0 , - 1.0 ,
37
- - 1.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , - 1.0 ,
38
- - 2.0 , - 1.0 , - 1.0 , - 1.0 , - 1.0 , - 1.0 , - 1.0 , - 2.0
39
- ],
31
+ [0.5 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 0.5 ,
32
+ 1.0 , 1.5 , 1.0 , 1.0 , 1.0 , 1.0 , 1.5 , 1.0 ,
33
+ 1.0 , 2.0 , 2.0 , 2.0 , 2.0 , 2.0 , 2.0 , 1.0 ,
34
+ 1.0 , 1.0 , 2.0 , 2.0 , 2.0 , 2.0 , 1.0 , 1.0 ,
35
+ 1.0 , 1.5 , 1.5 , 2.0 , 2.0 , 1.5 , 1.5 , 1.0 ,
36
+ 1.0 , 1.0 , 1.5 , 2.0 , 2.0 , 1.5 , 1.0 , 1.0 ,
37
+ 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 ,
38
+ 0.5 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 0.5 ],
40
39
# Caballos
41
- [- 5.0 , - 4.0 , - 3.0 , - 3.0 , - 3.0 , - 3.0 , - 4.0 , - 5.0 ,
42
- - 4.0 , - 2.0 , 0 .0 , 0 .5 , 0 .5 , 0 .0 , - 2.0 , - 4.0 ,
43
- - 3.0 , 0 .5 , 1.0 , 1.5 , 1.5 , 1 .0 , 0 .5 , - 3.0 ,
44
- - 3.0 , 0 .0 , 1.5 , 2.0 , 2.0 , 1.5 , 0 .0 , - 3.0 ,
45
- - 3.0 , 0 .5 , 1.5 , 2.0 , 2.0 , 1.5 , 0.5 , - 3.0 ,
46
- - 3.0 , 0.0 , 1.0 , 1.5 , 1.5 , 1.0 , 0 .0 , - 3.0 ,
47
- - 4.0 , - 2.0 , 0.0 , 0 .0 , 0 .0 , 0 .0 , - 2 .0 , - 4.0 ,
48
- - 5.0 , - 4.0 , - 3.0 , - 3.0 , - 3.0 , - 3.0 , - 4.0 , - 5.0 ],
40
+ [0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ,
41
+ 0.5 , 0.5 , 1 .0 , 1 .5 , 1 .5 , 1 .0 , 0.5 , 0.5 ,
42
+ 0 .5 , 1.5 , 1.5 , 2.0 , 2 .0 , 1 .5 , 1.5 , 0.5 ,
43
+ 0.5 , 1 .0 , 2.0 , 2.0 , 2.0 , 2.0 , 1 .0 , 0.5 ,
44
+ 0 .5 , 1.5 , 2.0 , 2.0 , 2.0 , 2.0 , 1.5 , 0.5 ,
45
+ 0.5 , 1.0 , 1.5 , 2.0 , 2.0 , 1.5 , 1 .0 , 0.5 ,
46
+ 0.5 , 0.5 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 0.5 , 0.5 ,
47
+ 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ],
49
48
# Torres
50
- [ 0 .0 , 0 .0 , 0 .0 , 0 .5 , 0 .5 , 0 .0 , 0 .0 , 0 .0 ,
51
- 0.5 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0.5 ,
52
- - 0.5 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , - 0.5 ,
53
- - 0.5 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , - 0.5 ,
54
- - 0.5 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , - 0.5 ,
55
- - 0.5 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , - 0.5 ,
56
- - 0.5 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , - 0.5 ,
57
- 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 ],
49
+ [1 .0 , 1 .0 , 1 .0 , 1 .5 , 1 .5 , 1 .0 , 1 .0 , 1 .0 ,
50
+ 0.5 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 0.5 ,
51
+ 0.5 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 0.5 ,
52
+ 0.5 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 0.5 ,
53
+ 0.5 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 0.5 ,
54
+ 0.5 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 0.5 ,
55
+ 0.5 , 2 .0 , 2 .0 , 2 .0 , 2 .0 , 2 .0 , 2 .0 , 0.5 ,
56
+ 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 ],
58
57
# Peones
59
- [ 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 ,
60
- 0 .5 , 1.0 , 1.0 , - 2.0 , - 2.0 , 1.0 , 1.0 , 0 .5 ,
61
- 0.5 , - 0.5 , - 1.0 , 0 .0 , 0.0 , - 1.0 , - 0 .5 , 0 .5 ,
62
- 0 .0 , 0 .0 , 0 .0 , 2.0 , 2.0 , 0 .0 , 0 .0 , 0 .0 ,
63
- 0.5 , 0.5 , 1.0 , 2.5 , 2.5 , 1.0 , 0.5 , 0.5 ,
64
- 1.0 , 1.0 , 2.0 , 3 .0 , 3 .0 , 2.0 , 1.0 , 1.0 ,
65
- 5 .0 , 5 .0 , 5 .0 , 5 .0 , 5 .0 , 5 .0 , 5 .0 , 5 .0 ,
66
- 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ]
58
+ [1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 , 1 .0 ,
59
+ 1 .5 , 1.5 , 1.5 , 0.5 , 0.5 , 1.5 , 1.5 , 1 .5 ,
60
+ 1.5 , 0.5 , 0.5 , 1.0 , 1 .0 , 0.5 , 0 .5 , 1 .5 ,
61
+ 1 .0 , 1 .0 , 1 .0 , 2.0 , 2.0 , 1 .0 , 1 .0 , 1 .0 ,
62
+ 0.5 , 0.5 , 1.5 , 2.0 , 2.0 , 1.5 , 0.5 , 0.5 ,
63
+ 1.5 , 1.5 , 2.0 , 2 .0 , 2 .0 , 2.0 , 1.5 , 1.5 ,
64
+ 2 .0 , 2 .0 , 2 .0 , 2 .0 , 2 .0 , 2 .0 , 2 .0 , 2 .0 ,
65
+ 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ]
67
66
]
68
67
69
- piece_value = [150 , - 150 , 90 , - 90 , 30 , - 30 , 30 , - 30 , 50 , - 50 , 10 , - 10 ]
68
+ piece_value = [150 , 90 , 30 , 30 , 50 , 10 ]
70
69
71
70
def __init__ (self , player ):
72
71
self .player = player
73
72
74
- def evaluate_board (self , board ):
73
+ def evaluate (self , current ):
75
74
value = 0.0
76
- for piece in range (len (board .positions )):
77
- for pos in board .positions [piece ]:
78
- if pos == - 1 :
79
- continue
80
- if self .player == 0 :
81
- p = pos
82
- value += self .pos_value [piece // 2 ][p ] * self .piece_value [piece ]
83
- else :
84
- p = 56 - 8 * (pos // 8 ) + pos % 8
85
- value += self .pos_value [piece // 2 ][p ] * - self .piece_value [piece ]
75
+ for (pos , cell ) in enumerate (current .board ):
76
+ if cell == - 1 :
77
+ continue ;
78
+ piece , color = cell // 2 , cell % 2
79
+ p = pos if self .player == 0 else 56 - 8 * (pos // 8 ) + pos % 8
80
+ if color == self .player :
81
+ value += self .pos_value [piece ][p ] * self .piece_value [piece ]
82
+ else :
83
+ value -= self .pos_value [piece ][p ] * self .piece_value [piece ]
86
84
return value
87
85
88
86
def minimax (self , depth , board , alpha , betha , player ):
89
87
90
88
best_move = (0 , 0 , 0 , 0 )
91
89
92
90
if depth == 0 :
93
- return (self .evaluate_board (board ), best_move )
91
+ return (self .evaluate (board ), best_move )
94
92
95
93
all_moves = board .get_all_valid_moves (player )
96
94
0 commit comments