在我的足球联赛中,我使用(用户与球队一起比赛的)elo评分。一切正常。我需要关于如何扩展公式以反映团队成员的系数和力量的增加的建议(团队拥有1到10的力量,1=最弱的团队,10强的团队)。
例如:
国内选手的系数为1000,客队选手的系数为1000,固定项目的重要性为32,结果为1:0
主队球员得到+16,-16客队球员。
现在加入球队的力量(例如,10/6的力量),结果应该是这样->+12/-12=更强的球员和更强的球队获胜。
我不知道怎么编辑。谢谢您。
ELO评分公式=http://www.eloratings.net/system.html
对不起,我英语不好。
=========================================================================
新编辑和回复您的评论
有趣的想法,但不完全准确。我将尝试用一个小例子来演示:
player1:旋转板(1000个elo点)
玩家2:KCKO(1000点ELO积分)
例子:
旋转板KCKO失败(例如1:0),他们得到+15/-15分->这仍然很好,但现在我们包括了队伍的力量
改进:
为巴塞罗那足球俱乐部(10队)打球,击败了KCKO(弱队打球,如摩纳哥,7队),斯普林·普雷特只得到不到15分(因为他们有一支更好的球队的优势)。两名球员的埃洛积分相同,但他们球队的实力不一样)。
你明白问题的实质吗?
玩家在不同的队伍中使用不同的力量,这应该包含在函数ELO:)
它取自真实公式(http://www.eloratings.net/system.html)
我需要通过公式(s1和s2)来增加强度。
$k1 - elo points of player 1
$k2 - elo points of player 2
$konstanta = weight constant for the tournament played
$g1 = goals for player 1
$g2 = goals for player 2
$s1 = new my own constant = strenght of team of player 1
$s2 = new my own constant = strenght of team of player 2
function elo($k1, $k2, $konstanta = 0, $g1, $g2, $s1 = 0, $s2 = 0)
{
$arg_list = func_get_args();
//debug($arg_list
$s1 = (int) $s1;
$s2 = (int) $s2;
$G_rozdil = Abs($g1 - $g2); // golovy rozdil
// Konstanta za vysledek hry
if ($g1 > $g2)
$W = 1;
elseif ($g1 == $g2)
$W = 0.5;
else
$W = 0;
// Rating puvodni, za domaciho
$Ro = $koeficient1;
$K = $konstanta; // Zakladni konstanta pro hrane zapasy, cim dulezitejsi turnaj tim vyssi 20-60
// a dale se navysuje o urcity koeficient pocitaneho z rozdilu golu
if ($G_rozdil==2)
$K=$K*1.5;
elseif ($G_rozdil==3)
$K=$K*1.75;
elseif ($G_rozdil>3)
$K=$K*((1.75+(($G_rozdil-3)/8)));
$dr = $k1 - $k2; // 100 zvyhodnuje hosta , protoze hraje venku
// Konecny result
$Rn = $Ro + $K * ($W - $We);
// To dostanou domaci
$Body1 = Round($Rn - $Ro);
// Toto hoste
$Body2 = $Body1 * -1;
if ($Body1 == 0 || $Body2 == 0)
{
return array(0, 0);
}
return array($Body1, $Body2);
}
最佳答案
我认为在这种情况下最好的办法是把电脑的优势转化为初步的ELO评分。
我以国际象棋和互联网象棋服务器为例,比如FICS。当一台电脑玩的时候,它就像一个人类对手一样被对待——它得到一个初步的评分,然后根据它在与人类和电脑对手的比赛中是赢还是输来评分。
不过,你可能有一个自举问题,如果你没有足够的玩家在强大的电脑中,可能无法得到一个像样的评分,因为所有其他玩家都很弱在这种情况下,你可以简单地将你的1-10映射到最小值-最大值的范围。最高评级实际上不是最高评级,最低评级可能不应为0ELO是一个相对的排名系统,绝对数字没有任何意义,所以你可以根据你的玩家基数来选择。在国际象棋比赛中,大师级选手的得分较高,在27-2800之间,而400岁左右的新人得分最低,这些新人虽然能坚持下来,但没有进步。
这里主要的一点是,如果你给他们一个初步的评分,随着时间的推移,他们会走向他们的“真实评分”,因为他们会与玩家进行游戏,并相应地移动。
编辑
为什么不根据团队差异来调整权重常数呢?这样怎么样:
K*(F(9-abs(s1-s2)))
其中f(x)是一个sigmoid function甚至只是一个线性函数[0…9]>[1…0}。这意味着一个评分相等的团队可以得到完全的常数,而差异较大的团队可以缩小到零或任何你选择的值。
我不知道我是否同意这种计算是解决这个问题的最好方法如果你用这种方法,ELO的统计数据可能不适用,但如果不做更多的研究,我没有更好的建议。
关于php - 如何延长ELO等级?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10520490/