Chess_with_AI / src /chess_ML /auxiliary_func.py
ncn2569's picture
initial deploy
53b9b08
import numpy as np
from chess import Board
def board_to_matrix(board: Board):
"""
Chuyển một Board -> mảng 13x8x8
- 0..5: các loại quân của trắng
- 6..11: các loại quân của đen
- 12: các ô mà một nước hợp lệ có thể đi tới
"""
arr = np.zeros((13, 8, 8), dtype=np.float32)
pieces = board.piece_map()
for sq, pc in pieces.items():
r, c = divmod(sq, 8)
# index kênh: offset màu + loại (loại bắt đầu từ 0)
color_offset = 0 if pc.color else 6
type_idx = pc.piece_type - 1
channel = color_offset + type_idx
arr[channel, r, c] = 1.0
# đánh dấu ô đích của tất cả nước hợp lệ ở kênh cuối cùng
for mv in board.legal_moves:
tr = mv.to_square
r_to, c_to = divmod(tr, 8)
arr[12, r_to, c_to] = 1.0
return arr
def create_input_for_nn(games): # hàm tạo dữ liệu đầu vào cho nn từ danh sách ván cờ
X = []
y = []
# Duyệt qua từng ván cờ
for game in games:
board = game.board()
for move in game.mainline_moves():
X.append(board_to_matrix(board))
y.append(move.uci())
board.push(move)
return np.array(X, dtype=np.float32), np.array(y)
def encode_moves(moves):
move_to_int = {move: idx for idx, move in enumerate(set(moves))}
return np.array([move_to_int[move] for move in moves], dtype=np.float32), move_to_int