Advertisement
max2201111

best QKk c6

May 1st, 2024
619
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.42 KB | Science | 0 0
  1. import chess
  2.  
  3. def simplify_fen_string(fen):
  4.     parts = fen.split(' ')
  5.     simplified_fen = ' '.join(parts[:4])  # Zachováváme informace o pozici, hráči na tahu, rošádách a en passant
  6.     return simplified_fen
  7.  
  8. def minimax(board, depth, alpha, beta, maximizing_player, depth2, depths, position_count, memo):
  9.     position_count[0] += 1  # Přidáváme počet prozkoumaných pozic
  10.     if position_count[0] % 1000000 == 0:  # Každých 1 000 000 pozic
  11.         print(f"Prozkoumano {position_count[0]} pozic.")
  12.    
  13.     key = (board.fen(), maximizing_player, depth, alpha, beta)
  14.     if key in memo:
  15.         return memo[key]
  16.  
  17.     if depth == 0 or board.is_game_over():
  18.         eval = evaluate_board(board, depth2)
  19.         memo[key] = (None, eval)
  20.         return None, eval
  21.    
  22.     best_move = None
  23.    
  24.     if maximizing_player:
  25.         max_eval = float('-inf')
  26.         for move in board.legal_moves:
  27.             board.push(move)
  28.             _, eval = minimax(board, depth - 1, alpha, beta, False, depth2 + 1, depths, position_count, memo)
  29.             board.pop()
  30.             if eval > max_eval:
  31.                 max_eval = eval
  32.                 best_move = move
  33.             alpha = max(alpha, eval)
  34.             if beta <= alpha:
  35.                 break
  36.         memo[key] = (best_move, max_eval)
  37.        
  38.         if depth2 not in depths:
  39.             depths.append(depth2)  # Přidáváme hloubku do seznamu, pokud je následující v pořadí
  40.             print(f"Hloubka rekurze: {depth2}")  # Vytiskne aktuální hloubku rekurze pouze pokud byla přidána
  41.        
  42.      
  43.         return best_move, max_eval
  44.     else:
  45.         min_eval = float('inf')
  46.         for move in board.legal_moves:
  47.             board.push(move)
  48.             _, eval = minimax(board, depth - 1, alpha, beta, True, depth2 + 1, depths, position_count, memo)
  49.             board.pop()
  50.             if eval < min_eval:
  51.                 min_eval = eval
  52.                 best_move = move
  53.             beta = min(beta, eval)
  54.             if beta <= alpha:
  55.                 break
  56.         memo[key] = (best_move, min_eval)
  57.        
  58.         if depth2 not in depths:
  59.             depths.append(depth2)  # Přidáváme hloubku do seznamu, pokud je následující v pořadí
  60.             print(f"Hloubka rekurze: {depth2}")  # Vytiskne aktuální hloubku rekurze pouze pokud byla přidána
  61.        
  62.  
  63.        
  64.         return best_move, min_eval
  65.  
  66. def evaluate_board(board, depth):
  67.     if board.is_checkmate():
  68.         return -1000 + depth if board.turn == chess.WHITE else 1000 - depth
  69.     elif board.is_stalemate() or board.is_insufficient_material() or board.can_claim_fifty_moves():
  70.         return 0
  71.     return 0
  72.  
  73. # Nastavení startovní pozice
  74. start_fen = "8/4Q1K1/8/8/3k4/8/2q5/8 w - - 0 1"
  75.  
  76. start_fen = "8/5k2/8/8/8/8/8/1KQ5 w - - 0 1"
  77.  
  78. board = chess.Board(start_fen)
  79.  
  80. # Inicializace seznamu pro sledování hloubek, proměnné pro počet pozic, a memoizačního slovníku
  81. depths = []
  82. position_count = [0]  # Pole, které umožňuje sledování počtu volání
  83. memo = {}
  84.  
  85. # Spuštění minimaxu s maximální hloubkou 52
  86. best_move, best_score = minimax(board, 16, float('-inf'), float('inf'), True, 0, depths, position_count, memo)
  87. if best_move:
  88.     move_san = board.san(best_move)
  89.     print(f"Nejlepší tah z pozice {start_fen} je {move_san} s hodnocením {best_score}.")
  90. else:
  91.     print("Nebyl nalezen žádný tah, nebo je hra u konce. Skóre: ", best_score)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement