首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何延长ELO评分?

如何延长ELO评分?
EN

Stack Overflow用户
提问于 2012-05-09 16:45:32
回答 1查看 1.3K关注 0票数 1

在我的足球联盟中,我使用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)来增加强度

代码语言:javascript
复制
$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);
}
EN

回答 1

Stack Overflow用户

发布于 2012-05-09 18:02:55

我认为在这种情况下最好的做法是将计算机的优势转化为初步的ELO评分。

我的例子来自国际象棋和网络象棋服务器,比如退职公务员联会。当一台电脑玩的时候,它就像人类的对手一样被对待--它得到了一个初步的等级,然后根据它对人类和计算机对手的胜负进行了评估。

但是,如果你没有足够的玩家,你可能会有一个引导问题,在强大的电脑可能无法得到一个体面的评分,因为所有其他球员都是弱者。在这种情况下,您可以简单地将1-10映射到MIN_ range MAX_RATING的范围内。MAX_RATING实际上不是最高评级,MIN_RATING可能不应该是0。ELO是一个相对的排名系统,绝对数字没有任何意义,所以你可以根据你的玩家基础来选择它们。在国际象棋,较高的评分是27-2800左右的祖母和最低的是400年代左右的新手,但没有改善。

这里的要点是,如果你给他们一个初步的评分,随着时间的推移,他们将向他们的“真正的评级”,因为他们将玩游戏与球员和相应的移动。

编辑

为什么不只是根据团队的差异来衡量权重常数呢?像这样的事怎么样:

代码语言:javascript
复制
K*(F(9-abs(s1-s2))) 

其中F(x)是sigmoid函数,甚至是线性函数0.9->[1.0}]。这意味着一个评分相等的球队会得到完整的常数,而差异更大的球队则会缩小到零,或者你选择的任何球队。

我不知道我是否同意这个计算是处理这个问题的最好方法。如果你用这种方式,ELO的统计数据可能不适用,但如果不做更多的研究,我就没有更好的建议了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10520490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档