Source code for chipiron.scripts.base_tree_exploration.base_tree_exploration

"""
This module contains the implementation of the BaseTreeExplorationScript class.

The BaseTreeExplorationScript class is responsible for running a script that performs base tree exploration in a chess game.
"""

import os
import random
from dataclasses import dataclass, field

from chipiron.environments.chess_env.board.factory import create_board
from chipiron.players.boardevaluators.table_base.factory import create_syzygy
from chipiron.players.factory import create_player
from chipiron.players.player_args import PlayerArgs
from chipiron.players.player_ids import PlayerConfigTag
from chipiron.scripts.chipiron_args import ImplementationArgs
from chipiron.scripts.script import Script
from chipiron.scripts.script_args import BaseScriptArgs


[docs]@dataclass class BaseTreeExplorationArgs: base_script_args: BaseScriptArgs = field(default_factory=BaseScriptArgs) implementation_args: ImplementationArgs = field(default_factory=ImplementationArgs)
[docs]class BaseTreeExplorationScript: """ The BaseTreeExplorationScript """ args_dataclass_name: type[BaseTreeExplorationArgs] = BaseTreeExplorationArgs base_experiment_output_folder = os.path.join( Script.base_experiment_output_folder, "base_tree_exploration/outputs/" ) base_script: Script[BaseTreeExplorationArgs] def __init__(self, base_script: Script[BaseTreeExplorationArgs]) -> None: """ Initializes a new instance of the BaseTreeExploration class. Args: base_script (Script): The base script to be used for tree exploration. """ self.base_script = base_script # Calling the init of Script that takes care of a lot of stuff, especially parsing the arguments into args self.args: BaseTreeExplorationArgs = self.base_script.initiate( experiment_output_folder=self.base_experiment_output_folder, )
[docs] def run(self) -> None: """ Runs the base tree exploration script. """ syzygy = create_syzygy(use_rust=self.args.implementation_args.use_rust_boards) player_one_args: PlayerArgs = PlayerConfigTag.UNIFORM.get_players_args() # player_one_args.main_move_selector.stopping_criterion.tree_move_limit = 1000000 random_generator = random.Random() random_generator.seed(self.args.implementation_args.use_rust_boards) player = create_player( args=player_one_args, syzygy=syzygy, random_generator=random_generator, implementation_args=self.args.implementation_args, universal_behavior=self.args.base_script_args.universal_behavior, ) board = create_board( use_rust_boards=self.args.implementation_args.use_rust_boards, use_board_modification=self.args.implementation_args.use_board_modification, ) player.select_move( fen_plus_history=board.into_fen_plus_history(), seed_int=self.args.implementation_args.use_rust_boards, )
[docs] def terminate(self) -> None: """ Terminates the base tree exploration script. """ self.base_script.terminate()