-
Notifications
You must be signed in to change notification settings - Fork 0
/
board_conversion.py
80 lines (73 loc) · 2.01 KB
/
board_conversion.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import numpy as np
chess_dict = {
'p' : [1,0,0,0,0,0,0,0,0,0,0,0],
'P' : [0,0,0,0,0,0,1,0,0,0,0,0],
'n' : [0,1,0,0,0,0,0,0,0,0,0,0],
'N' : [0,0,0,0,0,0,0,1,0,0,0,0],
'b' : [0,0,1,0,0,0,0,0,0,0,0,0],
'B' : [0,0,0,0,0,0,0,0,1,0,0,0],
'r' : [0,0,0,1,0,0,0,0,0,0,0,0],
'R' : [0,0,0,0,0,0,0,0,0,1,0,0],
'q' : [0,0,0,0,1,0,0,0,0,0,0,0],
'Q' : [0,0,0,0,0,0,0,0,0,0,1,0],
'k' : [0,0,0,0,0,1,0,0,0,0,0,0],
'K' : [0,0,0,0,0,0,0,0,0,0,0,1],
'.' : [0,0,0,0,0,0,0,0,0,0,0,0],
}
value_dict = {
'p': [1, 0],
'P': [0, 1],
'n': [3, 0],
'N': [0, 3],
'b': [3, 0],
'B': [0, 3],
'r': [5, 0],
'R': [0, 5],
'q': [9, 0],
'Q': [0, 9],
'k': [0, 0],
'K': [0, 0],
'.': [0, 0]
}
def translate_board(board):
pgn = board.epd()
foo = []
pieces = pgn.split(" ", 1)[0]
rows = pieces.split("/")
for row in rows:
foo2 = []
for thing in row:
if thing.isdigit():
for i in range(0, int(thing)):
foo2.append(chess_dict['.'])
else:
foo2.append(chess_dict[thing])
foo.append(foo2)
return np.array(foo)
def board_matrix(board):
pgn = board.epd()
foo = []
pieces = pgn.split(" ", 1)[0]
rows = pieces.split("/")
for row in rows:
foo2 = []
for thing in row:
if thing.isdigit():
for i in range(0, int(thing)):
foo.append('.')
else:
foo.append(thing)
return np.array(foo)
def translate_move(move):
from_square = move.from_square
to_square = move.to_square
return np.array([from_square,to_square])
def filter_legal_moves(board,logits):
filter_mask = np.zeros(logits.shape)
legal_moves = board.legal_moves
for legal_move in legal_moves:
from_square = legal_move.from_square
to_square = legal_move.to_square
filter_mask[from_square,to_square] = 1
new_logits = logits*filter_mask
return new_logits