Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import chess
- def simplify_fen_string(fen):
- # Zjednodušení FEN řetězce pro lepší práci se šachovými pozicemi
- parts = fen.split(' ')
- simplified_fen = ' '.join(parts[:4]) # Ukládáme pouze informace o pozici a straně na tahu
- return simplified_fen
- def evaluate_position(board, depth):
- # Vyhodnocení šachové pozice s přihlédnutím k hloubce
- if board.is_checkmate():
- # Vrací skóre v závislosti na hloubce a tom, kdo je na tahu
- return -1000 + depth if board.turn == chess.WHITE else 1000 - depth
- if board.is_stalemate():
- return 0 # Vrací 0 pro pat
- return None # Vrací None pro běžné pozice bez rozhodujícího výsledku
- def minimax(board, depth, alpha, beta, maximizing_player, current_depth=0):
- # Implementace minimax algoritmu s alfa-beta ořezáváním a ošetřením None hodnot
- simplified_fen = simplify_fen_string(board.fen())
- if depth == 0 or board.is_game_over():
- result = evaluate_position(board, current_depth)
- return result if result is not None else 0 # Nahrazení None neutrálním skóre 0
- if maximizing_player:
- max_eval = float('-inf')
- for move in board.legal_moves:
- board.push(move)
- eval = minimax(board, depth-1, alpha, beta, False, current_depth + 1)
- board.pop()
- max_eval = max(max_eval, eval)
- alpha = max(alpha, eval)
- if beta <= alpha:
- break
- return max_eval
- else:
- min_eval = float('inf')
- for move in board.legal_moves:
- board.push(move)
- eval = minimax(board, depth-1, alpha, beta, True, current_depth + 1)
- board.pop()
- min_eval = min(min_eval, eval)
- beta = min(beta, eval)
- if beta <= alpha:
- break
- return min_eval
- def main():
- initial_fen = "1k6/3K1Q2/8/8/8/8/8/8 w - - 0 1"
- board = chess.Board(initial_fen)
- result = minimax(board, 4, float('-inf'), float('inf'), True)
- print("Výsledek minimax hodnocení pro initial_fen:", result)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement