Ranking graczy za pomocą Elo z więcej niż dwoma graczami


16

Chciałbym używać Elo do śledzenia rankingów graczy między meczami określonej gry, jednak w grę może grać maksymalnie czterech graczy. Widziałem gry takie jak Carcassonne, w których korzysta Elo z więcej niż dwoma graczami, ale nie znam Elo po pojedynku 1-1.

Z artykułu w Wikipedii , równania dla dwóch graczy, które chciałbym rozszerzyć, to:

E a = 1 / (1 + 10 (R b - R a ) / 400 )

E b = 1 / (1 + 10 (R a - R b ) / 400 )

R x nowy = R x stary + 32 * (W - E x ), gdzie W = 1, jeśli X wygra, a W = 0, jeśli X przegra.

Jak zmieniłyby się obliczenia dla E x i W dla więcej niż dwóch graczy?


Byłbym ostrożny w używaniu systemu w stylu Elo do gier z więcej niż dwoma graczami, ponieważ wiele czynników może spiskuć, aby uczynić je mniej niż czystymi umiejętnościami - gracze sięgają po postrzeganych najsilniejszych graczy itp. Jeśli zmieszasz wyniki z meczów przy różnych liczbach graczy zdecydowanie zalecam porzucenie wag (tj. „32” we wzorze aktualizacji dla R) dla gier z większą liczbą graczy.
Steven Stadnicki

@StevenStadnicki dzięki za zalecenie. Nie jestem jednak pewien, w jaki sposób upuszczanie stałej wagi rozwiązuje wspomniane problemy. Czy możesz rozwinąć?
fbrereto

Zrzucając wagę meczów dla wielu graczy, z natury mówisz, że nie są one tak ważne dla oceny gracza, jak mecze dla dwóch graczy; w zasadzie mówisz, że są mniej reprezentatywne dla tego, jak dobry jest gracz. Magic robi coś podobnego ze swoją strukturą turnieju, gdzie różne poziomy turnieju mają różne wartości K, aby reprezentować, jaką wagę należy im przypisać przy ustalaniu oceny gracza.
Steven Stadnicki

Odpowiedzi:


10

Jak sugeruje górny link w mojej wyszukiwarce Google, możesz obliczyć indywidualne zmiany w rankingu Elo graczy (twoje wartości R), a następnie zsumować je, aby podać całkowitą zmianę stosowaną do oceny każdego gracza.

tzn. jeśli masz 4 graczy (A, B, C, D), oblicz zmianę oceny A (R-sub-a-sub-new) na podstawie ich wyników w stosunku do B, C i D, a następnie dostosuj ocenę A o suma obliczonych wartości R.


Poszedłem tą drogą i do tej pory wydaje się, że działa dobrze, dzięki.
fbrereto

3
Wygląda na to, że oto wzory tego pomysłu: sradack.blogspot.ru/2008/06/…
dbf

1

Znalazłem artykuł z kodem źródłowym PHP metody podobnej do odpowiedzi fnord tutaj: http://elo-norsak.rhcloud.com/3.php Stworzyłem tutaj implementację php bardziej ogólnego przeznaczenia: https://github.com/ FigBug / Multiplayer-ELO Używam go z moją grupą gier planszowych i do tej pory wydaje się, że działa dobrze.

Obliczenia Ex i W pozostałyby takie same. Zamiast używać K 32, użyj K 32 / (#players - 1). Następnie spójrz na każdą permutację 2 graczy i oblicz (32 / (#players - 1) * (W - Ex)). Wtedy RxNew jest równy RxOld + Suma wszystkich właśnie obliczonych wartości.


2
Zasadniczo dobrą praktyką jest umieszczanie streszczenia twojej metody / zalecenia w treści odpowiedzi, zamiast polegania wyłącznie na zewnętrznych linkach. Linki z czasem się psują, co może sprawić, że Twoja odpowiedź nie będzie zawierała istotnych szczegółów, gdy ktoś będzie próbował to sprawdzić za wiele lat.
DMGregory

Dzięki za Twój praktyczny kod, to jest pomocne! Tylko jedna sugestia do Twojej realizacji - może lepiej nie zaokrąglać wyników pośrednich, eloChange += round($K * ($S - $EA));ale zaokrąglać dopiero po wszystkich obliczeniach podczas ustawianiaeloPost
FlameStorm

-1

Niedawno napisałem ten post na ten temat. Mam nadzieję, że to pomoże. Wkrótce dodam również kod w innym poście.

Oto zarys tego, co się z tym wiąże:

Jedną z decyzji, którą musisz podjąć, jest to, czy masz rodzaj pod-meczu, czy nie. Na przykład: w grze w piłkarzyki zobaczysz, że w grze 2 na 2 zawsze jest dwóch graczy, którzy stoją naprzeciw siebie, a dwóch pośrednio. To znaczy: dwóch obrońców nigdy tak naprawdę nie wchodzi w interakcje, to tylko pary atakujący-obrońca. Alternatywą jest scenariusz taki jak Dota, który jest 5 na 5 i nie ma prawdziwych indywidualnych, przewidywalnych pojedynków 1 na 1 jako części prawdziwego meczu.

Przypadek pierwszy: brak struktury pod meczem:

W takim przypadku możesz po prostu uśrednić ocenę wszystkich zaangażowanych graczy i użyć jej jako oceny drużynowej dla tej drużyny. Tak więc dla R_a i R_b po prostu użyłbyś sumy ocen wszystkich graczy tej drużyny, podzielonej przez liczbę graczy. Po obliczeniu aktualizacji zespołu aktualizujesz ocenę każdego członka zespołu.

Przypadek drugi: pod-mecze:

W takim przypadku dzielisz się na pod-mecze i porównujesz je ze sobą. Więc obliczasz E_a i E_b dla każdej pary, a następnie ważisz je. Na przykład: Dla 5v5 z podstrukturą 1v1 obliczasz 5 wartości E_a dla 5 par. Następnie obliczasz ważony termin dla każdego gracza w oparciu o podgranie, którego jest częścią. Więc jeśli gracz 1 jest częścią przedmowy 1, obliczasz coś w stylu 0,6 * E_a1 + 0,1 * E_a2 + 0,1 * E_a3 + 0,1 * E_a4 + 0,1 * E_a5 (gdzie E_a1 to E_a dla pod-meczu, w który bierze udział gracz).

Parametry tutaj można dowolnie wybierać, ale możesz je zoptymalizować, gdy będziesz mieć jakieś dane. Spróbuj znaleźć schemat ważenia, dla którego oceny graczy nie zmieniają się tak bardzo. Można to zrobić automatycznie, obliczając wariancję wartości, a następnie minimalizując ją dla danego zestawu wyników dopasowania poprzez dostosowanie wag. Mam nadzieję, że to jest pomocne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.