在我的足球联盟中,我使用ELO评分(用户和球队一起玩)。一切都很好。我需要关于如何扩展公式的建议,以反映增加的系数和实力的球队球员。(队伍拥有1比10的力量,1=最弱的队伍,10支最强的球队)。
例如:
国内运动员系数为1000,来访运动员系数为1000,常备项目32的重要性,结果为1:0。
主场球员得到+16,-16客座球员。
现在结合球队的实力(例如,力量10/6),结果应该是这样的-> +12 / -12 =更强的球员和更强的球队获胜。
我不知道怎么编辑。谢谢。
ELO评级公式= http://www.eloratings.net/system.html
对不起我的英语不好。
=========================================================================
UR注释的新编辑和回答
有趣的想法,但不完全准确。我将试着用一个小例子来演示:
player1: spinning_plate (1000 elo积分) player2: Kcko (1000 elo积分)
示例:
spinning_plate Kcko击败了(如1:0),他们得到了积分+15 / -15 -> -这仍然很好,但是现在我们包括了球队的力量。
改进: spinning_plate效力巴萨(第10队),击败Kcko (以摩纳哥为例,实力较弱),spinning_plate得到的分数不到15分(因为他们有更好的球队优势。)两名球员的ELO得分是相同的,但他们球队的实力不一样)。
你明白问题的实质吗?
球员为不同的球队效力不同,这应该包括在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);
}发布于 2012-05-09 18:02:55
我认为在这种情况下最好的做法是将计算机的优势转化为初步的ELO评分。
我的例子来自国际象棋和网络象棋服务器,比如退职公务员联会。当一台电脑玩的时候,它就像人类的对手一样被对待--它得到了一个初步的等级,然后根据它对人类和计算机对手的胜负进行了评估。
但是,如果你没有足够的玩家,你可能会有一个引导问题,在强大的电脑可能无法得到一个体面的评分,因为所有其他球员都是弱者。在这种情况下,您可以简单地将1-10映射到MIN_ range MAX_RATING的范围内。MAX_RATING实际上不是最高评级,MIN_RATING可能不应该是0。ELO是一个相对的排名系统,绝对数字没有任何意义,所以你可以根据你的玩家基础来选择它们。在国际象棋,较高的评分是27-2800左右的祖母和最低的是400年代左右的新手,但没有改善。
这里的要点是,如果你给他们一个初步的评分,随着时间的推移,他们将向他们的“真正的评级”,因为他们将玩游戏与球员和相应的移动。
编辑
为什么不只是根据团队的差异来衡量权重常数呢?像这样的事怎么样:
K*(F(9-abs(s1-s2))) 其中F(x)是sigmoid函数,甚至是线性函数0.9->[1.0}]。这意味着一个评分相等的球队会得到完整的常数,而差异更大的球队则会缩小到零,或者你选择的任何球队。
我不知道我是否同意这个计算是处理这个问题的最好方法。如果你用这种方式,ELO的统计数据可能不适用,但如果不做更多的研究,我就没有更好的建议了。
https://stackoverflow.com/questions/10520490
复制相似问题