Source code for rstt.player.gaussian

from typing import Optional
from typeguard import typechecked

import rstt.config as cfg
from .playerTVS import PlayerTVS

import random


[docs] class GaussianPlayer(PlayerTVS): @typechecked def __init__(self, name: Optional[str] = None, mu: Optional[float] = None, sigma: Optional[float] = None) -> None: """Player with a level following a gaussian distribution Parameters ---------- name : str, optional A unique name to identify the player. By default None, in this case a name is randomly generated. mu : float, optional The player's mean level, also considered as the 'original' level. By default None, in this case a level is generated using a random distribution :class:`rstt.config.GAUSSIAN_PLAYER_MEAN_DIST with default parameters :class:`rstt.config.GAUSSIAN_PLAYER_MEAN_ARGS` sigma : float, optional The player's level standard deviation. By default None, in this case a random value is generated using a random distribution :class:`rstt.config.GAUSSIAN_PLAYER_SIGMA_DIST with default parameters :class:`rstt.config.GAUSSIAN_PLAYER_SIGMA_ARGS` Example ------- The figure below shows a population of 10 players generated with .create() without specifics params. .. image:: img/playertvs/GaussianPlayer.pdf :width: 800 """ # Genereate if needed a mu value mu = mu if mu is not None else cfg.GAUSSIAN_PLAYER_MEAN_DIST( **cfg.GAUSSIAN_PLAYER_MEAN_ARGS) # pass mu as level to Player super().__init__(name=name, level=mu) # generate if needed a sigma value self.__sigma = sigma if sigma is not None else cfg.GAUSSIAN_PLAYER_SIGMA_DIST( **cfg.GAUSSIAN_PLAYER_SIGMA_ARGS) def _update_level(self, *args, **kwars) -> None: self._PlayerTVS__current_level = random.gauss( self._BasicPlayer__level, self.__sigma)