두 명 이상의 플레이어와 함께 Elo를 사용한 플레이어 순위


16

Elo를 사용하여 특정 게임의 경기 간 플레이어 순위를 추적하고 싶지만 경기에서 최대 4 명의 플레이어와 게임을 할 수 있습니다. Carcassonne과 같은 게임에서 두 명 이상의 플레이어가 Elo를 사용하는 것을 보았지만 1-1 매치업을 넘어서는 Elo에 익숙하지 않습니다.

로부터 위키 피 디아 기사 I 연장하고자하는 두 선수의 방정식은 다음과 같습니다 :

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

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

R x new = R x old + 32 * (W – E x ), 여기서 X는 승리하면 W = 1이고 X는지면 W = 0입니다.

두 명 이상의 플레이어가 Ex 와 W 계산을 어떻게 바꾸는가?


3 명 이상의 플레이어가있는 게임에 Elo 스타일 시스템을 사용하는 것은 조심 스러울 것입니다. 많은 요소들이 순수한 기술 게임보다 덜 공모 할 수 있기 때문입니다. 다른 플레이어 수로 더 많은 플레이어가있는 게임의 가중치 (R의 업데이트 수식에서 '32')를 삭제하는 것이 좋습니다.
Steven Stadnicki

@StevenStadnicki 추천 해 주셔서 감사합니다. 그러나 무게 상수를 떨어 뜨리면 언급 한 문제를 어떻게 해결할 수 있는지 확실하지 않습니다. 정교하게 할 수 있습니까?
fbrereto

멀티 플레이어 경기의 가중치를 줄임으로써 본질적으로 플레이어가 2 인 경기보다 중요하지 않다는 것을 의미합니다. 본질적으로, 당신은 그들이 선수가 실제로 얼마나 좋은지를 덜 대표한다고 말하는 것입니다. 매직은 토너먼트 구조에서 이와 유사한 작업을 수행합니다. 토너먼트 구조에 따라 레벨이 다른 K- 값 이있어 플레이어의 등급을 결정할 때 얼마나 많은 무게를 주어야하는지 나타냅니다.
Steven Stadnicki

답변:


10

Google 검색 의 상단 링크 에서 제안한대로 플레이어 Elo 등급 (R 값)의 개별 변경 사항을 계산 한 다음 합계를 조정하여 각 플레이어의 등급에 적용 할 수 있습니다.

즉, 4 명의 플레이어 (A, B, C, D)가있는 경우 B, C 및 D에 대한 점수에서 A의 등급 (R-sub-a-sub-new) 변경을 계산 한 다음 A 등급을 계산 된 R 값의 총계


나는이 길을 갔고 지금까지 잘 작동하고있는 것 같습니다. 감사합니다.
fbrereto

3
이 아이디어에 대한 공식은 다음과 같습니다. sradack.blogspot.ru/2008/06/…
dbf

1

fnord의 답변과 비슷한 방법으로 PHP 소스 코드가있는 논문을 발견했습니다 : http://elo-norsak.rhcloud.com/3.php 여기 에서 더 일반적인 목적의 PHP 구현을 만들었습니다 : https://github.com/ FigBug / Multiplayer-ELO 보드 게임 그룹과 함께 사용하고 있으며 지금까지는 잘 작동하는 것 같습니다.

Ex와 W의 계산은 동일하게 유지됩니다. K를 32로 사용하는 대신 K를 32 / (# players-1)로 사용하십시오. 그런 다음 두 플레이어의 각 순열을보고 (32 / (#players-1) * (W-Ex))를 계산하십시오. 그런 다음 RxNew는 방금 계산 한 모든 값의 RxOld + Sum과 같습니다.


2
일반적으로 외부 링크에만 의존하기보다는 답변 본문에 분석법 / 권장 사항 요약을 포함시키는 것이 좋습니다. 링크는 시간이 지남에 따라 끊어지는 습관이 있으므로 누군가가 몇 년 후에 그것을 찾으려고 할 때 중요한 세부 정보가 누락 될 수 있습니다.
DMGregory

실용 코드에 감사드립니다. 도움이됩니다. 구현에 대한 단 한 가지 제안-중간 결과를 eloChange += round($K * ($S - $EA));반올림하지 않고 설정시 모든 계산 후에 만 ​​반올림하는 것이 좋습니다.eloPost
FlameStorm

-1

나는 최근 에이 주제에 관한 이 글 을 썼습니다 . 도움이 되길 바랍니다. 곧 다른 게시물에 코드를 추가하겠습니다.

다음은 그 내용에 대한 개요입니다.

하나의 결정은 당신이 일종의 하위 경기가 있는지 아닌지를 결정하는 것입니다. 예를 들어, foosball에서는 2v2 게임에서 항상 두 명의 플레이어가 서로 직접 대면하고 간접적으로 두 대가 있음을 알 수 있습니다. 즉, 두 수비수는 실제로 상호 작용하지 않으며 공격자-수비수 쌍입니다. 대안은 5v5 인 Dota와 같은 시나리오이며 실제 일치의 일부로 예측 가능한 실제 개별 1v1 매치업은 없습니다.

사례 1 : 하위 일치 구조가 없습니다.

이 경우, 관련된 모든 플레이어의 등급을 평균하여 해당 팀의 팀 등급으로 사용할 수 있습니다. 따라서 R_a 및 R_b의 경우 해당 팀의 모든 플레이어의 등급 합계를 플레이어 수로 나눈 값을 사용하면됩니다. 팀의 업데이트를 계산 한 후에는 모든 팀원 등급을 업데이트로 업데이트하십시오.

사례 2 : 하위 일치 :

이 경우 하위 일치로 분할하여 서로 비교합니다. 따라서 모든 쌍에 대해 E_a 및 E_b를 계산 한 다음 무게를 측정합니다. 예를 들어, 1v1 하위 구조가있는 5v5의 경우 5 쌍에 대한 5 개의 E_a 값을 계산합니다. 그런 다음 자신이 속한 하위 경기를 기반으로 모든 개별 플레이어에 대한 가중 용어를 계산합니다. 따라서 플레이어 1이 부분 일치 1의 일부인 경우 0.6 * E_a1 + 0.1 * E_a2 + 0.1 * E_a3 + 0.1 * E_a4 + 0.1 * E_a5와 같이 계산합니다 (여기서 E_a1은 플레이어가 관련된 하위 일치의 경우 E_a입니다).

여기의 매개 변수는 자유롭게 선택할 수 있지만 데이터가 있으면 최적화 할 수 있습니다. 플레이어 등급이 크게 변동하지 않는 가중치 체계를 찾아보십시오. 이는 값에 대한 분산을 계산 한 다음 가중치를 조정하여 주어진 일치 결과 집합에 대한 편차를 최소화하여 자동으로 수행 할 수 있습니다. 도움이 되길 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.