Pemeringkatan pemain menggunakan Elo dengan lebih dari dua pemain

16

Saya ingin menggunakan Elo untuk melacak peringkat pemain di antara pertandingan pada pertandingan tertentu, namun permainan tersebut dapat dimainkan hingga empat pemain dalam satu pertandingan. Saya telah melihat permainan seperti Carcassonne menggunakan Elo dengan lebih dari dua pemain bermain, tetapi saya tidak terbiasa dengan Elo melampaui pertandingan 1-1.

Dari artikel wikipedia , persamaan dua pemain yang ingin saya sampaikan adalah:

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

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

R x baru = R x lama + 32 * (W - E x ), di mana W = 1 jika X menang dan W = 0 jika X kalah.

Bagaimana perhitungan untuk E x dan perubahan W diberikan lebih dari dua pemain?

untuk melakukannya
sumber
Saya akan berhati-hati dalam menggunakan sistem Elo-style untuk permainan dengan lebih dari dua pemain, karena banyak faktor yang dapat berkonspirasi untuk menjadikannya kurang dari permainan murni keterampilan - pemain mengeroyok anggapan pemain terkuat, dll. Jika Anda mencampur skor dari pertandingan dengan jumlah pemain yang berbeda, saya sangat menyarankan untuk menjatuhkan bobot (yaitu '32' dalam formula pembaruan untuk R) untuk game dengan lebih banyak pemain.
Steven Stadnicki
@StevenStadnicki terima kasih atas rekomendasinya. Namun saya tidak jelas tentang bagaimana menjatuhkan konstanta berat membahas masalah yang Anda sebutkan. Bisakah Anda menguraikan?
fbrereto
Dengan menjatuhkan bobot untuk pertandingan multi pemain Anda secara inheren mengatakan bahwa mereka tidak sepenting peringkat pemain seperti halnya pertandingan dua pemain; pada dasarnya, Anda mengatakan bahwa mereka kurang mewakili seberapa baik pemain yang sebenarnya. Magic melakukan sesuatu yang mirip dengan ini dengan struktur turnamen mereka, di mana level turnamen yang berbeda memiliki nilai K yang berbeda untuk mewakili berapa banyak bobot yang harus mereka berikan dalam menentukan peringkat pemain.
Steven Stadnicki

Jawaban:

10

Seperti yang disarankan oleh tautan teratas dalam pencarian Google saya (tautan busuk dihapus, situs masih tersedia di WayBackMachine di http://web.archive.org/web/20130308190719/http://elo.divergentinformatics.com/ ), Anda dapat menghitung perubahan individu dalam peringkat Elo pemain (nilai R Anda), dan kemudian jumlahkan untuk memberikan perubahan total untuk diterapkan pada peringkat masing-masing pemain.

yaitu Jika Anda memiliki 4 pemain (A, B, C, D), hitung perubahan ke peringkat A (R-sub-a-sub-baru) dari skor mereka terhadap B, C, dan D, lalu sesuaikan peringkat A dengan total nilai-R yang dihitung.

fnord
sumber
Saya menempuh rute ini dan tampaknya sudah bekerja dengan baik sejauh ini, terima kasih.
fbrereto
Sayangnya tautan tersebut tampaknya tidak lagi valid.
Petr Pudlák
3
Sepertinya di sini adalah rumus untuk ide ini: sradack.blogspot.ru/2008/06/…
dbf
1

Saya menemukan sebuah makalah dengan kode sumber PHP dari metode yang mirip dengan jawaban fnord di sini: http://elo-norsak.rhcloud.com/3.php Saya membuat implementasi php untuk keperluan umum di sini: https://github.com/ FigBug / Multiplayer-ELO Saya menggunakannya dengan grup permainan papan saya, dan sejauh ini tampaknya berfungsi dengan baik.

Perhitungan Ex dan W akan tetap sama. Alih-alih menggunakan K dari 32, gunakan K dari 32 / (# pemain - 1). Kemudian, lihat setiap permutasi 2 pemain dan hitung (32 / (# pemain - 1) * (W - Mantan)). Kemudian RxNew sama dengan RxOld + Jumlah semua nilai yang baru saja Anda hitung.

FigBug
sumber
2
Biasanya merupakan praktik yang baik untuk memasukkan ringkasan metode / rekomendasi Anda dalam isi jawaban, daripada hanya mengandalkan tautan eksternal. Tautan memiliki kebiasaan melanggar dari waktu ke waktu, yang dapat membuat jawaban Anda kehilangan detail penting ketika seseorang mencoba untuk mencari tahu bertahun-tahun dari sekarang.
DMGregory
Terima kasih untuk kode praktis Anda, ini sangat membantu! Hanya satu saran untuk realisasi Anda - mungkin lebih baik tidak membulatkan hasil antara eloChange += round($K * ($S - $EA));tetapi melakukan pembulatan hanya setelah semua perhitungan saat pengaturaneloPost
FlameStorm