Source code for chipiron.players.move_selector.random

"""
This module provides a random move selector for a chess game.

The Random class in this module implements a move selector that randomly selects a legal move from the given chess board.
It uses a random number generator to make the selection.

Example usage:
    random_selector = create_random(random_generator)
    move = random_selector.select_move(board, move_seed)

"""

import random
from dataclasses import dataclass, field
from typing import Literal

import chipiron.environments.chess_env.board as boards
from chipiron.environments.chess_env.move import moveUci
from chipiron.environments.chess_env.move.imove import moveKey
from chipiron.utils import seed

from .move_selector import MoveRecommendation
from .move_selector_types import MoveSelectorTypes


[docs]@dataclass class Random: """ Random move selector class. This class implements a move selector that randomly selects a legal move from the given chess board. Attributes: type (Literal[MoveSelectorTypes.Random]): The type of move selector (for serialization). random_generator (random.Random): The random number generator used for making the selection. """ type: Literal[MoveSelectorTypes.Random] # for serialization random_generator: random.Random = field(default_factory=random.Random)
[docs] def select_move(self, board: boards.IBoard, move_seed: seed) -> MoveRecommendation: """ Selects a random move from the given chess board. Args: board (boards.BoardChi): The chess board. move_seed (seed): The seed for the random number generator. Returns: MoveRecommendation: The selected move recommendation. """ self.random_generator.seed(move_seed) random_move_key: moveKey = self.random_generator.choice( board.legal_moves.get_all() ) random_move_uci: moveUci = board.get_uci_from_move_key(move_key=random_move_key) return MoveRecommendation(move=random_move_uci)
[docs]def create_random(random_generator: random.Random) -> Random: """ Creates a random move selector. Args: random_generator (random.Random): The random number generator to use. Returns: Random: The created random move selector. """ return Random(type=MoveSelectorTypes.Random, random_generator=random_generator)