Chess-Elo

 view release on metacpan or  search on metacpan

lib/Chess/Elo.pm  view on Meta::CPAN

  my $A2 = 
    $A + $factor * ( $result - 
		     ( 1 / 
		       ( 1 + $Aexp )
		     )
		   )
      ;

  my $Bexp = 10 ** ( ($A - $B) / $divisor ) ;
  
  $result = 1 - $result;

  my $B2 = 
    $B + $factor * ( $result - 
		     ( 1 / 
		       ( 1 + $Bexp )
		     )
		   )
      ;

  ($A2, $B2)
}

1;
__END__
# Below is stub documentation for your module. You'd better edit it!

=head1 NAME

Chess::Elo - Perl module to calculate Chess "Elo" ratings

=head1 SYNOPSIS

  use Chess::Elo qw(:all);

  # Alice is going to thump Bob...
  my ($alice_elo, $bob_elo) = (2100, 1200);

  # Oh no, Alice lost to Bob!
  my $result = 0; # 0.5 for draw, 1 for win

  my @new_elo_alice_bob = elo ($alice, 0, $bob);
  use Data::Dumper; warn Dumper(\@new_elo_alice_bob);

  [
          '2068.17894295388',   # My, Alice took a hit on her rating :)
          '1231.82105704612'    # Bob is setting pretty 
  ];
             

=head1 DESCRIPTION

This module provides a single function, C<elo> which allows one
to calculate individual ratings based on performance. Typically, a
player
is given an initial provisional rating of 1600 points. 
In all cases, one gains and loses
points as a function of the playing strength of both parties and the result
of their encounter.

The formula used is:

    A2 = A1 + 32 (  G - ( 1 / ( 1 + 10 ** ( ( B1 -A1) / 400 ) ) ) )

=over 

=item A2 is Alice's post-game rating

=item A1 is Alice rating before the game against Bob

=item B1 is Bobs rating before the game against Alice

=item G is the game result, in this case:

              1, if A beats B

              0, if A loses to B

              0.5, if A draws to B

=back

=head1 METHODS

=head2 ($new_a, $new_b) = elo($elo_a, $result, $elo_b)

This function takes 3 arguments describing the result of a person with 
rating C<$elo_a> competing with the person with rating C<$elo_b>. 
The result argument is from the perspective of person A. Thus 
if A won $result is 1. If A lost, $result is 0. If A drew, $result is 0.5.

=head2 EXPORT

None by default, C<elo> upon request.


=head1 SEE ALSO

=over

=item * Christian Bartolomaeus' Elo rating module

Christian's module L<Games::Ratings|Games::Ratings>
provides a number of different rating methods, including
the one used by FIDE.

=item * The Perl Chess Mailing List:

L<http://www.yahoogroups.com/group/perl-chess>

=item * Wikipedia discussion on the Elo rating:

L<http://en.wikipedia.org/wiki/Elo_rating>

One part of this discussion deserves repetition:

 # 113 players have a rating of 2600 or above.
 # 16 players have a rating of 2700 or above.
 # 1 player (Garry Kasparov) has a rating of 2800 or above.

=item * Soccer teams rated by Elo:



( run in 0.612 second using v1.01-cache-2.11-cpan-99c4e6809bf )