10个版本
0.2.4 | 2022年12月6日 |
---|---|
0.2.3 | 2022年10月21日 |
0.1.6 | 2022年10月20日 |
#7 in #ranking
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();
}