Autor Zpráva
Arpád Elo
Profil *
Ahoj,

snažil jsem se naimplementovat vzoreček na výpočet koeficientu dle ESL (http://www.esl.eu/cz/faq/1870/).
Nevidím chybu, ale nepočítá mi to moc dobře. První test je totožný jako uvádí na ESL ale další pokusy mi vyhazují nějaké divné rozdělení bodů. Netuším kde mám chybu, nevěděl by někdo?


  function eloEsl($k1, $k2, $g1, $g2)
{
    $per1 = $g1 / ($g1 + $g2);
    $per2 = $g2 / ($g1 + $g2);

    $E = 1/(1+ Pow(10, -($k1-$k2)/400)); 



    $Pts1 =  $k1 + 50 * ( $per1 - $E );
    $Pts2 =  $k2 + 50 * ( $per2 - $E );

    $Pts1 = round($Pts1);

    $Pts2 = round($Pts2);

    return array($Pts1, $Pts2);
}

// tohle je v pořádku, stejný výsledek jako na ESL ukázce
eloEsl(1000, 1000, 3, 6); // returns  -8 / + 8

// Tohle vyhodí už nesmysl, proč jeden dostane mnohem víc než druhý???
eloEsl(1000, 1200, 5, 1); // returns  +30 / -4

// a obráceně, a to je totální kravina i logicky, mnohem lepší hráč dostane takový počet? a body také nejsou stejné a rovnoměrně rozděleny
eloEsl(1000, 1200, 1, 5); // returns  -4 / +30
mimochodec
Profil
Nevím co je ESL a jen vzdáleně chápu, co počítáš, ale vidím, že v tom prvním případě umocňuješ 10 na nultou, takže jen za toho stavu dostáváš hodnoty, které v součtu dávají nulu.

To, že ten druhý a třetí příklad vrací při přesně opačných vstupech přesně opačné výstupy, se ti nelíbí proč? Jestli ti to ovlivnění výstupů vstupy připadá moc silné, pohraj si konstantou 400 na ř. 6.
//edit: nebo s tou hodnotou 50 na ř. 10, 11.
Arpád Elo
Profil *
mimochodec:
O konstantu nejde, jde o to, že by to mělo vracet vždy stejné plusové a mínusové body. ESL je portál (viz odkaz) a tam ten vzoreček je ... Přijde mi, že to je dobře ...
mimochodec
Profil
Arpád Elo:
že by to mělo vracet vždy stejné plusové a mínusové body.

Vždy stejné to vracet nebude, protože jejich výpočet zahrnuje $k1, $k2, což jsou body před zpracováním té funkce. Když před jejím zavoláním v nich budeš mít stejnou hodnotu, rozdíl vypočtených hodnot bude stejný (resp. opačný).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0