Advertisement
max2201111

good 997

Apr 24th, 2024
874
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.15 KB | Science | 0 0
  1. import chess
  2.  
  3. def simplify_fen_string(fen):
  4.     # Zjednodušení FEN řetězce pro lepší práci se šachovými pozicemi
  5.     parts = fen.split(' ')
  6.     simplified_fen = ' '.join(parts[:4])  # Ukládáme pouze informace o pozici a straně na tahu
  7.     return simplified_fen
  8.  
  9. def evaluate_position(board, depth):
  10.     # Vyhodnocení šachové pozice s přihlédnutím k hloubce
  11.     if board.is_checkmate():
  12.         # Vrací skóre v závislosti na hloubce a tom, kdo je na tahu
  13.         return -1000 + depth if board.turn == chess.WHITE else 1000 - depth
  14.     if board.is_stalemate():
  15.         return 0  # Vrací 0 pro pat
  16.     return None  # Vrací None pro běžné pozice bez rozhodujícího výsledku
  17.  
  18. def minimax(board, depth, alpha, beta, maximizing_player, current_depth=0):
  19.     # Implementace minimax algoritmu s alfa-beta ořezáváním a ošetřením None hodnot
  20.     simplified_fen = simplify_fen_string(board.fen())
  21.  
  22.     if depth == 0 or board.is_game_over():
  23.         result = evaluate_position(board, current_depth)
  24.         return result if result is not None else 0  # Nahrazení None neutrálním skóre 0
  25.  
  26.     if maximizing_player:
  27.         max_eval = float('-inf')
  28.         for move in board.legal_moves:
  29.             board.push(move)
  30.             eval = minimax(board, depth-1, alpha, beta, False, current_depth + 1)
  31.             board.pop()
  32.             max_eval = max(max_eval, eval)
  33.             alpha = max(alpha, eval)
  34.             if beta <= alpha:
  35.                 break
  36.         return max_eval
  37.     else:
  38.         min_eval = float('inf')
  39.         for move in board.legal_moves:
  40.             board.push(move)
  41.             eval = minimax(board, depth-1, alpha, beta, True, current_depth + 1)
  42.             board.pop()
  43.             min_eval = min(min_eval, eval)
  44.             beta = min(beta, eval)
  45.             if beta <= alpha:
  46.                 break
  47.         return min_eval
  48.  
  49. def main():
  50.     initial_fen = "1k6/3K1Q2/8/8/8/8/8/8 w - - 0 1"
  51.     board = chess.Board(initial_fen)
  52.     result = minimax(board, 4, float('-inf'), float('inf'), True)
  53.     print("Výsledek minimax hodnocení pro initial_fen:", result)
  54.  
  55. if __name__ == "__main__":
  56.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement