NAME

Games::Ratings::LogisticElo - calculate changes to logistic curve Elo ratings

SYNOPSIS

use Games::Ratings::LogisticElo;
my $player = Games::Ratings::LogisticElo->new;
$player->set_rating(2240);
$player->set_coefficient(15);
$player->add_game({
  opponent_rating => 2114,
  result => 'win', ## or 'draw' or 'loss'
});
say 'Rating change: ' . $player->get_rating_change;
say 'New rating: ' . $player->get_new_rating;

use Games::Ratings::LogisticElo qw/multi_elo/;
my @results = [2240, 3], [2114, 2], [2300, 1];
my @new_ratings = multi_elo 15, @results;
say 'Rating changes for this comp: ', join ', ',
  map { $new_ratings[$_] - $results[$_]->[0] } 0 .. $#results;

DESCRIPTION

This module provides methods to calculate Elo rating changes. Unlike Games::Ratings::Chess::FIDE, this Elo implementation uses the logistic distribution instead of the standard distribution.

This module can be used both for a single player who played multiple rated games, and for a single competition with an arbitrary number of players.

FUNCTIONS

Games::Ratings::LogisticElo inherits from Games::Ratings, see that module's documentation for information about the inherited methods.

Nothing is exported by default, the function multi_elo can be exported on request.

$self->get_rating_change

Computes and returns how much a player's rating changes after the games added.

$self->get_new_rating

Adds the result of get_rating_change to the old rating of the player and returns this.

multi_elo [$coefficient], @results

Computes the ratings after a competition with an arbitrary number of players.

The first argument is the coefficient. It is optional, with the default coefficient being 15. The next arguments are the results of the players. Each result is a 2-element arrayref, the first element being the Elo rating of the player, and the second element being the score that player obtained. The scores are only used to compare players, their absolute values are irrelevant.

The return value is a list (in list context) or arrayref (in scalar context) of ratings of all players after the competition, in the same order as the arguments.

This function computes the ratings by considering that each player played a game with every other player, with the winner of every game being the player who got the highest score.

SEE ALSO

Games::Ratings::Chess::FIDE, Games::Ratings

https://en.wikipedia.org/wiki/Elo_rating

AUTHOR

Marius Gavrilescu <marius@ieval.ro>

COPYRIGHT AND LICENSE

Copyright (C) 2016 by Marius Gavrilescu

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.22.2 or, at your option, any later version of Perl 5 you may have available.