I got the following ELO class from PHPClasses website.
<?php
class elo_calculator {
public function rating($S1, $S2, $R1, $R2) {
if(empty($S1) or empty($S2) or empty($R1) or empty($R2))
return null;
if($S1 != $S2) {
if($S1 > $S2) {
$E = 120 - round(1 / (1 + pow(10, (($R2 - $R1) / 400))) * 120);
$R['R3'] = $R1 + $E;
$R['R4'] = $R2 - $E;
} else {
$E = 120 - round(1 / (1 + pow(10, (($R1 - $R2) / 400))) * 120);
$R['R3'] = $R1 - $E;
$R['R4'] = $R2 + $E;
}
} else {
if($R1 == $R2) {
$R['R3'] = $R1;
$R['R4'] = $R2;
} else {
if($R1 > $R2) {
$E = (120 - round(1 / (1 + pow(10, (($R1 - $R2) / 400))) * 120)) - (120 - round(1 / (1 + pow(10, (($R2 - $R1) / 400))) * 120));
$R['R3'] = $R1 - $E;
$R['R4'] = $R2 + $E;
} else {
$E = (120 - round(1 / (1 + pow(10, (($R2 - $R1) / 400))) * 120)) - (120 - round(1 / (1 + pow(10, (($R1 - $R2) / 400))) * 120));
$R['R3'] = $R1 + $E;
$R['R4'] = $R2 - $E;
}
}
}
$R['S1'] = $S1;
$R['S2'] = $S2;
$R['R1'] = $R1;
$R['R2'] = $R2;
$R['P1'] = ((($R['R3'] - $R['R1']) > 0)?"+" . ($R['R3'] - $R['R1']) : ($R['R3'] - $R['R1']));
$R['P2'] = ((($R['R4'] - $R['R2']) > 0)?"+" . ($R['R4'] - $R['R2']) : ($R['R4'] - $R['R2']));
return $R;
}
}
?>
I am trying to apply this to my food rating site.
Here is what i understand
Here is PHP implementation of the same. Can you help me understand the 4 variables and how should i use it ?
According to this algorithm, performance rating for an event is calculated in the following way: For each win, add your opponent's rating plus 400, For each loss, add your opponent's rating minus 400, And divide this sum by the number of played games.
It's time you create your own Facemash or a rating-based video game. Practice your coding skills by solving HackerEarth's challenges, which use the Elo algorithm.
ELO stands for Expanded Learning Opportunities.
Elo rating is used to determine the strength of chess players, and hence titles such as Grandmaster, International Master, and FIDE Master are awarded after players attain a certain level. The rating system is devised in a way which prevents a single player from taking a substantial lead in terms of points.
here on GitHub is the best php class for ELO rating system i've ever found: https://github.com/Chovanec/elo-rating
USAGE:
// player A elo = 1000
// player B elo = 2000
// player A lost
// player B win
$raging = new Rating(1000, 2000, 0, 1);
// player A elo = 1000
// player B elo = 2000
// player A draw
// player B draw
$raging = new Rating(1000, 2000, .5, .5);
1.S1 should be the current score of the first dish and S2 for the second dish you are comparing with
2.R1 is the rank of the current dish and R2 is the current rank of the second dish
2.if its not fair this system wouldn't be used in global games
3.you probably are going to use a database to save scores so lets say it should be like this
if($elo_calcualtor->rating(1,2,1,2)['p1'] < 0){$current_dish_score = 0;}
finally you should make the rating starts from ten, so it won't go below 0 and most likely won't go higher than 20
hope this helps
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With