Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import chess
- def simplify_fen_string(fen):
- """Odstraní z FEN řetězce části týkající se počtu tahů, zachovává pozici, hráče na tahu, rošády a en passant."""
- parts = fen.split(' ')
- simplified_fen = ' '.join(parts[:4]) # Zachováváme informace o pozici, hráči na tahu, rošádách a en passant
- return simplified_fen
- def minimax(board, depth, alpha, beta, maximizing_player,depth2):
- if depth == 0 or board.is_game_over():
- return None, evaluate_board(board,depth2)
- best_move = None
- if maximizing_player:
- max_eval = float('-inf')
- for move in board.legal_moves:
- board_copy = board.copy()
- board_copy.push(move)
- _, eval = minimax(board_copy, depth - 1, alpha, beta, False,depth2+1)
- if eval > max_eval:
- max_eval = eval
- best_move = move
- alpha = max(alpha, eval)
- if beta <= alpha:
- break
- return best_move, max_eval
- else:
- min_eval = float('inf')
- for move in board.legal_moves:
- board_copy = board.copy()
- board_copy.push(move)
- _, eval = minimax(board_copy, depth - 1, alpha, beta, True, depth2+1)
- if eval < min_eval:
- min_eval = eval
- best_move = move
- beta = min(beta, eval)
- if beta <= alpha:
- break
- return best_move, min_eval
- def evaluate_board(board, depth):
- if board.is_checkmate():
- # Při matu by měl být hráč, který je na tahu, penalizován.
- # Protože `board.turn` značí, kdo je na tahu, znamená to, že hráč na tahu byl matován.
- # Pokud je tedy bílý na tahu, znamená to, že černý dal mat (a naopak).
- return -1000 + depth if board.turn == chess.WHITE else 1000 - depth
- elif board.is_stalemate() or board.is_insufficient_material():
- return 0 # Remíza nebo nedostatek materiálu
- return 0 # Zjednodušená hodnota pro nekoncové pozice
- # Nastavení startovní pozice
- start_fen = "6k1/3Q4/8/8/4K3/8/8/8 w - - 0 1"
- start_fen = "8/6K1/8/3q1k2/8/8/8/8 w - - 0 1"
- start_fen = "5k2/7K/8/6P1/8/8/8/8 w - - 0 1"
- start_fen = "3k4/6P1/3K4/8/8/8/8/8 w - - 0 1"
- start_fen = "8/8/8/8/1B6/2KN4/k7/8 w - - 0 1"
- board = chess.Board(start_fen)
- # Spuštění minimaxu s maximální hloubkou 3
- best_move, best_score = minimax(board, 9, float('-inf'), float('inf'), True, 0)
- print(f"Nejlepší tah z pozice {start_fen} je {board.san(best_move)} s hodnocením {best_score}.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement