失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Elo rating system(测试版)

Elo rating system(测试版)

时间:2022-11-21 04:55:57

相关推荐

Elo rating system(测试版)

/wiki/Elo_rating_system

埃洛等级分系统(Elo Rating System)是指由匈牙利裔美国物理学家阿帕德·埃洛创建的一个衡量各类对弈活动水平的评价方法,是当今对弈水平评估的公认的权威方法。

假设A的分数为(R_A),B的分数为(R_B),那么A战胜B的期望为:

EA=11+10RB–RA400E_A = \frac 1 {1 + 10^{\frac {R_B – R_A} {400} } }EA​=1+10400RB​–RA​​1​

把A和每个人都计算一次期望再求和,然后用总人数减去这个和,就可以当排名的期望:

exprankA=13–∑i=1n11+10Ri–RA400exprank_A = 13 – \sum_{i = 1}^n \frac 1 {1 + 10^{\frac {R_i – R_A} {400} } }exprankA​=13–i=1∑n​1+10400Ri​–RA​​1​

于是最后A的分数就会变为

finalscoreA=originalscoreA+k∗(exprankA–endrankA)finalscore_A = originalscore_A + k * (exprank_A – endrank_A)finalscoreA​=originalscoreA​+k∗(exprankA​–endrankA​)

这里的k是一个系数,暂时取16。

#include<bits/stdc++.h>using namespace std;map<string, pair<int, int> > msp;vector<pair<int, string> > sp;map<string, double> msd;map<string, int> ori;bool cmp(pair<int, string> a, pair<int, string> b){return a.first > b.first;}int main(){freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);string s;double td;int ti;for (int i = 1; i <= 13; ++i){cin >> s >> ti;cin >> msp[s].first >> msp[s].second;cin >> td;}for (auto e : msp){if (e.second.second == 0){sp.push_back(make_pair(e.second.first, e.first));continue;}double exp = 0;for (auto e2 : msp){if (e2.second.second == 0) continue;exp += 1 / (1 + pow(10.0, (e2.second.first - e.second.first) / 400.0));}exp = 13.0 - exp;msd[e.first] = exp;ori[e.first] = int(16.0 * (exp - e.second.second));sp.push_back(make_pair(int(e.second.first + 16.0 * (exp - e.second.second)), e.first));}sort(sp.begin(), sp.end(), cmp);for (auto e : sp){cout << e.second << " " << ori[e.second] << " " << e.first << " " << msd[e.second] << endl;}fclose(stdin); fclose(stdout);return 0;}

如果觉得《Elo rating system(测试版)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。