10个版本

0.2.4 2022年12月6日
0.2.3 2022年10月21日
0.1.6 2022年10月20日

#7 in #ranking

MIT许可证

8KB
117 代码行

elo-multiplayer

Rust软件包,用于根据ELO排名系统计算多人排名

提及

这个多人ELO算法是这篇文章中提到的公式的Rust实现:

它与正常ELO排名非常相似。但它是通过将所有玩家相互匹配来计算预期分数的。

$$ E_A = {\sum_{i=1, i\neq A}^{N}{1\over 1+10^{(R_{i}-R_{A})/D}}\over {N(N-1)/2}} $$

其中我们有玩家$A$,玩家数量$N$,玩家$A$的排名是$R_A$。

并且分数比通常的双人ELO排名要复杂一些。

我们可以选择两种不同的评分函数:一个是线性函数,另一个是指数函数。线性评分函数让每个人都有平等的机会,而指数评分函数则稍微偏向于胜利者,使其更具竞争性和更高的得分重要性。

$$ S_A^{linear}(p_A) = {N-p_A\over N(N-1)/2} $$

$$ S_A^{exp}(p_A,\alpha) = {\alpha^{N-p_A}-1 \over \sum_{i=1}^N (\alpha^{N-i}-1)} ; \alpha \in (1,\infty) $$

其中$p_A$是玩家的位置(第1名、第2名等),$\alpha$是指数函数的底数。

然后我们可以用以下公式计算玩家的新排名:

$$ R'{A} = R{A} + K(N-1)(S_{A}-E_{A}) $$

其中$K$是通常的K因子

安装

如果您使用的是Rust 1.62或更高版本,请使用cargo add来安装最新版本

cargo add elo-multiplayer

或者,您可以将以下内容手动添加到您的Cargo.toml文件中

[dependencies]
elo-multiplayer = "0.2.4"

示例用法

use elo_multiplayer::EloRank;

fn main() {
    let players: Vec<f64> = vec![1000.0, 1000.0, 1000.0, 1000.0];
    let elo = EloRank { players, ..Default::default() };
    let new_rankings: Vec<f64> = elo.calculate();
}

无运行时依赖