Source code for rstt.ranking.standard.consensus

from rstt.ranking import Ranking
from rstt.ranking.datamodel import KeyModel
from rstt.ranking.inferer import PlayerLevel, PlayerWinPRC
from rstt.ranking.observer import PlayerChecker
from rstt.stypes import SPlayer


import numpy as np


[docs] class BTRanking(Ranking): def __init__(self, name: str = '', players: list[SPlayer] | None = None): """Consensus Ranking For the Bradley-Terry Model Ranking based on the player's level() method. This also work for Time varying player, inherited class from :class:`rstt.player.playerTVS.PlayerTVS`, But it needs to be updated manually everytime player's level is updated. Attributes ---------- datamodel: :class:`rstt.ranking.datamodel.KeyModel` (float as rating type) backend: :class:`rstt.ranking.inferer.PlayerLevel` handler: :class:`rstt.ranking.observer.PlayerChecker` Parameters ---------- name : str, optional A name to identify the ranking, by default '' players : _type_, optional SPlayer to add to the ranking, by default None .. warning:: BTRanking validity is limited to Bradley-Terry like models and is not suited for simulation using 'None-transitive' level. """ super().__init__(name=name, datamodel=KeyModel(factory=lambda x: x.level()), backend=PlayerLevel(), handler=PlayerChecker(), players=players)
[docs] class WinRate(Ranking): def __init__(self, name: str, default: float = -1.0, scope: int = np.iinfo(np.int32).max, players: list[SPlayer] | None = None): """Ranking based on Win rate Ranking that tracks the winrate of :class:`rstt.player.player.Player`. The update function does not take any parameters, win rate is computed directly with the player's game history. Attributes ---------- datamodel :class:`rstt.ranking.datamodel.KeyModel` (float as rating) backend :class:`rstt.ranking.inferer.PlayerWinPRC` handler :class:`rstt.ranking.observer.PlayerChecker` Parameters ---------- name : str, optional A name to identify the ranking, by default '' default : float, optional A default rating value for when player have no game in their history, by default -1.0 players : Optional[List[SPlayer]], optional Players to register in the ranking, by default None """ super().__init__(name, datamodel=KeyModel(default=default), backend=PlayerWinPRC(default=default, scope=scope), handler=PlayerChecker(), players=players) # incase player already played games self.update()
[docs] def forward(self, *args, **kwargs): self.handler.handle_observations( datamodel=self.datamodel, infer=self.backend, players=self.players())