1

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

例如:

国内选手系数1000,客队选手系数1000,常数事件重要性32,结果1:0

主队球员获得 +16,-16 客队球员。

现在结合球队的实力(例如,力量 10/6),结果应该是这样的 -> +12 / -12 = 更强的球员和更强的球队获胜。

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

ELO 评级公式 = http://www.eloratings.net/system.html

对不起,我的英语不好。

==================================================== ========================

新的编辑和回答你的评论

有趣的想法,但并不完全准确。我将尝试通过一个小例子来演示:

player1:spinning_plate(1000 elo 积分) player2:Kcko(1000 elo 积分)

例子:

spin_plate Kcko 失败(例如 1:0),他们获得 +15 / -15 分 -> 这仍然可以,但现在我们包括团队的力量

改进:spinning_plate 为 FC Barcelona 效力(Force 10),击败 Kcko(弱队为 AS Monaco,例如 force 7),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);
}
4

1 回答 1

0

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

我以国际象棋和互联网国际象棋服务器(如FICS )为例。当一台电脑玩游戏时,它就像人类对手一样被对待——它会获得一个初步评级,然后根据它在对抗人类和电脑对手时是赢还是输来进行评级。

但是,您可能会遇到引导问题,如果您没有足够的玩家,那么强大的计算机可能无法获得不错的评级,因为所有其他玩家都很弱。在这种情况下,您可以简单地将 1-10 映射到 MIN_RATING-MAX_RATING 的范围内。MAX_RATING 实际上不是最高评分,MIN_RATING 可能不应该为 0。ELO 是一个相对排名系统,绝对数字没有任何意义,因此您可以根据您的玩家群来选择它们。在国际象棋中,Grandmasters 的评分较高的是 27-2800 左右,最低的是 400 多岁的新手,他们坚持但没有提高。

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

编辑

为什么不根据团队差异来缩放权重常数呢?像这样的东西怎么样:

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

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

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

于 2012-05-09T18:02:55.733 回答