如何扩展ELO评级?

时间:2012-05-09 16:45:33

标签: php algorithm

在我的足球联赛中我使用(用户与球队一起比赛)ELO等级。一切正常。我需要有关如何扩展公式的建议,以反映团队成员的系数和能力的增加。 (球队有1到10的力量,1 =最弱的球队,10个最强的球队)。

例如:

国内球员的系数是1000,访客的系数是1000,常数事件的重要性32,结果是1:0

本垒打获得+16,-16名访客。

现在加入团队的力量(例如,力量10/6),结果应该是这样的 - > +12 / -12 =强大的球员赢得了更强的球队。

我不知道如何编辑。谢谢。

ELO RATING FORMULA = 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(例如,AS摩纳哥队的比赛较弱,第7力量),spin_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);
}

1 个答案:

答案 0 :(得分:0)

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

我从国际象棋和互联网象棋服务器(例如FICS)中获取示例。当一台计算机玩游戏时,它被视为一个人类对手 - 它获得初步评级,后来根据它是否胜过人类和计算机对手进行评级。

你可能有一个引导问题,但是,如果你没有足够的玩家,强大的计算机可能无法得到一个合适的评级,因为所有其他玩家都很弱。在这种情况下,您可以简单地将您的1-10映射到MIN_RATING- MAX_RATING的范围。 MAX_RATING实际上不是最大等级,MIN_RATING可能不应该是0. ELO是相对排名系统,绝对数字没什么意义,所以你可以根据你的玩家群选择它们。在国际象棋中,大师们的评分较高,大约为27-2800,最低的是大约四十年代的新手,但不会改善。

这里的要点是,如果你给他们一个初步评级,随着时间的推移,他们将朝着他们的“真实评级”前进,因为他们将与玩家对战并相应地移动。

修改

为什么不根据团队差异来衡量权重?这样的事情怎么样:

K*(F(9-abs(s1-s2))) 

其中F(x)是sigmoid function或甚至只是线性函数[0 ... 9] - > [1 ... 0}。这意味着具有相同评级的团队将获得完全不变的团队,具有较大差异的团队可以缩小到零或者您选择的任何一个。

我不知道我是否同意这种计算是解决此问题的最佳方法。如果您以这种方式使用ELO的统计数据可能不适用,但如果不进行更多研究,我没有更好的建议。