Как сохранить и возобновить состояние сценария исследования шахматPython

Программы на Python
Ответить
Anonymous
 Как сохранить и возобновить состояние сценария исследования шахмат

Сообщение Anonymous »

У меня есть небольшой скрипт на Python, использующий шахматную библиотеку. Он просто перебирает все возможные игры из начального набора допустимых ходов. Он завершает ветвь, когда достигается максимальное количество слоев или когда найден мат. Кроме того, он зарегистрирует игру, если был поставлен мат.

Код: Выделить всё

import chess
import chess.pgn
import logging

logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(message)s',
filename='chess_game_exploration.log',  # Log to this file
filemode='w'  # Overwrite the log file every time the script runs
)

logger = logging.getLogger()
checkmate_count = 0
total_games_count = 0

def save_game(board, current_moves):
with open("checkmates.pgn", "a") as pgn_file:
game = chess.pgn.Game.from_board(board)
game.headers["Event"] = "Checkmate Search"
game.headers["PlyCount"] = str(len(current_moves))
pgn_file.write(str(game) + "\n\n")

def explore_games(board, current_moves, max_plies=5):
global checkmate_count, total_games_count

# Check if we hit checkmate
if board.is_checkmate():
checkmate_count += 1
total_games_count += 1
print("Check Mate Found")
save_game(board, current_moves)
return

total_games_count += 1
if total_games_count % 100000 == 0:
logger.info(f"Total games: {total_games_count} Total checkmates: {checkmate_count}")

# Stop if the maximum plies (moves) are reached
if len(current_moves) >= max_plies:
return

# Recursively explore each legal move
for move in board.legal_moves:
board.push(move)
explore_games(board.copy(), current_moves + [move], max_plies)
board.pop()  # Undo the move for backtracking

logger.info("Starting chess game exploration.")
board = chess.Board()
explore_games(board, [], max_plies=5)  # Set a reasonable number of plies (maximum moves)

logger.info(f"Total checkmates found: {checkmate_count}")
logger.info(f"Total full games computed: {total_games_count}")
Мой вопрос: как мне сохранить какое-то состояние, которое позже можно будет перезагрузить? Это будет длительный процесс. Таким образом, вполне вероятно, что компьютер будет перезагружен, или, возможно, потребуется переместить или изменить сценарий и перезапустить его. В таких случаях я бы хотел начать поиск снова с того места, где он остановился, не начиная заново.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ion-script
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»