zelenin/elo

PHP 实现的 Elo 评级系统

0.0.1 2014-06-17 00:00 UTC

This package is not auto-updated.

Last update: 2024-09-10 02:15:57 UTC


README

PHP 实现的 Elo 评级系统

安装

Composer

推荐通过 Composer 安装此扩展。

可以运行

php composer.phar require zelenin/elo "dev-master"

或者将以下内容添加到您的 composer.json 文件的 require 部分

"zelenin/elo": "dev-master"

使用方法

创建具有当前评分的两个玩家

use Zelenin\Elo\Player;

$player1 = new Player(1200);
$player2 = new Player(800);

创建比赛

use Zelenin\Elo\Match;

$match = new Match($player1, $player2);
$match->setScore(1, 0)
    ->setK(32)
    ->count();

获取玩家

$player1 = $match->getPlayer1();
$player2 = $match->getPlayer2();

获取新的评分

$newRating1 = $player1->getRating();
$newRating2 = $player2->getRating();

高级使用

如果您想将此库用于非传统 Elo 体育(如足球、冰球、篮球)等,您可以设置额外的处理器以设置进球指数和主场修正。

use Zelenin\Elo\Match;
use Zelenin\Elo\Player;

$player1 = new Player(1200);
$player2 = new Player(800);

$goalIndexHandler = function ($score1, $score2) {
    $diff = abs($score1 - $score2);
    if ($diff > 0) {
        return sqrt($diff);
    }
    return 1;
};

$homeCorrectionHandler = function ($home, $diff) {
    $coefficient = 100;
    if ($home == 1) {
        return $diff - $coefficient;
    }
    if ($home == 2) {
        return $diff + $coefficient;
    }
    return $diff;
};

$match = new Match($player1, $player2);
$match->setScore(1, 0)
    ->setK(32)
    ->setGoalIndexHandler($goalIndexHandler)
    ->setHome(2)
    ->setHomeCorrectionHandler($homeCorrectionHandler)
    ->count();

$newRating1 = $player1->getRating();
$newRating2 = $player2->getRating();

信息

有关 Elo 评级系统 的更多信息,请参阅 Wiki。

作者

Aleksandr Zelenin,电子邮件: aleksandr@zelenin.me