在我的足球联赛中,我使用(用户与球队比赛时)ELO 评分。一切正常。我需要关于如何扩展公式以反射(reflect)团队球员的系数和力量的增加的建议。 (团队有 1 到 10 的权力,1 = 最弱的团队,10 最强的团队)。
例如:
国内球员系数1000,客队球员系数1000,常量赛事重要度32,1:0结果
主场球员获得 +16,客队球员获得 -16。
现在结合团队的力量(例如,力量 10/6),结果应该是这样的 -> +12/-12 = 更强的玩家和更强的团队获胜。
我不知道怎么编辑。谢谢。
ELO 评分公式 = http://www.eloratings.net/system.html
抱歉我的英语不好。
============================================= ==========================
对您的评论进行新的编辑和回答
有趣的想法,但并不完全准确。我将尝试在一个小例子上进行演示:
玩家 1:spinning_plate(1000 分) player2: Kcko (1000 elo 点数)
例子:
spinning_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);
}
最佳答案
我认为在这种情况下最好的办法是将计算机的优势转化为初步的 ELO 评级。
我以国际象棋和互联网国际象棋服务器为例 FICS .当计算机玩游戏时,它就像人类对手一样对待 - 它会获得初步评级,然后根据它与人类和计算机对手的胜负来进行评级。
但是,如果您没有足够多的玩家在强大的计算机中,您可能会遇到引导问题,因为其他所有玩家都很弱,因此可能无法获得不错的评级。在这种情况下,您可以简单地将 1-10 映射到 MIN_RATING-MAX_RATING 的范围内。 MAX_RATING实际上不是最高评分,MIN_RATING可能不应该为0。ELO是一个相对排名系统,绝对数字没有任何意义,所以你可以根据你的玩家群来选择它们。在国际象棋中,大师级的评分较高,约为 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/