alcalyn / elo
具有可靠性目的的Elo系统
This package is not auto-updated.
Last update: 2024-09-14 16:50:11 UTC
README
另一个在 PHP 中的 Elo 实现!但这个引入了 可靠性 目的。
可靠性目的
历史:你有一个优秀的玩家 A,他玩了很多游戏,得分达到了 2100 Elo。一个新玩家 B 订阅了游戏网站,因此他的 Elo 得分初始化为 1500。但实际上,他是一名非常优秀的玩家,比 A 更优秀,并且像碾蚂蚁一样击败了他。
问题:新玩家 B 将会因为击败了一个 2100 Elo 的玩家而赢得很多 Elo。这没问题。但是玩家 A (2100 Elo)会因为输给一个 1500 Elo 的玩家而失去很多 Elo,但实际上他是最强的。
事实上,新玩家的 Elo 得分是不可靠的,因此它不应影响其他玩家的 Elo 得分。
解决方案:这个库。它为 Elo A 和 Elo B 引入了一个 可靠性系数(介于 0.0 和 1.0 之间的十进制数)。
Composer
通过 composer 安装
{ "require": { "alcalyn/elo": "1.x" } }
如果您不使用 composer,可以手动下载库。
使用方法
- 实例化一个标准 Elo 系统
use Alcalyn/Elo/EloSystem; $eloSystem = new EloSystem();
- 从旧 Elo 计算更新后的 Elo 得分
/** * A player with 1650 Elo beat another with 1920 */ $updatedElos = $eloSystem->calculate(1650, 1920, 1); print_r($updatedElos); /* Output: Array ( [0] => 1663.2084157978 [1] => 1906.7915842022 ) */
- 为 Elo 得分设置 可靠性 系数
/** * A player with 1907 Elo (1.0 reliability) * lose against a new player with 1500 (and reliability to 0.0) */ $updatedElos = $eloSystem->calculate(1907, 1500, 0, 1.0, 0.0); print_r($updatedElos); /* Output: Array ( [0] => 1907 [1] => 1514.5978664353 ) */
- 使用方法别名进行赢、输或平局
/** * Method Aliases */ $elo->win(2100, 1500, 1.0, 0.0); $elo->lose(2100, 1500, 1.0, 0.0); $elo->draw(2100, 1500, 1.0, 0.0);
- 实例化一个具有不同 K 因子的系统(默认为 16)
/** * Use a different K factor in your Elo system */ $eloSystemK32 = new EloSystem(32);
详细示例
新玩家:
玩家 A 有 2100 Elo,可靠性 1.0
玩家 B 有 1500 Elo,可靠性 0.0
A 赢:预期结果,所以 B 会损失少量 Elo,而 A 则不赢。
B 赢:非预期结果,所以 B 会赢得大量 Elo,而 A 则不损失。
A 的 Elo 得分不会在和他打新玩家(具有不可靠 Elo 得分)的对战中更新。
(并且新玩家 B 应该在每场比赛后将其 Elo 可靠性提高大约 1/10,直到其可靠性达到 1)
$elo = new EloSystem(); /** * Result without reliability */ print_r($elo->lose(2100, 1500)); /* Output: Array ( [0] => 2084.4904548805 // lose -16 Elo [1] => 1515.5095451195 // win +16 Elo ) */ /** * Result with reliability */ print_r($elo->lose(2100, 1500, 1.0, 0.0)); /* Output: Array ( [0] => 2100 // don't lose Elo against new player [1] => 1515.5095451195 // win +16 Elo vs reliable Elo score ) */
另一个示例:两名新手玩家:
玩家 A 有 1500 Elo,可靠性 0.0
玩家 B 有 1500 Elo,可靠性 0.0
有两个新玩家,因此他们的可靠性都是 0.0:算法会将他们视为可靠性都是 1.0。
如果玩家 A 的 Elo 可靠性等于 0.4,而玩家 B 等于 0.0,算法会将其相加 +0.6,以便其中一个可靠性达到 1.0。
许可证
本项目采用 MIT 许可证