Advertisement
max2201111

petr good minimax -1000

Mar 23rd, 2024
586
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.34 KB | Science | 0 0
  1. import chess
  2.  
  3. def simplify_fen_string(fen):
  4.     """
  5.    Zjednoduší FEN řetězec odstraněním informací o počtu tahů, čímž zjednoduší a standardizuje jeho formát.
  6.    To umožňuje lepší porovnávání pozic bez zbytečných informací o historii hry.
  7.    """
  8.     parts = fen.split(' ')
  9.     simplified_fen = ' '.join(parts[:4])  # Zachová pouze informace o pozici a hráči na tahu
  10.     return simplified_fen
  11.  
  12. def evaluate_position(board):
  13.     """
  14.    Vyhodnotí šachovou pozici na základě pravidel šachu a vrátí numerické hodnocení.
  15.    Vrátí -1000 pro mat, 0 pro remízu a None, pokud hra může pokračovat.
  16.    """
  17.     if board.is_checkmate():
  18.         return -1000  # Mat
  19.     elif board.is_stalemate() or board.is_insufficient_material() or board.can_claim_draw():
  20.         return 0  # Remíza
  21.     else:
  22.         return None  # Hra může pokračovat
  23.  
  24. def update_AR(board, AR):
  25.     """
  26.    Aktualizuje slovník AR s novými šachovými pozicemi a jejich hodnoceními.
  27.    Používá frontu pro kontrolu a procházení nových pozic.
  28.    """
  29.     queue = list(AR.keys())  # Fronta pozic k prozkoumání
  30.     while queue:
  31.         fen = queue.pop(0)  # Odebere první pozici ve frontě
  32.         board.set_fen(fen)
  33.         for move in board.legal_moves:
  34.             board.push(move)
  35.             new_fen = simplify_fen_string(board.fen())
  36.             if new_fen not in AR:
  37.                 AR[new_fen] = evaluate_position(board)
  38.                 queue.append(new_fen)  # Přidá novou pozici do fronty pro další prozkoumání
  39.             board.pop()
  40.  
  41.  
  42. def print_draw_positions(AR):
  43.     """
  44.    Vypíše všechny pozice uložené v slovníku AR, které mají hodnotu odpovídající remíze (0).
  45.    """
  46.     print("Remízové pozice:")
  47.     for fen, value in AR.items():
  48.         if value == -1000:
  49.             print(f"FEN: {fen}, Hodnota: {value}")
  50.  
  51. def main():
  52.     """
  53.    Hlavní funkce, která inicializuje šachovnici s počáteční pozicí, aktualizuje slovník AR
  54.    s nově nalezenými pozicemi a nakonec vypíše pozice odpovídající remíze.
  55.    """
  56.     initial_fen = "8/8/8/3Q4/8/8/5k1K/8 w - - 0 1"
  57.     board = chess.Board(initial_fen)
  58.     AR = {simplify_fen_string(initial_fen): evaluate_position(board)}
  59.    
  60.     update_AR(board, AR)
  61.     print_draw_positions(AR)
  62.  
  63. if __name__ == "__main__":
  64.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement